summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ajax/deletefolder.php24
-rw-r--r--ajax/populateroot.php5
-rw-r--r--index.php4
-rw-r--r--js/news.js5
-rw-r--r--lib/feedmapper.php56
-rw-r--r--lib/foldermapper.php23
6 files changed, 67 insertions, 50 deletions
diff --git a/ajax/deletefolder.php b/ajax/deletefolder.php
index bf975c6c3..a0ea611e9 100644
--- a/ajax/deletefolder.php
+++ b/ajax/deletefolder.php
@@ -15,19 +15,31 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('news');
OCP\JSON::callCheck();
+function printError() {
+ OCP\JSON::error(array('data' => array('message' => $l->t('Error removing folder.'))));
+ OCP\Util::writeLog('news','ajax/deletefolder.php: Error removing folder: '.$_POST['folderid'], OCP\Util::ERROR);
+ exit();
+}
+
$userid = OCP\USER::getUser();
$folderid = trim($_POST['folderid']);
$foldermapper = new OC_News_FolderMapper();
-$success = $foldermapper->deleteById($folderid);
-$l = OC_L10N::get('news');
+$folder = $foldermapper->find($folderid);
+$popfolder = $foldermapper->populate($folder);
-if(!$success) {
- OCP\JSON::error(array('data' => array('message' => $l->t('Error removing folder.'))));
- OCP\Util::writeLog('news','ajax/deletefolder.php: Error removing folder: '.$_POST['folderid'], OCP\Util::ERROR);
- exit();
+// delete child folder
+$children = $popfolder->getChildren();
+foreach ($children as $child) {
+ if ($child instanceOf OC_News_Folder) {
+ if(!$foldermapper->deleteById($child->getId()))
+ printError();
+ }
}
+if(!$foldermapper->deleteById($folderid))
+ printError();
+
OCP\JSON::success(array('data' => array( 'folderid' => $folderid )));
diff --git a/ajax/populateroot.php b/ajax/populateroot.php
index a408c25ec..73b986a3e 100644
--- a/ajax/populateroot.php
+++ b/ajax/populateroot.php
@@ -4,8 +4,11 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('news');
$foldermapper = new OC_News_FolderMapper(OCP\USER::getUser());
+$l = new OC_l10n('news');
-$allfeeds = $foldermapper->populate('Everything', 0);
+$folder = new OC_News_Folder($l->t('Everything'), 0);
+
+$allfeeds = $foldermapper->populate($folder);
if ($allfeeds) {
$feedid = isset( $_GET['feedid'] ) ? $_GET['feedid'] : null;
diff --git a/index.php b/index.php
index 76d08a084..5d9500837 100644
--- a/index.php
+++ b/index.php
@@ -27,7 +27,9 @@ $userid = OCP\USER::getUser();
$foldermapper = new OC_News_FolderMapper($userid);
-$allfeeds = $foldermapper->populate($l->t('Everything'), 0);
+$folder = new OC_News_Folder($l->t('Everything'), 0);
+
+$allfeeds = $foldermapper->populate($folder);
if ($allfeeds) {
$feedid = isset( $_GET['feedid'] ) ? $_GET['feedid'] : null;
diff --git a/js/news.js b/js/news.js
index fc7e1001b..da3abce81 100644
--- a/js/news.js
+++ b/js/news.js
@@ -84,8 +84,7 @@ News={
if(answer == true) {
$.post(OC.filePath('news', 'ajax', 'deletefolder.php'),{'folderid':folderid},function(jsondata){
if(jsondata.status == 'success'){
- //change this with actually removing the folder in the view instead of the alert msg
- alert('removed!');
+ $('div.collapsable_container[data-id="' + jsondata.data.folderid + '"]').remove();
}
else{
OC.dialogs.alert(jsondata.data.message, t('news', 'Error'));
@@ -136,7 +135,7 @@ News={
if(answer == true) {
$.post(OC.filePath('news', 'ajax', 'deletefeed.php'),{'feedid':feedid},function(jsondata){
if(jsondata.status == 'success'){
- $('#leftcontent [data-id="'+jsondata.data.feedid+'"]').remove();
+ $('li.feeds_list[data-id="'+jsondata.data.feedid+'"]').remove();
//change the right view too (maybe a message to subscribe, like in Google Reader?)
}
else{
diff --git a/lib/feedmapper.php b/lib/feedmapper.php
index 6e3f6080d..274b28bb8 100644
--- a/lib/feedmapper.php
+++ b/lib/feedmapper.php
@@ -4,10 +4,10 @@
*
* @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
-*
+*
*/
/**
@@ -26,7 +26,7 @@ class OC_News_FeedMapper {
}
/**
- * @brief
+ * @brief
* @param row a row from the feeds table of the database
* @returns an object of the class OC_News_Feed
*/
@@ -34,9 +34,9 @@ class OC_News_FeedMapper {
}
/**
- * @brief
- * @param userid
- * @returns
+ * @brief
+ * @param userid
+ * @returns
*/
public function findAll(){
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE user_id = ?');
@@ -50,11 +50,11 @@ class OC_News_FeedMapper {
}
return $feeds;
}
-
+
/**
* @brief Retrieve a feed from the database
* @param id The id of the feed in the database table.
- * @returns
+ * @returns
*/
public function findById($id){
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?');
@@ -69,7 +69,7 @@ class OC_News_FeedMapper {
/**
* @brief Retrieve a feed from the database
* @param id The id of the feed in the database table.
- * @returns
+ * @returns
*/
public function findByFolderId($folderid){
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE folder_id = ?');
@@ -81,17 +81,17 @@ class OC_News_FeedMapper {
$id = $row['id'];
$feed = new OC_News_Feed($url, $title, null, $id);
$favicon = $row['favicon_link'];
- $feed->setFavicon($favicon);
+ $feed->setFavicon($favicon);
$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
+ * @returns
*/
public function findWithItems($id){
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?');
@@ -101,19 +101,19 @@ class OC_News_FeedMapper {
$title = $row['title'];
$feed = new OC_News_Feed($url, $title, null,$id);
$favicon = $row['favicon_link'];
- $feed->setFavicon($favicon);
+ $feed->setFavicon($favicon);
$itemMapper = new OC_News_ItemMapper();
$items = $itemMapper->findAll($id);
$feed->setItems($items);
-
+
return $feed;
}
/**
* @brief Find the id of a feed and all its items from the database
* @param url url of the feed
- * @return id of the feed corresponding to the url passed as parameters
- * null - if there is no such feed
+ * @return id of the feed corresponding to the url passed as parameters
+ * null - if there is no such feed
*/
public function findIdFromUrl($url){
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE url = ?');
@@ -125,7 +125,7 @@ class OC_News_FeedMapper {
}
return $id;
}
-
+
public function mostRecent(){
//FIXME: does something like SELECT TOP 1 * exists in pear/mdb2 ??
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' ORDER BY lastmodified');
@@ -179,21 +179,21 @@ class OC_News_FeedMapper {
$this->userid
);
$query->execute($params);
-
+
$feedid = OCP\DB::insertid(self::tableName);
}
$feed->setId($feedid);
$itemMapper = new OC_News_ItemMapper();
-
+
$items = $feed->getItems();
foreach($items as $item){
$itemMapper->save($item, $feedid);
}
-
+
return $feedid;
}
-
+
public function deleteById($id){
if ($id == null) {
return false;
@@ -201,31 +201,31 @@ class OC_News_FeedMapper {
$stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE id = ?');
$result = $stmt->execute(array($id));
-
+
$itemMapper = new OC_News_ItemMapper();
//TODO: handle the value that the execute returns
$itemMapper->deleteAll($id);
-
+
return true;
}
public function delete(OC_News_Feed $feed){
$id = $feed->getId();
return deleteById($id);
}
-
+
//it's more complicated tan this...recursive delete, or delete with a join
- public function deleteAll($folderdid){
+ public function deleteAll($folderid){
if ($folderid == null) {
return false;
}
$stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE folder_id = ?');
$result = $stmt->execute(array($folderid));
-
+
$itemMapper = new OC_News_ItemMapper();
//TODO: handle the value that the execute returns
- $itemMapper->deleteAll($id);
-
+ $itemMapper->deleteAll($folderid);
+
return true;
}
} \ No newline at end of file
diff --git a/lib/foldermapper.php b/lib/foldermapper.php
index b875f1369..1e71fea90 100644
--- a/lib/foldermapper.php
+++ b/lib/foldermapper.php
@@ -28,32 +28,30 @@ class OC_News_FolderMapper {
/**
* @brief Create a folder and populate with children from the database
- * @param id The id of the folder.
- * @param name The name of the folder.
+ * @param folder The folder to be populated.
* @returns an instance of OC_News_Folder
*/
- public function populate($name, $id){
- $root = new OC_News_Folder($name, $id);
-
+ public function populate($folder){
// first add child feeds
$feedmapper = new OC_News_FeedMapper();
- $feeds = $feedmapper->findByFolderId($id);
+ $feeds = $feedmapper->findByFolderId($folder->getId());
foreach ($feeds as $feed){
- $root->addChild($feed);
+ $folder->addChild($feed);
}
// and second child folders
$stmt = OCP\DB::prepare('SELECT *
FROM ' . self::tableName .
' WHERE user_id = ? AND parent_id = ?');
- $result = $stmt->execute(array($this->userid, $id));
+ $result = $stmt->execute(array($this->userid, $folder->getId()));
while( $row = $result->fetchRow()){
- $child = self::populate($row['name'], $row['id']);
- $root->addChild($child);
+ $unpopfolder = new OC_News_Folder($row['name'], $row['id']);
+ $popfolder = self::populate($unpopfolder);
+ $folder->addChild($popfolder);
}
- return $root;
+ return $folder;
}
/**
@@ -132,6 +130,9 @@ class OC_News_FolderMapper {
}
//TODO: replace it with a DELETE INNER JOIN operation
+ //Note Brumm: probably not possible, I've tried:
+ // 'DELETE FROM ' . self::tableName .' INNER JOIN ' . OC_News_FeedMapper::tableName .
+ // ' ON (' . self::tableName . '.id = ' . OC_News_FeedMapper::tableName . '.folder_id )')
public function deleteById($folderid){
if ($folderid == null){
return false;