Fixed bug #14336: Merge modules "Cleanup and typo3temp/" of the Install Tool (thanks...
[Packages/TYPO3.CMS.git] / typo3 / class.alt_menu_functions.inc
old mode 100755 (executable)
new mode 100644 (file)
index 03d40ac..1667aa7
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2004 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2009 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
  *
  *   73: class alt_menu_functions
  *   94:     function topMenu($theModules,$dontLink=0,$backPath='',$descr=0)
- *  402:     function getNavFramePrefix ($moduleInfo, $subModuleInfo=array())
- *  429:     function mIconFile($Ifilename,$backPath)
- *  444:     function mIconFilename($Ifilename,$backPath)
- *  456:     function topButtons()
- *  468:     function adminButtons()
- *  487:     function adminFunctions($backPath)
- *  520:     function wrapLinkWithAB($link)
+ *  473:     function getNavFramePrefix($moduleInfo, $subModuleInfo=array())
+ *  504:     function mIconFile($Ifilename,$backPath)
+ *  519:     function mIconFilename($Ifilename,$backPath)
+ *  531:     function topButtons()
+ *  544:     function adminButtons()
+ *  563:     function adminFunctions($backPath)
+ *  596:     function wrapLinkWithAB($link)
  *
  * TOTAL FUNCTIONS: 8
  * (This index is automatically created/updated by the extension "extdeveval")
@@ -95,14 +95,15 @@ class alt_menu_functions {
                global $LANG, $TBE_TEMPLATE, $BE_USER;
 
                        // By default module sections are collapsable, only if they are explicitly turned off via TSconfig, they are not:
-               $tmpArr = $BE_USER->getTSConfig('options.moduleMenuCollapsable');                       
-               $collapsable = ($tmpArr['value'] ? 0 : 1);
+               $tmpArr = $BE_USER->getTSConfig('options.moduleMenuCollapsable');
+               $collapsable = (isset($tmpArr['value']) && $tmpArr['value']==0) ? 0 : 1;
                unset($tmpArr);
-               
+
                        // Initialize vars:
                $final='';
                $menuCode='';
                $descrCode='';
+               $collection=array();
                $menuCode_sub='';
                $selectItems=array();
                $mIcons=array();
@@ -112,30 +113,25 @@ class alt_menu_functions {
                $selectItems[] = '<option value="">[ '.$LANG->sL('LLL:EXT:lang/locallang_core.php:buttons.selMenu_modules',1).' ]</option>';
                $mC=0;
 
-                       // Remove the 'doc' module?
-               if ($BE_USER->getTSConfigVal('options.disableDocModuleInAB'))   {
-                       unset($theModules['doc']);
-               }
-
                        // Get collapsed configuration
                if ($collapsable == 1) {
-                       $config = is_array ($BE_USER->uc['moduleData']['alt_menu.php']) ? $BE_USER->uc['moduleData']['alt_menu.php'] : array(); 
+                       $config = is_array ($BE_USER->uc['moduleData']['alt_menu.php']) ? $BE_USER->uc['moduleData']['alt_menu.php'] : array();
                        $collapsedOverride = t3lib_div::_GP('collapsedOverride');
                        if (is_array ($collapsedOverride)) {
                                $config = array_merge ($config, $collapsedOverride);
                        }
-                       
+
                        if (t3lib_div::_GP('collapsableExpandAll') == 1) {
                                $config['expandAll'] = t3lib_div::_GP('expandAll');
                        }
-                       
+
                        if ($config['expandAll'] && is_array($collapsedOverride)) {
                                $config = $collapsedOverride;
                        }
-                       
+
                        $BE_USER->uc['moduleData']['alt_menu.php'] = $config;
                        $BE_USER->writeUC($BE_USER->uc);
-                       
+
                                // all items have to be expanded when expandAll is set
                        if($config['expandAll'] == 1) {
                                foreach($config as $key => $value) {
@@ -144,13 +140,13 @@ class alt_menu_functions {
                                }
                        }
                }
-               
+
                        // Traverse array with modules
                reset($theModules);
                while(list($moduleName,$moduleInfo)=each($theModules))  {
                        $mC++;
 
-                       $prefix=$this->getNavFramePrefix ($moduleInfo);
+                       $prefix = $this->getNavFramePrefix($moduleInfo);
                        if ($prefix) {
                                $this->fsMod[]='fsMod.recentIds["'.$moduleName.'"]="";';
                        }
@@ -172,15 +168,24 @@ class alt_menu_functions {
                                $link_sub = 0;
                        }
 
+                       $link = t3lib_div::resolveBackPath($link);
+
                        $moduleKey = $moduleName.'_tab';
                        $moduleCSSId = 'ID_'.t3lib_div::md5int($moduleName);
 
+                       $collection[$moduleKey] = array(
+                               'moduleName' => $moduleName,
+                               'title' => $LANG->moduleLabels['tabs'][$moduleKey],
+                               'onclick' => 'top.goToModule(\''.$moduleName.'\');',
+                       );
+
                                // Creating image icon
                        $image = @getimagesize($this->mIconFile($LANG->moduleLabels['tabs_images'][$moduleKey],$backPath));
                        $imageCode='';
                        $descr3_title = $LANG->moduleLabels['tabs'][$moduleKey].' ';
                        if ($image)     {
                                $Ifilename = $this->mIconFilename($LANG->moduleLabels['tabs_images'][$moduleKey],$backPath);
+                               $collection[$moduleKey]['icon'] = array($Ifilename, $image[3]);
                                $imageCode = '<img src="'.$Ifilename.'" '.$image[3].' alt="" />';
                                $descr3_imageCode = '<img src="'.$Ifilename.'" '.$image[3].' title="'.htmlspecialchars($descr3_title).'" alt="" />';
                        } else {
@@ -196,7 +201,7 @@ class alt_menu_functions {
                                $mIcons[] = '<a href="#" onclick="top.goToModule(\''.$moduleName.'\');'.$onBlur.'return false;" class="c-mainitem" id="'.$moduleCSSId.'">'.$descr3_imageCode.'</a>';
 
                                $JScmd = '
-                                               top.content.location=top.getModuleUrl(top.TS.PATH_typo3+\''.$this->wrapLinkWithAB($link).'\'+additionalGetVariables);
+                                               top.content.location=top.getModuleUrl(top.TS.PATH_typo3+"'.$this->wrapLinkWithAB($link).'"+additionalGetVariables);
                                                top.highlightModuleMenuItem("'.$moduleCSSId.'",1);';
                                $mJScmds[] = "case '".$moduleName."': \n ".$JScmd." \n break;";
                        }
@@ -204,15 +209,15 @@ class alt_menu_functions {
                        $selectItems[] = '<option value="top.goToModule(\''.$moduleName.'\');">'.htmlspecialchars($LANG->moduleLabels['tabs'][$moduleKey]).'</option>';
                        $label='&nbsp;<b>'.$label.'</b>&nbsp;';
 
-                       
+
                                // make menu collapsable
                        if($collapsable == 1 && is_array($moduleInfo['sub'])) {
-                               $collapseJS = 'onclick="window.location.href=\'alt_menu.php?collapsedOverride['.$moduleName.']='.($config[$moduleName] ? '0' : '1').'\'"';                              
-                               $collapseIcon = '<span class="c-iconCollapse"><img'.t3lib_iconWorks::skinImg($backPath,'gfx/ol/'.($config[$moduleName] ? 'plusbullet.gif':'minusbullet.gif'),'width="18" height="16"').' title="" alt="" /></span>';                            
+                               $collapseJS = 'onclick="window.location.href=\'alt_menu.php?collapsedOverride['.$moduleName.']='.($config[$moduleName] ? '0' : '1').'\'"';
+                               $collapseIcon = '<span class="c-iconCollapse"><img'.t3lib_iconWorks::skinImg($backPath,'gfx/ol/'.($config[$moduleName] ? 'plusbullet.gif':'minusbullet.gif'),'width="18" height="16"').' title="" alt="" /></span>';
                        } else {
                                $collapseJS = $collapseIcon = '';
                        }
-                       
+
                                // Creating a main item for the vertical menu (descr=0)
                        $menuCode.='
                                                <tr class="c-mainitem" id="'.$moduleCSSId.'">
@@ -235,6 +240,7 @@ class alt_menu_functions {
                        $subCode='';
                        if (is_array($moduleInfo['sub']))       {
                                reset($moduleInfo['sub']);
+                               $collection[$moduleKey]['subitems'] = array();
                                $c=0;
                                while(list($subName,$subInfo)=each($moduleInfo['sub'])) {
                                        if ($c==0)              {
@@ -248,18 +254,25 @@ class alt_menu_functions {
                                                                </tr>';
                                        }
 
-                                       $link = $subInfo['script'];
-                                       $prefix=$this->getNavFramePrefix ($moduleInfo, $subInfo);
+                                       $link = t3lib_div::resolveBackPath($subInfo['script']);
+                                       $prefix = $this->getNavFramePrefix($moduleInfo, $subInfo);
 
                                        $subKey = $moduleName.'_'.$subName.'_tab';
                                        $moduleCSSId = 'ID_'.t3lib_div::md5int($moduleName.'_'.$subName);
 
+                                       $collection[$moduleKey]['subitems'][$subKey] = array(
+                                               'moduleName' => $moduleName.'_'.$subName,
+                                               'title' => $LANG->moduleLabels['tabs'][$subKey],
+                                               'onclick' => 'top.goToModule(\''.$moduleName.'_'.$subName.'\');',
+                                       );
+
                                                // Creating image icon
                                        $image = @getimagesize($this->mIconFile($LANG->moduleLabels['tabs_images'][$subKey],$backPath));
                                        $imageCode='';
                                        $descr3_title = $LANG->moduleLabels['tabs'][$subKey].': '.$LANG->moduleLabels['labels'][$subKey.'label'];
                                        if ($image)     {
                                                $Ifilename = $this->mIconFilename($LANG->moduleLabels['tabs_images'][$subKey],$backPath);
+                                               $collection[$moduleKey]['subitems'][$subKey]['icon'] = array($Ifilename, $image[3]);
                                                $imageCode = '<img src="'.$Ifilename.'" '.$image[3].' title="'.htmlspecialchars($LANG->moduleLabels['labels'][$subKey.'label']).'" alt="" />';
                                                $descr3_imageCode = '<img src="'.$Ifilename.'" '.$image[3].' title="'.htmlspecialchars($descr3_title).'" alt="" />';
                                        } else {
@@ -275,7 +288,7 @@ class alt_menu_functions {
 
                                                // Setting additional JavaScript if frameset script:
                                        $addJS = '';
-                                       if ($moduleInfo['navFrameScript'])      {$addJS="+'&id='+top.rawurlencode(top.fsMod.recentIds['".$moduleName."'])";}
+                                       if ($moduleInfo['navFrameScript'])      {$addJS = "+'&id='+top.rawurlencodeAndRemoveSiteUrl(top.fsMod.recentIds['" . $moduleName . "'])";}
 
                                                // If there is a script to link to (and linking is not disabled.
                                        if ($link && !$dontLink)        {
@@ -283,16 +296,22 @@ class alt_menu_functions {
                                                if ($addJS && $BE_USER->uc['condensedMode'])    {$addJS.=  "+(cMR?'&cMR=1':'')";}
 
                                                        // Command for the selector box:
-                                               $JScmd = "
-                                                               top.content.location=top.getModuleUrl(top.TS.PATH_typo3+'".$this->wrapLinkWithAB($link)."'".$addJS.'+additionalGetVariables);
+                                               $JScmd = '
+                                                               top.content.location=top.getModuleUrl(top.TS.PATH_typo3+"'.$this->wrapLinkWithAB($link).'"'.$addJS.'+additionalGetVariables);
                                                                top.fsMod.currentMainLoaded="'.$moduleName.'";
                                                                ';
 
+                                               if ($subInfo['navFrameScript']) {
+                                                       $JScmd.='
+                                                               top.currentSubScript="'.$origLink.'";';
+                                               }
+
                                                        // If there is a frameset script in place:
                                                if (!$BE_USER->uc['condensedMode'] && $moduleInfo['navFrameScript'])    {
 
                                                                // use special nav script from sub module, otherwise from the main module
-                                                       $subNavFrameScript = $subInfo['navFrameScript'] ? $subInfo['navFrameScript'] : $moduleInfo['navFrameScript'] ;
+                                                       $subNavFrameScript = $subInfo['navFrameScript'] ? $subInfo['navFrameScript'] : $moduleInfo['navFrameScript'];
+                                                       $subNavFrameScript = t3lib_div::resolveBackPath($subNavFrameScript);
 
                                                                // add GET params for sub module to the nav script
                                                        $subNavFrameScript = $this->wrapLinkWithAB($subNavFrameScript).$subInfo['navFrameScriptParam'];
@@ -336,11 +355,24 @@ class alt_menu_functions {
                                                        </tr>';
 
                                                // For "About modules":
+                                       $moduleLabel = htmlspecialchars($LANG->moduleLabels['labels'][$subKey.'label']);
+                                       $moduleLabelHtml = !empty($moduleLabel) ? '<strong>' . $moduleLabel . '</strong><br />' : '';
+                                       $moduleDescription = $LANG->moduleLabels['labels'][$subKey.'descr'];
+
                                        $descrCode.='
                                                        <tr class="c-subitem-row">
                                                                <td align="center">'.$imageCode.'</td>
-                                                               <td>'.$flabel.'&nbsp;&nbsp;</td>
-                                                               <td><strong>'.htmlspecialchars($LANG->moduleLabels['labels'][$subKey.'label']).'</strong><br />'.$LANG->moduleLabels['labels'][$subKey.'descr'].'</td>
+                                                               <td>'.$flabel.'&nbsp;&nbsp;</td>';
+
+                                       if (!empty($moduleLabel) || !empty($moduleDescription)) {
+                                               $descrCode .= '
+                                                               <td>' . $moduleLabelHtml . $moduleDescription . '</td>';
+                                       } else {
+                                               $descrCode .= '
+                                                               <td>&nbsp;</td>';
+                                       }
+
+                                       $descrCode .= '
                                                        </tr>';
 
                                                // Possibly adding a divider line
@@ -381,15 +413,15 @@ class alt_menu_functions {
                                                <td align="center">
                                                                <form action="alt_menu.php" method="get">
                                                                        <input type="hidden" name="collapsableExpandAll" value="1" />
-                                                                       <input type="checkbox" name="expandAll" value="1" onclick="this.form.submit();" '.($config['expandAll']?'checked="checked"':'').' />
+                                                                       <input type="checkbox" name="expandAll" id="expandall" value="1" onclick="this.form.submit();" '.($config['expandAll']?'checked="checked"':'').' />
                                                                </form>
                                                </td>
-                                               <td class="c-subitem-label">'.$LANG->sL('LLL:EXT:lang/locallang_core.php:labels.expandAll',1).'</td>
+                                               <td class="c-subitem-label"><label for="expandall">'.$LANG->sL('LLL:EXT:lang/locallang_core.php:labels.expandAll',1).'</label></td>
                                        </tr>';
                        } else {
                                $collapseAllHTML = '';
                        }
-                       
+
                        $final = '
 
 
@@ -427,7 +459,7 @@ class alt_menu_functions {
                                if (count($functionArray))      {
                                        $selectItems[] = '<option value=""></option>';
                                        foreach($functionArray as $fAoptions)   {
-                                               $selectItems[] = '<option value="'.htmlspecialchars("document.location='".$fAoptions['href']."';").'">[ '.htmlspecialchars($fAoptions['title']).' ]</option>';
+                                               $selectItems[] = '<option value="'.htmlspecialchars("window.location.href='".$fAoptions['href']."';").'">[ '.htmlspecialchars($fAoptions['title']).' ]</option>';
                                        }
                                }
                        }
@@ -451,6 +483,11 @@ class alt_menu_functions {
                        $final = chr(10).implode(chr(10),$mJScmds).chr(10);
                }
 
+                       // Output for TOPMENU BAR drop downs (but basically this is an array with which you can do many interesting things...)
+               if ($descr==5)  {
+                       $final = $collection;
+               }
+
                        // Return result:
                return $final;
        }
@@ -462,18 +499,22 @@ class alt_menu_functions {
         * @param       string          Submodule info array
         * @return      string          Result url string
         */
-       function getNavFramePrefix ($moduleInfo, $subModuleInfo=array()) {
+       function getNavFramePrefix($moduleInfo, $subModuleInfo=array()) {
                global $BE_USER;
 
                $prefix = '';
-               $navFrameScriptParam = $subModuleInfo['navFrameScriptParam'] ? $subModuleInfo['navFrameScriptParam'] : $moduleInfo['navFrameScriptParam'];
-               if ($moduleInfo['navFrameScript'])      {
+               $navFrameScript = $subModuleInfo['navFrameScript'] ? $subModuleInfo['navFrameScript'] : $moduleInfo['navFrameScript'];
+               $navFrameScriptParam = isset($subModuleInfo['navFrameScriptParam']) ? $subModuleInfo['navFrameScriptParam'] : $moduleInfo['navFrameScriptParam'];
+               if ($navFrameScript)    {
+                       $navFrameScript = t3lib_div::resolveBackPath($navFrameScript);
+                       $navFrameScript = $this->wrapLinkWithAB($navFrameScript);
+
                        if ($BE_USER->uc['condensedMode'])      {
-                               $prefix=$this->wrapLinkWithAB($moduleInfo['navFrameScript']).$navFrameScriptParam.'&currentSubScript=';
+                               $prefix=$navFrameScript.$navFrameScriptParam.'&currentSubScript=';
                        } else {
                                $prefix='alt_mod_frameset.php?'.
                                        'fW="+top.TS.navFrameWidth+"'.
-                                       '&nav="+top.TS.PATH_typo3+"'.rawurlencode($this->wrapLinkWithAB($moduleInfo['navFrameScript']).$navFrameScriptParam).
+                                       '&nav="+top.TS.PATH_typo3+"'.rawurlencode($navFrameScript.$navFrameScriptParam).
                                        '&script=';
                        }
                }
@@ -519,7 +560,8 @@ class alt_menu_functions {
        function topButtons()   {
                global $LANG;
 
-               $out.= '<form action="logout.php" target="_top"><input type="submit" value="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:buttons.logout',1).'" /></form>';
+               $label = $GLOBALS['BE_USER']->user['ses_backuserid'] ? 'LLL:EXT:lang/locallang_core.php:buttons.exit' : 'LLL:EXT:lang/locallang_core.php:buttons.logout';
+               $out.= '<form action="logout.php" target="_top"><input type="submit" value="'.$LANG->sL($label,1).'" /></form>';
                return $out;
        }
 
@@ -556,6 +598,7 @@ class alt_menu_functions {
                if ($TYPO3_CONF_VARS['EXT']['extCache'])        {
                        $title = $LANG->sL('LLL:EXT:lang/locallang_core.php:rm.clearCache_allTypo3Conf');
                        $functions[]=array(
+                               'id' => 'temp_CACHED',
                                'title' => $title,
                                'href' => $backPath.'tce_db.php?vC='.$BE_USER->veriCode().'&redirect='.rawurlencode(t3lib_div::getIndpEnv('TYPO3_REQUEST_SCRIPT')).'&cacheCmd=temp_CACHED',
                                'icon' => '<img'.t3lib_iconWorks::skinImg($backPath,'gfx/clear_cache_files_in_typo3c.gif','width="21" height="18"').' title="'.htmlspecialchars($title).'" alt="" />'
@@ -565,6 +608,7 @@ class alt_menu_functions {
                        // Clear all page cache
                $title = $LANG->sL('LLL:EXT:lang/locallang_core.php:rm.clearCache_all');
                $functions[]=array(
+                       'id' => 'all',
                        'title' => $title,
                        'href' => $backPath.'tce_db.php?vC='.$BE_USER->veriCode().'&redirect='.rawurlencode(t3lib_div::getIndpEnv('TYPO3_REQUEST_SCRIPT')).'&cacheCmd=all',
                        'icon' => '<img'.t3lib_iconWorks::skinImg($backPath,'gfx/clear_all_cache.gif','width="21" height="18"').' title="'.htmlspecialchars($title).'" alt="" />'
@@ -585,10 +629,41 @@ class alt_menu_functions {
                        return $link.'?';
                } else return $link;
        }
+
+       /**
+        * Generates some JavaScript code for the frame.
+        *
+        * @return      string  goToModule javascript function
+        */
+       function generateMenuJScode($loadedModules, $menuType = 4)      {
+               global $TBE_TEMPLATE;
+
+               $goToModuleSwitch = $this->topMenu($loadedModules, 0, '', $menuType);
+
+               $jsCode = '
+       /**
+        * Function used to switch switch module.
+        */
+       var currentModuleLoaded = "";
+       function goToModule(modName,cMR_flag,addGetVars)        {       //
+               var additionalGetVariables = "";
+               if (addGetVars) additionalGetVariables = addGetVars;
+
+               var cMR = 0;
+               if (cMR_flag)   cMR = 1;
+
+               currentModuleLoaded = modName;
+
+               switch(modName) {'.$goToModuleSwitch.'
+               }
+       }';
+
+               return $jsCode;
+       }
 }
 
 
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/class.alt_menu_functions.inc'])     {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/class.alt_menu_functions.inc']);
 }
-?>
\ No newline at end of file
+?>