‪TYPO3CMS  ‪main
InstallerController.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 Doctrine\DBAL\DriverManager;
21 use Psr\Http\Message\ResponseInterface;
22 use Psr\Http\Message\ServerRequestInterface;
25 use TYPO3\CMS\Core\Configuration\ConfigurationManager;
61 use TYPO3Fluid\Fluid\View\TemplateView as FluidTemplateView;
62 
70 {
72 
73  public function ‪__construct(
74  private readonly ‪LateBootService $lateBootService,
75  private readonly ‪SilentConfigurationUpgradeService $silentConfigurationUpgradeService,
76  private readonly ‪SilentTemplateFileUpgradeService $silentTemplateFileUpgradeService,
77  private readonly ConfigurationManager $configurationManager,
78  private readonly ‪FailsafePackageManager $packageManager,
79  private readonly ‪VerifyHostHeader $verifyHostHeader,
80  private readonly ‪FormProtectionFactory $formProtectionFactory,
81  private readonly ‪SetupService $setupService,
82  private readonly ‪SetupDatabaseService $setupDatabaseService,
83  ) {}
84 
88  public function ‪initAction(ServerRequestInterface $request): ResponseInterface
89  {
90  $bust = ‪$GLOBALS['EXEC_TIME'];
91  if (!‪Environment::getContext()->isDevelopment()) {
93  }
94  $packages = [
95  $this->packageManager->getPackage('core'),
96  $this->packageManager->getPackage('backend'),
97  $this->packageManager->getPackage('install'),
98  ];
99  $importMap = new ImportMap($packages);
100  $sitePath = $request->getAttribute('normalizedParams')->getSitePath();
101  $initModule = $sitePath . $importMap->resolveImport('@typo3/install/init-installer.js');
102  $view = $this->‪initializeView();
103  $view->assign('bust', $bust);
104  $view->assign('initModule', $initModule);
105  $nonce = new ConsumableNonce();
106  $view->assign('importmap', $importMap->render($sitePath, $nonce));
107 
108  return new HtmlResponse(
109  $view->render('Installer/Init'),
110  200,
111  [
112  'Content-Security-Policy' => $this->createContentSecurityPolicy()->compile($nonce),
113  'Cache-Control' => 'no-cache, no-store',
114  'Pragma' => 'no-cache',
115  ]
116  );
117  }
118 
122  public function ‪mainLayoutAction(ServerRequestInterface $request): ResponseInterface
123  {
124  $view = $this->‪initializeView();
125  return new JsonResponse([
126  'success' => true,
127  'html' => $view->render('Installer/MainLayout'),
128  ]);
129  }
130 
134  public function ‪showInstallerNotAvailableAction(): ResponseInterface
135  {
136  $view = $this->‪initializeView();
137  return new JsonResponse([
138  'success' => true,
139  'html' => $view->render('Installer/ShowInstallerNotAvailable'),
140  ]);
141  }
142 
146  public function ‪checkEnvironmentAndFoldersAction(): ResponseInterface
147  {
148  return new JsonResponse([
149  'success' => @is_file($this->configurationManager->getSystemConfigurationFileLocation()),
150  ]);
151  }
152 
156  public function ‪showEnvironmentAndFoldersAction(ServerRequestInterface $request): ResponseInterface
157  {
158  $view = $this->‪initializeView();
159  $systemCheckMessageQueue = new FlashMessageQueue('install');
160  $checkMessages = (new Check())->getStatus();
161  foreach ($checkMessages as $message) {
162  $systemCheckMessageQueue->enqueue($message);
163  }
164  $setupCheckMessages = (new SetupCheck())->getStatus();
165  foreach ($setupCheckMessages as $message) {
166  $systemCheckMessageQueue->enqueue($message);
167  }
168  $folderStructureFactory = GeneralUtility::makeInstance(DefaultFactory::class);
169  $structureFacade = $folderStructureFactory->getStructure(‪WebserverType::fromRequest($request));
170  $structureMessageQueue = $structureFacade->getStatus();
171  return new JsonResponse([
172  'success' => true,
173  'html' => $view->render('Installer/ShowEnvironmentAndFolders'),
174  'environmentStatusErrors' => $systemCheckMessageQueue->getAllMessages(ContextualFeedbackSeverity::ERROR),
175  'environmentStatusWarnings' => $systemCheckMessageQueue->getAllMessages(ContextualFeedbackSeverity::WARNING),
176  'structureErrors' => $structureMessageQueue->getAllMessages(ContextualFeedbackSeverity::ERROR),
177  ]);
178  }
179 
183  public function ‪executeEnvironmentAndFoldersAction(ServerRequestInterface $request): ResponseInterface
184  {
185  $folderStructureFactory = GeneralUtility::makeInstance(DefaultFactory::class);
186  $structureFacade = $folderStructureFactory->getStructure(‪WebserverType::fromRequest($request));
187  $structureFixMessageQueue = $structureFacade->fix();
188  $errorsFromStructure = $structureFixMessageQueue->getAllMessages(ContextualFeedbackSeverity::ERROR);
189 
190  if (@is_dir(‪Environment::getLegacyConfigPath())) {
191  $this->configurationManager->createLocalConfigurationFromFactoryConfiguration();
192  // Create a PackageStates.php with all packages activated marked as "part of factory default"
193  $this->packageManager->recreatePackageStatesFileIfMissing(true);
194  $extensionConfiguration = new ExtensionConfiguration();
195  $extensionConfiguration->synchronizeExtConfTemplateWithLocalConfigurationOfAllExtensions();
196 
197  return new JsonResponse([
198  'success' => true,
199  ]);
200  }
201  return new JsonResponse([
202  'success' => false,
203  'status' => $errorsFromStructure,
204  ]);
205  }
206 
210  public function ‪checkTrustedHostsPatternAction(ServerRequestInterface $request): ResponseInterface
211  {
212  $serverParams = $request->getServerParams();
213  $host = $serverParams['HTTP_HOST'] ?? '';
214 
215  return new JsonResponse([
216  'success' => $this->verifyHostHeader->isAllowedHostHeaderValue($host, $serverParams),
217  ]);
218  }
219 
223  public function ‪executeAdjustTrustedHostsPatternAction(ServerRequestInterface $request): ResponseInterface
224  {
225  $serverParams = $request->getServerParams();
226  $host = $serverParams['HTTP_HOST'] ?? '';
227 
228  if (!$this->verifyHostHeader->isAllowedHostHeaderValue($host, $serverParams)) {
229  $this->configurationManager->setLocalConfigurationValueByPath('SYS/trustedHostsPattern', '.*');
230  }
231  return new JsonResponse([
232  'success' => true,
233  ]);
234  }
235 
241  public function ‪executeSilentConfigurationUpdateAction(): ResponseInterface
242  {
243  $success = true;
244  try {
245  $this->silentConfigurationUpgradeService->execute();
246  } catch (ConfigurationChangedException) {
247  $success = false;
248  } catch (SettingsWriteException $e) {
249  throw new SilentConfigurationUpgradeReadonlyException(code: 1688464086, throwable: $e);
250  }
251  return new JsonResponse([
252  'success' => $success,
253  ]);
254  }
255 
261  public function ‪executeSilentTemplateFileUpdateAction(): ResponseInterface
262  {
263  $success = true;
264  try {
265  $this->silentTemplateFileUpgradeService->execute();
266  } catch (TemplateFileChangedException $e) {
267  $success = false;
268  }
269  return new JsonResponse([
270  'success' => $success,
271  ]);
272  }
273 
277  public function ‪checkDatabaseConnectAction(): ResponseInterface
278  {
279  return new JsonResponse([
280  'success' => $this->setupDatabaseService->isDatabaseConfigurationComplete() && $this->setupDatabaseService->isDatabaseConnectSuccessful(),
281  ]);
282  }
283 
287  public function ‪showDatabaseConnectAction(ServerRequestInterface $request): ResponseInterface
288  {
289  $view = $this->‪initializeView();
290 
291  $driverOptions = $this->setupDatabaseService->getDriverOptions();
292  $formProtection = $this->formProtectionFactory->createFromRequest($request);
293  $driverOptions['executeDatabaseConnectToken'] = $formProtection->generateToken('installTool', 'executeDatabaseConnect');
294  $view->assignMultiple($driverOptions);
295 
296  return new JsonResponse([
297  'success' => true,
298  'html' => $view->render('Installer/ShowDatabaseConnect'),
299  ]);
300  }
301 
305  public function ‪executeDatabaseConnectAction(ServerRequestInterface $request): ResponseInterface
306  {
307  $postValues = $request->getParsedBody()['install']['values'];
308  [$success, $messages] = $this->setupDatabaseService->setDefaultConnectionSettings($postValues);
309 
310  return new JsonResponse([
311  'success' => $success,
312  'status' => $messages,
313  ]);
314  }
315 
319  public function ‪checkDatabaseSelectAction(): ResponseInterface
320  {
321  return new JsonResponse([
322  'success' => $this->setupDatabaseService->checkDatabaseSelect(),
323  ]);
324  }
325 
329  public function ‪showDatabaseSelectAction(ServerRequestInterface $request): ResponseInterface
330  {
331  $view = $this->‪initializeView();
332  $formProtection = $this->formProtectionFactory->createFromRequest($request);
333  ‪$errors = [];
334  try {
335  $view->assign('databaseList', $this->setupDatabaseService->getDatabaseList());
336  } catch (\Exception $exception) {
337  ‪$errors[] = $exception->getMessage();
338  }
339  $view->assignMultiple([
340  'errors' => ‪$errors,
341  'executeDatabaseSelectToken' => $formProtection->generateToken('installTool', 'executeDatabaseSelect'),
342  'executeCheckDatabaseRequirementsToken' => $formProtection->generateToken('installTool', 'checkDatabaseRequirements'),
343  ]);
344  return new JsonResponse([
345  'success' => true,
346  'html' => $view->render('Installer/ShowDatabaseSelect'),
347  ]);
348  }
349 
353  public function ‪checkDatabaseRequirementsAction(ServerRequestInterface $request): ResponseInterface
354  {
355  $success = true;
356  $messages = [];
357  $databaseDriverName = ‪$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections'][‪ConnectionPool::DEFAULT_CONNECTION_NAME]['driver'];
358 
359  $databaseName = $this->‪retrieveDatabaseNameFromRequest($request);
360  if ($databaseName === '') {
361  return new JsonResponse([
362  'success' => false,
363  'status' => [
364  new FlashMessage(
365  'You must select a database.',
366  'No Database selected',
367  ContextualFeedbackSeverity::ERROR
368  ),
369  ],
370  ]);
371  }
372 
373  ‪$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections'][‪ConnectionPool::DEFAULT_CONNECTION_NAME]['dbname'] = $databaseName;
374 
375  foreach ($this->setupDatabaseService->checkDatabaseRequirementsForDriver($databaseDriverName) as $message) {
376  if ($message->getSeverity() === ContextualFeedbackSeverity::ERROR) {
377  $success = false;
378  $messages[] = $message;
379  }
380  }
381 
382  // Check create and drop permissions
383  $statusMessages = [];
384  foreach ($this->setupDatabaseService->checkRequiredDatabasePermissions() as $checkRequiredPermission) {
385  $statusMessages[] = new FlashMessage(
386  $checkRequiredPermission,
387  'Missing required permissions',
388  ContextualFeedbackSeverity::ERROR
389  );
390  }
391  if ($statusMessages !== []) {
392  return new JsonResponse([
393  'success' => false,
394  'status' => $statusMessages,
395  ]);
396  }
397 
398  // if requirements are not fulfilled
399  if ($success === false) {
400  // remove the database again if we created it
401  if ($request->getParsedBody()['install']['values']['type'] === 'new') {
402  $connection = GeneralUtility::makeInstance(ConnectionPool::class)
403  ->getConnectionByName(‪ConnectionPool::DEFAULT_CONNECTION_NAME);
404  $connection
405  ->createSchemaManager()
406  ->dropDatabase($connection->quoteIdentifier($databaseName));
407  }
408 
409  $this->configurationManager->removeLocalConfigurationKeysByPath(['DB/Connections/Default/dbname']);
410 
411  $message = new FlashMessage(
412  sprintf(
413  'Database with name "%s" has been removed due to the following errors. '
414  . 'Please solve them first and try again. If you tried to create a new database make also sure, that the DBMS charset is to use UTF-8',
415  $databaseName
416  ),
417  '',
418  ContextualFeedbackSeverity::INFO
419  );
420  array_unshift($messages, $message);
421  }
422 
423  unset(‪$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections'][‪ConnectionPool::DEFAULT_CONNECTION_NAME]['dbname']);
424 
425  return new JsonResponse([
426  'success' => $success,
427  'status' => $messages,
428  ]);
429  }
430 
431  private function ‪retrieveDatabaseNameFromRequest(ServerRequestInterface $request): string
432  {
433  $postValues = $request->getParsedBody()['install']['values'];
434  if ($postValues['type'] === 'new') {
435  return $postValues['new'];
436  }
437 
438  if ($postValues['type'] === 'existing' && !empty($postValues['existing'])) {
439  return $postValues['existing'];
440  }
441  return '';
442  }
443 
447  public function ‪executeDatabaseSelectAction(ServerRequestInterface $request): ResponseInterface
448  {
449  $databaseName = $this->‪retrieveDatabaseNameFromRequest($request);
450  if ($databaseName === '') {
451  return new ‪JsonResponse([
452  'success' => false,
453  'status' => [
454  new ‪FlashMessage(
455  'You must select a database.',
456  'No Database selected',
457  ContextualFeedbackSeverity::ERROR
458  ),
459  ],
460  ]);
461  }
462 
463  $postValues = $request->getParsedBody()['install']['values'];
464  if ($postValues['type'] === 'new') {
465  $status = $this->setupDatabaseService->createNewDatabase($databaseName);
466  if ($status->getSeverity() === ContextualFeedbackSeverity::ERROR) {
467  return new JsonResponse([
468  'success' => false,
469  'status' => [$status],
470  ]);
471  }
472  } elseif ($postValues['type'] === 'existing') {
473  $status = $this->setupDatabaseService->checkExistingDatabase($databaseName);
474  if ($status->getSeverity() === ContextualFeedbackSeverity::ERROR) {
475  return new JsonResponse([
476  'success' => false,
477  'status' => [$status],
478  ]);
479  }
480  }
481  return new JsonResponse([
482  'success' => true,
483  ]);
484  }
485 
489  public function ‪checkDatabaseDataAction(): ResponseInterface
490  {
491  $existingTables = GeneralUtility::makeInstance(ConnectionPool::class)
492  ->getConnectionByName(‪ConnectionPool::DEFAULT_CONNECTION_NAME)
493  ->createSchemaManager()
494  ->listTableNames();
495  return new JsonResponse([
496  'success' => !empty($existingTables),
497  ]);
498  }
499 
503  public function ‪showDatabaseDataAction(ServerRequestInterface $request): ResponseInterface
504  {
505  $view = $this->‪initializeView();
506  $formProtection = $this->formProtectionFactory->createFromRequest($request);
507  $view->assignMultiple([
508  'siteName' => ‪$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'],
509  'executeDatabaseDataToken' => $formProtection->generateToken('installTool', 'executeDatabaseData'),
510  ]);
511  return new JsonResponse([
512  'success' => true,
513  'html' => $view->render('Installer/ShowDatabaseData'),
514  ]);
515  }
516 
520  public function ‪executeDatabaseDataAction(ServerRequestInterface $request): ResponseInterface
521  {
522  $messages = [];
523  $postValues = $request->getParsedBody()['install']['values'];
524  $username = (string)$postValues['username'] !== '' ? $postValues['username'] : 'admin';
525  // Check password and return early if not good enough
526  $password = (string)($postValues['password'] ?? '');
527  $email = $postValues['email'] ?? '';
528  $passwordValidationErrors = $this->setupDatabaseService->getBackendUserPasswordValidationErrors($password);
529  if (!empty($passwordValidationErrors)) {
530  $messages[] = new FlashMessage(
531  'Administrator password not secure enough!',
532  '',
533  ContextualFeedbackSeverity::ERROR
534  );
535 
536  // Add all password validation errors to the messages array
537  foreach ($passwordValidationErrors as $error) {
538  $messages[] = new FlashMessage(
539  $error,
540  '',
541  ContextualFeedbackSeverity::ERROR
542  );
543  }
544 
545  return new JsonResponse([
546  'success' => false,
547  'status' => $messages,
548  ]);
549  }
550  // Set site name
551  if (!empty($postValues['sitename'])) {
552  $this->setupService->setSiteName($postValues['sitename']);
553  }
554  try {
555  $messages = $this->setupDatabaseService->importDatabaseData();
556  if (!empty($messages)) {
557  return new JsonResponse([
558  'success' => false,
559  'status' => $messages,
560  ]);
561  }
562  } catch (StatementException $exception) {
563  $messages[] = new FlashMessage(
564  'Error detected in SQL statement:' . LF . $exception->getMessage(),
565  'Import of database data could not be performed',
566  ContextualFeedbackSeverity::ERROR
567  );
568  return new JsonResponse([
569  'success' => false,
570  'status' => $messages,
571  ]);
572  }
573 
574  $this->setupService->createUser($username, $password, $email);
575  $this->setupService->setInstallToolPassword($password);
576 
577  return new JsonResponse([
578  'success' => true,
579  'status' => $messages,
580  ]);
581  }
582 
586  public function ‪showDefaultConfigurationAction(ServerRequestInterface $request): ResponseInterface
587  {
588  $view = $this->‪initializeView();
589  $formProtection = $this->formProtectionFactory->createFromRequest($request);
590  $view->assignMultiple([
591  'composerMode' => ‪Environment::isComposerMode(),
592  'executeDefaultConfigurationToken' => $formProtection->generateToken('installTool', 'executeDefaultConfiguration'),
593  ]);
594  return new JsonResponse([
595  'success' => true,
596  'html' => $view->render('Installer/ShowDefaultConfiguration'),
597  ]);
598  }
599 
603  public function ‪executeDefaultConfigurationAction(ServerRequestInterface $request): ResponseInterface
604  {
605  $featureManager = new FeatureManager();
606  // Get best matching configuration presets
607  $configurationValues = $featureManager->getBestMatchingConfigurationForAllFeatures();
608 
609  $container = $this->lateBootService->loadExtLocalconfDatabaseAndExtTables();
610  // Use the container here instead of makeInstance() to use the factory of the container for building the UriBuilder
611  $uriBuilder = $container->get(UriBuilder::class);
612  $nextStepUrl = $uriBuilder->buildUriFromRoute('login');
613  // Let the admin user redirect to the distributions page on first login
614  if ($request->getParsedBody()['install']['values']['sitesetup'] === 'createsite') {
615  // Create a page with UID 1 and PID1 and fluid_styled_content for page TS config, respect ownership
616  $pageUid = $this->setupService->createSite();
617  $normalizedParams = $request->getAttribute('normalizedParams');
618  if (!($normalizedParams instanceof NormalizedParams)) {
619  $normalizedParams = ‪NormalizedParams::createFromRequest($request);
620  }
621  // Check for siteUrl, despite there currently is no UI to provide it,
622  // to allow TYPO3 Console (for TYPO3 v10) to set this value to something reasonable,
623  // because on cli there is no way to find out which hostname the site is supposed to have.
624  // In the future this controller should be refactored to a generic service, where site URL is
625  // just one input argument.
626  $siteUrl = $request->getParsedBody()['install']['values']['siteUrl'] ?? $normalizedParams->getSiteUrl();
627  $this->setupService->createSiteConfiguration('main', (int)$pageUid, $siteUrl);
628  } elseif ($request->getParsedBody()['install']['values']['sitesetup'] === 'loaddistribution'
630  && $this->packageManager->isPackageActive('extensionmanager')
631  ) {
632  // Update the URL to redirect after login to the extension manager distributions list
633  $nextStepUrl = $uriBuilder->buildUriWithRedirect(
634  'login',
635  [],
637  'tools_ExtensionmanagerExtensionmanager',
638  [
639  'action' => 'distributions',
640  ]
641  )
642  );
643  }
644 
645  // Mark upgrade wizards as done
646  $this->setupDatabaseService->markWizardsDone($container);
647 
648  $this->configurationManager->setLocalConfigurationValuesByPathValuePairs($configurationValues);
649 
650  $formProtection = $this->formProtectionFactory->createFromRequest($request);
651  $formProtection->clean();
652 
654 
655  return new JsonResponse([
656  'success' => true,
657  'redirect' => (string)$nextStepUrl,
658  ]);
659  }
660 
664  protected function ‪initializeView(): ViewInterface
665  {
666  $templatePaths = [
667  'templateRootPaths' => ['EXT:install/Resources/Private/Templates'],
668  ];
669  $renderingContext = GeneralUtility::makeInstance(RenderingContextFactory::class)->create($templatePaths);
670  $fluidView = new FluidTemplateView($renderingContext);
671  return new FluidViewAdapter($fluidView);
672  }
673 }
‪TYPO3\CMS\Install\Controller\InstallerController\executeDatabaseDataAction
‪executeDatabaseDataAction(ServerRequestInterface $request)
Definition: InstallerController.php:519
‪TYPO3\CMS\Install\Controller\InstallerController\initAction
‪initAction(ServerRequestInterface $request)
Definition: InstallerController.php:87
‪TYPO3\CMS\Backend\Routing\RouteRedirect\create
‪static create(string $name, $params)
Definition: RouteRedirect.php:42
‪TYPO3\CMS\Install\Controller\InstallerController\__construct
‪__construct(private readonly LateBootService $lateBootService, private readonly SilentConfigurationUpgradeService $silentConfigurationUpgradeService, private readonly SilentTemplateFileUpgradeService $silentTemplateFileUpgradeService, private readonly ConfigurationManager $configurationManager, private readonly FailsafePackageManager $packageManager, private readonly VerifyHostHeader $verifyHostHeader, private readonly FormProtectionFactory $formProtectionFactory, private readonly SetupService $setupService, private readonly SetupDatabaseService $setupDatabaseService,)
Definition: InstallerController.php:72
‪TYPO3\CMS\Install\Configuration\FeatureManager
Definition: FeatureManager.php:30
‪TYPO3\CMS\Core\Database\Schema\Exception\StatementException
Definition: StatementException.php:24
‪TYPO3\CMS\Core\Package\FailsafePackageManager
Definition: FailsafePackageManager.php:27
‪TYPO3\CMS\Core\View\ViewInterface
Definition: ViewInterface.php:24
‪TYPO3\CMS\Install\Service\Exception\ConfigurationChangedException
Definition: ConfigurationChangedException.php:25
‪TYPO3\CMS\Install\Controller\InstallerController\mainLayoutAction
‪mainLayoutAction(ServerRequestInterface $request)
Definition: InstallerController.php:121
‪TYPO3\CMS\Core\Information\Typo3Version
Definition: Typo3Version.php:21
‪TYPO3\CMS\Install\Controller\InstallerController\checkEnvironmentAndFoldersAction
‪checkEnvironmentAndFoldersAction()
Definition: InstallerController.php:145
‪TYPO3\CMS\Core\Configuration\ExtensionConfiguration
Definition: ExtensionConfiguration.php:47
‪TYPO3\CMS\Install\Controller\InstallerController\initializeView
‪initializeView()
Definition: InstallerController.php:663
‪TYPO3\CMS\Install\Service\SilentConfigurationUpgradeService
Definition: SilentConfigurationUpgradeService.php:45
‪TYPO3\CMS\Core\Configuration\Exception\SettingsWriteException
Definition: SettingsWriteException.php:25
‪TYPO3\CMS\Core\Core\Environment\isComposerMode
‪static isComposerMode()
Definition: Environment.php:137
‪TYPO3\CMS\Install\Controller\InstallerController\executeSilentTemplateFileUpdateAction
‪ResponseInterface executeSilentTemplateFileUpdateAction()
Definition: InstallerController.php:260
‪TYPO3\CMS\Install\Controller\InstallerController\executeDatabaseSelectAction
‪executeDatabaseSelectAction(ServerRequestInterface $request)
Definition: InstallerController.php:446
‪TYPO3\CMS\Install\Controller\InstallerController\showDatabaseConnectAction
‪showDatabaseConnectAction(ServerRequestInterface $request)
Definition: InstallerController.php:286
‪TYPO3\CMS\Install\Controller\InstallerController\showDefaultConfigurationAction
‪showDefaultConfigurationAction(ServerRequestInterface $request)
Definition: InstallerController.php:585
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\ConsumableNonce
Definition: ConsumableNonce.php:24
‪TYPO3\CMS\Core\Page\ImportMap
Definition: ImportMap.php:34
‪TYPO3\CMS\Core\View\FluidViewAdapter
Definition: FluidViewAdapter.php:28
‪TYPO3\CMS\Install\Service\EnableFileService
Definition: EnableFileService.php:26
‪TYPO3\CMS\Install\FolderStructure\DefaultFactory
Definition: DefaultFactory.php:26
‪TYPO3\CMS\Install\Service\SetupService
Definition: SetupService.php:39
‪TYPO3\CMS\Install\Service\EnableFileService\removeFirstInstallFile
‪static removeFirstInstallFile()
Definition: EnableFileService.php:82
‪TYPO3\CMS\Install\Controller\InstallerController\showEnvironmentAndFoldersAction
‪showEnvironmentAndFoldersAction(ServerRequestInterface $request)
Definition: InstallerController.php:155
‪TYPO3\CMS\Install\Controller\ControllerTrait
Definition: ControllerTrait.php:30
‪TYPO3\CMS\Install\WebserverType
‪WebserverType
Definition: WebserverType.php:26
‪TYPO3\CMS\Core\Core\Environment\getLegacyConfigPath
‪static getLegacyConfigPath()
Definition: Environment.php:268
‪TYPO3\CMS\Core\Database\ConnectionPool\DEFAULT_CONNECTION_NAME
‪const DEFAULT_CONNECTION_NAME
Definition: ConnectionPool.php:50
‪TYPO3\CMS\Install\Service\Exception\SilentConfigurationUpgradeReadonlyException
Definition: SilentConfigurationUpgradeReadonlyException.php:28
‪TYPO3\CMS\Core\Type\ContextualFeedbackSeverity
‪ContextualFeedbackSeverity
Definition: ContextualFeedbackSeverity.php:25
‪TYPO3\CMS\Install\Controller\InstallerController\showDatabaseSelectAction
‪showDatabaseSelectAction(ServerRequestInterface $request)
Definition: InstallerController.php:328
‪TYPO3\CMS\Install\Controller\InstallerController\executeAdjustTrustedHostsPatternAction
‪executeAdjustTrustedHostsPatternAction(ServerRequestInterface $request)
Definition: InstallerController.php:222
‪TYPO3\CMS\Core\Core\Environment\getProjectPath
‪static string getProjectPath()
Definition: Environment.php:160
‪TYPO3\CMS\Install\Exception
Definition: Exception.php:23
‪TYPO3\CMS\Install\Controller\InstallerController\executeSilentConfigurationUpdateAction
‪ResponseInterface executeSilentConfigurationUpdateAction()
Definition: InstallerController.php:240
‪TYPO3\CMS\Install\Controller\InstallerController\executeDatabaseConnectAction
‪executeDatabaseConnectAction(ServerRequestInterface $request)
Definition: InstallerController.php:304
‪TYPO3\CMS\Backend\Routing\RouteRedirect
Definition: RouteRedirect.php:30
‪TYPO3\CMS\Install\Controller
Definition: AbstractController.php:18
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Install\Service\SilentTemplateFileUpgradeService
Definition: SilentTemplateFileUpgradeService.php:35
‪TYPO3\CMS\Install\Service\Exception\TemplateFileChangedException
Definition: TemplateFileChangedException.php:25
‪TYPO3\CMS\Core\Utility\GeneralUtility\hmac
‪static string hmac($input, $additionalSecret='')
Definition: GeneralUtility.php:474
‪TYPO3\CMS\Install\Controller\InstallerController\checkTrustedHostsPatternAction
‪checkTrustedHostsPatternAction(ServerRequestInterface $request)
Definition: InstallerController.php:209
‪TYPO3\CMS\Install\Controller\InstallerController\retrieveDatabaseNameFromRequest
‪retrieveDatabaseNameFromRequest(ServerRequestInterface $request)
Definition: InstallerController.php:430
‪TYPO3\CMS\Install\Service\LateBootService
Definition: LateBootService.php:27
‪TYPO3\CMS\Install\Controller\InstallerController\showDatabaseDataAction
‪showDatabaseDataAction(ServerRequestInterface $request)
Definition: InstallerController.php:502
‪TYPO3\CMS\Install\Service\SetupDatabaseService
Definition: SetupDatabaseService.php:52
‪$errors
‪$errors
Definition: annotationChecker.php:116
‪TYPO3\CMS\Install\Controller\InstallerController
Definition: InstallerController.php:70
‪TYPO3\CMS\Install\Controller\InstallerController\executeEnvironmentAndFoldersAction
‪executeEnvironmentAndFoldersAction(ServerRequestInterface $request)
Definition: InstallerController.php:182
‪TYPO3\CMS\Core\Messaging\FlashMessage
Definition: FlashMessage.php:27
‪TYPO3\CMS\Core\FormProtection\FormProtectionFactory
Definition: FormProtectionFactory.php:43
‪TYPO3\CMS\Install\SystemEnvironment\Check
Definition: Check.php:45
‪TYPO3\CMS\Install\Controller\InstallerController\showInstallerNotAvailableAction
‪showInstallerNotAvailableAction()
Definition: InstallerController.php:133
‪TYPO3\CMS\Core\Http\JsonResponse
Definition: JsonResponse.php:28
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Install\Controller\InstallerController\executeDefaultConfigurationAction
‪executeDefaultConfigurationAction(ServerRequestInterface $request)
Definition: InstallerController.php:602
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:41
‪TYPO3\CMS\Install\SystemEnvironment\SetupCheck
Definition: SetupCheck.php:38
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContextFactory
Definition: RenderingContextFactory.php:51
‪TYPO3\CMS\Install\Controller\InstallerController\checkDatabaseRequirementsAction
‪checkDatabaseRequirementsAction(ServerRequestInterface $request)
Definition: InstallerController.php:352
‪TYPO3\CMS\Core\Middleware\VerifyHostHeader
Definition: VerifyHostHeader.php:31
‪TYPO3\CMS\Core\Http\fromRequest
‪@ fromRequest
Definition: ApplicationType.php:67
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Install\Controller\InstallerController\checkDatabaseConnectAction
‪checkDatabaseConnectAction()
Definition: InstallerController.php:276
‪TYPO3\CMS\Install\Controller\InstallerController\checkDatabaseSelectAction
‪checkDatabaseSelectAction()
Definition: InstallerController.php:318
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Messaging\FlashMessageQueue
Definition: FlashMessageQueue.php:29
‪TYPO3\CMS\Core\Http\NormalizedParams\createFromRequest
‪static static createFromRequest(ServerRequestInterface $request, array $systemConfiguration=null)
Definition: NormalizedParams.php:840
‪TYPO3\CMS\Core\Core\Environment\getContext
‪static getContext()
Definition: Environment.php:128
‪TYPO3\CMS\Core\Http\NormalizedParams
Definition: NormalizedParams.php:38
‪TYPO3\CMS\Core\Http\HtmlResponse
Definition: HtmlResponse.php:28
‪TYPO3\CMS\Install\Controller\InstallerController\checkDatabaseDataAction
‪checkDatabaseDataAction()
Definition: InstallerController.php:488