‪TYPO3CMS  10.4
SettingsController.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 
20 use Psr\Http\Message\ResponseInterface;
21 use Psr\Http\Message\ServerRequestInterface;
22 use TYPO3\CMS\Core\Configuration\ConfigurationManager;
35 use TYPO3\CMS\Core\Package\PackageManager;
42 
48 {
52  private ‪$packageManager;
53 
58 
63 
64  public function ‪__construct(
65  PackageManager ‪$packageManager,
68  ) {
69  $this->packageManager = ‪$packageManager;
70  $this->extensionConfigurationService = ‪$extensionConfigurationService;
71  $this->languageServiceFactory = ‪$languageServiceFactory;
72  }
73 
80  public function ‪cardsAction(ServerRequestInterface $request): ResponseInterface
81  {
82  $view = $this->‪initializeStandaloneView($request, 'Settings/Cards.html');
83  return new ‪JsonResponse([
84  'success' => true,
85  'html' => $view->render(),
86  ]);
87  }
88 
95  public function ‪changeInstallToolPasswordGetDataAction(ServerRequestInterface $request): ResponseInterface
96  {
97  $view = $this->‪initializeStandaloneView($request, 'Settings/ChangeInstallToolPassword.html');
98  $formProtection = ‪FormProtectionFactory::get(InstallToolFormProtection::class);
99  $view->assignMultiple([
100  'changeInstallToolPasswordToken' => $formProtection->generateToken('installTool', 'changeInstallToolPassword'),
101  ]);
102  return new ‪JsonResponse([
103  'success' => true,
104  'html' => $view->render(),
105  'buttons' => [
106  [
107  'btnClass' => 'btn-default t3js-changeInstallToolPassword-change',
108  'text' => 'Set new password',
109  ],
110  ],
111  ]);
112  }
113 
120  public function ‪changeInstallToolPasswordAction(ServerRequestInterface $request): ResponseInterface
121  {
122  $password = $request->getParsedBody()['install']['password'] ?? '';
123  $passwordCheck = $request->getParsedBody()['install']['passwordCheck'];
124  $messageQueue = new ‪FlashMessageQueue('install');
125 
126  if ($password !== $passwordCheck) {
127  $messageQueue->enqueue(new ‪FlashMessage(
128  'Given passwords do not match.',
129  'Install tool password not changed',
131  ));
132  } elseif (strlen($password) < 8) {
133  $messageQueue->enqueue(new ‪FlashMessage(
134  'Given password must be at least eight characters long.',
135  'Install tool password not changed',
137  ));
138  } else {
139  $hashInstance = GeneralUtility::makeInstance(PasswordHashFactory::class)->getDefaultHashInstance('BE');
140  $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
141  $configurationManager->setLocalConfigurationValueByPath(
142  'BE/installToolPassword',
143  $hashInstance->getHashedPassword($password)
144  );
145  $messageQueue->enqueue(new ‪FlashMessage(
146  'The Install tool password has been changed successfully.',
147  'Install tool password changed'
148  ));
149  }
150  return new ‪JsonResponse([
151  'success' => true,
152  'status' => $messageQueue,
153  ]);
154  }
155 
162  public function ‪systemMaintainerGetListAction(ServerRequestInterface $request): ResponseInterface
163  {
164  $view = $this->‪initializeStandaloneView($request, 'Settings/SystemMaintainer.html');
165  $formProtection = ‪FormProtectionFactory::get(InstallToolFormProtection::class);
166  $view->assignMultiple([
167  'systemMaintainerWriteToken' => $formProtection->generateToken('installTool', 'systemMaintainerWrite'),
168  'systemMaintainerIsDevelopmentContext' => ‪Environment::getContext()->‪isDevelopment(),
169  ]);
170 
171  $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
172 
173  // We have to respect the enable fields here by our own because no TCA is loaded
174  $queryBuilder = $connectionPool->getQueryBuilderForTable('be_users');
175  $queryBuilder->getRestrictions()->removeAll();
176  $users = $queryBuilder
177  ->select('uid', 'username', 'disable', 'starttime', 'endtime')
178  ->from('be_users')
179  ->where(
180  $queryBuilder->expr()->andX(
181  $queryBuilder->expr()->eq('deleted', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
182  $queryBuilder->expr()->eq('admin', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)),
183  $queryBuilder->expr()->neq('username', $queryBuilder->createNamedParameter('_cli_', \PDO::PARAM_STR))
184  )
185  )
186  ->orderBy('uid')
187  ->execute()
188  ->fetchAll();
189 
190  $systemMaintainerList = ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['systemMaintainers'] ?? [];
191  $systemMaintainerList = array_map('intval', $systemMaintainerList);
192  $currentTime = time();
193  foreach ($users as &$user) {
194  $user['disable'] = $user['disable'] ||
195  ((int)$user['starttime'] !== 0 && $user['starttime'] > $currentTime) ||
196  ((int)$user['endtime'] !== 0 && $user['endtime'] < $currentTime);
197  $user['isSystemMaintainer'] = in_array((int)$user['uid'], $systemMaintainerList, true);
198  }
199  return new ‪JsonResponse([
200  'success' => true,
201  'users' => $users,
202  'html' => $view->render(),
203  'buttons' => [
204  [
205  'btnClass' => 'btn-default t3js-systemMaintainer-write',
206  'text' => 'Save system maintainer list',
207  ],
208  ],
209  ]);
210  }
211 
218  public function ‪systemMaintainerWriteAction(ServerRequestInterface $request): ResponseInterface
219  {
220  // Sanitize given user list and write out
221  $newUserList = [];
222  $users = $request->getParsedBody()['install']['users'] ?? [];
223  if (is_array($users)) {
224  foreach ($users as $uid) {
226  $newUserList[] = (int)$uid;
227  }
228  }
229  }
230 
231  $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('be_users');
232  $queryBuilder->getRestrictions()->removeAll();
233 
234  $validatedUserList = $queryBuilder
235  ->select('uid')
236  ->from('be_users')
237  ->where(
238  $queryBuilder->expr()->andX(
239  $queryBuilder->expr()->eq('deleted', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
240  $queryBuilder->expr()->eq('admin', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)),
241  $queryBuilder->expr()->in('uid', $queryBuilder->createNamedParameter($newUserList, Connection::PARAM_INT_ARRAY))
242  )
243  )->execute()->fetchAll();
244 
245  $validatedUserList = array_column($validatedUserList, 'uid');
246  $validatedUserList = array_map('intval', $validatedUserList);
247 
248  $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
249  $configurationManager->setLocalConfigurationValuesByPathValuePairs(
250  ['SYS/systemMaintainers' => $validatedUserList]
251  );
252 
253  $messages = [];
254  if (empty($validatedUserList)) {
255  $messages[] = new ‪FlashMessage(
256  'The system has no maintainers enabled anymore. Please use the standalone Admin Tools from now on.',
257  'Cleared system maintainer list',
259  );
260  } else {
261  $messages[] = new ‪FlashMessage(
262  'New system maintainer uid list: ' . implode(', ', $validatedUserList),
263  'Updated system maintainers',
265  );
266  }
267  return new ‪JsonResponse([
268  'success' => true,
269  'status' => $messages
270  ]);
271  }
272 
279  public function ‪localConfigurationGetContentAction(ServerRequestInterface $request): ResponseInterface
280  {
281  $localConfigurationValueService = new ‪LocalConfigurationValueService();
282  $formProtection = ‪FormProtectionFactory::get(InstallToolFormProtection::class);
283  $view = $this->‪initializeStandaloneView($request, 'Settings/LocalConfigurationGetContent.html');
284  $view->assignMultiple([
285  'localConfigurationWriteToken' => $formProtection->generateToken('installTool', 'localConfigurationWrite'),
286  'localConfigurationData' => $localConfigurationValueService->getCurrentConfigurationData(),
287  ]);
288  return new ‪JsonResponse([
289  'success' => true,
290  'html' => $view->render(),
291  'buttons' => [
292  [
293  'btnClass' => 'btn-default t3js-localConfiguration-write',
294  'text' => 'Write configuration',
295  ],
296  [
297  'btnClass' => 'btn-default t3js-localConfiguration-toggleAll',
298  'text' => 'Toggle All',
299  ],
300  ],
301  ]);
302  }
303 
311  public function ‪localConfigurationWriteAction(ServerRequestInterface $request): ResponseInterface
312  {
313  $settings = $request->getParsedBody()['install']['configurationValues'];
314  if (!is_array($settings) || empty($settings)) {
315  throw new \RuntimeException(
316  'Expected value array not found',
317  1502282283
318  );
319  }
320  $localConfigurationValueService = new ‪LocalConfigurationValueService();
321  $messageQueue = $localConfigurationValueService->updateLocalConfigurationValues($settings);
322  if ($messageQueue->count() === 0) {
323  $messageQueue->enqueue(new ‪FlashMessage(
324  'No configuration changes have been detected in the submitted form.',
325  'Configuration not updated',
327  ));
328  }
329  return new ‪JsonResponse([
330  'success' => true,
331  'status' => $messageQueue,
332  ]);
333  }
334 
341  public function ‪presetsGetContentAction(ServerRequestInterface $request): ResponseInterface
342  {
343  $view = $this->‪initializeStandaloneView($request, 'Settings/PresetsGetContent.html');
344  $presetFeatures = GeneralUtility::makeInstance(FeatureManager::class);
345  $presetFeatures = $presetFeatures->getInitializedFeatures($request->getParsedBody()['install']['values'] ?? []);
346  $formProtection = ‪FormProtectionFactory::get(InstallToolFormProtection::class);
347  $view->assignMultiple([
348  'presetsActivateToken' => $formProtection->generateToken('installTool', 'presetsActivate'),
349  // This action is called again from within the card itself if a custom image path is supplied
350  'presetsGetContentToken' => $formProtection->generateToken('installTool', 'presetsGetContent'),
351  'presetFeatures' => $presetFeatures,
352  ]);
353  return new ‪JsonResponse([
354  'success' => true,
355  'html' => $view->render(),
356  'buttons' => [
357  [
358  'btnClass' => 'btn-default t3js-presets-activate',
359  'text' => 'Activate preset',
360  ],
361  ],
362  ]);
363  }
364 
371  public function ‪presetsActivateAction(ServerRequestInterface $request): ResponseInterface
372  {
373  $messages = new ‪FlashMessageQueue('install');
374  $configurationManager = new ConfigurationManager();
375  $featureManager = new ‪FeatureManager();
376  $configurationValues = $featureManager->getConfigurationForSelectedFeaturePresets($request->getParsedBody()['install']['values'] ?? []);
377  if (!empty($configurationValues)) {
378  $configurationManager->setLocalConfigurationValuesByPathValuePairs($configurationValues);
379  $messageBody = [];
380  foreach ($configurationValues as $configurationKey => $configurationValue) {
381  if (is_array($configurationValue)) {
382  $configurationValue = json_encode($configurationValue);
383  }
384  $messageBody[] = '\'' . $configurationKey . '\' => \'' . $configurationValue . '\'';
385  }
386  $messages->enqueue(new ‪FlashMessage(
387  implode(', ', $messageBody),
388  'Configuration written'
389  ));
390  } else {
391  $messages->enqueue(new ‪FlashMessage(
392  '',
393  'No configuration change selected',
395  ));
396  }
397  return new ‪JsonResponse([
398  'success' => true,
399  'status' => $messages,
400  ]);
401  }
402 
409  public function ‪extensionConfigurationGetContentAction(ServerRequestInterface $request): ResponseInterface
410  {
411  // Extension configuration needs initialized $GLOBALS['LANG']
412  ‪$GLOBALS['LANG'] = $this->languageServiceFactory->create('default');
413  $extensionsWithConfigurations = [];
414  $activePackages = $this->packageManager->getActivePackages();
415  foreach ($activePackages as $extensionKey => $activePackage) {
416  if (@file_exists($activePackage->getPackagePath() . 'ext_conf_template.txt')) {
417  $extensionsWithConfigurations[$extensionKey] = [
418  'packageInfo' => $activePackage,
419  'configuration' => $this->extensionConfigurationService->getConfigurationPreparedForView($extensionKey),
420  ];
421  }
422  }
423  ksort($extensionsWithConfigurations);
424  $formProtection = ‪FormProtectionFactory::get(InstallToolFormProtection::class);
425  $view = $this->‪initializeStandaloneView($request, 'Settings/ExtensionConfigurationGetContent.html');
426  $view->assignMultiple([
427  'extensionsWithConfigurations' => $extensionsWithConfigurations,
428  'extensionConfigurationWriteToken' => $formProtection->generateToken('installTool', 'extensionConfigurationWrite'),
429  ]);
430  return new ‪JsonResponse([
431  'success' => true,
432  'html' => $view->render(),
433  ]);
434  }
435 
442  public function ‪extensionConfigurationWriteAction(ServerRequestInterface $request): ResponseInterface
443  {
444  $extensionKey = $request->getParsedBody()['install']['extensionKey'];
445  $configuration = $request->getParsedBody()['install']['extensionConfiguration'];
446  $nestedConfiguration = [];
447  foreach ($configuration as $configKey => $value) {
448  $nestedConfiguration = ‪ArrayUtility::setValueByPath($nestedConfiguration, $configKey, $value, '.');
449  }
450  (new ‪ExtensionConfiguration())->set($extensionKey, '', $nestedConfiguration);
451  $messages = [
452  new ‪FlashMessage(
453  'Successfully saved configuration for extension "' . $extensionKey . '".',
454  'Configuration saved',
456  )
457  ];
458  return new ‪JsonResponse([
459  'success' => true,
460  'status' => $messages,
461  ]);
462  }
463 
470  public function ‪featuresGetContentAction(ServerRequestInterface $request): ResponseInterface
471  {
472  $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
473  $configurationDescription = GeneralUtility::makeInstance(YamlFileLoader::class)
474  ->load($configurationManager->getDefaultConfigurationDescriptionFileLocation());
475  $allFeatures = ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['features'] ?? [];
476  $features = [];
477  foreach ($allFeatures as $featureName => $featureValue) {
478  // Only features that have a .yml description will be listed. There is currently no
479  // way for extensions to extend this, so feature toggles of non-core extensions are
480  // not listed here.
481  if (isset($configurationDescription['SYS']['items']['features']['items'][$featureName]['description'])) {
482  $default = $configurationManager->getDefaultConfigurationValueByPath('SYS/features/' . $featureName);
483  $features[] = [
484  'label' => ucfirst(str_replace(['_', '.'], ' ', strtolower(‪GeneralUtility::camelCaseToLowerCaseUnderscored(preg_replace('/\./', ': ', $featureName, 1))))),
485  'name' => $featureName,
486  'description' => $configurationDescription['SYS']['items']['features']['items'][$featureName]['description'],
487  'default' => $default,
488  'value' => $featureValue,
489  ];
490  }
491  }
492  $formProtection = ‪FormProtectionFactory::get(InstallToolFormProtection::class);
493  $view = $this->‪initializeStandaloneView($request, 'Settings/FeaturesGetContent.html');
494  $view->assignMultiple([
495  'features' => $features,
496  'featuresSaveToken' => $formProtection->generateToken('installTool', 'featuresSave'),
497  ]);
498  return new ‪JsonResponse([
499  'success' => true,
500  'html' => $view->render(),
501  'buttons' => [
502  [
503  'btnClass' => 'btn-default t3js-features-save',
504  'text' => 'Save',
505  ],
506  ],
507  ]);
508  }
509 
516  public function ‪featuresSaveAction(ServerRequestInterface $request): ResponseInterface
517  {
518  $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
519  $enabledFeaturesFromPost = $request->getParsedBody()['install']['values'] ?? [];
520  $allFeatures = ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['features'] ?? [];
521  $configurationDescription = GeneralUtility::makeInstance(YamlFileLoader::class)
522  ->load($configurationManager->getDefaultConfigurationDescriptionFileLocation());
523  foreach (array_keys($allFeatures) as $featureName) {
524  // Only features that have a .yml description will be listed. There is currently no
525  // way for extensions to extend this, so feature toggles of non-core extensions are
526  // not considered.
527  if (isset($configurationDescription['SYS']['items']['features']['items'][$featureName]['description'])) {
528  if (isset($enabledFeaturesFromPost[$featureName])) {
529  $configurationManager->enableFeature($featureName);
530  } else {
531  $configurationManager->disableFeature($featureName);
532  }
533  }
534  }
535  $configurationManager->exportConfiguration();
536 
537  $allFeaturesUpdated = ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['features'] ?? [];
538  $changedFeatures = array_diff_assoc($allFeaturesUpdated, $allFeatures);
539  $messages = [
540  new ‪FlashMessage(
541  'Successfully updated the following feature toggles: ' . implode(', ', array_keys($changedFeatures)),
542  'Features updated',
544  )
545  ];
546  return new ‪JsonResponse([
547  'success' => true,
548  'status' => $messages,
549  ]);
550  }
551 }
‪TYPO3\CMS\Core\Localization\LanguageServiceFactory
Definition: LanguageServiceFactory.php:26
‪TYPO3\CMS\Core\Crypto\PasswordHashing\PasswordHashFactory
Definition: PasswordHashFactory.php:27
‪TYPO3\CMS\Install\Controller\AbstractController\initializeStandaloneView
‪StandaloneView initializeStandaloneView(ServerRequestInterface $request, string $templatePath)
Definition: AbstractController.php:40
‪TYPO3\CMS\Core\FormProtection\FormProtectionFactory\get
‪static TYPO3 CMS Core FormProtection AbstractFormProtection get($classNameOrType='default',... $constructorArguments)
Definition: FormProtectionFactory.php:74
‪TYPO3\CMS\Core\Utility\MathUtility\canBeInterpretedAsInteger
‪static bool canBeInterpretedAsInteger($var)
Definition: MathUtility.php:74
‪TYPO3\CMS\Install\Configuration\FeatureManager
Definition: FeatureManager.php:30
‪TYPO3\CMS\Install\Controller\SettingsController\featuresGetContentAction
‪ResponseInterface featuresGetContentAction(ServerRequestInterface $request)
Definition: SettingsController.php:467
‪TYPO3\CMS\Core\Configuration\ExtensionConfiguration
Definition: ExtensionConfiguration.php:45
‪TYPO3\CMS\Install\Controller\SettingsController\localConfigurationGetContentAction
‪ResponseInterface localConfigurationGetContentAction(ServerRequestInterface $request)
Definition: SettingsController.php:276
‪TYPO3\CMS\Install\Service\ExtensionConfigurationService
Definition: ExtensionConfigurationService.php:36
‪TYPO3\CMS\Install\Controller\SettingsController\__construct
‪__construct(PackageManager $packageManager, ExtensionConfigurationService $extensionConfigurationService, LanguageServiceFactory $languageServiceFactory)
Definition: SettingsController.php:61
‪TYPO3\CMS\Install\Controller\SettingsController\$extensionConfigurationService
‪ExtensionConfigurationService $extensionConfigurationService
Definition: SettingsController.php:55
‪TYPO3\CMS\Core\Utility\GeneralUtility\camelCaseToLowerCaseUnderscored
‪static string camelCaseToLowerCaseUnderscored($string)
Definition: GeneralUtility.php:914
‪TYPO3\CMS\Install\Controller\SettingsController\systemMaintainerGetListAction
‪ResponseInterface systemMaintainerGetListAction(ServerRequestInterface $request)
Definition: SettingsController.php:159
‪TYPO3\CMS\Install\Controller\SettingsController\presetsGetContentAction
‪ResponseInterface presetsGetContentAction(ServerRequestInterface $request)
Definition: SettingsController.php:338
‪TYPO3\CMS\Core\FormProtection\InstallToolFormProtection
Definition: InstallToolFormProtection.php:61
‪TYPO3\CMS\Core\Core\Environment\getContext
‪static ApplicationContext getContext()
Definition: Environment.php:133
‪TYPO3\CMS\Core\Messaging\AbstractMessage\WARNING
‪const WARNING
Definition: AbstractMessage.php:30
‪TYPO3\CMS\Install\Controller\SettingsController\extensionConfigurationGetContentAction
‪ResponseInterface extensionConfigurationGetContentAction(ServerRequestInterface $request)
Definition: SettingsController.php:406
‪TYPO3\CMS\Install\Controller\SettingsController\changeInstallToolPasswordGetDataAction
‪ResponseInterface changeInstallToolPasswordGetDataAction(ServerRequestInterface $request)
Definition: SettingsController.php:92
‪TYPO3\CMS\Install\Controller\SettingsController\cardsAction
‪ResponseInterface cardsAction(ServerRequestInterface $request)
Definition: SettingsController.php:77
‪TYPO3\CMS\Install\Controller\SettingsController\$languageServiceFactory
‪LanguageServiceFactory $languageServiceFactory
Definition: SettingsController.php:59
‪TYPO3\CMS\Install\Controller
Definition: AbstractController.php:18
‪TYPO3\CMS\Install\Controller\SettingsController\changeInstallToolPasswordAction
‪ResponseInterface changeInstallToolPasswordAction(ServerRequestInterface $request)
Definition: SettingsController.php:117
‪TYPO3\CMS\Install\Controller\SettingsController\featuresSaveAction
‪ResponseInterface featuresSaveAction(ServerRequestInterface $request)
Definition: SettingsController.php:513
‪TYPO3\CMS\Install\Controller\SettingsController\$packageManager
‪PackageManager $packageManager
Definition: SettingsController.php:51
‪TYPO3\CMS\Install\Controller\SettingsController\localConfigurationWriteAction
‪ResponseInterface localConfigurationWriteAction(ServerRequestInterface $request)
Definition: SettingsController.php:308
‪TYPO3\CMS\Core\Core\ApplicationContext\isDevelopment
‪bool isDevelopment()
Definition: ApplicationContext.php:96
‪TYPO3\CMS\Core\Messaging\AbstractMessage\OK
‪const OK
Definition: AbstractMessage.php:29
‪TYPO3\CMS\Core\Utility\ArrayUtility\setValueByPath
‪static array setValueByPath(array $array, $path, $value, $delimiter='/')
Definition: ArrayUtility.php:272
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:36
‪TYPO3\CMS\Core\Configuration\Loader\YamlFileLoader
Definition: YamlFileLoader.php:48
‪TYPO3\CMS\Core\Messaging\AbstractMessage\INFO
‪const INFO
Definition: AbstractMessage.php:28
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:24
‪TYPO3\CMS\Core\FormProtection\FormProtectionFactory
Definition: FormProtectionFactory.php:47
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:24
‪TYPO3\CMS\Core\Http\JsonResponse
Definition: JsonResponse.php:26
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:40
‪TYPO3\CMS\Core\Utility\MathUtility
Definition: MathUtility.php:22
‪TYPO3\CMS\Install\Controller\AbstractController
Definition: AbstractController.php:31
‪TYPO3\CMS\Install\Controller\SettingsController
Definition: SettingsController.php:48
‪TYPO3\CMS\Install\Service\LocalConfigurationValueService
Definition: LocalConfigurationValueService.php:33
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Install\Controller\SettingsController\systemMaintainerWriteAction
‪ResponseInterface systemMaintainerWriteAction(ServerRequestInterface $request)
Definition: SettingsController.php:215
‪TYPO3\CMS\Core\Messaging\FlashMessageQueue
Definition: FlashMessageQueue.php:29
‪TYPO3\CMS\Core\Messaging\AbstractMessage\ERROR
‪const ERROR
Definition: AbstractMessage.php:31
‪TYPO3\CMS\Install\Controller\SettingsController\presetsActivateAction
‪ResponseInterface presetsActivateAction(ServerRequestInterface $request)
Definition: SettingsController.php:368
‪TYPO3\CMS\Install\Controller\SettingsController\extensionConfigurationWriteAction
‪ResponseInterface extensionConfigurationWriteAction(ServerRequestInterface $request)
Definition: SettingsController.php:439