aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/console/command/db
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2014-05-02 19:16:52 +0200
committerNils Adermann <naderman@naderman.de>2014-05-02 19:16:52 +0200
commitb73d0bdbd671f8a301fda52584bfeaf904551e2d (patch)
tree9e0f7399701a45fc127deb19ef8d3f7c726481ac /phpBB/phpbb/console/command/db
parentc609c57035969fccfe72b7ff584a74b0631d64c5 (diff)
parent99a932e0f93a6777fa78ca50a6cfff3d692515c8 (diff)
downloadforums-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.php127
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);
+ }
+}