summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlessandro Cosentino <cosenal@gmail.com>2012-07-02 23:39:19 -0400
committerAlessandro Cosentino <cosenal@gmail.com>2012-07-02 23:39:19 -0400
commit72c730bf5fb21f58589a836483585dabd6866520 (patch)
treea57dab8dcf88ce5a4f1172ba89663aa52947fdb8
parentf8f6fd3d778fe95bac15e52747ff5b1f6461c136 (diff)
button to add feed; selection of a feed
-rw-r--r--.gitignore5
-rw-r--r--ajax/createfolder.php1
-rw-r--r--ajax/newfeed.php36
-rw-r--r--index.php8
-rw-r--r--js/news.js24
-rw-r--r--lib/feed.php4
-rw-r--r--lib/feedmapper.php22
-rw-r--r--lib/foldermapper.php8
-rw-r--r--lib/utils.php5
-rw-r--r--templates/main.php11
-rw-r--r--templates/part.addfeedfolder.php32
-rw-r--r--templates/part.feeds.php10
-rw-r--r--templates/part.items.php14
-rw-r--r--templates/part.nofeeds.php3
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.'))));
+
diff --git a/index.php b/index.php
index 818426ea0..ca7e4f63f 100644
--- a/index.php
+++ b/index.php
@@ -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