![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/CoreBundle/Command/ |
<?php namespace Mautic\CoreBundle\Command; use Mautic\CoreBundle\Exception\UpdateFailedException; use Mautic\CoreBundle\Helper\CoreParametersHelper; use Mautic\CoreBundle\Helper\ProgressBarHelper; use Mautic\CoreBundle\Update\StepProvider; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Helper\SymfonyQuestionHelper; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ConfirmationQuestion; use Symfony\Contracts\Translation\TranslatorInterface; /** * CLI Command to update the application. */ class ApplyUpdatesCommand extends Command { public function __construct( private TranslatorInterface $translator, private StepProvider $stepProvider, private CoreParametersHelper $coreParametersHelper ) { parent::__construct(); } protected function configure() { $this->setName('mautic:update:apply') ->setDefinition( [ new InputOption( 'force', null, InputOption::VALUE_NONE, 'Bypasses the verification check.' ), new InputOption( 'update-package', 'p', InputOption::VALUE_OPTIONAL, 'Optional full path to the update package to apply.' ), new InputOption( 'finish', null, InputOption::VALUE_NONE, 'Finalize the upgrade.' ), ] ) ->setHelp( <<<'EOT' The <info>%command.name%</info> command updates the Mautic application. <info>php %command.full_name%</info> You can optionally specify to bypass the verification check with the --force option: <info>php %command.full_name% --force</info> To force install a local package, pass the full path to the package as follows: <info>php %command.full_name% --update-package=/path/to/updatepackage.zip</info> EOT ); } protected function execute(InputInterface $input, OutputInterface $output): int { /** @var array<string, mixed> $options */ $options = $input->getOptions(); // Start a progress bar, don't give a max number of steps because it is conditional $progressBar = ProgressBarHelper::init($output); $progressBar->setFormat('Step %current% [%bar%] <info>%message%</info>'); // Define this just in case if (!defined('MAUTIC_ENV')) { define('MAUTIC_ENV', $options['env'] ?? 'prod'); } if (true === $this->coreParametersHelper->get('composer_updates', false)) { $output->writeln('<error>'.$this->translator->trans('mautic.core.command.update.composer').'</error>'); return Command::FAILURE; } try { if (empty($options['finish'])) { $returnCode = $this->startUpgrade($input, $output, $progressBar); $output->writeln( "\n\n<warning>".$this->translator->trans('mautic.core.command.update.finalize_instructions').'</warning>' ); // Must hard exit here to prevent Symfony from trying to use the kernel while in the same PHP process exit($returnCode); } return $this->finishUpgrade($input, $output, $progressBar); } catch (UpdateFailedException $exception) { $output->writeln( "\n\n<error>".$exception->getMessage().'</error>' ); } return Command::FAILURE; } /** * @throws UpdateFailedException */ private function startUpgrade(InputInterface $input, OutputInterface $output, ProgressBar $progressBar): int { if (!$input->getOption('force')) { /** @var SymfonyQuestionHelper $helper */ $helper = $this->getHelperSet()->get('question'); $question = new ConfirmationQuestion($this->translator->trans('mautic.core.update.confirm_application_update').' ', false); if (!$helper->ask($input, $output, $question)) { throw new UpdateFailedException($this->translator->trans('mautic.core.update.aborted')); } } foreach ($this->stepProvider->getInitialSteps() as $step) { $step->execute($progressBar, $input, $output); } return 0; } /** * @throws UpdateFailedException */ private function finishUpgrade(InputInterface $input, OutputInterface $output, ProgressBar $progressBar): int { foreach ($this->stepProvider->getFinalSteps() as $step) { $step->execute($progressBar, $input, $output); } return 0; } protected static $defaultDescription = 'Updates the Mautic application'; }