setDescription('Upgrades Phraseanet to the latest version') ->addOption('yes', 'y', InputOption::VALUE_NONE, 'Answers yes to all questions and do not ask the user') ->addOption('force', 'f', InputOption::VALUE_NONE, 'Forces the upgrade even if there is a concurrent upgrade') ->addOption('dump', 'd', InputOption::VALUE_NONE, 'Dumps SQL queries that can be used to clean database.'); return $this; } protected function doExecute(InputInterface $input, OutputInterface $output) { $interactive = !$input->getOption('yes'); while ($migrations = $this->container['phraseanet.configuration-tester']->getMigrations()) { foreach ($migrations as $migration) { $migration->migrate(); } } if (!$this->getService('phraseanet.configuration-tester')->isInstalled()) { throw new \RuntimeException('Phraseanet must be set-up'); } $output->write('Phraseanet is going to be upgraded', true); if ($interactive) { $dialog = $this->getHelperSet()->get('dialog'); do { $continue = mb_strtolower($dialog->ask($output, '' . _('Continuer ?') . ' (Y/n)', 'Y')); } while (!in_array($continue, array('y', 'n'))); } else { $continue = 'y'; } if ($continue == 'y') { try { $output->write('Upgrading...', true); try { $upgrader = new Setup_Upgrade($this->container, $input->getOption('force')); } catch (\Exception_Setup_FixBadEmailAddresses $e) { return $output->writeln(sprintf('You have to fix your database before upgrade with the system:mailCheck command ')); } $queries = $this->getService('phraseanet.appbox')->forceUpgrade($upgrader, $this->container); if ($input->getOption('dump')) { if (0 < count($queries)) { $output->writeln("Some SQL queries can be executed to optimize\n"); foreach ($queries as $query) { $output->writeln(" ".$query['sql']); } $output->writeln("\n"); } else { $output->writeln("No SQL queries to execute to optimize\n"); } } foreach ($upgrader->getRecommendations() as $recommendation) { list($message, $command) = $recommendation; $output->writeln(sprintf('%s', $message)); $output->writeln(""); $output->writeln(sprintf("\t\t%s", $command)); $output->writeln(""); $output->writeln(""); } } catch (\Exception $e) { $output->writeln(sprintf('An error occured while upgrading : %s ', $e->getMessage())); } } else { $output->write('Canceled', true); } $output->write('Finished !', true); return 0; } }