diff options
author | Nils Adermann <naderman@naderman.de> | 2013-11-11 15:02:03 -0800 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2013-11-11 15:02:03 -0800 |
commit | 592c8b75669329588c897bd3eda679e4731e4aab (patch) | |
tree | 15f4ae931e07e5b98c820c07506520523a317ade /phpBB | |
parent | d69f35d4507be98c384a0bb6232ebe08c36864c0 (diff) | |
parent | 00294e3dae2840fa01acaf47db4e14ae08c0720a (diff) | |
download | forums-592c8b75669329588c897bd3eda679e4731e4aab.tar forums-592c8b75669329588c897bd3eda679e4731e4aab.tar.gz forums-592c8b75669329588c897bd3eda679e4731e4aab.tar.bz2 forums-592c8b75669329588c897bd3eda679e4731e4aab.tar.xz forums-592c8b75669329588c897bd3eda679e4731e4aab.zip |
Merge pull request #1849 from bantu/ticket/11998
[ticket/11998] Introduction of the phpBB Console
Diffstat (limited to 'phpBB')
-rw-r--r-- | phpBB/bin/phpbbcli.php | 35 | ||||
-rw-r--r-- | phpBB/composer.json | 1 | ||||
-rw-r--r-- | phpBB/composer.lock | 55 | ||||
-rw-r--r-- | phpBB/config/console.yml | 35 | ||||
-rw-r--r-- | phpBB/config/services.yml | 1 | ||||
-rw-r--r-- | phpBB/develop/extensions.php | 129 | ||||
-rw-r--r-- | phpBB/phpbb/console/application.php | 23 | ||||
-rw-r--r-- | phpBB/phpbb/console/command/command.php | 14 | ||||
-rw-r--r-- | phpBB/phpbb/console/command/extension/command.php | 22 | ||||
-rw-r--r-- | phpBB/phpbb/console/command/extension/disable.php | 47 | ||||
-rw-r--r-- | phpBB/phpbb/console/command/extension/enable.php | 47 | ||||
-rw-r--r-- | phpBB/phpbb/console/command/extension/purge.php | 47 | ||||
-rw-r--r-- | phpBB/phpbb/console/command/extension/show.php | 58 | ||||
-rw-r--r-- | phpBB/phpbb/console/command/fixup/recalculate_email_hash.php | 71 |
14 files changed, 455 insertions, 130 deletions
diff --git a/phpBB/bin/phpbbcli.php b/phpBB/bin/phpbbcli.php new file mode 100644 index 0000000000..05e2597960 --- /dev/null +++ b/phpBB/bin/phpbbcli.php @@ -0,0 +1,35 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +if (php_sapi_name() != 'cli') +{ + echo 'This program must be run from the command line.' . PHP_EOL; + exit(1); +} + +define('IN_PHPBB', true); +$phpbb_root_path = __DIR__ . '/../'; +$phpEx = substr(strrchr(__FILE__, '.'), 1); +require($phpbb_root_path . 'includes/startup.' . $phpEx); +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 . '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"); + +$application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION); +$application->register_container_commands($phpbb_container); +$application->run(); 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", @@ -155,6 +155,59 @@ "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", "target-dir": "Symfony/Component/Debug", diff --git a/phpBB/config/console.yml b/phpBB/config/console.yml new file mode 100644 index 0000000000..c85a9d19ed --- /dev/null +++ b/phpBB/config/console.yml @@ -0,0 +1,35 @@ +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: + - @dbal.conn + tags: + - { name: console.command } 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/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 @@ -<?php -/** -* -* @copyright (c) 2012 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -define('IN_PHPBB', 1); -define('ANONYMOUS', 1); -$phpEx = substr(strrchr(__FILE__, '.'), 1); -$phpbb_root_path = __DIR__.'/../'; - -include($phpbb_root_path . 'common.'.$phpEx); - -function usage() -{ - echo "Usage: extensions.php COMMAND [OPTION]...\n"; - echo "Console extension manager.\n"; - echo "\n"; - echo "list:\n"; - echo " Lists all extensions in the database and the filesystem.\n"; - echo "\n"; - echo "enable NAME:\n"; - echo " Enables the specified extension.\n"; - echo "\n"; - echo "disable NAME:\n"; - echo " Disables the specified extension.\n"; - echo "\n"; - echo "purge NAME:\n"; - echo " Purges the specified extension.\n"; - exit(2); -} - -function list_extensions() -{ - global $phpbb_extension_manager; - - $phpbb_extension_manager->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/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 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\console; + +use Symfony\Component\DependencyInjection\TaggedContainerInterface; + +class application extends \Symfony\Component\Console\Application +{ + function register_container_commands(TaggedContainerInterface $container, $tag = 'console.command') + { + foreach($container->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 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +namespace phpbb\console\command; + +abstract class command extends \Symfony\Component\Console\Command\Command +{ +} 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 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ +namespace phpbb\console\command\extension; + +abstract class command extends \phpbb\console\command\command +{ + /** @var \phpbb\extension\manager */ + protected $manager; + + function __construct(\phpbb\extension\manager $manager) + { + $this->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 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ +namespace phpbb\console\command\extension; + +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class disable extends command +{ + protected function configure() + { + $this + ->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("<error>Could not disable extension $name</error>"); + return 1; + } + else + { + $output->writeln("<info>Successfully disabled extension $name</info>"); + 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 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ +namespace phpbb\console\command\extension; + +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class enable extends command +{ + protected function configure() + { + $this + ->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("<info>Successfully enabled extension $name</info>"); + return 0; + } + else + { + $output->writeln("<error>Could not enable extension $name</error>"); + 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 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ +namespace phpbb\console\command\extension; + +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class purge extends command +{ + protected function configure() + { + $this + ->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("<error>Could not purge extension $name</error>"); + return 1; + } + else + { + $output->writeln("<info>Successfully purge extension $name</info>"); + 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 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ +namespace phpbb\console\command\extension; + +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class show extends command +{ + protected function configure() + { + $this + ->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('<comment>No extensions were found.</comment>'); + 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("<info>$type:</info>"); + + foreach ($extensions as $extension) + { + $output->writeln(" - $extension"); + } + } +} 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..04db880091 --- /dev/null +++ b/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php @@ -0,0 +1,71 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ +namespace phpbb\console\command\fixup; + +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class recalculate_email_hash extends \phpbb\console\command\command +{ + /** @var \phpbb\db\driver\driver */ + protected $db; + + function __construct(\phpbb\db\driver\driver $db) + { + $this->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('<info>Successfully recalculated all email hashes.</info>'); + } +} |