[TASK] Clean up about modules extension
authorChristian Kuhn <lolli@schwarzbu.ch>
Tue, 25 Oct 2011 21:12:05 +0000 (23:12 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Mon, 12 Dec 2011 12:57:04 +0000 (13:57 +0100)
tx_aboutmodules_Functions was used in the good old days to render the main
module menus. Now, the only code that used this class was the about module
extension. The patch refactors the about module and moves the needed code of
the tx_aboutmodules_Functions to its own class. This makes the extension
way easier to maintain.
tx_aboutmodules_Functions is declared obsolete and unmaintained.

Change-Id: I15402c995a00f16006e20ecc40bd841d6b42c1cb
Resolves: #31296
Releases: 4.7
Reviewed-on: http://review.typo3.org/6338
Reviewed-by: Oliver Hader
Reviewed-by: Steffen Ritter
Tested-by: Steffen Ritter
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn
typo3/sysext/aboutmodules/class.tx_aboutmodules_functions.php
typo3/sysext/aboutmodules/mod/index.php

index b6ac888..5929495 100644 (file)
  ***************************************************************/
 
 /**
+ * This class is deprecated and unmaintained. It was once used to render the main
+ * menus of the backend for alt_main.php and friends, but is unused now.
+ *
  * Class for generation of the module menu.
  * Will make the vertical, horizontal, selectorbox based menus AND the "about modules" display.
  * Basically it traverses the module structure and generates output based on that.
  *
- * Revised for TYPO3 3.6 2/2003 by Kasper Skårhøj
- * XHTML compliant content
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  * @package TYPO3
  * @subpackage core
+ * @deprecated since 4.7, will be removed in 4.9
  */
 class tx_aboutmodules_Functions {
 
@@ -43,6 +45,13 @@ class tx_aboutmodules_Functions {
        var $fsMod = array();
 
        /**
+        * Default constructor throws deprecation warning
+        */
+       public function __construct() {
+               t3lib_div::deprecationLog('class tx_aboutmodules_Functions is deprecated, unused in core since 4.3 and unmaintained. It will be removed in 4.9.');
+       }
+
+       /**
         * Creates the menu of modules.
         *
         * $descr determines the type of menu made:
index cdb4122..8856e16 100644 (file)
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  * @package TYPO3
- * @subpackage core
+ * @subpackage aboutmodules
  */
 class SC_mod_help_aboutmodules_index {
 
        /**
-        * Object for backend modules.
-        *
-        * @var t3lib_loadModules
-        */
-       var $loadModules;
-       var $content;
-
-       /**
-        * Initialization of script class
-        *
-        * @return      void
+        * Default constructor
         */
-       function init() {
-                       // Loads the available backend modules so we can create the description overview.
+       public function __construct() {
                $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_alt_intro.xml');
-               $this->loadModules = t3lib_div::makeInstance('t3lib_loadModules');
-               $this->loadModules->observeWorkspaces = TRUE;
-               $this->loadModules->load($GLOBALS['TBE_MODULES']);
        }
 
        /**
-        * Main content - displaying the module descriptions
+        * Render the module
         *
-        * @return      void
+        * @return void
         */
-       function main() {
-                       /** @var $menuObj tx_aboutmodules_Functions */
-               $menuObj = t3lib_div::makeInstance('tx_aboutmodules_Functions');
-
+       public function render() {
                $GLOBALS['TBE_TEMPLATE']->divClass = $GLOBALS['TBE_TEMPLATE']->bodyTagId;
                $GLOBALS['TBE_TEMPLATE']->backPath = $GLOBALS['BACK_PATH'];
 
-               $this->content = '
-                       <div id="typo3-docheader">
-                               <div id="typo3-docheader-row1">&nbsp;</div>
-                       </div>
-                       <div id="typo3-alt-intro-php-sub">
-                       <h1>TYPO3 ' . TYPO3_version . '<br />' . $GLOBALS['LANG']->getLL('introtext') . '</h1>
+               $content = array();
+               $content[] = '<div id="typo3-docheader"><div id="typo3-docheader-row1">&nbsp;</div></div>';
+               $content[] = '<div id="typo3-alt-intro-php-sub">';
 
-                       <p>' . t3lib_BEfunc::TYPO3_copyRightNotice() . '</p>';
+               $content[] = '<h1>TYPO3 ' . TYPO3_version . '<br />' . $GLOBALS['LANG']->getLL('introtext') . '</h1>';
+               $content[] = '<p>' . t3lib_BEfunc::TYPO3_copyRightNotice() . '</p>';
 
-               $this->content .= '
-                       ' . t3lib_BEfunc::displayWarningMessages();
+               $content[] = t3lib_BEfunc::displayWarningMessages();
+               $content[] = '<h3>' . $GLOBALS['LANG']->getLL('introtext2') . '</h3>';
 
-               $this->content .= '
-                       <h3>' . $GLOBALS['LANG']->getLL('introtext2') . '</h3>';
+                       /** @var $loadModules t3lib_loadModules */
+               $loadModules = t3lib_div::makeInstance('t3lib_loadModules');
+               $loadModules->observeWorkspaces = TRUE;
+                       // Load available backend modules to create the description overview.
+               $loadModules->load($GLOBALS['TBE_MODULES']);
+               $content[] = $this->renderModules($loadModules->modules);
+               $content[] = '<br />';
 
+                       // End text: 'Features may vary depending on your website and permissions'
+               $content[] = '<p class="c-features"><em>(' . $GLOBALS['LANG']->getLL('endText') . ')</em></p>';
 
-               // Printing the description of the modules available
-               $this->content .= $menuObj->topMenu($this->loadModules->modules, 0, '', 1);
-               $this->content .= '<br />';
+               $content[] = '<br />';
+               $content[] = '</div>';
 
-               // end text: 'Features may vary depending on your website and permissions'
-               $this->content .= '<p class="c-features"><em>(' . $GLOBALS['LANG']->getLL('endText') . ')</em></p>';
-               $this->content .= '<br /></div>';
-
-               // Renders the module page
-               $this->content = $GLOBALS['TBE_TEMPLATE']->render(
+               echo $GLOBALS['TBE_TEMPLATE']->render(
                        'About modules',
-                       $this->content,
+                       implode(LF, $content),
                        TRUE
                );
        }
 
        /**
-        * Outputting the accumulated content to screen
+        * Render an overview of modules and its sub modules
         *
-        * @return      void
+        * @param array $modules is the output from load_modules class
+        * @return string Module list HTML
         */
-       function printContent() {
-               echo $this->content;
+       protected function renderModules(array $modules) {
+               $moduleHtml = array();
+
+                       // Traverse array with modules
+               foreach ($modules as $moduleName => $moduleInfo) {
+                       $moduleKey = $moduleName . '_tab';
+
+                               // Create image icon
+                       $icon = @getimagesize($GLOBALS['LANG']->moduleLabels['tabs_images'][$moduleKey]);
+                       $iconHtml = '';
+                       if ($icon) {
+                               $iconPath = '../' . substr($GLOBALS['LANG']->moduleLabels['tabs_images'][$moduleKey], strlen(PATH_site));
+                               $iconHtml = '<img src="' . $iconPath . '" ' . $icon[3] . ' alt="" />';
+                       }
+
+                       $label = htmlspecialchars($GLOBALS['LANG']->moduleLabels['tabs'][$moduleKey]);
+                               // Creating main module link, if there are no sub modules
+                       if (!is_array($moduleInfo['sub'])) {
+                               $label = '<a href="#" onclick="top.goToModule(\'' . $moduleName . '\');return false;">' . $label . '</a>';
+                       }
+                       $label = '&nbsp;<strong>' . $label . '</strong>&nbsp;';
+
+                       $moduleHtml[] = '<tr class="c-mainitem"><td colspan="3">' . $iconHtml . $label . '</td></tr>';
+
+                               // Traverse sub modules
+                       $subHtml = array();
+                       if (is_array($moduleInfo['sub'])) {
+                               $subCount = 0;
+                               foreach ($moduleInfo['sub'] as $subName => $subInfo) {
+                                       $subCount ++;
+                                       if ($subCount === 1) {
+                                               $subHtml[] = '
+                                                       <tr class="c-first">
+                                                               <td colspan="3"></td>
+                                                       </tr>
+                                               ';
+                                       }
+
+                                       $subKey = $moduleName . '_' . $subName . '_tab';
+
+                                               // Create image icon
+                                       $icon = @getimagesize($GLOBALS['LANG']->moduleLabels['tabs_images'][$subKey]);
+                                       $iconHtml = '';
+                                       if ($icon) {
+                                               $iconPath = '../' . substr($GLOBALS['LANG']->moduleLabels['tabs_images'][$subKey], strlen(PATH_site));
+                                               $iconHtml = '<img src="' . $iconPath . '" ' . $icon[3] . ' title="' . htmlspecialchars($GLOBALS['LANG']->moduleLabels['labels'][$subKey . 'label']) . '" alt="" />';
+                                       }
+
+                                               // Label for sub module
+                                       $label = $GLOBALS['LANG']->moduleLabels['tabs'][$subKey];
+                                       $labelDescription = ' title="' . htmlspecialchars($GLOBALS['LANG']->moduleLabels['labels'][$subKey . 'label']) . '"';
+                                       $onClickString = htmlspecialchars('top.goToModule(\'' . $moduleName . '_' . $subName . '\');return false;');
+                                       $linkedLabel = '<a href="#" onclick="' . $onClickString . '"' . $labelDescription . '>' . htmlspecialchars($label) . '</a>';
+
+                                       $moduleLabel = htmlspecialchars($GLOBALS['LANG']->moduleLabels['labels'][$subKey . 'label']);
+                                       $moduleLabelHtml = !empty($moduleLabel) ? '<strong>' . $moduleLabel . '</strong><br />' : '';
+                                       $moduleDescription = $GLOBALS['LANG']->moduleLabels['labels'][$subKey . 'descr'];
+
+                                       $subHtml[] = '<tr class="c-subitem-row">';
+                                       $subHtml[] = '<td align="center">' . $iconHtml . '</td>';
+                                       $subHtml[] = '<td>' . $linkedLabel . '&nbsp;&nbsp;</td>';
+
+                                       if (!empty($moduleLabel) || !empty($moduleDescription)) {
+                                               $subHtml[] = '<td class="module-description">' . $moduleLabelHtml . $moduleDescription . '</td>';
+                                       } else {
+                                               $subHtml[] = '<td>&nbsp;</td>';
+                                       }
+
+                                       $subHtml[] = '</tr>';
+                               }
+                       }
+
+                       if (count($subHtml) > 0) {
+                               $moduleHtml[] = implode(LF, $subHtml);
+                               $moduleHtml[] = '<tr class="c-endrow"><td colspan="3"></td></tr>';
+                       }
+               }
+
+               return '
+                       <table border="0" cellpadding="0" cellspacing="0" id="typo3-about-modules">
+                               ' . implode(LF, $moduleHtml) . '
+                       </table>
+               ';
        }
 }
 
@@ -115,10 +179,5 @@ if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLA
        include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/sysext/aboutmodules/mod/index.php']);
 }
 
-
-       // Make instance:
-$SOBE = t3lib_div::makeInstance('SC_mod_help_aboutmodules_index');
-$SOBE->init();
-$SOBE->main();
-$SOBE->printContent();
+t3lib_div::makeInstance('SC_mod_help_aboutmodules_index')->render();
 ?>
\ No newline at end of file