Optimizes AbstractCategoryType::afterDeletion()
authorMatthias Schmidt <gravatronics@live.com>
Wed, 26 Dec 2012 08:29:21 +0000 (09:29 +0100)
committerMatthias Schmidt <gravatronics@live.com>
Wed, 26 Dec 2012 08:29:21 +0000 (09:29 +0100)
wcfsetup/install/files/lib/system/category/AbstractCategoryType.class.php

index c7786f023fa9d00d47404a6e800053f5ff7dc811..6373239d0e8ce92dd193779d3f066fe2c4e68ed5 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 namespace wcf\system\category;
 use wcf\data\category\CategoryEditor;
+use wcf\system\database\util\PreparedStatementConditionBuilder;
 use wcf\system\SingletonFactory;
 use wcf\system\WCF;
 
@@ -62,12 +63,17 @@ abstract class AbstractCategoryType extends SingletonFactory implements ICategor
         * @see wcf\system\category\ICategoryType::afterDeletion()
         */
        public function afterDeletion(CategoryEditor $categoryEditor) {
-               // move child categories to parent category
-               foreach (CategoryHandler::getInstance()->getChildCategories($categoryEditor->getDecoratedObject()) as $category) {
-                       $__categoryEditor = new CategoryEditor($category);
-                       $__categoryEditor->update(array(
-                               'parentCategoryID' => $categoryEditor->parentCategoryID
-                       ));
+               $categoryIDs = array_keys(CategoryHandler::getInstance()->getChildCategories($categoryEditor->getDecoratedObject()));
+               
+               if (!empty($categoryIDs)) {
+                       // move child categories to parent category
+                       $conditionBuilder = new PreparedStatementConditionBuilder();
+                       $conditionBuilder->add("categoryID IN (?)", array($categoryIDs));
+                       $sql = "UPDATE  wcf".WCF_N."_category
+                               SET     parentCategoryID = ?
+                               ".$conditionBuilder;
+                       $statement = WCF::getDB()->prepareStatement($sql);
+                       $statement->execute(array_merge(array($categoryEditor->parentCategoryID), $conditionBuilder->getParameters()));
                }
        }