From d798184d08f9da9fb4c011959d612a5395341fd9 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 2 May 2014 19:01:26 +0200 Subject: [PATCH 1/3] [ticket/12473] Move compatibility globals out into its own file. PHPBB3-12473 --- phpBB/common.php | 29 +--------------- phpBB/includes/compatibility_globals.php | 44 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 28 deletions(-) create mode 100644 phpBB/includes/compatibility_globals.php diff --git a/phpBB/common.php b/phpBB/common.php index 12dbe5a62c..4ad669a021 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -96,34 +96,7 @@ $phpbb_container = phpbb_create_default_container($phpbb_root_path, $phpEx); $phpbb_class_loader->set_cache($phpbb_container->get('cache.driver')); $phpbb_class_loader_ext->set_cache($phpbb_container->get('cache.driver')); -// set up caching -$cache = $phpbb_container->get('cache'); - -// Instantiate some basic classes -$phpbb_dispatcher = $phpbb_container->get('dispatcher'); -$request = $phpbb_container->get('request'); -$user = $phpbb_container->get('user'); -$auth = $phpbb_container->get('auth'); -$db = $phpbb_container->get('dbal.conn'); - -// make sure request_var uses this request instance -request_var('', 0, false, false, $request); // "dependency injection" for a function - -// Grab global variables, re-cache if necessary -$config = $phpbb_container->get('config'); -set_config(null, null, null, $config); -set_config_count(null, null, null, $config); - -$phpbb_log = $phpbb_container->get('log'); -$symfony_request = $phpbb_container->get('symfony_request'); -$phpbb_filesystem = $phpbb_container->get('filesystem'); -$phpbb_path_helper = $phpbb_container->get('path_helper'); - -// load extensions -$phpbb_extension_manager = $phpbb_container->get('ext.manager'); -$phpbb_subscriber_loader = $phpbb_container->get('event.subscriber_loader'); - -$template = $phpbb_container->get('template'); +require($phpbb_root_path . 'includes/compatibility_globals.' . $phpEx); // Add own hook handler require($phpbb_root_path . 'includes/hooks/index.' . $phpEx); diff --git a/phpBB/includes/compatibility_globals.php b/phpBB/includes/compatibility_globals.php new file mode 100644 index 0000000000..fa468ed96a --- /dev/null +++ b/phpBB/includes/compatibility_globals.php @@ -0,0 +1,44 @@ +get('cache'); + +// Instantiate some basic classes +$phpbb_dispatcher = $phpbb_container->get('dispatcher'); +$request = $phpbb_container->get('request'); +$user = $phpbb_container->get('user'); +$auth = $phpbb_container->get('auth'); +$db = $phpbb_container->get('dbal.conn'); + +// make sure request_var uses this request instance +request_var('', 0, false, false, $request); // "dependency injection" for a function + +// Grab global variables, re-cache if necessary +$config = $phpbb_container->get('config'); +set_config(null, null, null, $config); +set_config_count(null, null, null, $config); + +$phpbb_log = $phpbb_container->get('log'); +$symfony_request = $phpbb_container->get('symfony_request'); +$phpbb_filesystem = $phpbb_container->get('filesystem'); +$phpbb_path_helper = $phpbb_container->get('path_helper'); + +// load extensions +$phpbb_extension_manager = $phpbb_container->get('ext.manager'); +$phpbb_subscriber_loader = $phpbb_container->get('event.subscriber_loader'); + +$template = $phpbb_container->get('template'); From c193bfc4966e12b4a0e7bcd0d483f9c2ec69dda3 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 2 May 2014 19:01:56 +0200 Subject: [PATCH 2/3] [ticket/12473] Add more compatibility to phpBB Console Application. PHPBB3-12473 --- phpBB/bin/phpbbcli.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/phpBB/bin/phpbbcli.php b/phpBB/bin/phpbbcli.php index 49f4ca13e7..02d6b88943 100755 --- a/phpBB/bin/phpbbcli.php +++ b/phpBB/bin/phpbbcli.php @@ -22,6 +22,7 @@ require($phpbb_root_path . 'config.' . $phpEx); require($phpbb_root_path . 'includes/constants.' . $phpEx); require($phpbb_root_path . 'includes/functions.' . $phpEx); require($phpbb_root_path . 'includes/functions_container.' . $phpEx); +require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx); $phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx); @@ -30,6 +31,8 @@ $phpbb_class_loader_ext = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/" $phpbb_class_loader_ext->register(); $phpbb_container = phpbb_create_update_container($phpbb_root_path, $phpEx, "$phpbb_root_path/config"); +$phpbb_container->get('request')->enable_super_globals(); +require($phpbb_root_path . 'includes/compatibility_globals.' . $phpEx); $application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION); $application->register_container_commands($phpbb_container); From 99a932e0f93a6777fa78ca50a6cfff3d692515c8 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 2 May 2014 19:02:49 +0200 Subject: [PATCH 3/3] [ticket/12473] Add console command for database migration. PHPBB3-12473 --- phpBB/config/console.yml | 12 ++ phpBB/phpbb/console/command/db/migrate.php | 127 +++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 phpBB/phpbb/console/command/db/migrate.php diff --git a/phpBB/config/console.yml b/phpBB/config/console.yml index a4aae75e40..3d57c257dd 100644 --- a/phpBB/config/console.yml +++ b/phpBB/config/console.yml @@ -34,6 +34,18 @@ services: tags: - { name: console.command } + console.command.db.migrate: + class: phpbb\console\command\db\migrate + arguments: + - @migrator + - @ext.manager + - @config + - @cache + - @log + - @user + tags: + - { name: console.command } + console.command.extension.disable: class: phpbb\console\command\extension\disable arguments: 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 @@ +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("$msg"); + } + 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("$msg"); + } + 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("$msg"); + } + } + + 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); + } +}