aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Darricau <tristan.darricau@sensiolabs.com>2015-08-24 12:04:22 +0200
committerTristan Darricau <tristan.darricau@sensiolabs.com>2015-08-25 22:24:28 +0200
commit17e7a89a60f700efc8a0b082b7a82005e6288e80 (patch)
tree628505c1a127ba5b531e4bb24bda4f659bb7317d
parentf6a4843c6df3a9b0490eb3d273ebed7d04a89582 (diff)
downloadforums-17e7a89a60f700efc8a0b082b7a82005e6288e80.tar
forums-17e7a89a60f700efc8a0b082b7a82005e6288e80.tar.gz
forums-17e7a89a60f700efc8a0b082b7a82005e6288e80.tar.bz2
forums-17e7a89a60f700efc8a0b082b7a82005e6288e80.tar.xz
forums-17e7a89a60f700efc8a0b082b7a82005e6288e80.zip
[ticket/14124] Automatically translate exceptions in CLI
PHPBB3-14124
-rwxr-xr-xphpBB/bin/phpbbcli.php1
-rw-r--r--phpBB/config/default/container/services_console.yml8
-rw-r--r--phpBB/config/development/config.yml3
-rw-r--r--phpBB/config/installer/container/services.yml8
-rw-r--r--phpBB/install_new/phpbbcli.php1
-rw-r--r--phpBB/phpbb/console/application.php1
-rw-r--r--phpBB/phpbb/console/exception_subscriber.php74
-rw-r--r--phpBB/phpbb/di/extension/container_configuration.php6
-rw-r--r--phpBB/phpbb/di/extension/core.php7
9 files changed, 109 insertions, 0 deletions
diff --git a/phpBB/bin/phpbbcli.php b/phpBB/bin/phpbbcli.php
index 18657aed0a..d85b9a8d46 100755
--- a/phpBB/bin/phpbbcli.php
+++ b/phpBB/bin/phpbbcli.php
@@ -71,5 +71,6 @@ $user->add_lang('cli');
$lang = $phpbb_container->get('language');
$application = new \phpbb\console\application('phpBB Console', PHPBB_VERSION, $lang);
+$application->setDispatcher($phpbb_container->get('dispatcher'));
$application->register_container_commands($phpbb_container->get('console.command_collection'));
$application->run($input);
diff --git a/phpBB/config/default/container/services_console.yml b/phpBB/config/default/container/services_console.yml
index aee3cbdee6..71b6244e13 100644
--- a/phpBB/config/default/container/services_console.yml
+++ b/phpBB/config/default/container/services_console.yml
@@ -1,4 +1,12 @@
services:
+ console.exception_subscriber:
+ class: phpbb\console\exception_subscriber
+ arguments:
+ - @language
+ - %debug.exceptions%
+ tags:
+ - { name: kernel.event_subscriber }
+
console.command_collection:
class: phpbb\di\service_collection
arguments:
diff --git a/phpBB/config/development/config.yml b/phpBB/config/development/config.yml
index 93ae07fb3f..f39eb52e73 100644
--- a/phpBB/config/development/config.yml
+++ b/phpBB/config/development/config.yml
@@ -4,6 +4,9 @@ imports:
core:
require_dev_dependencies: true
+ debug:
+ exceptions: true
+
twig:
debug: true
auto_reload: true
diff --git a/phpBB/config/installer/container/services.yml b/phpBB/config/installer/container/services.yml
index 8296bcc079..5cd30f9222 100644
--- a/phpBB/config/installer/container/services.yml
+++ b/phpBB/config/installer/container/services.yml
@@ -68,3 +68,11 @@ services:
- null
- @template.twig.loader
- []
+
+ console.exception_subscriber:
+ class: phpbb\console\exception_subscriber
+ arguments:
+ - @language
+ - %debug.exceptions%
+ tags:
+ - { name: kernel.event_subscriber }
diff --git a/phpBB/install_new/phpbbcli.php b/phpBB/install_new/phpbbcli.php
index 508d051945..c1e9a9eaef 100644
--- a/phpBB/install_new/phpbbcli.php
+++ b/phpBB/install_new/phpbbcli.php
@@ -62,5 +62,6 @@ $language = $phpbb_installer_container->get('language');
$language->add_lang(array('common', 'acp/common', 'acp/board', 'install_new', 'posting', 'cli'));
$application = new \phpbb\console\application('phpBB Installer', PHPBB_VERSION, $language);
+$application->setDispatcher($phpbb_installer_container->get('dispatcher'));
$application->register_container_commands($phpbb_installer_container->get('console.installer.command_collection'));
$application->run($input);
diff --git a/phpBB/phpbb/console/application.php b/phpBB/phpbb/console/application.php
index 2c69a3cc73..f9f2213da6 100644
--- a/phpBB/phpbb/console/application.php
+++ b/phpBB/phpbb/console/application.php
@@ -13,6 +13,7 @@
namespace phpbb\console;
+use phpbb\exception\exception_interface;
use Symfony\Component\Console\Shell;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
diff --git a/phpBB/phpbb/console/exception_subscriber.php b/phpBB/phpbb/console/exception_subscriber.php
new file mode 100644
index 0000000000..b920d4abae
--- /dev/null
+++ b/phpBB/phpbb/console/exception_subscriber.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ *
+ * This file is part of the phpBB Forum Software package.
+ *
+ * @copyright (c) phpBB Limited <https://www.phpbb.com>
+ * @license GNU General Public License, version 2 (GPL-2.0)
+ *
+ * For full copyright and license information, please see
+ * the docs/CREDITS.txt file.
+ *
+ */
+
+namespace phpbb\console;
+
+use phpbb\exception\exception_interface;
+use Symfony\Component\Console\ConsoleEvents;
+use Symfony\Component\Console\Event\ConsoleExceptionEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+class exception_subscriber implements EventSubscriberInterface
+{
+ /**
+ * @var \phpbb\language\language
+ */
+ protected $language;
+
+ /**
+ * Construct method
+ *
+ * @param \phpbb\language\language $language Language object
+ * @param bool $debug Debug mode
+ */
+ public function __construct(\phpbb\language\language $language, $debug = false)
+ {
+ $this->language = $language;
+ $this->debug = $debug;
+ }
+
+ /**
+ * This listener is run when the ConsoleEvents::EXCEPTION event is triggered.
+ * It translate the exception message. If din debug mode the original exception is embedded.
+ *
+ * @param ConsoleExceptionEvent $event
+ */
+ public function on_exception(ConsoleExceptionEvent $event)
+ {
+ $original_exception = $event->getException();
+
+ if ($original_exception instanceof exception_interface)
+ {
+ $parameters = array_merge(array($original_exception->getMessage()), $original_exception->get_parameters());
+ $message = call_user_func_array(array($this->language, 'lang'), $parameters);
+
+ if ($this->debug)
+ {
+ $exception = new \RuntimeException($message , $original_exception->getCode(), $original_exception);
+ }
+ else
+ {
+ $exception = new \RuntimeException($message , $original_exception->getCode());
+ }
+
+ $event->setException($exception);
+ }
+ }
+
+ static public function getSubscribedEvents()
+ {
+ return array(
+ ConsoleEvents::EXCEPTION => 'on_exception',
+ );
+ }
+}
diff --git a/phpBB/phpbb/di/extension/container_configuration.php b/phpBB/phpbb/di/extension/container_configuration.php
index 4cc7c7c0d1..4585d6509e 100644
--- a/phpBB/phpbb/di/extension/container_configuration.php
+++ b/phpBB/phpbb/di/extension/container_configuration.php
@@ -31,6 +31,12 @@ class container_configuration implements ConfigurationInterface
$rootNode
->children()
->booleanNode('require_dev_dependencies')->defaultValue(false)->end()
+ ->arrayNode('debug')
+ ->addDefaultsIfNotSet()
+ ->children()
+ ->booleanNode('exceptions')->defaultValue(false)->end()
+ ->end()
+ ->end()
->arrayNode('twig')
->addDefaultsIfNotSet()
->children()
diff --git a/phpBB/phpbb/di/extension/core.php b/phpBB/phpbb/di/extension/core.php
index 91b321a684..c48a80a558 100644
--- a/phpBB/phpbb/di/extension/core.php
+++ b/phpBB/phpbb/di/extension/core.php
@@ -80,6 +80,7 @@ class core extends Extension
{
$twig_environment_options['auto_reload'] = true;
}
+
// Replace the 8th argument, the options passed to the environment
$definition->replaceArgument(7, $twig_environment_options);
@@ -88,6 +89,12 @@ class core extends Extension
$definition = $container->getDefinition('template.twig.extensions.debug');
$definition->addTag('twig.extension');
}
+
+ // Set the debug options
+ foreach ($config['debug'] as $name => $value)
+ {
+ $container->setParameter('debug.' . $name, $value);
+ }
}
/**