comparison 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
comparison
equal deleted inserted replaced
13:5fb285c0d0e3 14:1fec387a4317
102 foreach ($this->listeners[$event_name] as $priority => &$definitions) { 102 foreach ($this->listeners[$event_name] as $priority => &$definitions) {
103 foreach ($definitions as $key => &$definition) { 103 foreach ($definitions as $key => &$definition) {
104 if (!isset($definition['callable'])) { 104 if (!isset($definition['callable'])) {
105 $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; 105 $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]];
106 } 106 }
107 107 if (is_array($definition['callable']) && isset($definition['callable'][0]) && $definition['callable'][0] instanceof \Closure) {
108 $definition['callable']($event, $event_name, $this); 108 $definition['callable'][0] = $definition['callable'][0]();
109 }
110
111 call_user_func($definition['callable'], $event, $event_name, $this);
109 if ($event->isPropagationStopped()) { 112 if ($event->isPropagationStopped()) {
110 return $event; 113 return $event;
111 } 114 }
112 } 115 }
113 } 116 }
142 foreach ($this->listeners[$event_name] as $priority => &$definitions) { 145 foreach ($this->listeners[$event_name] as $priority => &$definitions) {
143 foreach ($definitions as $key => &$definition) { 146 foreach ($definitions as $key => &$definition) {
144 if (!isset($definition['callable'])) { 147 if (!isset($definition['callable'])) {
145 $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; 148 $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]];
146 } 149 }
150 if (is_array($definition['callable']) && isset($definition['callable'][0]) && $definition['callable'][0] instanceof \Closure) {
151 $definition['callable'][0] = $definition['callable'][0]();
152 }
147 153
148 $result[] = $definition['callable']; 154 $result[] = $definition['callable'];
149 } 155 }
150 } 156 }
151 } 157 }
154 } 160 }
155 161
156 /** 162 /**
157 * {@inheritdoc} 163 * {@inheritdoc}
158 */ 164 */
159 public function getListenerPriority($eventName, $listener) { 165 public function getListenerPriority($event_name, $listener) {
160 // Parts copied from \Symfony\Component\EventDispatcher, that's why you see 166 if (!isset($this->listeners[$event_name])) {
161 // a yoda condition here.
162 if (!isset($this->listeners[$eventName])) {
163 return; 167 return;
164 } 168 }
165 foreach ($this->listeners[$eventName] as $priority => $listeners) { 169 if (is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) {
166 if (FALSE !== ($key = array_search(['callable' => $listener], $listeners, TRUE))) { 170 $listener[0] = $listener[0]();
167 return $priority;
168 }
169 } 171 }
170 // Resolve service definitions if the listener has not been found so far. 172 // Resolve service definitions if the listener has not been found so far.
171 foreach ($this->listeners[$eventName] as $priority => &$definitions) { 173 foreach ($this->listeners[$event_name] as $priority => &$definitions) {
172 foreach ($definitions as $key => &$definition) { 174 foreach ($definitions as $key => &$definition) {
173 if (!isset($definition['callable'])) { 175 if (!isset($definition['callable'])) {
174 // Once the callable is retrieved we keep it for subsequent method 176 // Once the callable is retrieved we keep it for subsequent method
175 // invocations on this class. 177 // invocations on this class.
176 $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; 178 $definition['callable'] = [
177 if ($definition['callable'] === $listener) { 179 $this->container->get($definition['service'][0]),
178 return $priority; 180 $definition['service'][1],
179 } 181 ];
182 }
183 if (is_array($definition['callable']) && isset($definition['callable'][0]) && $definition['callable'][0] instanceof \Closure) {
184 $definition['callable'][0] = $definition['callable'][0]();
185 }
186 if ($definition['callable'] === $listener) {
187 return $priority;
180 } 188 }
181 } 189 }
182 } 190 }
183 } 191 }
184 192
185 /** 193 /**
186 * {@inheritdoc} 194 * {@inheritdoc}
187 */ 195 */
188 public function hasListeners($event_name = NULL) { 196 public function hasListeners($event_name = NULL) {
189 return (bool) count($this->getListeners($event_name)); 197 if ($event_name !== NULL) {
198 return !empty($this->listeners[$event_name]);
199 }
200
201 foreach ($this->listeners as $event_listeners) {
202 if ($event_listeners) {
203 return TRUE;
204 }
205 }
206
207 return FALSE;
190 } 208 }
191 209
192 /** 210 /**
193 * {@inheritdoc} 211 * {@inheritdoc}
194 */ 212 */
212 continue; 230 continue;
213 } 231 }
214 $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]]; 232 $definition['callable'] = [$this->container->get($definition['service'][0]), $definition['service'][1]];
215 } 233 }
216 234
235 if (is_array($definition['callable']) && isset($definition['callable'][0]) && $definition['callable'][0] instanceof \Closure && !$listener instanceof \Closure) {
236 $definition['callable'][0] = $definition['callable'][0]();
237 }
238
239 if (is_array($definition['callable']) && isset($definition['callable'][0]) && !$definition['callable'][0] instanceof \Closure && is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) {
240 $listener[0] = $listener[0]();
241 }
217 if ($definition['callable'] === $listener) { 242 if ($definition['callable'] === $listener) {
218 unset($this->listeners[$event_name][$priority][$key]); 243 unset($definitions[$key]);
219 } 244 }
245 }
246 if ($definitions) {
247 $this->listeners[$event_name][$priority] = $definitions;
248 }
249 else {
250 unset($this->listeners[$event_name][$priority]);
220 } 251 }
221 } 252 }
222 } 253 }
223 254
224 /** 255 /**