Mercurial > hg > isophonics-drupal-site
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 /** |