public function getJobsAction() { $jobs = Update::getJobs($this->getParam("toRevision")); $this->_helper->json($jobs); }
protected function execute(InputInterface $input, OutputInterface $output) { $currentRevision = null; if ($input->getOption("source-build")) { $currentRevision = $input->getOption("source-build"); } $availableUpdates = Update::getAvailableUpdates($currentRevision); if ($input->getOption("list")) { if (count($availableUpdates["releases"])) { $rows = []; foreach ($availableUpdates["releases"] as $release) { $rows[] = [$release["version"], date("Y-m-d", $release["date"]), $release["id"]]; } $table = new Table($output); $table->setHeaders(['Version', 'Date', 'Build'])->setRows($rows); $table->render(); } if (count($availableUpdates["revisions"])) { $this->output->writeln("The latest available build is: <comment>" . $availableUpdates["revisions"][0]["id"] . "</comment> (" . date("Y-m-d", $availableUpdates["revisions"][0]["date"]) . ")"); } if (!count($availableUpdates["releases"]) && !count($availableUpdates["revisions"])) { $this->output->writeln("<info>No updates available</info>"); } } if ($input->getOption("update")) { $returnMessages = []; $build = null; $updateInfo = trim($input->getOption("update")); if (is_numeric($updateInfo)) { $build = $updateInfo; } else { // get build nr. by version number foreach ($availableUpdates["releases"] as $release) { if ($release["version"] == $updateInfo) { $build = $release["id"]; break; } } } if (!$build) { $this->writeError("Update with build / version " . $updateInfo . " not found."); exit; } if (!Update::isWriteable()) { $this->writeError(PIMCORE_PATH . " is not recursivly writable, please check!"); exit; } if (!Update::isComposerAvailable()) { $this->writeError("Composer is not installed properly, please ensure composer is in your PATH variable."); exit; } $helper = $this->getHelper('question'); $question = new ConfirmationQuestion("You are going to update to build {$build}! Continue with this action? (y/n)", false); if (!$helper->ask($input, $output, $question)) { return; } $this->output->writeln("Starting the update process ..."); if ($input->getOption("dry-run")) { $this->output->writeln("<info>---------- DRY-RUN ----------</info>"); } $jobs = Update::getJobs($build, $currentRevision); $steps = count($jobs["parallel"]) + count($jobs["procedural"]); $progress = new ProgressBar($output, $steps); $progress->start(); foreach ($jobs["parallel"] as $job) { if ($job["type"] == "download") { Update::downloadData($job["revision"], $job["url"]); } $progress->advance(); } $maintenanceModeId = 'cache-warming-dummy-session-id'; Admin::activateMaintenanceMode($maintenanceModeId); $stoppedByError = false; foreach ($jobs["procedural"] as $job) { if ($input->getOption("dry-run")) { $job["dry-run"] = true; } $script = realpath(PIMCORE_PATH . DIRECTORY_SEPARATOR . "cli" . DIRECTORY_SEPARATOR . "console.php"); $return = Console::runPhpScript($script, "internal:update-processor " . escapeshellarg(json_encode($job))); $return = trim($return); $returnData = @json_decode($return, true); if (is_array($returnData)) { if (trim($returnData["message"])) { $returnMessages[] = [$job["revision"], strip_tags($returnData["message"])]; } if (!$returnData["success"]) { $stoppedByError = true; break; } } else { $stoppedByError = true; break; } $progress->advance(); } $progress->finish(); Update::composerDumpAutoload(); Admin::deactivateMaintenanceMode(); $this->output->writeln("\n"); if ($stoppedByError) { $this->output->writeln("<error>Update stopped by error! Please check your logs</error>"); $this->output->writeln("Last return value was: " . $return); } else { $this->output->writeln("<info>Update done!</info>"); if (count($returnMessages)) { $table = new Table($output); $table->setHeaders(['Build', 'Message'])->setRows($returnMessages); $table->render(); } } } }