Files
Phraseanet/lib/Alchemy/Phrasea/Command/UpgradeDBDatas.php
Romain Neutron e233e5afa6 Merge branch '3.8'
Conflicts:
	lib/Alchemy/Phrasea/Command/Developer/JavascriptBuilder.php
	lib/Alchemy/Phrasea/Controller/Prod/Basket.php
	lib/Alchemy/Phrasea/Core/Provider/TaskManagerServiceProvider.php
	lib/classes/Exception/Feed/ItemNotFound.php
	lib/classes/Exception/Feed/PublisherNotFound.php
	lib/classes/Feed/Abstract.php
	lib/classes/Feed/Adapter.php
	lib/classes/Feed/Aggregate.php
	lib/classes/Feed/Collection.php
	lib/classes/Feed/CollectionInterface.php
	lib/classes/Feed/Entry/Adapter.php
	lib/classes/Feed/Entry/Collection.php
	lib/classes/Feed/Entry/Interface.php
	lib/classes/Feed/Entry/Item.php
	lib/classes/Feed/Entry/ItemInterface.php
	lib/classes/Feed/Interface.php
	lib/classes/Feed/Link.php
	lib/classes/Feed/LinkInterface.php
	lib/classes/Feed/Publisher/Adapter.php
	lib/classes/Feed/Publisher/Interface.php
	lib/classes/Feed/Token.php
	lib/classes/Feed/TokenAggregate.php
	lib/classes/Feed/XML/Abstract.php
	lib/classes/Feed/XML/Atom.php
	lib/classes/Feed/XML/Cooliris.php
	lib/classes/Feed/XML/Interface.php
	lib/classes/Feed/XML/RSS.php
	lib/classes/Feed/XML/RSS/ImageInterface.php
	lib/classes/http/request.php
	lib/classes/module/console/schedulerStart.php
	lib/classes/module/console/schedulerState.php
	lib/classes/module/console/schedulerStop.php
	lib/classes/module/console/taskState.php
	lib/classes/module/console/tasklist.php
	lib/classes/module/console/taskrun.php
	lib/classes/registry.php
	lib/classes/registryInterface.php
	lib/classes/set/order.php
	lib/classes/system/url.php
	lib/classes/task/Scheduler.php
	lib/classes/task/appboxAbstract.php
	lib/classes/task/databoxAbstract.php
	lib/classes/task/manager.php
	lib/classes/task/period/RecordMover.php
	lib/classes/task/period/apibridge.php
	lib/classes/task/period/archive.php
	lib/classes/task/period/cindexer.php
	lib/classes/task/period/emptyColl.php
	lib/classes/task/period/ftp.php
	lib/classes/task/period/ftpPull.php
	lib/classes/task/period/subdef.php
	lib/classes/task/period/test.php
	lib/classes/task/period/writemeta.php
	lib/conf.d/PhraseaFixture/AbstractWZ.php
	lib/conf.d/PhraseaFixture/Basket/LoadFiveBaskets.php
	lib/conf.d/PhraseaFixture/Basket/LoadOneBasket.php
	lib/conf.d/PhraseaFixture/Basket/LoadOneBasketEnv.php
	lib/conf.d/PhraseaFixture/Lazaret/LoadOneFile.php
	lib/conf.d/PhraseaFixture/Story/LoadOneStory.php
	lib/conf.d/PhraseaFixture/UsrLists/ListAbstract.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrList.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrListEntry.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrListOwner.php
	lib/conf.d/PhraseaFixture/ValidationParticipant/LoadOneParticipant.php
	lib/conf.d/PhraseaFixture/ValidationParticipant/LoadParticipantWithSession.php
	lib/conf.d/PhraseaFixture/ValidationSession/LoadOneValidationSession.php
2014-01-06 15:38:14 +01:00

144 lines
3.9 KiB
PHP

<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2014 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\Command;
use Alchemy\Phrasea\Command\Command;
use Alchemy\Phrasea\Command\Upgrade\Step31;
use Alchemy\Phrasea\Command\Upgrade\Step35;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use vierbergenlars\SemVer\version;
class UpgradeDBDatas extends Command
{
protected $upgrades = [];
/**
* Constructor
*/
public function __construct($name = null)
{
parent::__construct($name);
$this
->setDescription("Upgrades Phraseanet datas, useful after migrations")
->setHelp(<<<EOF
Upgrade Phraseanet datas from older version
Steps are
- version 3.1 : records UUID
- version 3.5 : metadatas upgrade
EOF
);
$this->addOption('from', 'f', InputOption::VALUE_REQUIRED, 'The version where to start upgrade');
$this->addOption('at-version', null, InputOption::VALUE_REQUIRED, 'The version step to upgrade');
return $this;
}
protected function generateUpgradesFromOption(InputInterface $input)
{
if (null === $input->getOption('from') && null === $input->getOption('at-version')) {
throw new \Exception('You MUST provide a `from` or `at-version` option');
}
if (null !== $input->getOption('from') && null !== $input->getOption('at-version')) {
throw new \Exception('You CAN NOT provide a `from` AND `at-version` option at the same time');
}
$versions = [
'Upgrade\\Step31' => '3.1',
'Upgrade\\Step35' => '3.5',
];
if (null !== $input->getOption('from')) {
foreach ($versions as $classname => $version) {
if (version::lt($version, $input->getOption('from'))) {
continue;
}
$classname = __NAMESPACE__ . '\\' . $classname;
$this->upgrades[] = new $classname($this->container);
}
}
if (null !== $input->getOption('at-version')) {
if ('3.1' === $input->getOption('at-version')) {
$this->upgrades[] = new Step31($this->container);
}
if ('3.5' === $input->getOption('at-version')) {
$this->upgrades[] = new Step35($this->container);
}
}
}
public function setUpgrades(array $upgrades)
{
$this->upgrades = [];
foreach ($upgrades as $upgrade) {
$this->addUpgrade($upgrade);
}
}
public function addUpgrade(Upgrade\DatasUpgraderInterface $upgrade)
{
$this->upgrades[] = $upgrade;
}
public function getUpgrades()
{
return $this->upgrades;
}
/**
* {@inheritdoc}
*/
protected function doExecute(InputInterface $input, OutputInterface $output)
{
$this->generateUpgradesFromOption($input);
if (! $this->upgrades) {
throw new \Exception('No upgrade available');
}
$time = 30;
foreach ($this->upgrades as $version) {
$time += $version->getTimeEstimation();
}
$question = sprintf("This process is estimated to %s", $this->getFormattedDuration($time));
$dialog = $this->getHelperSet()->get('dialog');
do {
$continue = strtolower($dialog->ask($output, $question . '<question>Continue ? (Y/n)</question>', 'Y'));
} while ( ! in_array($continue, ['y', 'n']));
if (strtolower($continue) !== 'y') {
$output->writeln('Aborting !');
return;
}
foreach ($this->upgrades as $version) {
$version->execute($input, $output);
}
return;
}
}