From edfc48a71ca7128f2c24bedcd2cfe0eb8f7066b9 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 3 Nov 2013 01:52:40 +0100 Subject: [PATCH 1/8] [ticket/11998] Add symfony/console as dependency. PHPBB3-11998 --- phpBB/composer.json | 1 + phpBB/composer.lock | 55 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/phpBB/composer.json b/phpBB/composer.json index ddb264de17..3cf83a8fe9 100644 --- a/phpBB/composer.json +++ b/phpBB/composer.json @@ -3,6 +3,7 @@ "require": { "lusitanian/oauth": "0.2.*", "symfony/config": "2.3.*", + "symfony/console": "2.3.*", "symfony/dependency-injection": "2.3.*", "symfony/event-dispatcher": "2.3.*", "symfony/http-kernel": "2.3.*", diff --git a/phpBB/composer.lock b/phpBB/composer.lock index 5d1ba4efe1..c0eb7afcbb 100644 --- a/phpBB/composer.lock +++ b/phpBB/composer.lock @@ -3,7 +3,7 @@ "This file locks the dependencies of your project to a known state", "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" ], - "hash": "7bcfe8f8ce4fa46cb53c276cf93dcd3e", + "hash": "cc83663b780856890f787b9b4d6ea474", "packages": [ { "name": "lusitanian/oauth", @@ -154,6 +154,59 @@ "homepage": "http://symfony.com", "time": "2013-08-06 05:49:23" }, + { + "name": "symfony/console", + "version": "v2.3.6", + "target-dir": "Symfony/Component/Console", + "source": { + "type": "git", + "url": "https://github.com/symfony/Console.git", + "reference": "f880062d56edefb25b36f2defa65aafe65959dc7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Console/zipball/f880062d56edefb25b36f2defa65aafe65959dc7", + "reference": "f880062d56edefb25b36f2defa65aafe65959dc7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/event-dispatcher": "~2.1" + }, + "suggest": { + "symfony/event-dispatcher": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Console\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "http://symfony.com", + "time": "2013-09-25 06:04:15" + }, { "name": "symfony/debug", "version": "v2.3.4", From aec5b9d156436d7dd7ebdbd7f76e79c3eb13f51c Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 3 Nov 2013 02:49:50 +0100 Subject: [PATCH 2/8] [ticket/11998] Basic console application script. PHPBB3-11998 --- phpBB/console.php | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 phpBB/console.php diff --git a/phpBB/console.php b/phpBB/console.php new file mode 100644 index 0000000000..8699ea7b57 --- /dev/null +++ b/phpBB/console.php @@ -0,0 +1,34 @@ +register(); + +$application = new Application('phpBB Console', PHPBB_VERSION); +$application->addCommands(array( +)); +$application->run(); From 5db1ec163d32c75cd13cddc4902b3c01733294ba Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 3 Nov 2013 03:24:06 +0100 Subject: [PATCH 3/8] [ticket/11998] Use container to get all commands using 'console.command' tag. PHPBB3-11998 --- phpBB/config/services.yml | 1 + phpBB/console.php | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index 7e3202d86b..f61ed5f87f 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -6,6 +6,7 @@ imports: - { resource: avatars.yml } - { resource: feed.yml } - { resource: auth_providers.yml } + - { resource: console.yml } services: acl.permissions: diff --git a/phpBB/console.php b/phpBB/console.php index 8699ea7b57..94f6c551fa 100644 --- a/phpBB/console.php +++ b/phpBB/console.php @@ -28,7 +28,11 @@ require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx); $phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx); $phpbb_class_loader->register(); +$phpbb_container = phpbb_create_update_container($phpbb_root_path, $phpEx, "$phpbb_root_path/config"); + $application = new Application('phpBB Console', PHPBB_VERSION); -$application->addCommands(array( -)); +foreach($phpbb_container->findTaggedServiceIds('console.command') as $id => $void) +{ + $application->add($phpbb_container->get($id)); +} $application->run(); From a1af10848de17da27a6397aafb51c09b3343173a Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 3 Nov 2013 03:28:04 +0100 Subject: [PATCH 4/8] [ticket/11998] Also setup extension class loader. PHPBB3-11998 --- phpBB/console.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/phpBB/console.php b/phpBB/console.php index 94f6c551fa..50706d0b43 100644 --- a/phpBB/console.php +++ b/phpBB/console.php @@ -27,6 +27,8 @@ require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx); $phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx); $phpbb_class_loader->register(); +$phpbb_class_loader_ext = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/", $phpEx); +$phpbb_class_loader_ext->register(); $phpbb_container = phpbb_create_update_container($phpbb_root_path, $phpEx, "$phpbb_root_path/config"); From 743a0560c3cced8c37b5ae840e449a60a0b51a33 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 3 Nov 2013 04:14:36 +0100 Subject: [PATCH 5/8] [ticket/11998] Add console command for recalculating email hash. PHPBB3-11998 --- phpBB/config/console.yml | 7 ++ .../command/fixup/recalculate_email_hash.php | 72 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 phpBB/config/console.yml create mode 100644 phpBB/phpbb/console/command/fixup/recalculate_email_hash.php diff --git a/phpBB/config/console.yml b/phpBB/config/console.yml new file mode 100644 index 0000000000..a30ca3722c --- /dev/null +++ b/phpBB/config/console.yml @@ -0,0 +1,7 @@ +services: + console.command.fixup.recalculate_email_hash: + class: phpbb\console\command\fixup\recalculate_email_hash + arguments: + - @dbal.conn + tags: + - { name: console.command } diff --git a/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php b/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php new file mode 100644 index 0000000000..b788fe5631 --- /dev/null +++ b/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php @@ -0,0 +1,72 @@ +db = $db; + + parent::__construct(); + } + + protected function configure() + { + $this + ->setName('fixup:recalculate-email-hash') + ->setDescription('Recalculates the user_email_hash column of the users table.') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $sql = 'SELECT user_id, user_email, user_email_hash + FROM ' . USERS_TABLE . ' + WHERE user_type <> ' . USER_IGNORE . " + AND user_email <> ''"; + $result = $this->db->sql_query($sql); + + while ($row = $this->db->sql_fetchrow($result)) + { + $user_email_hash = phpbb_email_hash($row['user_email']); + if ($user_email_hash !== $row['user_email_hash']) + { + $sql_ary = array( + 'user_email_hash' => $user_email_hash, + ); + + $sql = 'UPDATE ' . USERS_TABLE . ' + SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . ' + WHERE user_id = ' . (int) $row['user_id']; + $this->db->sql_query($sql); + + if ($output->getVerbosity() >= OutputInterface::VERBOSITY_DEBUG) + { + $output->writeln(sprintf( + 'user_id %d, email %s => %s', + $row['user_id'], + $row['user_email'], + $user_email_hash + )); + } + } + } + $this->db->sql_freeresult($result); + + $output->writeln('Successfully recalculated all email hashes.'); + } +} From 6bd2a89efc56993331c1e6da705f3065f3867094 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 5 Nov 2013 19:10:33 +0100 Subject: [PATCH 6/8] [ticket/11998] Move application file to bin/phpbbcli.php PHPBB3-11998 --- phpBB/{console.php => bin/phpbbcli.php} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename phpBB/{console.php => bin/phpbbcli.php} (97%) diff --git a/phpBB/console.php b/phpBB/bin/phpbbcli.php similarity index 97% rename from phpBB/console.php rename to phpBB/bin/phpbbcli.php index 50706d0b43..e367748fd9 100644 --- a/phpBB/console.php +++ b/phpBB/bin/phpbbcli.php @@ -16,7 +16,7 @@ if (php_sapi_name() != 'cli') } define('IN_PHPBB', true); -$phpbb_root_path = __DIR__ . '/'; +$phpbb_root_path = __DIR__ . '/../'; $phpEx = substr(strrchr(__FILE__, '.'), 1); require($phpbb_root_path . 'includes/startup.' . $phpEx); require($phpbb_root_path . 'config.' . $phpEx); From 73ea5daf97bf5447b9bb2ff912cce4a9ea21c58e Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 5 Nov 2013 19:42:34 +0100 Subject: [PATCH 7/8] [ticket/11998] Add phpBB abstraction for application and command. PHPBB3-11998 --- phpBB/bin/phpbbcli.php | 9 ++------ phpBB/phpbb/console/application.php | 23 +++++++++++++++++++ phpBB/phpbb/console/command/command.php | 14 +++++++++++ .../command/fixup/recalculate_email_hash.php | 3 +-- 4 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 phpBB/phpbb/console/application.php create mode 100644 phpBB/phpbb/console/command/command.php diff --git a/phpBB/bin/phpbbcli.php b/phpBB/bin/phpbbcli.php index e367748fd9..05e2597960 100644 --- a/phpBB/bin/phpbbcli.php +++ b/phpBB/bin/phpbbcli.php @@ -7,8 +7,6 @@ * */ -use Symfony\Component\Console\Application; - if (php_sapi_name() != 'cli') { echo 'This program must be run from the command line.' . PHP_EOL; @@ -32,9 +30,6 @@ $phpbb_class_loader_ext->register(); $phpbb_container = phpbb_create_update_container($phpbb_root_path, $phpEx, "$phpbb_root_path/config"); -$application = new Application('phpBB Console', PHPBB_VERSION); -foreach($phpbb_container->findTaggedServiceIds('console.command') as $id => $void) -{ - $application->add($phpbb_container->get($id)); -} +$application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION); +$application->register_container_commands($phpbb_container); $application->run(); diff --git a/phpBB/phpbb/console/application.php b/phpBB/phpbb/console/application.php new file mode 100644 index 0000000000..fdcd9d42f6 --- /dev/null +++ b/phpBB/phpbb/console/application.php @@ -0,0 +1,23 @@ +findTaggedServiceIds($tag) as $id => $void) + { + $this->add($container->get($id)); + } + } +} diff --git a/phpBB/phpbb/console/command/command.php b/phpBB/phpbb/console/command/command.php new file mode 100644 index 0000000000..6abbdd203c --- /dev/null +++ b/phpBB/phpbb/console/command/command.php @@ -0,0 +1,14 @@ + Date: Tue, 5 Nov 2013 21:40:42 +0100 Subject: [PATCH 8/8] [ticket/11998] Turn develop/extensions.php into console commands. PHPBB3-11998 --- phpBB/config/console.yml | 28 ++++ phpBB/develop/extensions.php | 129 ------------------ .../console/command/extension/command.php | 22 +++ .../console/command/extension/disable.php | 47 +++++++ .../console/command/extension/enable.php | 47 +++++++ .../phpbb/console/command/extension/purge.php | 47 +++++++ .../phpbb/console/command/extension/show.php | 58 ++++++++ 7 files changed, 249 insertions(+), 129 deletions(-) delete mode 100644 phpBB/develop/extensions.php create mode 100644 phpBB/phpbb/console/command/extension/command.php create mode 100644 phpBB/phpbb/console/command/extension/disable.php create mode 100644 phpBB/phpbb/console/command/extension/enable.php create mode 100644 phpBB/phpbb/console/command/extension/purge.php create mode 100644 phpBB/phpbb/console/command/extension/show.php diff --git a/phpBB/config/console.yml b/phpBB/config/console.yml index a30ca3722c..c85a9d19ed 100644 --- a/phpBB/config/console.yml +++ b/phpBB/config/console.yml @@ -1,4 +1,32 @@ services: + console.command.extension.disable: + class: phpbb\console\command\extension\disable + arguments: + - @ext.manager + tags: + - { name: console.command } + + console.command.extension.enable: + class: phpbb\console\command\extension\enable + arguments: + - @ext.manager + tags: + - { name: console.command } + + console.command.extension.purge: + class: phpbb\console\command\extension\purge + arguments: + - @ext.manager + tags: + - { name: console.command } + + console.command.extension.show: + class: phpbb\console\command\extension\show + arguments: + - @ext.manager + tags: + - { name: console.command } + console.command.fixup.recalculate_email_hash: class: phpbb\console\command\fixup\recalculate_email_hash arguments: diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php deleted file mode 100644 index 43621f3080..0000000000 --- a/phpBB/develop/extensions.php +++ /dev/null @@ -1,129 +0,0 @@ -load_extensions(); - $all = array_keys($phpbb_extension_manager->all_available()); - - if (empty($all)) - { - echo "There were no extensions found.\n"; - exit(3); - } - - echo "Enabled:\n"; - $enabled = array_keys($phpbb_extension_manager->all_enabled()); - print_extensions($enabled); - echo "\n"; - - echo "Disabled:\n"; - $disabled = array_keys($phpbb_extension_manager->all_disabled()); - print_extensions($disabled); - echo "\n"; - - echo "Available:\n"; - $purged = array_diff($all, $enabled, $disabled); - print_extensions($purged); -} - -function print_extensions($exts) -{ - foreach ($exts as $ext) - { - echo "- $ext\n"; - } -} - -function enable_extension($name) -{ - global $phpbb_extension_manager; - - $phpbb_extension_manager->enable($name); -} - -function disable_extension($name) -{ - global $phpbb_extension_manager; - - $phpbb_extension_manager->disable($name); -} - -function purge_extension($name) -{ - global $phpbb_extension_manager; - - $phpbb_extension_manager->purge($name); -} - -function validate_argument_count($count) -{ - global $argv; - - if (count($argv) <= $count) - { - usage(); - } -} - -validate_argument_count(1); - -$action = $argv[1]; - -switch ($action) -{ - case 'list': - list_extensions(); - break; - - case 'enable': - validate_argument_count(2); - enable_extension($argv[2]); - break; - - case 'disable': - validate_argument_count(2); - disable_extension($argv[2]); - break; - - case 'purge': - validate_argument_count(2); - purge_extension($argv[2]); - break; - - default: - usage(); -} diff --git a/phpBB/phpbb/console/command/extension/command.php b/phpBB/phpbb/console/command/extension/command.php new file mode 100644 index 0000000000..edde7ce2e2 --- /dev/null +++ b/phpBB/phpbb/console/command/extension/command.php @@ -0,0 +1,22 @@ +manager = $manager; + + parent::__construct(); + } +} diff --git a/phpBB/phpbb/console/command/extension/disable.php b/phpBB/phpbb/console/command/extension/disable.php new file mode 100644 index 0000000000..e4de70ca34 --- /dev/null +++ b/phpBB/phpbb/console/command/extension/disable.php @@ -0,0 +1,47 @@ +setName('extension:disable') + ->setDescription('Disables the specified extension.') + ->addArgument( + 'extension-name', + InputArgument::REQUIRED, + 'Name of the extension' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $name = $input->getArgument('extension-name'); + $this->manager->disable($name); + $this->manager->load_extensions(); + + if ($this->manager->enabled($name)) + { + $output->writeln("Could not disable extension $name"); + return 1; + } + else + { + $output->writeln("Successfully disabled extension $name"); + return 0; + } + } +} diff --git a/phpBB/phpbb/console/command/extension/enable.php b/phpBB/phpbb/console/command/extension/enable.php new file mode 100644 index 0000000000..ee7dae76aa --- /dev/null +++ b/phpBB/phpbb/console/command/extension/enable.php @@ -0,0 +1,47 @@ +setName('extension:enable') + ->setDescription('Enables the specified extension.') + ->addArgument( + 'extension-name', + InputArgument::REQUIRED, + 'Name of the extension' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $name = $input->getArgument('extension-name'); + $this->manager->enable($name); + $this->manager->load_extensions(); + + if ($this->manager->enabled($name)) + { + $output->writeln("Successfully enabled extension $name"); + return 0; + } + else + { + $output->writeln("Could not enable extension $name"); + return 1; + } + } +} diff --git a/phpBB/phpbb/console/command/extension/purge.php b/phpBB/phpbb/console/command/extension/purge.php new file mode 100644 index 0000000000..c2e1d2928c --- /dev/null +++ b/phpBB/phpbb/console/command/extension/purge.php @@ -0,0 +1,47 @@ +setName('extension:purge') + ->setDescription('Purges the specified extension.') + ->addArgument( + 'extension-name', + InputArgument::REQUIRED, + 'Name of the extension' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $name = $input->getArgument('extension-name'); + $this->manager->purge($name); + $this->manager->load_extensions(); + + if ($this->manager->enabled($name)) + { + $output->writeln("Could not purge extension $name"); + return 1; + } + else + { + $output->writeln("Successfully purge extension $name"); + return 0; + } + } +} diff --git a/phpBB/phpbb/console/command/extension/show.php b/phpBB/phpbb/console/command/extension/show.php new file mode 100644 index 0000000000..0f48ac2379 --- /dev/null +++ b/phpBB/phpbb/console/command/extension/show.php @@ -0,0 +1,58 @@ +setName('extension:show') + ->setDescription('Lists all extensions in the database and on the filesystem.') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->manager->load_extensions(); + $all = array_keys($this->manager->all_available()); + + if (empty($all)) + { + $output->writeln('No extensions were found.'); + return 3; + } + + $enabled = array_keys($this->manager->all_enabled()); + $this->print_extension_list($output, 'Enabled', $enabled); + + $output->writeln(''); + + $disabled = array_keys($this->manager->all_disabled()); + $this->print_extension_list($output, 'Disabled', $disabled); + + $output->writeln(''); + + $purged = array_diff($all, $enabled, $disabled); + $this->print_extension_list($output, 'Available', $purged); + } + + protected function print_extension_list(OutputInterface $output, $type, array $extensions) + { + $output->writeln("$type:"); + + foreach ($extensions as $extension) + { + $output->writeln(" - $extension"); + } + } +}