Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\CoreBundle\Update\Step; | |
use Mautic\CoreBundle\Exception\UpdateFailedException; | |
use Mautic\CoreBundle\Helper\Update\PreUpdateChecks\PreUpdateCheckError; | |
use Mautic\CoreBundle\Helper\UpdateHelper; | |
use Symfony\Component\Console\Helper\ProgressBar; | |
use Symfony\Component\Console\Input\InputInterface; | |
use Symfony\Component\Console\Output\OutputInterface; | |
use Symfony\Contracts\Translation\TranslatorInterface; | |
final class PreUpdateChecksStep implements StepInterface | |
{ | |
public function __construct( | |
private TranslatorInterface $translator, | |
private UpdateHelper $updateHelper | |
) { | |
} | |
public function getOrder(): int | |
{ | |
return 0; | |
} | |
public function shouldExecuteInFinalStage(): bool | |
{ | |
return false; | |
} | |
/** | |
* @throws UpdateFailedException | |
*/ | |
public function execute(ProgressBar $progressBar, InputInterface $input, OutputInterface $output): void | |
{ | |
/** | |
* We can't easily fetch data about an update package without unzipping it first, so for now | |
* we skip the pre-update checks if the user manually provides an update package. | |
*/ | |
if (!empty($input->getOption('update-package'))) { | |
return; | |
} | |
$results = $this->updateHelper->runPreUpdateChecks(); | |
$errors = []; | |
$progressBar->setMessage($this->translator->trans('mautic.core.command.update.step.checks')); | |
$progressBar->advance(); | |
foreach ($results as $result) { | |
if (!$result->success) { | |
$errors = array_merge($errors, array_map(fn (PreUpdateCheckError $error) => $this->translator->trans($error->key, $error->parameters), $result->errors)); | |
} | |
} | |
if (!empty($errors)) { | |
$errorString = ''; | |
foreach ($errors as $error) { | |
$errorString .= "- $error\n"; | |
} | |
throw new UpdateFailedException($this->translator->trans('mautic.core.update.check.error')."\n".$errorString); | |
} | |
} | |
} | |