[CLEANUP] Replace count with empty in multiple extensions
[Packages/TYPO3.CMS.git] / typo3 / sysext / cshmanual / Classes / Controller / HelpModuleController.php
index 2009947..f25d38f 100644 (file)
@@ -1,43 +1,32 @@
 <?php
 namespace TYPO3\CMS\Cshmanual\Controller;
 
-/***************************************************************
- *  Copyright notice
+/*
+ * This file is part of the TYPO3 CMS project.
  *
- *  (c) 1999-2013 Kasper Skårhøj (kasperYYYY@typo3.com)
- *  All rights reserved
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
  *
- *  This script is part of the TYPO3 project. The TYPO3 project is
- *  free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
  *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the text file GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
+ * The TYPO3 project - inspiring people to share!
+ */
 
 use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
- * Script Class for rendering the Context Sensitive Help documents, either the single display in the small pop-up window or the full-table view in the larger window.
+ * Script Class for rendering the Context Sensitive Help documents,
+ * either the single display in the small pop-up window or the full-table view in the larger window.
  *
  * @author Kasper Skårhøj <kasperYYYY@typo3.com>
  */
 class HelpModuleController {
 
        /**
-        * @todo Define visibility
+        * @var string
         */
        public $allowedHTML = '<strong><em><b><i>';
 
@@ -45,21 +34,21 @@ class HelpModuleController {
         * For these vars, see init()
         * If set access to fields and tables is checked. Should be done for TRUE database tables.
         *
-        * @todo Define visibility
+        * @var bool
         */
        public $limitAccess;
 
        /**
         * The "table" key
         *
-        * @todo Define visibility
+        * @var string
         */
        public $table;
 
        /**
         * The "field" key
         *
-        * @todo Define visibility
+        * @var string
         */
        public $field;
 
@@ -75,39 +64,32 @@ class HelpModuleController {
         * Internal, static: GPvar
         * Table/Field id
         *
-        * @todo Define visibility
+        * @var string
         */
        public $tfID;
 
        /**
         * Back (previous tfID)
         *
-        * @todo Define visibility
+        * @var string
         */
        public $back;
 
        /**
         * If set, then in TOC mode the FULL manual will be printed as well!
         *
-        * @todo Define visibility
+        * @var bool
         */
        public $renderALL;
 
        /**
         * Content accumulation
         *
-        * @todo Define visibility
+        * @var string
         */
        public $content;
 
        /**
-        * Glossary words
-        *
-        * @todo Define visibility
-        */
-       public $glossaryWords;
-
-       /**
         * URL to help module
         *
         * @var string
@@ -118,18 +100,17 @@ class HelpModuleController {
         * Initialize the class for various input etc.
         *
         * @return void
-        * @todo Define visibility
         */
        public function init() {
                $this->moduleUrl = BackendUtility::getModuleUrl('help_cshmanual');
                // Setting GPvars:
-               $this->tfID = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('tfID');
+               $this->tfID = GeneralUtility::_GP('tfID');
                // Sanitizes the tfID using whitelisting.
                if (!preg_match('/^[a-zA-Z0-9_\\-\\.\\*]*$/', $this->tfID)) {
                        $this->tfID = '';
                }
-               $this->back = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('back');
-               $this->renderALL = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('renderALL');
+               $this->back = GeneralUtility::_GP('back');
+               $this->renderALL = GeneralUtility::_GP('renderALL');
                // Set internal table/field to the parts of "tfID" incoming var.
                $identifierParts = explode('.', $this->tfID);
                // The table is the first item
@@ -138,7 +119,7 @@ class HelpModuleController {
                // The field is the second one
                $this->field = array_shift($identifierParts);
                // There may be extra parts for FlexForms
-               if (count($identifierParts) > 0) {
+               if (!empty($identifierParts)) {
                        // There's at least one extra part
                        $extraIdentifierInformation = array();
                        $extraIdentifierInformation[] = array_shift($identifierParts);
@@ -160,44 +141,40 @@ class HelpModuleController {
                // limitAccess is checked if the $this->table really IS a table (and if the user is NOT a translator who should see all!)
                $showAllToUser = BackendUtility::isModuleSetInTBE_MODULES('txllxmltranslateM1') && $GLOBALS['BE_USER']->check('modules', 'txllxmltranslateM1');
                $this->limitAccess = isset($GLOBALS['TCA'][$this->table]) ? !$showAllToUser : FALSE;
-               $GLOBALS['LANG']->includeLLFile('EXT:lang/locallang_view_help.xlf', 1);
+               $this->getLanguageService()->includeLLFile('EXT:lang/locallang_view_help.xlf');
        }
 
        /**
         * Main function, rendering the display
         *
         * @return void
-        * @todo Define visibility
         */
        public function main() {
                if ($this->field == '*') {
                        // If ALL fields is supposed to be shown:
-                       $this->createGlossaryIndex();
                        $this->content .= $this->render_Table($this->mainKey);
                } elseif ($this->tfID) {
                        // ... otherwise show only single field:
-                       $this->createGlossaryIndex();
                        $this->content .= $this->render_Single($this->mainKey, $this->field);
                } else {
                        // Render Table Of Contents if nothing else:
                        $this->content .= $this->render_TOC();
                }
 
-               $this->doc = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Template\\DocumentTemplate');
+               $this->doc = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Template\DocumentTemplate::class);
                $this->doc->backPath = $GLOBALS['BACK_PATH'];
                $this->doc->setModuleTemplate('EXT:cshmanual/Resources/Private/Templates/cshmanual.html');
 
                $markers = array('CONTENT' => $this->content);
 
                $this->content = $this->doc->moduleBody(array(), array(), $markers);
-               $this->content = $this->doc->render($GLOBALS['LANG']->getLL('title'), $this->content);
+               $this->content = $this->doc->render($this->getLanguageService()->getLL('title'), $this->content);
        }
 
        /**
         * Outputting the accumulated content to screen
         *
         * @return void
-        * @todo Define visibility
         */
        public function printContent() {
                echo $this->content;
@@ -211,7 +188,6 @@ class HelpModuleController {
         * Creates Table Of Contents and possibly "Full Manual" mode if selected.
         *
         * @return string HTML content
-        * @todo Define visibility
         */
        public function render_TOC() {
                // Initialize:
@@ -220,22 +196,22 @@ class HelpModuleController {
                $outputSections = array();
                $tocArray = array();
                // TYPO3 Core Features:
-               $GLOBALS['LANG']->loadSingleTableDescription('xMOD_csh_corebe');
+               $this->getLanguageService()->loadSingleTableDescription('xMOD_csh_corebe');
                $this->render_TOC_el('xMOD_csh_corebe', 'core', $outputSections, $tocArray, $CSHkeys);
                // Backend Modules:
-               $loadModules = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Backend\\Module\\ModuleLoader');
+               $loadModules = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Module\ModuleLoader::class);
                $loadModules->load($GLOBALS['TBE_MODULES']);
                foreach ($loadModules->modules as $mainMod => $info) {
                        $cshKey = '_MOD_' . $mainMod;
                        if ($CSHkeys[$cshKey]) {
-                               $GLOBALS['LANG']->loadSingleTableDescription($cshKey);
+                               $this->getLanguageService()->loadSingleTableDescription($cshKey);
                                $this->render_TOC_el($cshKey, 'modules', $outputSections, $tocArray, $CSHkeys);
                        }
                        if (is_array($info['sub'])) {
                                foreach ($info['sub'] as $subMod => $subInfo) {
                                        $cshKey = '_MOD_' . $mainMod . '_' . $subMod;
                                        if ($CSHkeys[$cshKey]) {
-                                               $GLOBALS['LANG']->loadSingleTableDescription($cshKey);
+                                               $this->getLanguageService()->loadSingleTableDescription($cshKey);
                                                $this->render_TOC_el($cshKey, 'modules', $outputSections, $tocArray, $CSHkeys);
                                        }
                                }
@@ -244,48 +220,41 @@ class HelpModuleController {
                // Database Tables:
                foreach ($TCAkeys as $table) {
                        // Load descriptions for table $table
-                       $GLOBALS['LANG']->loadSingleTableDescription($table);
+                       $this->getLanguageService()->loadSingleTableDescription($table);
                        if (is_array($GLOBALS['TCA_DESCR'][$table]['columns']) && $GLOBALS['BE_USER']->check('tables_select', $table)) {
                                $this->render_TOC_el($table, 'tables', $outputSections, $tocArray, $CSHkeys);
                        }
                }
                // Extensions
                foreach ($CSHkeys as $cshKey => $value) {
-                       if (\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($cshKey, 'xEXT_') && !isset($GLOBALS['TCA'][$cshKey])) {
-                               $GLOBALS['LANG']->loadSingleTableDescription($cshKey);
+                       if (GeneralUtility::isFirstPartOfStr($cshKey, 'xEXT_') && !isset($GLOBALS['TCA'][$cshKey])) {
+                               $this->getLanguageService()->loadSingleTableDescription($cshKey);
                                $this->render_TOC_el($cshKey, 'extensions', $outputSections, $tocArray, $CSHkeys);
                        }
                }
-               // Glossary
-               foreach ($CSHkeys as $cshKey => $value) {
-                       if (\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($cshKey, 'xGLOSSARY_') && !isset($GLOBALS['TCA'][$cshKey])) {
-                               $GLOBALS['LANG']->loadSingleTableDescription($cshKey);
-                               $this->render_TOC_el($cshKey, 'glossary', $outputSections, $tocArray, $CSHkeys);
-                       }
-               }
                // Other:
                foreach ($CSHkeys as $cshKey => $value) {
-                       if (!\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($cshKey, '_MOD_') && !isset($GLOBALS['TCA'][$cshKey])) {
-                               $GLOBALS['LANG']->loadSingleTableDescription($cshKey);
+                       if (!GeneralUtility::isFirstPartOfStr($cshKey, '_MOD_') && !isset($GLOBALS['TCA'][$cshKey])) {
+                               $this->getLanguageService()->loadSingleTableDescription($cshKey);
                                $this->render_TOC_el($cshKey, 'other', $outputSections, $tocArray, $CSHkeys);
                        }
                }
 
                // COMPILE output:
                $output = '';
-               $output .= '<h1>' . $GLOBALS['LANG']->getLL('manual_title', TRUE) . '</h1>';
-               $output .= '<p class="lead">' . $GLOBALS['LANG']->getLL('description', TRUE) . '</p>';
+               $output .= '<h1>' . $this->getLanguageService()->getLL('manual_title', TRUE) . '</h1>';
+               $output .= '<p class="lead">' . $this->getLanguageService()->getLL('description', TRUE) . '</p>';
 
-               $output .= '<h2>' . $GLOBALS['LANG']->getLL('TOC', TRUE) . '</h2>' . $this->render_TOC_makeTocList($tocArray);
+               $output .= '<h2>' . $this->getLanguageService()->getLL('TOC', TRUE) . '</h2>' . $this->render_TOC_makeTocList($tocArray);
                if (!$this->renderALL) {
                        $output .= '
                                <br/>
-                               <p class="c-nav"><a href="' . htmlspecialchars($this->moduleUrl) . '&amp;renderALL=1">' . $GLOBALS['LANG']->getLL('full_manual', TRUE) . '</a></p>';
+                               <p class="c-nav"><a href="' . htmlspecialchars($this->moduleUrl) . '&amp;renderALL=1">' . $this->getLanguageService()->getLL('full_manual', TRUE) . '</a></p>';
                }
                if ($this->renderALL) {
                        $output .= '
 
-                               <h2>' . $GLOBALS['LANG']->getLL('full_manual_chapters', TRUE) . '</h2>' . implode('
+                               <h2>' . $this->getLanguageService()->getLL('full_manual_chapters', TRUE) . '</h2>' . implode('
 
 
                                <!-- NEW SECTION: -->
@@ -304,7 +273,6 @@ class HelpModuleController {
         * @param array $tocArray TOC array; Here TOC index elements are created. Passed by reference!
         * @param array $CSHkeys CSH keys array. Every item rendered will be unset in this array so finally we can see what CSH keys are not processed yet. Passed by reference!
         * @return void
-        * @todo Define visibility
         */
        public function render_TOC_el($table, $tocCat, &$outputSections, &$tocArray, &$CSHkeys) {
                // Render full manual right here!
@@ -314,7 +282,7 @@ class HelpModuleController {
                                $outputSections[$table] = '
 
                <!-- New CSHkey/Table: ' . $table . ' -->
-               <p class="c-nav"><a name="ANCHOR_' . $table . '" href="#">' . $GLOBALS['LANG']->getLL('to_top', TRUE) . '</a></p>
+               <p class="c-nav"><a name="ANCHOR_' . $table . '" href="#">' . $this->getLanguageService()->getLL('to_top', TRUE) . '</a></p>
                <h2>' . $this->getTableFieldLabel($table) . '</h2>
 
                ' . $outputSections[$table];
@@ -335,17 +303,16 @@ class HelpModuleController {
         *
         * @param array $tocArray ToC Array.
         * @return string HTML bullet list for index.
-        * @todo Define visibility
         */
        public function render_TOC_makeTocList($tocArray) {
                // The Various manual sections:
-               $keys = explode(',', 'core,modules,tables,extensions,glossary,other');
+               $keys = explode(',', 'core,modules,tables,extensions,other');
                // Create TOC bullet list:
                $output = '';
                foreach ($keys as $tocKey) {
                        if (is_array($tocArray[$tocKey])) {
                                $output .= '
-                                       <li>' . $GLOBALS['LANG']->getLL(('TOC_' . $tocKey), TRUE) . '
+                                       <li>' . $this->getLanguageService()->getLL(('TOC_' . $tocKey), TRUE) . '
                                                <ul>
                                                        <li>' . implode('</li>
                                                        <li>', $tocArray[$tocKey]) . '</li>
@@ -371,7 +338,6 @@ class HelpModuleController {
         * @param string $key Full CSH key (may be different from table name)
         * @param string $table CSH key / table name
         * @return string HTML output
-        * @todo Define visibility
         */
        public function render_Table($key, $table = NULL) {
                $output = '';
@@ -380,7 +346,7 @@ class HelpModuleController {
                        $table = $key;
                }
                // Load descriptions for table $table
-               $GLOBALS['LANG']->loadSingleTableDescription($key);
+               $this->getLanguageService()->loadSingleTableDescription($key);
                if (is_array($GLOBALS['TCA_DESCR'][$key]['columns']) && (!$this->limitAccess || $GLOBALS['BE_USER']->check('tables_select', $table))) {
                        // Initialize variables:
                        $parts = array();
@@ -404,11 +370,9 @@ class HelpModuleController {
                        }
                        $output .= implode('<br />', $parts);
                }
-               // Substitute glossary words:
-               $output = $this->substituteGlossaryWords($output);
                // TOC link:
                if (!$this->renderALL) {
-                       $tocLink = '<p class="c-nav"><a href="' . htmlspecialchars($this->moduleUrl) . '">' . $GLOBALS['LANG']->getLL('goToToc', TRUE) . '</a></p>';
+                       $tocLink = '<p class="c-nav"><a href="' . htmlspecialchars($this->moduleUrl) . '">' . $this->getLanguageService()->getLL('goToToc', TRUE) . '</a></p>';
                        $output = $tocLink . '
                                <br/>' . $output . '
                                <br />' . $tocLink;
@@ -422,21 +386,18 @@ class HelpModuleController {
         * @param string $key CSH key / table name
         * @param string $field Sub key / field name
         * @return string HTML output
-        * @todo Define visibility
         */
        public function render_Single($key, $field) {
                $output = '';
                // Load the description field
-               $GLOBALS['LANG']->loadSingleTableDescription($key);
+               $this->getLanguageService()->loadSingleTableDescription($key);
                // Render single item
                $output .= $this->printItem($key, $field);
-               // Substitute glossary words:
-               $output = $this->substituteGlossaryWords($output);
                // Link to Full table description and TOC:
                $getLLKey = $this->limitAccess ? 'fullDescription' : 'fullDescription_module';
                $output .= '<br />
-                       <p class="c-nav"><a href="' . htmlspecialchars($this->moduleUrl) . '&amp;tfID=' . rawurlencode(($key . '.*')) . '">' . $GLOBALS['LANG']->getLL($getLLKey, TRUE) . '</a></p>
-                       <p class="c-nav"><a href="' . htmlspecialchars($this->moduleUrl) . '">' . $GLOBALS['LANG']->getLL('goToToc', TRUE) . '</a></p>';
+                       <p class="c-nav"><a href="' . htmlspecialchars($this->moduleUrl) . '&amp;tfID=' . rawurlencode(($key . '.*')) . '">' . $this->getLanguageService()->getLL($getLLKey, TRUE) . '</a></p>
+                       <p class="c-nav"><a href="' . htmlspecialchars($this->moduleUrl) . '">' . $this->getLanguageService()->getLL('goToToc', TRUE) . '</a></p>';
                return $output;
        }
 
@@ -450,7 +411,6 @@ class HelpModuleController {
         * @param string $value See-also input codes
         * @param string $anchorTable If $anchorTable is set to a tablename, then references to this table will be made as anchors, not URLs.
         * @return string See-also links HTML
-        * @todo Define visibility
         */
        public function make_seeAlso($value, $anchorTable = '') {
                // Split references by comma or linebreak
@@ -460,12 +420,12 @@ class HelpModuleController {
                        $val = trim($val);
                        if ($val) {
                                $iP = explode(':', $val);
-                               $iPUrl = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode('|', $val);
+                               $iPUrl = GeneralUtility::trimExplode('|', $val);
                                // URL reference:
                                if (substr($iPUrl[1], 0, 4) == 'http') {
                                        $lines[] = '<a href="' . htmlspecialchars($iPUrl[1]) . '" target="_blank"><em>' . htmlspecialchars($iPUrl[0]) . '</em></a>';
                                } elseif (substr($iPUrl[1], 0, 5) == 'FILE:') {
-                                       $fileName = \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName(substr($iPUrl[1], 5), 1, 1);
+                                       $fileName = GeneralUtility::getFileAbsFileName(substr($iPUrl[1], 5), 1, 1);
                                        if ($fileName && @is_file($fileName)) {
                                                $fileName = '../' . \TYPO3\CMS\Core\Utility\PathUtility::stripPathSitePrefix($fileName);
                                                $lines[] = '<a href="' . htmlspecialchars($fileName) . '" target="_blank"><em>' . htmlspecialchars($iPUrl[0]) . '</em></a>';
@@ -476,7 +436,7 @@ class HelpModuleController {
                                                // Checking read access:
                                                if (isset($GLOBALS['TCA_DESCR'][$iP[0]])) {
                                                        // Make see-also link:
-                                                       $href = $this->renderALL || $anchorTable && $iP[0] == $anchorTable ? '#' . implode('.', $iP) : htmlspecialchars($this->moduleUrl) . '&amp;tfID=' . rawurlencode(implode('.', $iP)) . '&amp;back=' . $this->tfID;
+                                                       $href = $this->renderALL || $anchorTable && $iP[0] == $anchorTable ? '#' . rawurlencode(implode('.', $iP)) : $this->moduleUrl . '&tfID=' . rawurlencode(implode('.', $iP)) . '&back=' . $this->tfID;
                                                        $label = $this->getTableFieldLabel($iP[0], $iP[1], ' / ');
                                                        $lines[] = '<a href="' . htmlspecialchars($href) . '">' . htmlspecialchars($label) . '</a>';
                                                }
@@ -493,23 +453,22 @@ class HelpModuleController {
         * @param string $images Image file reference (list of)
         * @param string $descr Description string (divided for each image by line break)
         * @return string Image HTML codes
-        * @todo Define visibility
         */
        public function printImage($images, $descr) {
                $code = '';
                // Splitting:
-               $imgArray = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $images, TRUE);
-               if (count($imgArray)) {
+               $imgArray = GeneralUtility::trimExplode(',', $images, TRUE);
+               if (!empty($imgArray)) {
                        $descrArray = explode(LF, $descr, count($imgArray));
                        foreach ($imgArray as $k => $image) {
                                $descr = $descrArray[$k];
-                               $absImagePath = \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName($image, 1, 1);
+                               $absImagePath = GeneralUtility::getFileAbsFileName($image, 1, 1);
                                if ($absImagePath && @is_file($absImagePath)) {
                                        $imgFile = \TYPO3\CMS\Core\Utility\PathUtility::stripPathSitePrefix($absImagePath);
                                        $imgInfo = @getimagesize($absImagePath);
                                        if (is_array($imgInfo)) {
                                                $imgFile = '../' . $imgFile;
-                                               $code .= '<br /><img src="' . $imgFile . '" ' . $imgInfo[3] . ' class="c-inlineimg" alt="" /><br />
+                                               $code .= '<br /><img src="' . $imgFile . '" ' . $imgInfo[3] . ' class="c-inlineimg img-responsive" alt="" /><br />
                                                ';
                                                $code .= '<p><em>' . htmlspecialchars($descr) . '</em></p>
                                                ';
@@ -528,18 +487,17 @@ class HelpModuleController {
         * Returns header HTML content
         *
         * @param string $str Header text
-        * @param integer $type Header type (1, 0)
+        * @param int $type Header type (1, 0)
         * @return string The HTML for the header.
-        * @todo Define visibility
         */
        public function headerLine($str, $type = 0) {
                switch ($type) {
                        case 1:
-                               $str = '<h2 class="t3-row-header">' . htmlspecialchars($str) . '</h2>
+                               $str = '<h2>' . htmlspecialchars($str) . '</h2>
                                        ';
                                break;
                        case 0:
-                               $str = '<h3 class="divider">' . htmlspecialchars($str) . '</h3>
+                               $str = '<h3>' . htmlspecialchars($str) . '</h3>
                                        ';
                                break;
                }
@@ -551,7 +509,6 @@ class HelpModuleController {
         *
         * @param string $str Content to format.
         * @return string Formatted content.
-        * @todo Define visibility
         */
        public function prepareContent($str) {
                return '<p>' . nl2br(trim(strip_tags($str, $this->allowedHTML))) . '</p>
@@ -564,9 +521,8 @@ class HelpModuleController {
         *
         * @param string $key CSH key / table name
         * @param string $field Sub key / field name
-        * @param boolean $anchors If anchors is to be shown.
+        * @param bool $anchors If anchors is to be shown.
         * @return string HTML content
-        * @todo Define visibility
         */
        public function printItem($key, $field, $anchors = FALSE) {
                $out = '';
@@ -574,7 +530,7 @@ class HelpModuleController {
                        // Make seeAlso references.
                        $seeAlsoRes = $this->make_seeAlso($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['seeAlso'], $anchors ? $key : '');
                        // Making item:
-                       $out = '<a name="' . $key . '.' . $field . '"></a>' . $this->headerLine($this->getTableFieldLabel($key, $field), 1) . $this->prepareContent($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['description']) . ($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['details'] ? $this->headerLine(($GLOBALS['LANG']->getLL('details') . ':')) . $this->prepareContent($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['details']) : '') . ($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['syntax'] ? $this->headerLine(($GLOBALS['LANG']->getLL('syntax') . ':')) . $this->prepareContent($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['syntax']) : '') . ($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['image'] ? $this->printImage($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['image'], $GLOBALS['TCA_DESCR'][$key]['columns'][$field]['image_descr']) : '') . ($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['seeAlso'] && $seeAlsoRes ? $this->headerLine(($GLOBALS['LANG']->getLL('seeAlso') . ':')) . '<p>' . $seeAlsoRes . '</p>' : '') . ($this->back ? '<br /><p><a href="' . htmlspecialchars($this->moduleUrl . '&amp;tfID=' . rawurlencode($this->back)) . '" class="typo3-goBack">' . htmlspecialchars($GLOBALS['LANG']->getLL('goBack')) . '</a></p>' : '') . '<br />';
+                       $out = '<a name="' . $key . '.' . $field . '"></a>' . $this->headerLine($this->getTableFieldLabel($key, $field), 1) . $this->prepareContent($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['description']) . ($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['details'] ? $this->headerLine(($this->getLanguageService()->getLL('details') . ':')) . $this->prepareContent($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['details']) : '') . ($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['syntax'] ? $this->headerLine(($this->getLanguageService()->getLL('syntax') . ':')) . $this->prepareContent($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['syntax']) : '') . ($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['image'] ? $this->printImage($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['image'], $GLOBALS['TCA_DESCR'][$key]['columns'][$field]['image_descr']) : '') . ($GLOBALS['TCA_DESCR'][$key]['columns'][$field]['seeAlso'] && $seeAlsoRes ? $this->headerLine(($this->getLanguageService()->getLL('seeAlso') . ':')) . '<p>' . $seeAlsoRes . '</p>' : '') . ($this->back ? '<br /><p><a href="' . htmlspecialchars($this->moduleUrl . '&tfID=' . rawurlencode($this->back)) . '" class="typo3-goBack">' . htmlspecialchars($this->getLanguageService()->getLL('goBack')) . '</a></p>' : '') . '<br />';
                }
                return $out;
        }
@@ -585,10 +541,9 @@ class HelpModuleController {
         * @param string $key CSH key / table name
         * @param string $field Sub key / field name
         * @return array Table and field labels in a numeric array
-        * @todo Define visibility
         */
        public function getTableFieldNames($key, $field) {
-               $GLOBALS['LANG']->loadSingleTableDescription($key);
+               $this->getLanguageService()->loadSingleTableDescription($key);
                // Define the label for the key
                $keyName = $key;
                if (is_array($GLOBALS['TCA_DESCR'][$key]['columns']['']) && isset($GLOBALS['TCA_DESCR'][$key]['columns']['']['alttitle'])) {
@@ -621,110 +576,22 @@ class HelpModuleController {
         * @param string $mergeToken Token to merge the two strings with
         * @return string Labels joined with merge token
         * @see getTableFieldNames()
-        * @todo Define visibility
         */
        public function getTableFieldLabel($key, $field = '', $mergeToken = ': ') {
                // Get table / field parts:
                list($tableName, $fieldName) = $this->getTableFieldNames($key, $field);
                // Create label:
-               $labelString = $GLOBALS['LANG']->sL($tableName) . ($field ? $mergeToken . rtrim(trim($GLOBALS['LANG']->sL($fieldName)), ':') : '');
+               $labelString = $this->getLanguageService()->sL($tableName) . ($field ? $mergeToken . rtrim(trim($this->getLanguageService()->sL($fieldName)), ':') : '');
                return $labelString;
        }
 
-       /******************************
-        * Glossary related
-        ******************************/
-
-       /**
-        * Creates glossary index in $this->glossaryWords
-        * Glossary is cached in cache_hash cache and so will be updated only when cache is cleared.
-        *
-        * @return void
-        * @todo Define visibility
-        */
-       public function createGlossaryIndex() {
-               // Create hash string and try to retrieve glossary array:
-               $hash = md5('help_cshmanual:glossary');
-               $cachedData = BackendUtility::getHash($hash);
-               // Generate glossary words if not found:
-               if (is_array($cachedData)) {
-                       list($this->glossaryWords, $this->substWords) = $cachedData;
-               } else {
-                       // Initialize:
-                       $this->glossaryWords = array();
-                       $this->substWords = array();
-                       $CSHkeys = array_flip(array_keys($GLOBALS['TCA_DESCR']));
-                       // Glossary
-                       foreach ($CSHkeys as $cshKey => $value) {
-                               if (\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($cshKey, 'xGLOSSARY_') && !isset($GLOBALS['TCA'][$cshKey])) {
-                                       $GLOBALS['LANG']->loadSingleTableDescription($cshKey);
-                                       if (is_array($GLOBALS['TCA_DESCR'][$cshKey]['columns'])) {
-                                               // Traverse table columns as listed in TCA_DESCR
-                                               foreach ($GLOBALS['TCA_DESCR'][$cshKey]['columns'] as $field => $data) {
-                                                       if ($field) {
-                                                               $this->glossaryWords[$cshKey . '.' . $field] = array(
-                                                                       'title' => trim($data['alttitle'] ?: $cshKey),
-                                                                       'description' => str_replace('%22', '%23%23%23', rawurlencode($data['description']))
-                                                               );
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-                       // First, create unique list of words:
-                       foreach ($this->glossaryWords as $key => $value) {
-                               // Making word lowercase in order to filter out same words in different cases.
-                               $word = strtolower($value['title']);
-                               if ($word !== '') {
-                                       $this->substWords[$word] = $value;
-                                       $this->substWords[$word]['key'] = $key;
-                               }
-                       }
-                       krsort($this->substWords);
-                       BackendUtility::storeHash($hash, array($this->glossaryWords, $this->substWords), 'Glossary');
-               }
-       }
-
        /**
-        * Processing of all non-HTML content in the output
-        * Will be done by a call-back to ->substituteGlossaryWords_htmlcleaner_callback()
+        * Returns LanguageService
         *
-        * @param string $code Input HTML code
-        * @return string Output HTML code
-        * @todo Define visibility
+        * @return \TYPO3\CMS\Lang\LanguageService
         */
-       public function substituteGlossaryWords($code) {
-               $htmlParser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Html\HtmlParser');
-               $htmlParser->pObj = $this;
-               $code = $htmlParser->HTMLcleaner($code, array(), 1);
-               return $code;
-       }
-
-       /**
-        * Substituting glossary words in the CSH
-        * This is a call-back function from "class local_t3lib_parsehtml
-        * extends \TYPO3\CMS\Core\Html\HtmlParser", see top of this script
-        *
-        * @param string $code Input HTML string
-        * @return string HTML with substituted words in.
-        * @todo Define visibility
-        */
-       public function substituteGlossaryWords_htmlcleaner_callback($code) {
-               if (is_array($this->substWords) && count($this->substWords) && strlen(trim($code))) {
-                       // Substitute words:
-                       foreach ($this->substWords as $wordKey => $wordSet) {
-                               // quoteMeta used so special chars (which should not occur though) in words will not break the regex. Seemed to work (- kasper)
-                               $parts = preg_split('/( |[\\(])(' . quoteMeta($wordSet['title']) . ')([\\.\\!\\)\\?\\:\\,]+| )/i', ' ' . $code . ' ', 2, PREG_SPLIT_DELIM_CAPTURE);
-                               if (count($parts) == 5) {
-                                       $parts[2] = '<a class="glossary-term" href="' . htmlspecialchars($this->moduleUrl . '&amp;tfID=' . rawurlencode($wordSet['key']) . '&amp;back=' . $this->tfID) . '" title="' . rawurlencode(htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::fixed_lgd_cs(rawurldecode($wordSet['description']), 80))) . '">' . htmlspecialchars($parts[2]) . '</a>';
-                                       $code = substr(implode('', $parts), 1, -1);
-                                       // Disable entry so it doesn't get used next time:
-                                       unset($this->substWords[$wordKey]);
-                               }
-                       }
-                       $code = str_replace('###', '&quot;', rawurldecode($code));
-               }
-               return $code;
+       protected function getLanguageService() {
+               return $GLOBALS['LANG'];
        }
 
 }