setDescription('Set up extensions') ->setHelp( <<<'EOD' Setup all extensions or the given extension by extension key. This must be performed after new extensions are required via Composer. The command performs all necessary setup operations, such as database schema changes, static data import, distribution files import etc. The given extension keys must be recognized by TYPO3 or will be ignored. EOD ) ->addOption( 'extension', '-e', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, 'Only set up extensions with given key' ); } /** * Sets up one or all extensions */ protected function execute(InputInterface $input, OutputInterface $output): int { Bootstrap::initializeBackendAuthentication(); $this->eventDispatcher->dispatch(new PackagesMayHaveChangedEvent()); $io = new SymfonyStyle($input, $output); $extensionKeys = $input->getOption('extension'); $packagesToSetUp = $this->packageManager->getActivePackages(); if (!empty($extensionKeys)) { $packagesToSetUp = array_filter( $packagesToSetUp, static function ($extKey) use ($extensionKeys) { return in_array($extKey, $extensionKeys, true); }, ARRAY_FILTER_USE_KEY ); } if (empty($packagesToSetUp)) { $io->error('Given extension(s) "' . implode(', ', $extensionKeys) . '" not found in the system.'); return Command::FAILURE; } $messages = $this->packageSetup->setup($packagesToSetUp); foreach ($messages as $message) { $io->warning($message->getMessage()); } $io->success('Extension(s) "' . implode(', ', array_keys($packagesToSetUp)) . '" successfully set up.'); return Command::SUCCESS; } }