diff options
author | Nils Adermann <naderman@naderman.de> | 2014-05-02 19:16:52 +0200 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2014-05-02 19:16:52 +0200 |
commit | b73d0bdbd671f8a301fda52584bfeaf904551e2d (patch) | |
tree | 9e0f7399701a45fc127deb19ef8d3f7c726481ac /phpBB/phpbb/console/command/db | |
parent | c609c57035969fccfe72b7ff584a74b0631d64c5 (diff) | |
parent | 99a932e0f93a6777fa78ca50a6cfff3d692515c8 (diff) | |
download | forums-b73d0bdbd671f8a301fda52584bfeaf904551e2d.tar forums-b73d0bdbd671f8a301fda52584bfeaf904551e2d.tar.gz forums-b73d0bdbd671f8a301fda52584bfeaf904551e2d.tar.bz2 forums-b73d0bdbd671f8a301fda52584bfeaf904551e2d.tar.xz forums-b73d0bdbd671f8a301fda52584bfeaf904551e2d.zip |
Merge remote-tracking branch 'github-bantu/ticket/12473' into develop-ascraeus
* github-bantu/ticket/12473:
[ticket/12473] Add console command for database migration.
[ticket/12473] Add more compatibility to phpBB Console Application.
[ticket/12473] Move compatibility globals out into its own file.
Diffstat (limited to 'phpBB/phpbb/console/command/db')
-rw-r--r-- | phpBB/phpbb/console/command/db/migrate.php | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/phpBB/phpbb/console/command/db/migrate.php b/phpBB/phpbb/console/command/db/migrate.php new file mode 100644 index 0000000000..79a803e8fb --- /dev/null +++ b/phpBB/phpbb/console/command/db/migrate.php @@ -0,0 +1,127 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2014 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ +namespace phpbb\console\command\db; + +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class migrate extends \phpbb\console\command\command +{ + /** @var \phpbb\db\migrator */ + protected $migrator; + + /** @var \phpbb\extension\manager */ + protected $extension_manager; + + /** @var \phpbb\config\config */ + protected $config; + + /** @var \phpbb\cache\service */ + protected $cache; + + /** @var \phpbb\log\log */ + protected $log; + + /** @var \phpbb\user */ + protected $user; + + function __construct(\phpbb\db\migrator $migrator, \phpbb\extension\manager $extension_manager, \phpbb\config\config $config, \phpbb\cache\service $cache, \phpbb\log\log $log, \phpbb\user $user) + { + $this->migrator = $migrator; + $this->extension_manager = $extension_manager; + $this->config = $config; + $this->cache = $cache; + $this->log = $log; + $this->user = $user; + $this->user->add_lang(array('common', 'acp/common', 'install', 'migrator')); + parent::__construct(); + } + + protected function configure() + { + $this + ->setName('db:migrate') + ->setDescription('Updates the database by applying migrations.') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->load_migrations(); + $orig_version = $this->config['version']; + while (!$this->migrator->finished()) + { + $migration_start_time = microtime(true); + + try + { + $this->migrator->update(); + } + catch (\phpbb\db\migration\exception $e) + { + $output->writeln($e->getLocalisedMessage($this->user)); + $this->finalise_update(); + return 1; + } + + $migration_stop_time = microtime(true) - $migration_start_time; + + $state = array_merge( + array( + 'migration_schema_done' => false, + 'migration_data_done' => false, + ), + $this->migrator->last_run_migration['state'] + ); + + if (!empty($this->migrator->last_run_migration['effectively_installed'])) + { + $msg = $this->user->lang('MIGRATION_EFFECTIVELY_INSTALLED', $this->migrator->last_run_migration['name']); + $output->writeln("<comment>$msg</comment>"); + } + else if ($this->migrator->last_run_migration['task'] == 'process_data_step' && $state['migration_data_done']) + { + $msg = $this->user->lang('MIGRATION_DATA_DONE', $this->migrator->last_run_migration['name'], $migration_stop_time); + $output->writeln("<info>$msg</info>"); + } + else if ($this->migrator->last_run_migration['task'] == 'process_data_step') + { + $output->writeln($this->user->lang('MIGRATION_DATA_IN_PROGRESS', $this->migrator->last_run_migration['name'], $migration_stop_time)); + } + else if ($state['migration_schema_done']) + { + $msg = $this->user->lang('MIGRATION_SCHEMA_DONE', $this->migrator->last_run_migration['name'], $migration_stop_time); + $output->writeln("<info>$msg</info>"); + } + } + + if ($orig_version != $this->config['version']) + { + $log->add('admin', 'LOG_UPDATE_DATABASE', $orig_version, $this->config['version']); + } + + $this->finalise_update(); + $output->writeln($this->user->lang['DATABASE_UPDATE_COMPLETE']); + } + + protected function load_migrations() + { + $migrations = $this->extension_manager + ->get_finder() + ->core_path('phpbb/db/migration/data/') + ->get_classes(); + $this->migrator->set_migrations($migrations); + } + + protected function finalise_update() + { + $this->cache->purge(); + $this->config->increment('assets_version', 1); + } +} |