diff options
author | Alessandro Cosentino <cosenal@gmail.com> | 2012-07-02 23:39:19 -0400 |
---|---|---|
committer | Alessandro Cosentino <cosenal@gmail.com> | 2012-07-02 23:39:19 -0400 |
commit | 72c730bf5fb21f58589a836483585dabd6866520 (patch) | |
tree | a57dab8dcf88ce5a4f1172ba89663aa52947fdb8 | |
parent | f8f6fd3d778fe95bac15e52747ff5b1f6461c136 (diff) |
button to add feed; selection of a feed
-rw-r--r-- | .gitignore | 5 | ||||
-rw-r--r-- | ajax/createfolder.php | 1 | ||||
-rw-r--r-- | ajax/newfeed.php | 36 | ||||
-rw-r--r-- | index.php | 8 | ||||
-rw-r--r-- | js/news.js | 24 | ||||
-rw-r--r-- | lib/feed.php | 4 | ||||
-rw-r--r-- | lib/feedmapper.php | 22 | ||||
-rw-r--r-- | lib/foldermapper.php | 8 | ||||
-rw-r--r-- | lib/utils.php | 5 | ||||
-rw-r--r-- | templates/main.php | 11 | ||||
-rw-r--r-- | templates/part.addfeedfolder.php | 32 | ||||
-rw-r--r-- | templates/part.feeds.php | 10 | ||||
-rw-r--r-- | templates/part.items.php | 14 | ||||
-rw-r--r-- | templates/part.nofeeds.php | 3 |
14 files changed, 144 insertions, 39 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..16469399d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +3rdparty/* +news.kdev4 +*~ +.kdev4 +img/* diff --git a/ajax/createfolder.php b/ajax/createfolder.php index ecc44df49..a53b60d92 100644 --- a/ajax/createfolder.php +++ b/ajax/createfolder.php @@ -32,4 +32,3 @@ if(!$folderid) { //TODO: replace the following with the success case. see contact/ajax/createaddressbook.php for inspirations OCP\JSON::error(array('data' => array('message' => $l->t('Error adding folder.')))); - diff --git a/ajax/newfeed.php b/ajax/newfeed.php new file mode 100644 index 000000000..d75af0e8e --- /dev/null +++ b/ajax/newfeed.php @@ -0,0 +1,36 @@ +<?php +/** +* ownCloud - News app +* +* @author Alessandro Cosentino +* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com> +* +* This file is licensed under the Affero General Public License version 3 or later. +* See the COPYING-README file +* +*/ + +// Check if we are a user +OCP\JSON::checkLoggedIn(); +OCP\JSON::checkAppEnabled('news'); +OCP\JSON::callCheck(); + +$userid = OCP\USER::getUser(); + +$feedurl = trim($_POST['feedurl']); + +$feed = OC_News_Utils::fetch($feedurl); +$feedmapper = new OC_News_FeedMapper(); +$feedid = $feedmapper->save($feed, 0); + +$l = OC_L10N::get('news'); + +if(!$feedid) { + OCP\JSON::error(array('data' => array('message' => $l->t('Error adding folder.')))); + OCP\Util::writeLog('news','ajax/newfeed.php: Error adding feed: '.$_POST['feedurl'], OCP\Util::ERROR); + exit(); +} + +//TODO: replace the following with the success case. see contact/ajax/createaddressbook.php for inspirations +OCP\JSON::error(array('data' => array('message' => $l->t('Error adding feed.')))); + @@ -11,9 +11,6 @@ * */ -// load SimplePie library -require_once('3rdparty/SimplePie/SimplePieAutoloader.php'); - // Check if we are a user OCP\User::checkLoggedIn(); @@ -21,14 +18,17 @@ OCP\App::checkAppEnabled('news'); OCP\App::setActiveNavigationEntry('news'); OCP\Util::addscript('news','news'); -OCP\Util::addStyle('news', 'news'); +OCP\Util::addStyle('news','news'); $foldermapper = new OC_News_FolderMapper(OCP\USER::getUser()); $allfeeds = $foldermapper->root(); +$feedid = isset( $_GET['feedid'] ) ? $_GET['feedid'] : null; + $tmpl = new OCP\Template( 'news', 'main', 'user' ); $tmpl->assign('allfeeds', $allfeeds); +$tmpl->assign('feedid', $feedid); $tmpl->printPage(); ?> diff --git a/js/news.js b/js/news.js index e97d1227c..4014aca6e 100644 --- a/js/news.js +++ b/js/news.js @@ -20,7 +20,7 @@ News={ return false; } }, - Feeds: { + Folder: { submit:function(button){ var displayname = $("#folder_add_name").val().trim(); @@ -41,6 +41,28 @@ News={ } }); } + }, + Feed: { + submit:function(button){ + var feedurl = $("#feed_add_url").val().trim(); + + if(feedurl.length == 0) { + OC.dialogs.alert(t('news', 'URL cannot be empty.'), t('news', 'Error')); + return false; + } + + var url; + url = OC.filePath('news', 'ajax', 'newfeed.php'); + + $.post(url, { feedurl: feedurl }, + function(jsondata){ + if(jsondata.status == 'success'){ + $(button).closest('tr').prev().html(jsondata.page).show().next().remove(); + } else { + OC.dialogs.alert(jsondata.data.message, t('news', 'Error')); + } + }); + } } } diff --git a/lib/feed.php b/lib/feed.php index 281a968f0..bbed8d598 100644 --- a/lib/feed.php +++ b/lib/feed.php @@ -24,10 +24,10 @@ class OC_News_Feed extends OC_News_Collection { $this->title = $title; $this->items = $items; if ($id !== null){ - $this->id = $id; + parent::__construct($id); } } - + public function getUrl(){ return $this->url; } diff --git a/lib/feedmapper.php b/lib/feedmapper.php index e64316d0c..1073bd288 100644 --- a/lib/feedmapper.php +++ b/lib/feedmapper.php @@ -16,7 +16,7 @@ class OC_News_FeedMapper { const tableName = '*PREFIX*news_feeds'; - + /** * @brief Retrieve a feed from the database * @param id The id of the feed in the database table. @@ -33,6 +33,26 @@ class OC_News_FeedMapper { } /** + * @brief Retrieve a feed from the database + * @param id The id of the feed in the database table. + * @returns + */ + public function findByFolderId($folderid){ + $stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE folder_id = ?'); + $result = $stmt->execute(array($folderid)); + $feeds = array(); + while ($row = $result->fetchRow()) { + $url = $row['url']; + $title = $row['title']; + $id = $row['id']; + $feed = new OC_News_Feed($url, $title, null, $id); + $feeds[] = $feed; + } + return $feeds; + } + + + /** * @brief Retrieve a feed and all its items from the database * @param id The id of the feed in the database table. * @returns diff --git a/lib/foldermapper.php b/lib/foldermapper.php index 925726ab8..5a37fe20a 100644 --- a/lib/foldermapper.php +++ b/lib/foldermapper.php @@ -34,7 +34,13 @@ class OC_News_FolderMapper { $child = new OC_News_Folder($row['name'], $row['id']); $root->addChild($child); } - + + $feedmapper = new OC_News_FeedMapper(); + $feeds = $feedmapper->findByFolderId(0); + foreach ($feeds as $feed){ + $root->addChild($feed); + } + return $root; } diff --git a/lib/utils.php b/lib/utils.php index e7122bf69..16f39f413 100644 --- a/lib/utils.php +++ b/lib/utils.php @@ -10,6 +10,10 @@ * */ +// load SimplePie library +//TODO: is this file a suitable place for the following require? +require_once(OC::$APPSROOT . '/apps/news/3rdparty/SimplePie/SimplePieAutoloader.php'); + class OC_News_Utils { /** @@ -18,6 +22,7 @@ class OC_News_Utils { * @returns */ public static function fetch($url){ + //TODO: handle the case where fetching of the feed fails $spfeed = new SimplePie_Core(); $spfeed->set_feed_url( $url ); $spfeed->enable_cache( false ); diff --git a/templates/main.php b/templates/main.php index f05a548b6..775dd46bf 100644 --- a/templates/main.php +++ b/templates/main.php @@ -14,8 +14,15 @@ </form> </div> -<div id="rightcontent" class="rightcontent"> - <?php ?> +<div id="rightcontent" class="rightcontent" data-id="<?php echo $_['feedid']; ?>"> + <?php + if ($_['feedid']){ + echo $this->inc('part.items'); + } + else { + echo $this->inc('part.nofeeds'); + } + ?> </div> <!-- Dialogs --> diff --git a/templates/part.addfeedfolder.php b/templates/part.addfeedfolder.php index 693a55e53..7f6a8f6a7 100644 --- a/templates/part.addfeedfolder.php +++ b/templates/part.addfeedfolder.php @@ -1,34 +1,18 @@ <div id="addfeedfolder_dialog" title="<?php echo $l->t("Add Feed/Folder"); ?>"> <table width="100%" style="border: 0;"> <tr> - <td> - Add new feed - </td> - <td> - ...where?... - </td> + <td>Add new feed</td> + <td>...where?...</td> </tr> <tr> - <td> - <input type="text" id="feed_add_url" placeholder="<?php echo $l->t('URL'); ?>" class="news_input" /> - </td> - <td> - <input type="submit" value="<?php echo $l->t('Add feed'); ?>" id="feed_add_submit" /> - </td> + <td><input type="text" id="feed_add_url" placeholder="<?php echo $l->t('URL'); ?>" class="news_input" /></td> + <td><input type="submit" value="<?php echo $l->t('Add feed'); ?>" onclick="News.Feed.submit(this)" id="feed_add_submit" /></td> </tr> - <td> - Add new folder - </td> - <td> - ...where?... - </td> + <td>Add new folder</td> + <td>...where?...</td> </tr> <tr> - <td> - <input type="text" id="folder_add_name" placeholder="<?php echo $l->t('Folder name'); ?>" class="news_input" /> - </td> - <td> - <input type="submit" value="<?php echo $l->t('Add folder'); ?>" onclick="News.Feeds.submit(this)" id="folder_add_submit" /> - </td> + <td><input type="text" id="folder_add_name" placeholder="<?php echo $l->t('Folder name'); ?>" class="news_input" /></td> + <td><input type="submit" value="<?php echo $l->t('Add folder'); ?>" onclick="News.Folder.submit(this)" id="folder_add_submit" /></td> </tr> </table>
\ No newline at end of file diff --git a/templates/part.feeds.php b/templates/part.feeds.php index a2fc0bb24..7b9b72126 100644 --- a/templates/part.feeds.php +++ b/templates/part.feeds.php @@ -9,13 +9,17 @@ if ($child instanceOf OC_News_Folder){ print_folder($child, $depth+1); } - else { //print all feeds contained in the folder - echo '<li>' . $child->getTitle(). '</li>'; + elseif ($child instanceOf OC_News_Feed) { +?> + <li><a href="index.php?feedid=<?php echo $child->getId(); ?>"><?php echo $child->getTitle(); ?></a></li> +<?php + } + else { + //TODO:handle error in this case } } echo '</ul></li></ul>'; } print_folder($_['allfeeds'], 0); - ?> diff --git a/templates/part.items.php b/templates/part.items.php new file mode 100644 index 000000000..ce5186052 --- /dev/null +++ b/templates/part.items.php @@ -0,0 +1,14 @@ +<?php +$feedid = isset($_['id']) ? $_['id'] : ''; + +$itemmapper = new OC_News_ItemMapper(); + +$items = $itemmapper->findAll($feedid); + +echo '<ul>'; +foreach($items as $item) { + echo '<li>' . $item->getTitle() . '</li>'; +} +echo '</ul>'; + +?>
\ No newline at end of file diff --git a/templates/part.nofeeds.php b/templates/part.nofeeds.php new file mode 100644 index 000000000..bb78dedbf --- /dev/null +++ b/templates/part.nofeeds.php @@ -0,0 +1,3 @@ +<div id="firstrun"> + <?php echo $l->t('You have no feeds in your reader.') ?> +</div>
\ No newline at end of file |