diff options
-rw-r--r-- | ajax/deletefolder.php | 23 | ||||
-rw-r--r-- | lib/feedmapper.php | 14 | ||||
-rw-r--r-- | lib/foldermapper.php | 16 |
3 files changed, 17 insertions, 36 deletions
diff --git a/ajax/deletefolder.php b/ajax/deletefolder.php index a0ea611e9..7c38557f6 100644 --- a/ajax/deletefolder.php +++ b/ajax/deletefolder.php @@ -15,31 +15,16 @@ 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(); -$folder = $foldermapper->find($folderid); -$popfolder = $foldermapper->populate($folder); - -// 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)) { + 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(); } -if(!$foldermapper->deleteById($folderid)) - printError(); - OCP\JSON::success(array('data' => array( 'folderid' => $folderid ))); diff --git a/lib/feedmapper.php b/lib/feedmapper.php index 4e3987a17..6461b6bf7 100644 --- a/lib/feedmapper.php +++ b/lib/feedmapper.php @@ -213,27 +213,19 @@ class OC_News_FeedMapper { return deleteById($id); } - //it's more complicated tan this...recursive delete, or delete with a join public function deleteAll($folderid){ if ($folderid == null) { return false; } - // delete items - $itemMapper = new OC_News_ItemMapper(); - $stmt = OCP\DB::prepare('SELECT ' . self::tableName . '.id FROM ' . self::tableName .' INNER JOIN ' . OC_News_ItemMapper::tableName . - ' ON ' . self::tableName . '.id = ' . OC_News_ItemMapper::tableName . '.feed_id WHERE folder_id = ?'); + $stmt = OCP\DB::prepare('SELECT id FROM ' . self::tableName . ' WHERE folder_id = ?'); $result = $stmt->execute(array($folderid)); while ($row = $result->fetchRow()) { - $itemMapper->deleteAll($row['id']); + if(!self::deleteById($row['id'])) + return false; } - // delete feeds - $stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE folder_id = ?'); - $result = $stmt->execute(array($folderid)); - //TODO: handle the value that the execute returns - return true; } }
\ No newline at end of file diff --git a/lib/foldermapper.php b/lib/foldermapper.php index 1e71fea90..91c005bc9 100644 --- a/lib/foldermapper.php +++ b/lib/foldermapper.php @@ -129,22 +129,26 @@ class OC_News_FolderMapper { return deleteById(folderid); } - //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; } - $stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE id = ?'); + // delete child folders + $stmt = OCP\DB::prepare('SELECT id FROM ' . self::tableName .' WHERE parent_id = ?'); + $result = $stmt->execute(array($folderid)); + while ($row = $result->fetchRow()) { + if (!self::deleteById($row['id'])) + return false; + } + $stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE id = ?'); $result = $stmt->execute(array($folderid)); $feedMapper = new OC_News_FeedMapper(); //TODO: handle the value that the execute returns - $feedMapper->deleteAll($folderid); + if(!$feedMapper->deleteAll($folderid)) + return false; return true; } |