From e905680f9b630a48de95cace73c9646a5e52e673 Mon Sep 17 00:00:00 2001 From: doctrine Date: Tue, 4 Jul 2006 23:05:21 +0000 Subject: [PATCH] New component: Doctrine_EventListener_Chain --- Doctrine/Configurable.php | 6 +++- Doctrine/EventListener/Chain.php | 52 +++++++++++++++++++++++++++++ Doctrine/EventListener/Debugger.php | 1 + 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 Doctrine/EventListener/Chain.php diff --git a/Doctrine/Configurable.php b/Doctrine/Configurable.php index 7cd5a393c..07d96468e 100644 --- a/Doctrine/Configurable.php +++ b/Doctrine/Configurable.php @@ -118,8 +118,12 @@ abstract class Doctrine_Configurable { * @param Doctrine_EventListener $listener * @return void */ - final public function setEventListener(Doctrine_EventListener $listener) { + final public function setEventListener($listener) { $i = Doctrine::ATTR_LISTENER; + if( ! ($listener instanceof Doctrine_EventListener) && + ! ($listener instanceof Doctrine_EventListener_Chain)) + throw new Doctrine_Exception("EventListener must extend Doctrine_EventListener or Doctrine_EventListener_Chain"); + $this->attributes[$i] = $listener; } /** diff --git a/Doctrine/EventListener/Chain.php b/Doctrine/EventListener/Chain.php new file mode 100644 index 000000000..e7f85cbc2 --- /dev/null +++ b/Doctrine/EventListener/Chain.php @@ -0,0 +1,52 @@ +listeners[] = $listener; + } + /** + * returns a Doctrine_EvenListener on success + * and null on failure + * + * @param mixed $key + * @return mixed + */ + public function get($key) { + if( ! isset($this->listeners[$key])) + return null; + + return $this->listeners[$key]; + } + /** + * set + * + * @param mixed $key + * @param Doctrine_EventListener $listener + * @return void + */ + public function set($key, Doctrine_EventListener $listener) { + $this->listeners[$key] = $listener; + } + /** + * this method should only be called internally by + * doctrine, since it doesn't do any method existence checking + * + * @param method $method + * @param array $args + */ + public function __call($method, $args) { + foreach($this->listeners as $listener) { + $listener->$method($args[0]); + } + } +} +?> diff --git a/Doctrine/EventListener/Debugger.php b/Doctrine/EventListener/Debugger.php index 160aa95bb..2656a5585 100644 --- a/Doctrine/EventListener/Debugger.php +++ b/Doctrine/EventListener/Debugger.php @@ -16,6 +16,7 @@ class Doctrine_DebugMessage { } } class Doctrine_EventListener_Debugger extends Doctrine_EventListener { + const EVENT_LOAD = 1; const EVENT_PRELOAD = 2; const EVENT_SLEEP = 3;