Major overhaul of caching system (work in progress)
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / data / page / menu / item / PageMenuItemEditor.class.php
index 1603d374258323185fe950e1ef70f888a26077c0..3dbfc01ae910573f69258f02ad4378c2d59c5ca2 100644 (file)
@@ -2,14 +2,14 @@
 namespace wcf\data\page\menu\item;
 use wcf\data\DatabaseObjectEditor;
 use wcf\data\IEditableCachedObject;
-use wcf\system\cache\CacheHandler;
+use wcf\system\cache\builder\PageMenuCacheBuilder;
 use wcf\system\WCF;
 
 /**
  * Provides functions to edit page menu items.
  * 
  * @author     Alexander Ebert
- * @copyright  2001-2012 WoltLab GmbH
+ * @copyright  2001-2013 WoltLab GmbH
  * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
  * @package    com.woltlab.wcf
  * @subpackage data.page.menu.item
@@ -28,7 +28,7 @@ class PageMenuItemEditor extends DatabaseObjectEditor implements IEditableCached
         */
        public static function create(array $parameters = array()) {
                // calculate show order
-               $parameters['showOrder'] = self::getShowOrder($parameters['showOrder'], $parameters['menuPosition']);
+               $parameters['showOrder'] = self::getShowOrder($parameters['showOrder'], $parameters['menuPosition'], $parameters['parentMenuItem']);
                
                return parent::create($parameters);
        }
@@ -39,10 +39,7 @@ class PageMenuItemEditor extends DatabaseObjectEditor implements IEditableCached
         * @todo Handle language id and update related language item
         */
        public function update(array $parameters = array()) {
-               if (isset($parameters['menuPosition']) && isset($parameters['showOrder'])) {
-                       $this->updateShowOrder($parameters['showOrder'], $parameters['menuPosition']);
-               }
-               
+               1 == 0; // TODO: fix me (avoid sniffing error)
                parent::update($parameters);
        }
        
@@ -111,66 +108,6 @@ class PageMenuItemEditor extends DatabaseObjectEditor implements IEditableCached
                ));
        }
        
-       /**
-        * Updates show order for current menu item.
-        * 
-        * @param       integer         $showOrder
-        * @param       string          $menuPosition
-        */
-       protected function updateShowOrder($showOrder, $menuPosition) {
-               if ($menuPosition == $this->menuPosition) {
-                       if ($this->showOrder != $showOrder) {
-                               if ($showOrder < $this->showOrder) {
-                                       $sql = "UPDATE  wcf".WCF_N."_page_menu_item
-                                               SET     showOrder = showOrder + 1
-                                               WHERE   showOrder >= ?
-                                                       AND showOrder < ?
-                                                       AND menuPosition = ?";
-                                       $statement = WCF::getDB()->prepareStatement($sql);
-                                       $statement->execute(array(
-                                               $showOrder,
-                                               $this->showOrder,
-                                               $menuPosition
-                                       ));
-                               }
-                               else if ($showOrder > $this->showOrder) {
-                                       $sql = "UPDATE  wcf".WCF_N."_page_menu_item
-                                               SET     showOrder = showOrder - 1
-                                               WHERE   showOrder <= ?
-                                                       AND showOrder > ?
-                                                       AND menuPosition = ?";
-                                       $statement = WCF::getDB()->prepareStatement($sql);
-                                       $statement->execute(array(
-                                               $showOrder,
-                                               $this->showOrder,
-                                               $menuPosition
-                                       ));
-                               }
-                       }
-               }
-               else {
-                       $sql = "UPDATE  wcf".WCF_N."_page_menu_item
-                               SET     showOrder = showOrder - 1
-                               WHERE   showOrder >= ?
-                                       AND menuPosition = ?";
-                       $statement = WCF::getDB()->prepareStatement($sql);
-                       $statement->execute(array(
-                               $this->showOrder,
-                               $this->menuPosition
-                       ));
-                               
-                       $sql = "UPDATE  wcf".WCF_N."_page_menu_item
-                               SET     showOrder = showOrder + 1
-                               WHERE   showOrder >= ?
-                                       AND menuPosition = ?";
-                       $statement = WCF::getDB()->prepareStatement($sql);
-                       $statement->execute(array(
-                               $showOrder,
-                               $menuPosition
-                       ));
-               }
-       }
-       
        /**
         * Returns show order for a new menu item.
         * 
@@ -178,14 +115,18 @@ class PageMenuItemEditor extends DatabaseObjectEditor implements IEditableCached
         * @param       string          $menuPosition
         * @return      integer
         */
-       protected static function getShowOrder($showOrder, $menuPosition) {
+       protected static function getShowOrder($showOrder, $menuPosition, $parentMenuItem = '') {
                if ($showOrder == 0) {
                        // get next number in row
                        $sql = "SELECT  MAX(showOrder) AS showOrder
                                FROM    wcf".WCF_N."_page_menu_item
-                               WHERE   menuPosition = ?";
+                               WHERE   parentMenuItem = ?
+                                       AND menuPosition = ?";
                        $statement = WCF::getDB()->prepareStatement($sql);
-                       $statement->execute(array($menuPosition));
+                       $statement->execute(array(
+                               $parentMenuItem,
+                               $menuPosition
+                       ));
                        $row = $statement->fetchArray();
                        if (!empty($row)) $showOrder = intval($row['showOrder']) + 1;
                        else $showOrder = 1;
@@ -193,12 +134,14 @@ class PageMenuItemEditor extends DatabaseObjectEditor implements IEditableCached
                else {
                        $sql = "UPDATE  wcf".WCF_N."_page_menu_item
                                SET     showOrder = showOrder + 1
-                               WHERE   showOrder >= ?
-                                       AND menuPosition = ?";
+                               WHERE   parentMenuItem = ?
+                                       AND menuPosition = ?
+                                       AND showOrder >= ?";
                        $statement = WCF::getDB()->prepareStatement($sql);
                        $statement->execute(array(
-                               $showOrder,
-                               $menuPosition
+                               $parentMenuItem,
+                               $menuPosition,
+                               $showOrder
                        ));
                }
                
@@ -209,6 +152,6 @@ class PageMenuItemEditor extends DatabaseObjectEditor implements IEditableCached
         * @see wcf\data\IEditableCachedObject::resetCache()
         */
        public static function resetCache() {
-               CacheHandler::getInstance()->clear(WCF_DIR.'cache', 'cache.pageMenu.php');
+               PageMenuCacheBuilder::getInstance()->reset();
        }
 }