‪TYPO3CMS  11.5
TypoScriptTemplateObjectBrowserModuleFunctionController.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
18 use Psr\Http\Message\ServerRequestInterface;
20 use TYPO3\CMS\Backend\Utility\BackendUtility;
29 use TYPO3\CMS\Core\Page\PageRenderer;
30 use TYPO3\CMS\Core\TypoScript\ExtendedTemplateService;
34 
40 {
44  protected ‪$pObj;
45 
50  protected ‪$templateRow;
51 
55  protected ‪$templateService;
56 
60  protected ‪$id;
61 
65  protected ‪$request;
66 
73  public function ‪init(‪$pObj, ServerRequestInterface ‪$request)
74  {
75  $this->pObj = ‪$pObj;
76  $this->request = ‪$request;
77 
78  // Setting MOD_MENU items as we need them for logging:
79  $this->pObj->MOD_MENU = array_merge($this->pObj->MOD_MENU, $this->modMenu());
80  $this->pObj->modMenu_dontValidateList .= ',ts_browser_toplevel_setup,ts_browser_toplevel_const,ts_browser_TLKeys_setup,ts_browser_TLKeys_const';
81  $this->pObj->modMenu_setDefaultList .= ',ts_browser_showComments';
82  $this->id = (int)(‪$request->getParsedBody()['id'] ?? ‪$request->getQueryParams()['id'] ?? 0);
83  }
84 
90  protected function ‪modMenu()
91  {
92  $lang = $this->‪getLanguageService();
93  $lang->includeLLFile('EXT:tstemplate/Resources/Private/Language/locallang_objbrowser.xlf');
94  $modMenu = [
95  'ts_browser_type' => [
96  'const' => $lang->getLL('constants'),
97  'setup' => $lang->getLL('setup'),
98  ],
99  'ts_browser_toplevel_setup' => [
100  '0' => mb_strtolower($lang->getLL('all'), 'utf-8'),
101  ],
102  'ts_browser_toplevel_const' => [
103  '0' => mb_strtolower($lang->getLL('all'), 'utf-8'),
104  ],
105  'ts_browser_const' => [
106  '0' => $lang->getLL('plainSubstitution'),
107  'subst' => $lang->getLL('substitutedGreen'),
108  'const' => $lang->getLL('unsubstitutedGreen'),
109  ],
110  'ts_browser_regexsearch' => '1',
111  'ts_browser_showComments' => '1',
112  'ts_browser_alphaSort' => '1',
113  ];
114  foreach (['setup', 'const'] as $bType) {
115  $addKey = $this->request->getQueryParams()['addKey'] ?? null;
116  // If any plus-signs were clicked, it's registered.
117  if (is_array($addKey)) {
118  reset($addKey);
119  if (current($addKey)) {
120  $this->pObj->MOD_SETTINGS['ts_browser_TLKeys_' . $bType][key($addKey)] = key($addKey);
121  } else {
122  unset($this->pObj->MOD_SETTINGS['ts_browser_TLKeys_' . $bType][key($addKey)]);
123  }
124  $this->‪getBackendUserAuthentication()->‪pushModuleData('web_ts', $this->pObj->MOD_SETTINGS);
125  }
126  if (!empty($this->pObj->MOD_SETTINGS['ts_browser_TLKeys_' . $bType])) {
127  $modMenu['ts_browser_toplevel_' . $bType]['-'] = '---';
128  $modMenu['ts_browser_toplevel_' . $bType] = $modMenu['ts_browser_toplevel_' . $bType] + $this->pObj->MOD_SETTINGS['ts_browser_TLKeys_' . $bType];
129  }
130  }
131  return $modMenu;
132  }
133 
143  protected function ‪initialize_editor($pageId, $template_uid = 0)
144  {
145  // Defined global here!
146  $this->templateService = GeneralUtility::makeInstance(ExtendedTemplateService::class);
147 
148  $this->templateRow = $this->templateService->ext_getFirstTemplate($pageId, $template_uid);
149  $hasFirstTemplate = is_array($this->templateRow);
150  // No explicitly selected template on this page was found, so we behave like the Frontend (e.g. when a template is hidden but on the page above)
151  if (!$hasFirstTemplate) {
152  // Re-initiatlize the templateService but do not include hidden templates
153  $context = clone GeneralUtility::makeInstance(Context::class);
154  $context->setAspect('visibility', GeneralUtility::makeInstance(VisibilityAspect::class));
155  $this->templateService = GeneralUtility::makeInstance(ExtendedTemplateService::class, $context);
156  }
157  // Gets the rootLine
158  $rootlineUtility = GeneralUtility::makeInstance(RootlineUtility::class, $pageId);
159  $rootLine = $rootlineUtility->get();
160  // This generates the constants/config + hierarchy info for the template.
161  $this->templateService->runThroughTemplates($rootLine, $template_uid);
162  return $hasFirstTemplate;
163  }
164 
170  public function ‪main()
171  {
172  $lang = $this->‪getLanguageService();
173  $POST = $this->request->getParsedBody();
174  // Checking for more than one template an if, set a menu...
175  $manyTemplatesMenu = $this->pObj->templateMenu($this->request);
176  $template_uid = 0;
177  if ($manyTemplatesMenu) {
178  $template_uid = $this->pObj->MOD_SETTINGS['templatesOnPage'];
179  }
180  $bType = $this->pObj->MOD_SETTINGS['ts_browser_type'];
181  $existTemplate = $this->‪initialize_editor($this->id, $template_uid);
182  // initialize
183  $assigns = [];
184  $assigns['existTemplate'] = $existTemplate;
185  $assigns['tsBrowserType'] = $this->pObj->MOD_SETTINGS['ts_browser_type'];
186  if ($existTemplate) {
187  $assigns['templateRecord'] = ‪$this->templateRow;
188  $assigns['linkWrapTemplateTitle'] = $this->pObj->linkWrapTemplateTitle($this->templateRow['title'], ($bType === 'setup' ? 'config' : 'constants'));
189  $assigns['manyTemplatesMenu'] = $manyTemplatesMenu;
190 
191  if (($POST['add_property'] ?? false) || ($POST['update_value'] ?? false) || ($POST['clear_object'] ?? false)) {
192  // add property
193  $line = '';
194  if (is_array($POST['data'])) {
195  $name = key($POST['data']);
196  if (($POST['data'][$name]['name'] ?? null) !== '') {
197  // Workaround for this special case: User adds a key and submits by pressing the return key. The form however will use "add_property" which is the name of the first submit button in this form.
198  unset($POST['update_value']);
199  $POST['add_property'] = 'Add';
200  }
201  if ($POST['add_property'] ?? false) {
202  $property = trim($POST['data'][$name]['name']);
203  if (preg_replace('/[^a-zA-Z0-9_\\.]*/', '', $property) != $property) {
204  $badPropertyMessage = GeneralUtility::makeInstance(FlashMessage::class, $lang->getLL('noSpaces') . $lang->getLL('nothingUpdated'), $lang->getLL('badProperty'), ‪FlashMessage::ERROR);
205  $this->‪addFlashMessage($badPropertyMessage);
206  } else {
207  $pline = $name . '.' . $property . ' = ' . trim($POST['data'][$name]['propertyValue']);
208  $propertyAddedMessage = GeneralUtility::makeInstance(FlashMessage::class, $pline, $lang->getLL('propertyAdded'));
209  $this->‪addFlashMessage($propertyAddedMessage);
210  $line .= LF . $pline;
211  }
212  } elseif ($POST['update_value'] ?? false) {
213  $pline = $name . ' = ' . trim($POST['data'][$name]['value']);
214  $updatedMessage = GeneralUtility::makeInstance(FlashMessage::class, $pline, $lang->getLL('valueUpdated'));
215  $this->‪addFlashMessage($updatedMessage);
216  $line .= LF . $pline;
217  } elseif ($POST['clear_object'] ?? false) {
218  if ($POST['data'][$name]['clearValue'] ?? false) {
219  $pline = $name . ' >';
220  $objectClearedMessage = GeneralUtility::makeInstance(FlashMessage::class, $pline, $lang->getLL('objectCleared'));
221  $this->‪addFlashMessage($objectClearedMessage);
222  $line .= LF . $pline;
223  }
224  }
225  }
226  if ($line) {
227  $saveId = ($this->templateRow['_ORIG_uid'] ?? false) ?: $this->templateRow['uid'] ?? 0;
228  // Set the data to be saved
229  $recData = [];
230  $field = $bType === 'setup' ? 'config' : 'constants';
231  $recData['sys_template'][$saveId][$field] = $this->templateRow[$field] . $line;
232  // Create new tce-object
233  $tce = GeneralUtility::makeInstance(DataHandler::class);
234  // Initialize
235  $tce->start($recData, []);
236  // Saved the stuff
237  $tce->process_datamap();
238  // re-read the template ...
239  $this->‪initialize_editor($this->id, $template_uid);
240  }
241  }
242  }
243  $tsbr = $this->request->getQueryParams()['tsbr'] ?? null;
244  $update = 0;
245  if (is_array($tsbr)) {
246  // If any plus-signs were clicked, it's registered.
247  $this->pObj->MOD_SETTINGS['tsbrowser_depthKeys_' . $bType] = $this->templateService->ext_depthKeys($tsbr, $this->pObj->MOD_SETTINGS['tsbrowser_depthKeys_' . $bType] ?? []);
248  $update = 1;
249  }
250  if ($POST['Submit'] ?? false) {
251  // If any POST-vars are send, update the condition array
252  $this->pObj->MOD_SETTINGS['tsbrowser_conditions'] = $POST['conditions'];
253  $update = 1;
254  }
255  if ($update) {
256  $this->‪getBackendUserAuthentication()->‪pushModuleData('web_ts', $this->pObj->MOD_SETTINGS);
257  }
258  $this->templateService->matchAlternative = $this->pObj->MOD_SETTINGS['tsbrowser_conditions'] ?? [];
259  $this->templateService->matchAlternative[] = 'dummydummydummydummydummydummydummydummydummydummydummy';
260  // This is just here to make sure that at least one element is in the array so that the tsparser actually uses this array to match.
261  $this->templateService->constantMode = $this->pObj->MOD_SETTINGS['ts_browser_const'];
262  // "sObj" is set by ExtendedTemplateService to edit single keys
263  $sObj = $this->request->getParsedBody()['sObj'] ?? $this->request->getQueryParams()['sObj'] ?? null;
264  if (!empty($sObj) && $this->templateService->constantMode) {
265  $this->templateService->constantMode = 'untouched';
266  }
267  $this->templateService->regexMode = $this->pObj->MOD_SETTINGS['ts_browser_regexsearch'] ?? '';
268  $this->templateService->linkObjects = true;
269  $this->templateService->ext_regLinenumbers = true;
270  $this->templateService->ext_regComments = $this->pObj->MOD_SETTINGS['ts_browser_showComments'];
271  $this->templateService->bType = $bType;
272  $this->templateService->generateConfig();
273  if ($bType === 'setup') {
274  $theSetup = $this->templateService->setup;
275  } else {
276  $theSetup = $this->templateService->setup_constants;
277  }
278  // EDIT A VALUE:
279  $assigns['typoScriptPath'] = $sObj;
280  if (!empty($sObj)) {
281  [$theSetup, $theSetupValue] = $this->templateService->ext_getSetup($theSetup, $sObj);
282  $assigns['theSetupValue'] = $theSetupValue;
283  if ($existTemplate === false) {
284  $noTemplateMessage = GeneralUtility::makeInstance(FlashMessage::class, $lang->getLL('noCurrentTemplate'), $lang->getLL('edit'), ‪FlashMessage::ERROR);
285  $this->‪addFlashMessage($noTemplateMessage);
286  }
287  // Links:
288  $urlParameters = [
289  'id' => ‪$this->id,
290  ];
291  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
292  $aHref = (string)$uriBuilder->buildUriFromRoute('web_ts', $urlParameters);
293  $assigns['moduleUrl'] = (string)$uriBuilder->buildUriFromRoute('web_ts', $urlParameters);
294  $assigns['isNotInTopLevelKeyList'] = !isset($this->pObj->MOD_SETTINGS['ts_browser_TLKeys_' . $bType][$sObj]);
295  $assigns['hasProperties'] = !empty($theSetup);
296  if ($this->pObj->MOD_SETTINGS['ts_browser_TLKeys_' . $bType][$sObj] ?? false) {
297  $assigns['moduleUrlObjectListAction'] = $aHref . '&addKey[' . rawurlencode($sObj) . ']=0&SET[ts_browser_toplevel_' . $bType . ']=0';
298  } else {
299  if (!empty($theSetup)) {
300  $assigns['moduleUrlObjectListAction'] = $aHref . '&addKey[' . rawurlencode($sObj) . ']=1&SET[ts_browser_toplevel_' . $bType . ']=' . rawurlencode($sObj);
301  }
302  }
303  } else {
304  $this->templateService->tsbrowser_depthKeys = $this->pObj->MOD_SETTINGS['tsbrowser_depthKeys_' . $bType] ?? null;
305  if ($this->request->getParsedBody()['search_field'] ?? false) {
306  // If any POST-vars are send, update the condition array
307  $searchString = $this->request->getParsedBody()['search_field'];
308  try {
309  $this->templateService->tsbrowser_depthKeys =
310  $this->templateService->ext_getSearchKeys(
311  $theSetup,
312  '',
313  $searchString,
314  []
315  );
316  } catch (Exception $e) {
317  $this->‪addFlashMessage(
318  GeneralUtility::makeInstance(FlashMessage::class, sprintf($lang->getLL('error.' . $e->getCode()), $searchString), '', ‪FlashMessage::ERROR)
319  );
320  }
321  }
322  $assigns['hasTsBrowserTypes'] = is_array($this->pObj->MOD_MENU['ts_browser_type'] ?? false) && count($this->pObj->MOD_MENU['ts_browser_type']) > 1;
323  if (is_array($this->pObj->MOD_MENU['ts_browser_type']) && count($this->pObj->MOD_MENU['ts_browser_type']) > 1) {
324  $assigns['browserTypeDropdownMenu'] = BackendUtility::getDropdownMenu($this->id, 'SET[ts_browser_type]', $bType, $this->pObj->MOD_MENU['ts_browser_type']);
325  }
326  $assigns['hasTopLevelInObjectList'] = is_array($this->pObj->MOD_MENU['ts_browser_toplevel_' . $bType] ?? false) && count($this->pObj->MOD_MENU['ts_browser_toplevel_' . $bType]) > 1;
327  if (is_array($this->pObj->MOD_MENU['ts_browser_toplevel_' . $bType]) && count($this->pObj->MOD_MENU['ts_browser_toplevel_' . $bType]) > 1) {
328  $assigns['objectListDropdownMenu'] = BackendUtility::getDropdownMenu($this->id, 'SET[ts_browser_toplevel_' . $bType . ']', $this->pObj->MOD_SETTINGS['ts_browser_toplevel_' . $bType], $this->pObj->MOD_MENU['ts_browser_toplevel_' . $bType]);
329  }
330 
331  $assigns['regexSearchCheckbox'] = BackendUtility::getFuncCheck($this->id, 'SET[ts_browser_regexsearch]', $this->pObj->MOD_SETTINGS['ts_browser_regexsearch'] ?? false, '', '', 'id="checkTs_browser_regexsearch"');
332  $assigns['postSearchField'] = $POST['search_field'] ?? null;
333  $theKey = $this->pObj->MOD_SETTINGS['ts_browser_toplevel_' . $bType] ?? '';
334  if (!$theKey || !str_replace('-', '', $theKey)) {
335  $theKey = '';
336  }
337  [$theSetup, $theSetupValue] = $this->templateService->ext_getSetup($theSetup, $this->pObj->MOD_SETTINGS['ts_browser_toplevel_' . $bType] ?? '');
338  $tree = $this->templateService->ext_getObjTree($theSetup, $theKey, '', '', $theSetupValue, $this->pObj->MOD_SETTINGS['ts_browser_alphaSort'] ?? '');
339  $tree = $this->templateService->substituteCMarkers($tree);
340  $urlParameters = [
341  'id' => ‪$this->id,
342  ];
343  $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
344  $aHref = (string)$uriBuilder->buildUriFromRoute('web_ts', $urlParameters);
345  // Parser Errors:
346  $pEkey = $bType === 'setup' ? 'config' : 'constants';
347  $assigns['hasParseErrors'] = !empty($this->templateService->parserErrors[$pEkey]);
348  if (!empty($this->templateService->parserErrors[$pEkey])) {
349  $assigns['showErrorDetailsUri'] = $aHref . '&SET[function]=TYPO3\\CMS\\Tstemplate\\Controller\\TemplateAnalyzerModuleFunctionController&highlightType=' . $bType . '&highlightLine=';
350  $assigns['parseErrors'] = $this->templateService->parserErrors[$pEkey];
351  }
352 
353  if (isset($this->pObj->MOD_SETTINGS['ts_browser_TLKeys_' . $bType][$theKey])) {
354  $assigns['moduleUrlRemoveFromObjectList'] = $aHref . '&addKey[' . $theKey . ']=0&SET[ts_browser_toplevel_' . $bType . ']=0';
355  }
356 
357  $assigns['hasKeySelected'] = $theKey !== '';
358 
359  if ($theKey) {
360  $assigns['treeLabel'] = $theKey;
361  } else {
362  $assigns['rootLLKey'] = $bType === 'setup' ? 'setupRoot' : 'constantRoot';
363  }
364  $assigns['tsTree'] = $tree;
365 
366  // second row options
367  $assigns['isSetupAndCropLinesDisabled'] = $bType === 'setup';
368  $assigns['checkBoxShowComments'] = BackendUtility::getFuncCheck($this->id, 'SET[ts_browser_showComments]', $this->pObj->MOD_SETTINGS['ts_browser_showComments'] ?? '', '', '', 'id="checkTs_browser_showComments"');
369  $assigns['checkBoxAlphaSort'] = BackendUtility::getFuncCheck($this->id, 'SET[ts_browser_alphaSort]', $this->pObj->MOD_SETTINGS['ts_browser_alphaSort'] ?? '', '', '', 'id="checkTs_browser_alphaSort"');
370  if ($bType === 'setup') {
371  $assigns['dropdownDisplayConstants'] = BackendUtility::getDropdownMenu($this->id, 'SET[ts_browser_const]', $this->pObj->MOD_SETTINGS['ts_browser_const'] ?? '', $this->pObj->MOD_MENU['ts_browser_const']);
372  }
373 
374  // Conditions:
375  $assigns['hasConditions'] = is_array($this->templateService->sections) && !empty($this->templateService->sections);
376  $activeConditions = 0;
377  if (is_array($this->templateService->sections) && !empty($this->templateService->sections)) {
378  $tsConditions = [];
379  foreach ($this->templateService->sections as $key => $val) {
380  $isSet = (bool)($this->pObj->MOD_SETTINGS['tsbrowser_conditions'][$key] ?? false);
381  if ($isSet) {
382  $activeConditions++;
383  }
384 
385  $tsConditions[] = [
386  'key' => $key,
387  'value' => $val,
388  'label' => $this->templateService->substituteCMarkers(htmlspecialchars($val)),
389  'isSet' => $isSet,
390  ];
391  }
392  $assigns['tsConditions'] = $tsConditions;
393  }
394  $assigns['activeConditions'] = $activeConditions;
395  // Ending section displayoptions
396  }
397  $this->‪getPageRenderer()->loadRequireJsModule('TYPO3/CMS/Backend/Tooltip');
398  $view = GeneralUtility::makeInstance(StandaloneView::class);
399  $view->setTemplatePathAndFilename('EXT:tstemplate/Resources/Private/Templates/TemplateObjectBrowserModuleFunction.html');
400  $view->assignMultiple($assigns);
401 
402  return $view->render();
403  }
404 
410  protected function ‪addFlashMessage(FlashMessage $flashMessage)
411  {
412  $flashMessageService = GeneralUtility::makeInstance(FlashMessageService::class);
413  $defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier();
414  $defaultFlashMessageQueue->enqueue($flashMessage);
415  }
416 
420  protected function ‪getLanguageService(): ‪LanguageService
421  {
422  return ‪$GLOBALS['LANG'];
423  }
424 
429  {
430  return ‪$GLOBALS['BE_USER'];
431  }
432 
436  protected function ‪getPageRenderer(): PageRenderer
437  {
438  return GeneralUtility::makeInstance(PageRenderer::class);
439  }
440 }
‪TYPO3\CMS\Core\DataHandling\DataHandler
Definition: DataHandler.php:86
‪TYPO3\CMS\Core\Context\VisibilityAspect
Definition: VisibilityAspect.php:31
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\modMenu
‪array modMenu()
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:86
‪TYPO3\CMS\Core\Exception
Definition: Exception.php:21
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\getLanguageService
‪LanguageService getLanguageService()
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:416
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\$templateRow
‪array null $templateRow
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:48
‪TYPO3\CMS\Core\Exception
‪TYPO3\CMS\Core\Utility\RootlineUtility
Definition: RootlineUtility.php:38
‪TYPO3\CMS\Tstemplate\Controller
Definition: TemplateAnalyzerModuleFunctionController.php:16
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:53
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\addFlashMessage
‪addFlashMessage(FlashMessage $flashMessage)
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:406
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:40
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\main
‪string main()
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:166
‪TYPO3\CMS\Core\Authentication\AbstractUserAuthentication\pushModuleData
‪pushModuleData($module, $data, $noSave=0)
Definition: AbstractUserAuthentication.php:1034
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController
Definition: TypoScriptTemplateModuleController.php:51
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\getBackendUserAuthentication
‪BackendUserAuthentication getBackendUserAuthentication()
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:424
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\$templateService
‪ExtendedTemplateService $templateService
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:52
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\initialize_editor
‪bool initialize_editor($pageId, $template_uid=0)
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:139
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\$request
‪ServerRequestInterface $request
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:61
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:26
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:31
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\$id
‪$id
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:57
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\getPageRenderer
‪PageRenderer getPageRenderer()
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:432
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:40
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\init
‪init($pObj, ServerRequestInterface $request)
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:69
‪TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateObjectBrowserModuleFunctionController\$pObj
‪TypoScriptTemplateModuleController $pObj
Definition: TypoScriptTemplateObjectBrowserModuleFunctionController.php:43
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Core\Messaging\FlashMessageService
Definition: FlashMessageService.php:27
‪TYPO3\CMS\Core\Messaging\AbstractMessage\ERROR
‪const ERROR
Definition: AbstractMessage.php:31