aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/common.php2
-rw-r--r--phpBB/includes/event/dispatcher.php42
-rw-r--r--phpBB/includes/event/dispatcher_wrapper.php88
-rw-r--r--tests/event/dispatcher_test.php29
4 files changed, 72 insertions, 89 deletions
diff --git a/phpBB/common.php b/phpBB/common.php
index c7e66ef0d6..fafcb81feb 100644
--- a/phpBB/common.php
+++ b/phpBB/common.php
@@ -100,7 +100,7 @@ $phpbb_class_loader_ext->set_cache($cache->get_driver());
$phpbb_class_loader->set_cache($cache->get_driver());
// Instantiate some basic classes
-$phpbb_dispatcher = new phpbb_event_dispatcher_wrapper(new EventDispatcher());
+$phpbb_dispatcher = new phpbb_event_dispatcher();
$request = new phpbb_request();
$user = new user();
$auth = new auth();
diff --git a/phpBB/includes/event/dispatcher.php b/phpBB/includes/event/dispatcher.php
new file mode 100644
index 0000000000..2bf46b9b06
--- /dev/null
+++ b/phpBB/includes/event/dispatcher.php
@@ -0,0 +1,42 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2012 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+/**
+* @ignore
+*/
+if (!defined('IN_PHPBB'))
+{
+ exit;
+}
+
+use Symfony\Component\EventDispatcher\EventDispatcher;
+
+/**
+* Extension of the Symfony2 EventDispatcher
+*
+* It provides an additional `trigger_event` method, which
+* gives some syntactic sugar for dispatching events. Instead
+* of creating the event object, the method will do that for
+* you.
+*
+* Example:
+*
+* $vars = array('page_title');
+* extract($phpbb_dispatcher->trigger_event('core.index', compact($vars)));
+*
+*/
+class phpbb_event_dispatcher extends EventDispatcher
+{
+ public function trigger_event($eventName, $data = array())
+ {
+ $event = new phpbb_event_data($data);
+ $this->dispatch($eventName, $event);
+ return $event->get_data_filtered(array_keys($data));
+ }
+}
diff --git a/phpBB/includes/event/dispatcher_wrapper.php b/phpBB/includes/event/dispatcher_wrapper.php
deleted file mode 100644
index 5f5d653c3c..0000000000
--- a/phpBB/includes/event/dispatcher_wrapper.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-/**
-*
-* @package phpBB3
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-use Symfony\Component\EventDispatcher\Event;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-
-/**
-* Wrapper around a Symfony2 EventDispatcherInterface
-*
-* It provides an additional `trigger_event` method, which
-* gives some syntactic sugar for dispatching events. Instead
-* of creating the event object, the method will do that for
-* you.
-*
-* Example:
-*
-* $vars = array('page_title');
-* extract($phpbb_dispatcher->trigger_event('core.index', compact($vars)));
-*
-* Apart from that it implements the EventDispatcherInterface
-* and proxies all method calls to the member dispatcher.
-*/
-class phpbb_event_dispatcher_wrapper implements EventDispatcherInterface
-{
- private $dispatcher;
-
- public function __construct(EventDispatcherInterface $dispatcher)
- {
- $this->dispatcher = $dispatcher;
- }
-
- public function dispatch($eventName, Event $event = null)
- {
- $this->dispatcher->dispatch($eventName, $event);
- }
-
- public function addListener($eventName, $listener, $priority = 0)
- {
- $this->dispatcher->addListener($eventName, $listener, $priority);
- }
-
- public function addSubscriber(EventSubscriberInterface $subscriber)
- {
- $this->dispatcher->addSubscriber($subscriber);
- }
-
- public function removeListener($eventName, $listener)
- {
- $this->dispatcher->removeListener($eventName, $listener);
- }
-
- public function removeSubscriber(EventSubscriberInterface $subscriber)
- {
- $this->dispatcher->removeSubscriber($subscriber);
- }
-
- public function getListeners($eventName = null)
- {
- return $this->dispatcher->getListeners($eventName);
- }
-
- public function hasListeners($eventName = null)
- {
- return $this->dispatcher->hasListeners($eventName);
- }
-
- public function trigger_event($eventName, $data = array())
- {
- $event = new phpbb_event_data($data);
- $this->dispatch($eventName, $event);
- return $event->get_data_filtered(array_keys($data));
- }
-}
diff --git a/tests/event/dispatcher_test.php b/tests/event/dispatcher_test.php
new file mode 100644
index 0000000000..59e51b1cdc
--- /dev/null
+++ b/tests/event/dispatcher_test.php
@@ -0,0 +1,29 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2010 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+class phpbb_event_dispatcher_test extends phpbb_test_case
+{
+ public function test_trigger_event()
+ {
+ $dispatcher = new phpbb_event_dispatcher();
+
+ $dispatcher->addListener('core.test_event', function (phpbb_event_data $event) {
+ $event['foo'] = $event['foo'] . '2';
+ $event['bar'] = $event['bar'] . '2';
+ });
+
+ $foo = 'foo';
+ $bar = 'bar';
+
+ $vars = array('foo', 'bar');
+ $result = $dispatcher->trigger_event('core.test_event', compact($vars));
+
+ $this->assertSame(array('foo' => 'foo2', 'bar' => 'bar2'), $result);
+ }
+}