'Using TemplateAnalyzerModuleFunctionController::$pObj is deprecated and will not be possible anymore in TYPO3 v10.0.', 'function_key' => 'Using TemplateAnalyzerModuleFunctionController::$function_key is deprecated, property will be removed in TYPO3 v10.0.', 'extClassConf' => 'Using TemplateAnalyzerModuleFunctionController::$extClassConf is deprecated, property will be removed in TYPO3 v10.0.', 'localLangFile' => 'Using TemplateAnalyzerModuleFunctionController::$localLangFile is deprecated, property will be removed in TYPO3 v10.0.', ]; /** * @var array */ private $deprecatedPublicMethods = [ 'initialize_editor' => 'Using TemplateAnalyzerModuleFunctionController::initialize_editor() is deprecated and will not be possible anymore in TYPO3 v10.0.', 'modMenu' => 'Using TemplateAnalyzerModuleFunctionController::modMenu() is deprecated and will not be possible anymore in TYPO3 v10.0.', 'handleExternalFunctionValue' => 'Using TemplateAnalyzerModuleFunctionController::handleExternalFunctionValue() is deprecated, method will be removed in TYPO3 v10.0.', ]; /** * @var TypoScriptTemplateModuleController */ protected $pObj; /** * @var string */ protected $localLanguageFilePath; /** * The currently selected sys_template record * @var array */ protected $templateRow; /** * @var ExtendedTemplateService */ protected $templateService; /** * @var int GET/POST var 'id' */ protected $id; /** * Can be hardcoded to the name of a locallang.xlf file (from the same directory as the class file) to use/load * and is included / added to $GLOBALS['LOCAL_LANG'] * * @see init() * @var string * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. */ protected $localLangFile = ''; /** * Contains module configuration parts from TBE_MODULES_EXT if found * * @see handleExternalFunctionValue() * @var array * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. */ protected $extClassConf; /** * If this value is set it points to a key in the TBE_MODULES_EXT array (not on the top level..) where another classname/filepath/title can be defined for sub-subfunctions. * This is a little hard to explain, so see it in action; it used in the extension 'func_wizards' in order to provide yet a layer of interfacing with the backend module. * The extension 'func_wizards' has this description: 'Adds the 'Wizards' item to the function menu in Web>Func. This is just a framework for wizard extensions.' - so as you can see it is designed to allow further connectivity - 'level 2' * * @var string * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. */ protected $function_key = ''; /** * Init, called from parent object * * @param TypoScriptTemplateModuleController $pObj */ public function init($pObj) { $this->pObj = $pObj; // Local lang: if (!empty($this->localLangFile)) { // @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. $this->getLanguageService()->includeLLFile($this->localLangFile); } // Setting MOD_MENU items as we need them for logging: $this->pObj->MOD_MENU = array_merge($this->pObj->MOD_MENU, $this->modMenu()); $this->localLanguageFilePath = 'EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf'; $this->pObj->modMenu_setDefaultList .= ',ts_analyzer_checkLinenum,ts_analyzer_checkSyntax'; $this->id = (int)GeneralUtility::_GP('id'); } /** * Mod menu * * @return array */ protected function modMenu() { return [ 'ts_analyzer_checkSetup' => '1', 'ts_analyzer_checkConst' => '1', 'ts_analyzer_checkLinenum' => '1', 'ts_analyzer_checkComments' => '1', 'ts_analyzer_checkCrop' => '1', 'ts_analyzer_checkSyntax' => '1' ]; } /** * Initialize editor * * @param int $pageId * @param int $templateUid * @return bool */ protected function initialize_editor($pageId, $templateUid = 0) { // Initializes the module. Done in this function because we may need to re-initialize if data is submitted! $this->templateService = GeneralUtility::makeInstance(ExtendedTemplateService::class); // Gets the rootLine $rootlineUtility = GeneralUtility::makeInstance(RootlineUtility::class, $pageId); $rootLine = $rootlineUtility->get(); // This generates the constants/config + hierarchy info for the template. $this->templateService->runThroughTemplates($rootLine, $templateUid); // Get the row of the first VISIBLE template of the page. whereclause like the frontend. $this->templateRow = $this->templateService->ext_getFirstTemplate($pageId, $templateUid); return is_array($this->templateRow); } /** * Main, called from parent object * * @return string */ public function main() { // Initializes the module. Done in this function because we may need to re-initialize if data is submitted! // Checking for more than one template an if, set a menu... $assigns = []; $template_uid = 0; $assigns['manyTemplatesMenu'] = $this->pObj->templateMenu(); $assigns['LLPrefix'] = 'LLL:' . $this->localLanguageFilePath . ':'; if ($assigns['manyTemplatesMenu']) { $template_uid = $this->pObj->MOD_SETTINGS['templatesOnPage']; } $assigns['existTemplate'] = $this->initialize_editor($this->id, $template_uid); if ($assigns['existTemplate']) { $assigns['siteTitle'] = trim($this->templateRow['sitetitle']); $assigns['templateRecord'] = $this->templateRow; $assigns['linkWrappedTemplateTitle'] = $this->pObj->linkWrapTemplateTitle($this->templateRow['title']); } $this->templateService->clearList_const_temp = array_flip($this->templateService->clearList_const); $this->templateService->clearList_setup_temp = array_flip($this->templateService->clearList_setup); $pointer = count($this->templateService->hierarchyInfo); $hierarchyInfo = $this->templateService->ext_process_hierarchyInfo([], $pointer); $assigns['hierarchy'] = implode('', array_reverse($this->templateService->ext_getTemplateHierarchyArr( $hierarchyInfo, '', [], 1 ))); $urlParameters = [ 'id' => $this->id, 'template' => 'all' ]; /** @var \TYPO3\CMS\Backend\Routing\UriBuilder $uriBuilder */ $uriBuilder = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Routing\UriBuilder::class); $assigns['moduleLink'] = (string)$uriBuilder->buildUriFromRoute('web_ts', $urlParameters); $assigns['template'] = $template = GeneralUtility::_GET('template'); $addParams = $template ? '&template=' . $template : ''; $assigns['checkboxes'] = [ 'ts_analyzer_checkLinenum' => [ 'id' => 'checkTs_analyzer_checkLinenum', 'll' => 'lineNumbers' ], 'ts_analyzer_checkSyntax' => [ 'id' => 'checkTs_analyzer_checkSyntax', 'll' => 'syntaxHighlight' ] ]; if (!$this->pObj->MOD_SETTINGS['ts_analyzer_checkSyntax']) { $assigns['checkboxes']['ts_analyzer_checkComments'] = [ 'id' => 'checkTs_analyzer_checkComments', 'll' => 'comments' ]; $assigns['checkboxes']['ts_analyzer_checkCrop'] = [ 'id' => 'checkTs_analyzer_checkCrop', 'll' => 'cropLines' ]; } foreach ($assigns['checkboxes'] as $key => $conf) { $assigns['checkboxes'][$key]['label'] = BackendUtility::getFuncCheck( $this->id, 'SET[' . $key . ']', $this->pObj->MOD_SETTINGS[$key], '', $addParams, 'id="' . $conf['id'] . '"' ); } if ($template) { $this->templateService->ext_lineNumberOffset = 0; $this->templateService->ext_lineNumberOffset_mode = 'const'; $assigns['constants'] = []; foreach ($this->templateService->constants as $key => $val) { $currentTemplateId = $this->templateService->hierarchyInfo[$key]['templateID']; if ($currentTemplateId == $template || $template === 'all') { $assigns['constants'][] = [ 'title' => $this->templateService->hierarchyInfo[$key]['title'], 'content' => $this->templateService->ext_outputTS( [$val], $this->pObj->MOD_SETTINGS['ts_analyzer_checkLinenum'], $this->pObj->MOD_SETTINGS['ts_analyzer_checkComments'], $this->pObj->MOD_SETTINGS['ts_analyzer_checkCrop'], $this->pObj->MOD_SETTINGS['ts_analyzer_checkSyntax'], 0 ) ]; if ($template !== 'all') { break; } } $this->templateService->ext_lineNumberOffset += count(explode(LF, $val)) + 1; } // Output Setup $this->templateService->ext_lineNumberOffset = 0; $this->templateService->ext_lineNumberOffset_mode = 'setup'; $assigns['setups'] = []; foreach ($this->templateService->config as $key => $val) { $currentTemplateId = $this->templateService->hierarchyInfo[$key]['templateID']; if ($currentTemplateId == $template || $template === 'all') { $assigns['setups'][] = [ 'title' => $this->templateService->hierarchyInfo[$key]['title'], 'content' => $this->templateService->ext_outputTS( [$val], $this->pObj->MOD_SETTINGS['ts_analyzer_checkLinenum'], $this->pObj->MOD_SETTINGS['ts_analyzer_checkComments'], $this->pObj->MOD_SETTINGS['ts_analyzer_checkCrop'], $this->pObj->MOD_SETTINGS['ts_analyzer_checkSyntax'], 0 ) ]; if ($template !== 'all') { break; } } $this->templateService->ext_lineNumberOffset += count(explode(LF, $val)) + 1; } } $view = GeneralUtility::makeInstance(StandaloneView::class); $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName( 'EXT:tstemplate/Resources/Private/Templates/TemplateAnalyzerModuleFunction.html' )); $view->assignMultiple($assigns); return $view->render(); } /** * If $this->function_key is set (which means there are two levels of object connectivity) then * $this->extClassConf is loaded with the TBE_MODULES_EXT configuration for that sub-sub-module * * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. */ protected function handleExternalFunctionValue() { // Must clean first to make sure the correct key is set... $this->pObj->MOD_SETTINGS = BackendUtility::getModuleData($this->pObj->MOD_MENU, GeneralUtility::_GP('SET'), 'web_ts'); if ($this->function_key) { $this->extClassConf = $this->pObj->getExternalItemConfig('web_ts', $this->function_key, $this->pObj->MOD_SETTINGS[$this->function_key]); } } /** * @return LanguageService */ protected function getLanguageService(): LanguageService { return $GLOBALS['LANG']; } }