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