From fbcac103cf685326f5a873760998672c7f93f039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20T=C3=A4tzner?= Date: Fri, 3 Aug 2012 18:25:46 +0200 Subject: Fixed several issues in delete folder functions --- ajax/deletefolder.php | 24 ++++++++++++++++------ ajax/populateroot.php | 5 ++++- index.php | 4 +++- js/news.js | 5 ++--- lib/feedmapper.php | 56 +++++++++++++++++++++++++-------------------------- lib/foldermapper.php | 23 +++++++++++---------- 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 -* +* * 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; -- cgit v1.2.3