summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregor Tätzner <gregor@freenet.de>2012-08-04 10:31:57 +0200
committerGregor Tätzner <gregor@freenet.de>2012-08-04 10:31:57 +0200
commit91d194a5df74ba79e40fb1be8f87d79a506d2c85 (patch)
treef4c296584c7f06966ddc849c8d66bdf80aea1ddc
parentb22c89c73ddc61eefa414e2e06e4802aa051d392 (diff)
Polish deleteAll functions. It's not necessary to use sql joins
-rw-r--r--ajax/deletefolder.php23
-rw-r--r--lib/feedmapper.php14
-rw-r--r--lib/foldermapper.php16
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;
}