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