‪TYPO3CMS  11.5
FrontendConfigurationManager.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
25 
33 {
35 
36  public function ‪__construct(
39  ) {
40  parent::__construct(‪$typoScriptService);
41  $this->flexFormService = ‪$flexFormService;
42  }
43 
49  public function ‪getTypoScriptSetup(): array
50  {
51  return ‪$GLOBALS['TSFE']->tmpl->setup ?? [];
52  }
53 
62  protected function ‪getPluginConfiguration(string ‪$extensionName, string ‪$pluginName = null): array
63  {
64  $setup = $this->‪getTypoScriptSetup();
65  $pluginConfiguration = [];
66  if (isset($setup['plugin.']['tx_' . strtolower(‪$extensionName) . '.']) && is_array($setup['plugin.']['tx_' . strtolower(‪$extensionName) . '.'])) {
67  $pluginConfiguration = $this->typoScriptService->convertTypoScriptArrayToPlainArray($setup['plugin.']['tx_' . strtolower(‪$extensionName) . '.']);
68  }
69  if (‪$pluginName !== null) {
70  $pluginSignature = strtolower(‪$extensionName . '_' . ‪$pluginName);
71  if (isset($setup['plugin.']['tx_' . $pluginSignature . '.']) && is_array($setup['plugin.']['tx_' . $pluginSignature . '.'])) {
73  $pluginConfiguration,
74  $this->typoScriptService->convertTypoScriptArrayToPlainArray($setup['plugin.']['tx_' . $pluginSignature . '.'])
75  );
76  }
77  }
78  return $pluginConfiguration;
79  }
80 
92  protected function ‪getControllerConfiguration(string ‪$extensionName, string ‪$pluginName): array
93  {
94  $controllerConfiguration = ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'][‪$extensionName]['plugins'][‪$pluginName]['controllers'] ?? [];
95  if (!is_array($controllerConfiguration)) {
96  $controllerConfiguration = [];
97  }
98  return $controllerConfiguration;
99  }
100 
109  protected function ‪getContextSpecificFrameworkConfiguration(array $frameworkConfiguration): array
110  {
111  $frameworkConfiguration = $this->‪overrideStoragePidIfStartingPointIsSet($frameworkConfiguration);
112  $frameworkConfiguration = $this->‪overrideConfigurationFromPlugin($frameworkConfiguration);
113  $frameworkConfiguration = $this->‪overrideConfigurationFromFlexForm($frameworkConfiguration);
114  return $frameworkConfiguration;
115  }
116 
124  protected function ‪overrideStoragePidIfStartingPointIsSet(array $frameworkConfiguration): array
125  {
126  $pages = $this->contentObject->data['pages'] ?? '';
127  if (is_string($pages) && $pages !== '') {
128  $list = [];
129  if ((int)($this->contentObject->data['recursive'] ?? 0) > 0) {
130  $explodedPages = ‪GeneralUtility::trimExplode(',', $pages);
131  foreach ($explodedPages as $pid) {
132  $pids = $this->contentObject->getTreeList($pid, $this->contentObject->data['recursive']);
133  if ($pids !== '') {
134  $list[] = $pids;
135  }
136  }
137  }
138  if (!empty($list)) {
139  $pages = $pages . ',' . implode(',', $list);
140  }
141  ‪ArrayUtility::mergeRecursiveWithOverrule($frameworkConfiguration, [
142  'persistence' => [
143  'storagePid' => $pages,
144  ],
145  ]);
146  }
147  return $frameworkConfiguration;
148  }
149 
156  protected function ‪overrideConfigurationFromPlugin(array $frameworkConfiguration): array
157  {
158  if (!isset($frameworkConfiguration['extensionName']) || !isset($frameworkConfiguration['pluginName'])) {
159  return $frameworkConfiguration;
160  }
161 
162  $setup = $this->‪getTypoScriptSetup();
163  $pluginSignature = strtolower($frameworkConfiguration['extensionName'] . '_' . $frameworkConfiguration['pluginName']);
164  $pluginConfiguration = $setup['plugin.']['tx_' . $pluginSignature . '.'] ?? null;
165  if (is_array($pluginConfiguration)) {
166  $pluginConfiguration = $this->typoScriptService->convertTypoScriptArrayToPlainArray($pluginConfiguration);
167  $frameworkConfiguration = $this->‪mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $pluginConfiguration, 'settings');
168  $frameworkConfiguration = $this->‪mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $pluginConfiguration, 'persistence');
169  $frameworkConfiguration = $this->‪mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $pluginConfiguration, 'view');
170  }
171  return $frameworkConfiguration;
172  }
173 
182  protected function ‪overrideConfigurationFromFlexForm(array $frameworkConfiguration): array
183  {
184  $flexFormConfiguration = $this->contentObject->data['pi_flexform'] ?? [];
185  if (is_string($flexFormConfiguration)) {
186  if ($flexFormConfiguration !== '') {
187  $flexFormConfiguration = $this->flexFormService->convertFlexFormContentToArray($flexFormConfiguration);
188  } else {
189  $flexFormConfiguration = [];
190  }
191  }
192  if (is_array($flexFormConfiguration) && !empty($flexFormConfiguration)) {
193  $frameworkConfiguration = $this->‪mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $flexFormConfiguration, 'settings');
194  $frameworkConfiguration = $this->‪mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $flexFormConfiguration, 'persistence');
195  $frameworkConfiguration = $this->‪mergeConfigurationIntoFrameworkConfiguration($frameworkConfiguration, $flexFormConfiguration, 'view');
196  $frameworkConfiguration = $this->‪overrideControllerConfigurationWithSwitchableControllerActionsFromFlexForm($frameworkConfiguration, $flexFormConfiguration);
197  }
198  return $frameworkConfiguration;
199  }
200 
209  protected function ‪mergeConfigurationIntoFrameworkConfiguration(array $frameworkConfiguration, array ‪$configuration, string $configurationPartName): array
210  {
211  if (isset(‪$configuration[$configurationPartName]) && is_array(‪$configuration[$configurationPartName])) {
212  if (isset($frameworkConfiguration[$configurationPartName]) && is_array($frameworkConfiguration[$configurationPartName])) {
213  ‪ArrayUtility::mergeRecursiveWithOverrule($frameworkConfiguration[$configurationPartName], ‪$configuration[$configurationPartName]);
214  } else {
215  $frameworkConfiguration[$configurationPartName] = ‪$configuration[$configurationPartName];
216  }
217  }
218  return $frameworkConfiguration;
219  }
220 
231  protected function ‪overrideControllerConfigurationWithSwitchableControllerActionsFromFlexForm(array $frameworkConfiguration, array $flexFormConfiguration): array
232  {
233  if (!isset($flexFormConfiguration['switchableControllerActions']) || is_array($flexFormConfiguration['switchableControllerActions'])) {
234  return $frameworkConfiguration;
235  }
236  // As "," is the flexForm field value delimiter, we need to use ";" as in-field delimiter. That's why we need to replace ; by , first.
237  // The expected format is: "Controller1->action2;Controller2->action3;Controller2->action1"
238  $switchableControllerActionPartsFromFlexForm = ‪GeneralUtility::trimExplode(',', str_replace(';', ',', $flexFormConfiguration['switchableControllerActions']), true);
239  $overriddenControllerConfiguration = [];
240  foreach ($switchableControllerActionPartsFromFlexForm as $switchableControllerActionPartFromFlexForm) {
241  [$controller, $action] = ‪GeneralUtility::trimExplode('->', $switchableControllerActionPartFromFlexForm);
242  if (empty($controller) || empty($action)) {
243  throw new ‪ParseErrorException('Controller or action were empty when overriding switchableControllerActions from flexForm.', 1257146403);
244  }
245  $overriddenControllerConfiguration[$controller][] = $action;
246  }
247  if (!empty($overriddenControllerConfiguration)) {
248  $this->‪overrideControllerConfigurationWithSwitchableControllerActions($frameworkConfiguration, $overriddenControllerConfiguration);
249  }
250  return $frameworkConfiguration;
251  }
252 
260  protected function ‪getRecursiveStoragePids(array $storagePids, int $recursionDepth = 0): array
261  {
262  array_map('intval', $storagePids);
263 
264  if ($recursionDepth <= 0) {
265  return $storagePids;
266  }
267 
268  $recursiveStoragePids = [];
269  foreach ($storagePids as $startPid) {
270  $pids = $this->‪getContentObject()->getTreeList($startPid, $recursionDepth, 0);
271  foreach (‪GeneralUtility::intExplode(',', $pids, true) as $pid) {
272  $recursiveStoragePids[] = $pid;
273  }
274  }
275  return array_unique($recursiveStoragePids);
276  }
277 }
‪TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode
‪static list< string > trimExplode($delim, $string, $removeEmptyValues=false, $limit=0)
Definition: GeneralUtility.php:999
‪TYPO3\CMS\Extbase\Configuration\AbstractConfigurationManager\$pluginName
‪string $pluginName
Definition: AbstractConfigurationManager.php:62
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\__construct
‪__construct(TypoScriptService $typoScriptService, FlexFormService $flexFormService)
Definition: FrontendConfigurationManager.php:36
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\$flexFormService
‪FlexFormService $flexFormService
Definition: FrontendConfigurationManager.php:34
‪TYPO3\CMS\Core\Utility\ArrayUtility\mergeRecursiveWithOverrule
‪static mergeRecursiveWithOverrule(array &$original, array $overrule, $addKeys=true, $includeEmptyValues=true, $enableUnsetFeature=true)
Definition: ArrayUtility.php:654
‪TYPO3\CMS\Extbase\Configuration\AbstractConfigurationManager
Definition: AbstractConfigurationManager.php:34
‪TYPO3\CMS\Extbase\Configuration\AbstractConfigurationManager\$typoScriptService
‪TypoScriptService $typoScriptService
Definition: AbstractConfigurationManager.php:50
‪TYPO3\CMS\Core\Service\FlexFormService
Definition: FlexFormService.php:25
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager
Definition: FrontendConfigurationManager.php:33
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\getControllerConfiguration
‪array getControllerConfiguration(string $extensionName, string $pluginName)
Definition: FrontendConfigurationManager.php:92
‪TYPO3\CMS\Extbase\Configuration\AbstractConfigurationManager\$configuration
‪array $configuration
Definition: AbstractConfigurationManager.php:44
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\getContextSpecificFrameworkConfiguration
‪array getContextSpecificFrameworkConfiguration(array $frameworkConfiguration)
Definition: FrontendConfigurationManager.php:109
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\overrideControllerConfigurationWithSwitchableControllerActionsFromFlexForm
‪array overrideControllerConfigurationWithSwitchableControllerActionsFromFlexForm(array $frameworkConfiguration, array $flexFormConfiguration)
Definition: FrontendConfigurationManager.php:231
‪TYPO3\CMS\Extbase\Configuration\Exception\ParseErrorException
Definition: ParseErrorException.php:25
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\overrideConfigurationFromPlugin
‪array overrideConfigurationFromPlugin(array $frameworkConfiguration)
Definition: FrontendConfigurationManager.php:156
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\getPluginConfiguration
‪array getPluginConfiguration(string $extensionName, string $pluginName=null)
Definition: FrontendConfigurationManager.php:62
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\mergeConfigurationIntoFrameworkConfiguration
‪array mergeConfigurationIntoFrameworkConfiguration(array $frameworkConfiguration, array $configuration, string $configurationPartName)
Definition: FrontendConfigurationManager.php:209
‪TYPO3\CMS\Core\TypoScript\TypoScriptService
Definition: TypoScriptService.php:25
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\overrideConfigurationFromFlexForm
‪array overrideConfigurationFromFlexForm(array $frameworkConfiguration)
Definition: FrontendConfigurationManager.php:182
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\getRecursiveStoragePids
‪array int[] getRecursiveStoragePids(array $storagePids, int $recursionDepth=0)
Definition: FrontendConfigurationManager.php:260
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:24
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\overrideStoragePidIfStartingPointIsSet
‪array overrideStoragePidIfStartingPointIsSet(array $frameworkConfiguration)
Definition: FrontendConfigurationManager.php:124
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Utility\GeneralUtility\intExplode
‪static int[] intExplode($delimiter, $string, $removeEmptyValues=false, $limit=0)
Definition: GeneralUtility.php:927
‪TYPO3\CMS\Extbase\Configuration\AbstractConfigurationManager\getContentObject
‪ContentObjectRenderer getContentObject()
Definition: AbstractConfigurationManager.php:93
‪TYPO3\CMS\Extbase\Configuration\AbstractConfigurationManager\overrideControllerConfigurationWithSwitchableControllerActions
‪overrideControllerConfigurationWithSwitchableControllerActions(array &$frameworkConfiguration, array $switchableControllerActions)
Definition: AbstractConfigurationManager.php:243
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Extbase\Configuration
Definition: AbstractConfigurationManager.php:18
‪TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager\getTypoScriptSetup
‪array getTypoScriptSetup()
Definition: FrontendConfigurationManager.php:49
‪TYPO3\CMS\Extbase\Configuration\AbstractConfigurationManager\$extensionName
‪string $extensionName
Definition: AbstractConfigurationManager.php:56