Page menu items are now properly parsed
authorAlexander Ebert <ebert@woltlab.com>
Tue, 25 Dec 2012 18:36:18 +0000 (19:36 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Tue, 25 Dec 2012 18:36:18 +0000 (19:36 +0100)
See #998

wcfsetup/install/files/lib/data/page/menu/item/PageMenuItem.class.php
wcfsetup/install/files/lib/system/cache/builder/PageMenuCacheBuilder.class.php

index adb7879e23b6a67910497fd466bfece4bfc03f38..9a477ad7ece9e145082e9767dd573e6faefd2ca8 100644 (file)
@@ -1,10 +1,10 @@
 <?php
 namespace wcf\data\page\menu\item;
 use wcf\data\ProcessibleDatabaseObject;
-use wcf\system\application\ApplicationHandler;
 use wcf\system\menu\page\DefaultPageMenuItemProvider;
 use wcf\system\menu\ITreeMenuItem;
 use wcf\system\request\LinkHandler;
+use wcf\system\Regex;
 use wcf\system\WCF;
 
 /**
@@ -48,14 +48,20 @@ class PageMenuItem extends ProcessibleDatabaseObject implements ITreeMenuItem {
         * @see wcf\system\menu\ITreeMenuItem::getLink()
         */
        public function getLink() {
-               $abbreviation = ApplicationHandler::getInstance()->getAbbreviation($this->packageID);
-               
-               $parameters = array();
-               if ($abbreviation) {
-                       $parameters['application'] = $abbreviation;
+               // external link
+               if ($this->menuItemController === null) {
+                       return WCF::getLanguage()->get($this->menuItemLink);
                }
                
-               return LinkHandler::getInstance()->getLink(null, $parameters, WCF::getLanguage()->get($this->menuItemLink));
+               // resolve application and controller
+               $parts = explode('\\', $this->menuItemController);
+               $abbreviation = array_shift($parts);
+               $controller = array_pop($parts);
+               
+               // drop controller suffix
+               $controller = Regex::compile('(Action|Form|Page)$')->replace($controller, '');
+               
+               return LinkHandler::getInstance()->getLink($controller, array('application' => $abbreviation), WCF::getLanguage()->get($this->menuItemLink));
        }
        
        /**
index 2c1949614be32dabeecd5d6893049c89a2956f5a..fe2d8917d20e5d7499a00edbba1bbc8ed50203d4 100644 (file)
@@ -37,8 +37,7 @@ class PageMenuCacheBuilder implements ICacheBuilder {
                        $conditions->add("menu_item.menuItemID IN (?)", array($itemIDs));
                        $conditions->add("menu_item.isDisabled = ?", array(0));
                        
-                       $sql = "SELECT          menuItemID, menuItem, parentMenuItem, menuItemLink,
-                                               permissions, options, menuPosition, className
+                       $sql = "SELECT          *
                                FROM            wcf".WCF_N."_page_menu_item menu_item
                                ".$conditions."
                                ORDER BY        showOrder ASC";