Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php @ 14:1fec387a4317
Update Drupal core to 8.5.2 via Composer
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:46:53 +0100 |
parents | 4c8ae668cc8c |
children | 129ea1e6d783 |
line wrap: on
line diff
--- a/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php Mon Apr 23 09:33:26 2018 +0100 +++ b/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php Mon Apr 23 09:46:53 2018 +0100 @@ -104,8 +104,11 @@ if (!isset($definition['callable'])) { $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; } + if (is_array($definition['callable']) && isset($definition['callable'][0]) && $definition['callable'][0] instanceof \Closure) { + $definition['callable'][0] = $definition['callable'][0](); + } - $definition['callable']($event, $event_name, $this); + call_user_func($definition['callable'], $event, $event_name, $this); if ($event->isPropagationStopped()) { return $event; } @@ -144,6 +147,9 @@ if (!isset($definition['callable'])) { $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; } + if (is_array($definition['callable']) && isset($definition['callable'][0]) && $definition['callable'][0] instanceof \Closure) { + $definition['callable'][0] = $definition['callable'][0](); + } $result[] = $definition['callable']; } @@ -156,27 +162,29 @@ /** * {@inheritdoc} */ - public function getListenerPriority($eventName, $listener) { - // Parts copied from \Symfony\Component\EventDispatcher, that's why you see - // a yoda condition here. - if (!isset($this->listeners[$eventName])) { + public function getListenerPriority($event_name, $listener) { + if (!isset($this->listeners[$event_name])) { return; } - foreach ($this->listeners[$eventName] as $priority => $listeners) { - if (FALSE !== ($key = array_search(['callable' => $listener], $listeners, TRUE))) { - return $priority; - } + if (is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) { + $listener[0] = $listener[0](); } // Resolve service definitions if the listener has not been found so far. - foreach ($this->listeners[$eventName] as $priority => &$definitions) { + foreach ($this->listeners[$event_name] as $priority => &$definitions) { foreach ($definitions as $key => &$definition) { if (!isset($definition['callable'])) { // Once the callable is retrieved we keep it for subsequent method // invocations on this class. - $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; - if ($definition['callable'] === $listener) { - return $priority; - } + $definition['callable'] = [ + $this->container->get($definition['service'][0]), + $definition['service'][1], + ]; + } + if (is_array($definition['callable']) && isset($definition['callable'][0]) && $definition['callable'][0] instanceof \Closure) { + $definition['callable'][0] = $definition['callable'][0](); + } + if ($definition['callable'] === $listener) { + return $priority; } } } @@ -186,7 +194,17 @@ * {@inheritdoc} */ public function hasListeners($event_name = NULL) { - return (bool) count($this->getListeners($event_name)); + if ($event_name !== NULL) { + return !empty($this->listeners[$event_name]); + } + + foreach ($this->listeners as $event_listeners) { + if ($event_listeners) { + return TRUE; + } + } + + return FALSE; } /** @@ -214,10 +232,23 @@ $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; } + if (is_array($definition['callable']) && isset($definition['callable'][0]) && $definition['callable'][0] instanceof \Closure && !$listener instanceof \Closure) { + $definition['callable'][0] = $definition['callable'][0](); + } + + if (is_array($definition['callable']) && isset($definition['callable'][0]) && !$definition['callable'][0] instanceof \Closure && is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) { + $listener[0] = $listener[0](); + } if ($definition['callable'] === $listener) { - unset($this->listeners[$event_name][$priority][$key]); + unset($definitions[$key]); } } + if ($definitions) { + $this->listeners[$event_name][$priority] = $definitions; + } + else { + unset($this->listeners[$event_name][$priority]); + } } }