summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlessandro Cosentino <cosenal@gmail.com>2012-05-28 14:27:18 -0400
committerAlessandro Cosentino <cosenal@gmail.com>2012-05-28 14:27:18 -0400
commit762b4d89bc0876d8d514a21bf22babcb012cf298 (patch)
treeb84a49d9edc109616c964b01d254dc7d81e597f9
parent8ae896cac3de17b97001850132a6f9ea3cc54d0d (diff)
decoupled fetcher and database mapper
-rw-r--r--lib/feedmapper.php25
-rw-r--r--lib/fetcher.php50
-rw-r--r--lib/folder.php18
-rw-r--r--lib/foldermapper.php114
4 files changed, 181 insertions, 26 deletions
diff --git a/lib/feedmapper.php b/lib/feedmapper.php
index 004e443f1..c0e0b03a5 100644
--- a/lib/feedmapper.php
+++ b/lib/feedmapper.php
@@ -28,31 +28,6 @@ class OC_News_FeedMapper {
const tableName = '*PREFIX*news_feeds';
/**
- * @brief Fetch a feed from remote
- * @param url remote url of the feed
- * @returns
- */
- public function fetch($url){
- $spfeed = new SimplePie_Core();
- $spfeed->set_feed_url( $url );
- $spfeed->enable_cache( false );
- $spfeed->init();
- $spfeed->handle_content_type();
- $title = $spfeed->get_title();
-
- $spitems = $spfeed->get_items();
- $items = array();
- foreach($spitems as $spitem) { //FIXME: maybe we can avoid this loop
- $itemUrl = $spitem->get_permalink();
- $itemTitle = $spitem->get_title();
- $items[] = new OC_News_Item($itemUrl, $itemTitle);
- }
-
- $feed = new OC_News_Feed($url, $title, $items);
- return $feed;
- }
-
- /**
* @brief Retrieve a feed from the database
* @param id The id of the feed in the database table.
* @returns
diff --git a/lib/fetcher.php b/lib/fetcher.php
new file mode 100644
index 000000000..e5ea27626
--- /dev/null
+++ b/lib/fetcher.php
@@ -0,0 +1,50 @@
+<?php
+/**
+* ownCloud - News app
+*
+* @author Alessandro Cosentino
+* @copyright 2012 Alessandro Cosentino cosenal@gmail.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+
+class OC_News_Utils {
+
+ /**
+ * @brief Fetch a feed from remote
+ * @param url remote url of the feed
+ * @returns
+ */
+ public static function fetch($url){
+ $spfeed = new SimplePie_Core();
+ $spfeed->set_feed_url( $url );
+ $spfeed->enable_cache( false );
+ $spfeed->init();
+ $spfeed->handle_content_type();
+ $title = $spfeed->get_title();
+
+ $spitems = $spfeed->get_items();
+ $items = array();
+ foreach($spitems as $spitem) { //FIXME: maybe we can avoid this loop
+ $itemUrl = $spitem->get_permalink();
+ $itemTitle = $spitem->get_title();
+ $items[] = new OC_News_Item($itemUrl, $itemTitle);
+ }
+
+ $feed = new OC_News_Feed($url, $title, $items);
+ return $feed;
+ }
+} \ No newline at end of file
diff --git a/lib/folder.php b/lib/folder.php
index 129110ae7..a7036e8a7 100644
--- a/lib/folder.php
+++ b/lib/folder.php
@@ -28,9 +28,13 @@ class OC_News_Folder {
private $name;
private $id;
private $feeds;
+ private $children;
+ private $parent;
- public function __construct($name){
+ public function __construct($name, $parent = null){
$this->name = $name;
+ $this->parent = $parent;
+ $this->feeds = array();
}
public function getName(){
@@ -41,4 +45,16 @@ class OC_News_Folder {
$this->name = $name;
}
+ public function getId(){
+ return $this->id;
+ }
+
+ public function setId($id){
+ $this->$id = $id;
+ }
+
+ public function addFeed(OC_News_Feed $feed){
+ $this->feeds[] = $feed;
+ }
+
} \ No newline at end of file
diff --git a/lib/foldermapper.php b/lib/foldermapper.php
new file mode 100644
index 000000000..23ced832c
--- /dev/null
+++ b/lib/foldermapper.php
@@ -0,0 +1,114 @@
+<?php
+/**
+* ownCloud - News app
+*
+* @author Alessandro Cosentino
+* @copyright 2012 Alessandro Cosentino cosenal@gmail.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+/**
+ * This class maps a feed to an entry in the feeds table of the database.
+ */
+class OC_News_FolderMapper {
+
+ const tableName = '*PREFIX*news_folders';
+
+ /**
+ * @brief Retrieve a feed from the database
+ * @param id The id of the feed in the database table.
+ * @returns
+ */
+ public function find($id){
+ $stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?');
+ $result = $stmt->execute(array($id));
+ $row = $result->fetchRow();
+ $url = $row['url'];
+ $title = $row['title'];
+ $feed = new OC_News_Feed($url, $title, null, $id);
+ return $feed;
+ }
+
+ /**
+ * @brief Retrieve a feed and all its items from the database
+ * @param id The id of the feed in the database table.
+ * @returns
+ */
+ public function findWithItems($id){
+ $stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?');
+ $result = $stmt->execute(array($id));
+ $row = $result->fetchRow();
+ $url = $row['url'];
+ $title = $row['title'];
+ $feed = new OC_News_Feed($url, $title, null,$id);
+
+ $itemMapper = new OC_News_ItemMapper($feed);
+ $items = $itemMapper->findAll();
+ $feed->setItems($items);
+
+ return $feed;
+ }
+
+ /**
+ * @brief Save the feed and all its items into the database
+ * @param feed the feed to be saved
+ * @returns The id of the feed in the database table.
+ */
+ public function insert(OC_News_Feed $feed){
+ $CONFIG_DBTYPE = OCP\Config::getSystemValue( "dbtype", "sqlite" );
+ if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){
+ $_ut = "strftime('%s','now')";
+ } elseif($CONFIG_DBTYPE == 'pgsql') {
+ $_ut = 'date_part(\'epoch\',now())::integer';
+ } else {
+ $_ut = "UNIX_TIMESTAMP()";
+ }
+
+ //FIXME: Detect when user adds a known feed
+ //FIXME: specify folder where you want to add
+ $query = OCP\DB::prepare('
+ INSERT INTO ' . self::tableName .
+ '(url, title, added, lastmodified)
+ VALUES (?, ?, $_ut, $_ut)
+ ');
+
+ $title = $feed->getTitle();
+
+ if(empty($title)) {
+ $l = OC_L10N::get('news');
+ $title = $l->t('no title');
+ }
+
+ $params=array(
+ htmlspecialchars_decode($feed->getUrl()),
+ htmlspecialchars_decode($title)
+
+ //FIXME: user_id is going to move to the folder properties
+ //OCP\USER::getUser()
+ );
+ $query->execute($params);
+
+ $feedid = OCP\DB::insertid(self::tableName);
+ $feed->setId($feedid);
+
+ $itemMapper = new OC_News_ItemMapper($feed);
+
+ $items = $feed->getItems();
+ foreach($items as $item){
+ $itemMapper->insert($item);
+ }
+ return $feedid;
+ }