]> source.dussan.org Git - nextcloud-server.git/commitdiff
forward previously registerd hooks
authorRobin Appelman <icewind@owncloud.com>
Mon, 8 Jul 2013 14:54:26 +0000 (16:54 +0200)
committerRobin Appelman <icewind@owncloud.com>
Mon, 8 Jul 2013 14:54:26 +0000 (16:54 +0200)
lib/hooks/basicemitter.php
lib/hooks/forwardingemitter.php
tests/lib/hooks/forwardingemitter.php

index e615a58cfe846c3fde3d4aaf1d6ffdaf2b8a65c9..9ffe1af23144f6aae36841e3fbc3c689f5c272a9 100644 (file)
@@ -13,7 +13,7 @@ abstract class BasicEmitter implements Emitter {
        /**
         * @var (callable[])[] $listeners
         */
-       private $listeners = array();
+       protected $listeners = array();
 
        /**
         * @param string $scope
index 518641ac7cf22381769185bb66000b7cd28a5c5f..1aacc4012e0014cb933af81f56a2d5f5e88da362 100644 (file)
@@ -38,5 +38,13 @@ abstract class ForwardingEmitter extends BasicEmitter {
         */
        protected function forward($emitter) {
                $this->forwardEmitters[] = $emitter;
+
+               //forward all previously connected hooks
+               foreach ($this->listeners as $key => $listeners) {
+                       list($scope, $method) = explode('::', $key, 2);
+                       foreach ($listeners as $listener) {
+                               $emitter->listen($scope, $method, $listener);
+                       }
+               }
        }
 }
index 0686ebece9f49e23db7e9357153152c820573a8d..decf6bb354cae24f0bf1afc7572cd5dee7e10bf7 100644 (file)
@@ -59,4 +59,16 @@ class ForwardingEmitter extends BasicEmitter {
                $baseEmitter1->emit('Test', 'test2');
                $this->assertEquals(2, $hookCalled);
        }
+
+       public function testForwardExistingHooks() {
+               $baseEmitter = new PublicEmitter();
+               $forwardingEmitter = new DummyForwardingEmitter();
+               $hookCalled = false;
+               $forwardingEmitter->listen('Test', 'test', function () use (&$hookCalled) {
+                       $hookCalled = true;
+               });
+               $forwardingEmitter->forward($baseEmitter);
+               $baseEmitter->emit('Test', 'test');
+               $this->assertTrue($hookCalled);
+       }
 }