Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 133bd0a

Browse files
committed
Merge branch '2.8'
* 2.8: [Yaml] deprecated non-escaped \ in double-quoted strings when parsing removed wrong dep [EventDispatcher] added EventDispatcher::getListenerPriority()
2 parents 5b67819 + 77f5141 commit 133bd0a

14 files changed

+167
-121
lines changed

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -269,27 +269,21 @@ private function getEventDispatcherListenersData(EventDispatcherInterface $event
269269
{
270270
$data = array();
271271

272-
$registeredListeners = $eventDispatcher->getListeners($event, true);
272+
$registeredListeners = $eventDispatcher->getListeners($event);
273273
if (null !== $event) {
274-
krsort($registeredListeners);
275-
foreach ($registeredListeners as $priority => $listeners) {
276-
foreach ($listeners as $listener) {
277-
$listener = $this->getCallableData($listener);
278-
$listener['priority'] = $priority;
279-
$data[] = $listener;
280-
}
274+
foreach ($registeredListeners as $listener) {
275+
$l = $this->getCallableData($listener);
276+
$l['priority'] = $eventDispatcher->getListenerPriority($event, $listener);
277+
$data[] = $l;
281278
}
282279
} else {
283280
ksort($registeredListeners);
284281

285282
foreach ($registeredListeners as $eventListened => $eventListeners) {
286-
krsort($eventListeners);
287-
foreach ($eventListeners as $priority => $listeners) {
288-
foreach ($listeners as $listener) {
289-
$listener = $this->getCallableData($listener);
290-
$listener['priority'] = $priority;
291-
$data[$eventListened][] = $listener;
292-
}
283+
foreach ($eventListeners as $eventListener) {
284+
$l = $this->getCallableData($eventListener);
285+
$l['priority'] = $eventDispatcher->getListenerPriority($eventListened, $eventListener);
286+
$data[$eventListened][] = $l;
293287
}
294288
}
295289
}

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -253,30 +253,23 @@ protected function describeEventDispatcherListeners(EventDispatcherInterface $ev
253253

254254
$this->write(sprintf('# %s', $title)."\n");
255255

256-
$registeredListeners = $eventDispatcher->getListeners($event, true);
256+
$registeredListeners = $eventDispatcher->getListeners($event);
257257
if (null !== $event) {
258-
krsort($registeredListeners);
259-
$order = 1;
260-
foreach ($registeredListeners as $priority => $listeners) {
261-
foreach ($listeners as $listener) {
262-
$this->write("\n".sprintf('## Listener %d', $order++)."\n");
263-
$this->describeCallable($listener);
264-
$this->write(sprintf('- Priority: `%d`', $priority)."\n");
265-
}
258+
foreach ($registeredListeners as $order => $listener) {
259+
$this->write("\n".sprintf('## Listener %d', $order + 1)."\n");
260+
$this->describeCallable($listener);
261+
$this->write(sprintf('- Priority: `%d`', $eventDispatcher->getListenerPriority($event, $listener))."\n");
266262
}
267263
} else {
268264
ksort($registeredListeners);
269265

270266
foreach ($registeredListeners as $eventListened => $eventListeners) {
271267
$this->write("\n".sprintf('## %s', $eventListened)."\n");
272-
krsort($eventListeners);
273-
$order = 1;
274-
foreach ($eventListeners as $priority => $listeners) {
275-
foreach ($listeners as $listener) {
276-
$this->write("\n".sprintf('### Listener %d', $order++)."\n");
277-
$this->describeCallable($listener);
278-
$this->write(sprintf('- Priority: `%d`', $priority)."\n");
279-
}
268+
269+
foreach ($eventListeners as $order => $eventListener) {
270+
$this->write("\n".sprintf('### Listener %d', $order + 1)."\n");
271+
$this->describeCallable($eventListener);
272+
$this->write(sprintf('- Priority: `%d`', $eventDispatcher->getListenerPriority($eventListened, $eventListener))."\n");
280273
}
281274
}
282275
}

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -341,15 +341,14 @@ protected function describeEventDispatcherListeners(EventDispatcherInterface $ev
341341

342342
$options['output']->title($title);
343343

344-
$registeredListeners = $eventDispatcher->getListeners($event, true);
345-
344+
$registeredListeners = $eventDispatcher->getListeners($event);
346345
if (null !== $event) {
347-
$this->renderEventListenerTable($registeredListeners, $options['output']);
346+
$this->renderEventListenerTable($eventDispatcher, $event, $registeredListeners, $options['output']);
348347
} else {
349348
ksort($registeredListeners);
350349
foreach ($registeredListeners as $eventListened => $eventListeners) {
351350
$options['output']->section(sprintf('"%s" event', $eventListened));
352-
$this->renderEventListenerTable($eventListeners, $options['output']);
351+
$this->renderEventListenerTable($eventDispatcher, $eventListened, $eventListeners, $options['output']);
353352
}
354353
}
355354
}
@@ -365,17 +364,14 @@ protected function describeCallable($callable, array $options = array())
365364
/**
366365
* @param array $array
367366
*/
368-
private function renderEventListenerTable(array $eventListeners, SymfonyStyle $renderer)
367+
private function renderEventListenerTable(EventDispatcherInterface $eventDispatcher, $event, array $eventListeners, SymfonyStyle $renderer)
369368
{
370369
$tableHeaders = array('Order', 'Callable', 'Priority');
371370
$tableRows = array();
372371

373-
krsort($eventListeners);
374372
$order = 1;
375-
foreach ($eventListeners as $priority => $listeners) {
376-
foreach ($listeners as $listener) {
377-
$tableRows[] = array(sprintf('#%d', $order++), $this->formatCallable($listener), $priority);
378-
}
373+
foreach ($eventListeners as $order => $listener) {
374+
$tableRows[] = array(sprintf('#%d', $order + 1), $this->formatCallable($listener), $eventDispatcher->getListenerPriority($event, $listener));
379375
}
380376

381377
$renderer->table($tableHeaders, $tableRows);

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -429,17 +429,17 @@ private function getEventDispatcherListenersDocument(EventDispatcherInterface $e
429429
$dom = new \DOMDocument('1.0', 'UTF-8');
430430
$dom->appendChild($eventDispatcherXML = $dom->createElement('event-dispatcher'));
431431

432-
$registeredListeners = $eventDispatcher->getListeners($event, true);
432+
$registeredListeners = $eventDispatcher->getListeners($event);
433433
if (null !== $event) {
434-
$this->appendEventListenerDocument($eventDispatcherXML, $registeredListeners);
434+
$this->appendEventListenerDocument($eventDispatcher, $event, $eventDispatcherXML, $registeredListeners);
435435
} else {
436436
ksort($registeredListeners);
437437

438438
foreach ($registeredListeners as $eventListened => $eventListeners) {
439439
$eventDispatcherXML->appendChild($eventXML = $dom->createElement('event'));
440440
$eventXML->setAttribute('name', $eventListened);
441441

442-
$this->appendEventListenerDocument($eventXML, $eventListeners);
442+
$this->appendEventListenerDocument($eventDispatcher, $eventListened, $eventXML, $eventListeners);
443443
}
444444
}
445445

@@ -450,16 +450,13 @@ private function getEventDispatcherListenersDocument(EventDispatcherInterface $e
450450
* @param \DOMElement $element
451451
* @param array $eventListeners
452452
*/
453-
private function appendEventListenerDocument(\DOMElement $element, array $eventListeners)
453+
private function appendEventListenerDocument(EventDispatcherInterface $eventDispatcher, $event, \DOMElement $element, array $eventListeners)
454454
{
455-
krsort($eventListeners);
456-
foreach ($eventListeners as $priority => $listeners) {
457-
foreach ($listeners as $listener) {
458-
$callableXML = $this->getCallableDocument($listener);
459-
$callableXML->childNodes->item(0)->setAttribute('priority', $priority);
455+
foreach ($eventListeners as $listener) {
456+
$callableXML = $this->getCallableDocument($listener);
457+
$callableXML->childNodes->item(0)->setAttribute('priority', $eventDispatcher->getListenerPriority($event, $listener));
460458

461-
$element->appendChild($element->ownerDocument->importNode($callableXML->childNodes->item(0), true));
462-
}
459+
$element->appendChild($element->ownerDocument->importNode($callableXML->childNodes->item(0), true));
463460
}
464461
}
465462

src/Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public function hasListeners($eventName = null)
117117
/**
118118
* {@inheritdoc}
119119
*/
120-
public function getListeners($eventName = null, $withPriorities = false)
120+
public function getListeners($eventName = null)
121121
{
122122
if (null === $eventName) {
123123
foreach ($this->listenerIds as $serviceEventName => $args) {
@@ -127,7 +127,17 @@ public function getListeners($eventName = null, $withPriorities = false)
127127
$this->lazyLoad($eventName);
128128
}
129129

130-
return parent::getListeners($eventName, $withPriorities);
130+
return parent::getListeners($eventName);
131+
}
132+
133+
/**
134+
* {@inheritdoc}
135+
*/
136+
public function getListenerPriority($eventName, $listener)
137+
{
138+
$this->lazyLoad($eventName);
139+
140+
return parent::getListenerPriority($eventName, $listener);
131141
}
132142

133143
/**

src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php

Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,17 @@ public function removeSubscriber(EventSubscriberInterface $subscriber)
9494
/**
9595
* {@inheritdoc}
9696
*/
97-
public function getListeners($eventName = null, $withPriorities = false)
97+
public function getListeners($eventName = null)
9898
{
99-
return $this->dispatcher->getListeners($eventName, $withPriorities);
99+
return $this->dispatcher->getListeners($eventName);
100+
}
101+
102+
/**
103+
* {@inheritdoc}
104+
*/
105+
public function getListenerPriority($eventName, $listener)
106+
{
107+
return $this->dispatcher->getListenerPriority($eventName, $listener);
100108
}
101109

102110
/**
@@ -141,8 +149,7 @@ public function getCalledListeners()
141149
$called = array();
142150
foreach ($this->called as $eventName => $listeners) {
143151
foreach ($listeners as $listener) {
144-
$priority = $this->getListenerPriority($eventName, $listener);
145-
$info = $this->getListenerInfo($listener->getWrappedListener(), $eventName, $priority);
152+
$info = $this->getListenerInfo($listener->getWrappedListener(), $eventName);
146153
$called[$eventName.'.'.$info['pretty']] = $info;
147154
}
148155
}
@@ -156,7 +163,7 @@ public function getCalledListeners()
156163
public function getNotCalledListeners()
157164
{
158165
try {
159-
$allListeners = $this->getListeners(null, true);
166+
$allListeners = $this->getListeners();
160167
} catch (\Exception $e) {
161168
if (null !== $this->logger) {
162169
$this->logger->info('An exception was thrown while getting the uncalled listeners.', array('exception' => $e));
@@ -167,24 +174,22 @@ public function getNotCalledListeners()
167174
}
168175

169176
$notCalled = array();
170-
foreach ($allListeners as $eventName => $priorities) {
171-
foreach ($priorities as $priority => $listeners) {
172-
foreach ($listeners as $listener) {
173-
$called = false;
174-
if (isset($this->called[$eventName])) {
175-
foreach ($this->called[$eventName] as $l) {
176-
if ($l->getWrappedListener() === $listener) {
177-
$called = true;
178-
179-
break;
180-
}
177+
foreach ($allListeners as $eventName => $listeners) {
178+
foreach ($listeners as $listener) {
179+
$called = false;
180+
if (isset($this->called[$eventName])) {
181+
foreach ($this->called[$eventName] as $l) {
182+
if ($l->getWrappedListener() === $listener) {
183+
$called = true;
184+
185+
break;
181186
}
182187
}
188+
}
183189

184-
if (!$called) {
185-
$info = $this->getListenerInfo($listener, $eventName, $priority);
186-
$notCalled[$eventName.'.'.$info['pretty']] = $info;
187-
}
190+
if (!$called) {
191+
$info = $this->getListenerInfo($listener, $eventName);
192+
$notCalled[$eventName.'.'.$info['pretty']] = $info;
188193
}
189194
}
190195
}
@@ -286,11 +291,11 @@ private function postProcess($eventName)
286291
*
287292
* @return array Information about the listener
288293
*/
289-
private function getListenerInfo($listener, $eventName, $priority = null)
294+
private function getListenerInfo($listener, $eventName)
290295
{
291296
$info = array(
292297
'event' => $eventName,
293-
'priority' => $priority,
298+
'priority' => $this->getListenerPriority($eventName, $listener),
294299
);
295300
if ($listener instanceof \Closure) {
296301
$info += array(
@@ -339,28 +344,6 @@ private function getListenerInfo($listener, $eventName, $priority = null)
339344
return $info;
340345
}
341346

342-
private function getListenerPriority($eventName, $listenerConfig)
343-
{
344-
try {
345-
$allListeners = $this->getListeners(null, true);
346-
} catch (\Exception $e) {
347-
if (null !== $this->logger) {
348-
$this->logger->info('An exception was thrown while getting the listeners.', array('exception' => $e));
349-
}
350-
351-
return;
352-
}
353-
354-
$listenerWrapper = $listenerConfig->getWrappedListener();
355-
foreach ($allListeners[$eventName] as $priority => $listeners) {
356-
foreach ($listeners as $listener) {
357-
if (is_array($listenerWrapper) && $listenerWrapper[0] === $listener[0]) {
358-
return $priority;
359-
}
360-
}
361-
}
362-
}
363-
364347
private function sortListenersByPriority($a, $b)
365348
{
366349
if (is_int($a['priority']) && !is_int($b['priority'])) {

src/Symfony/Component/EventDispatcher/EventDispatcher.php

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,8 @@ public function dispatch($eventName, Event $event = null)
4949
/**
5050
* {@inheritdoc}
5151
*/
52-
public function getListeners($eventName = null, $withPriorities = false)
52+
public function getListeners($eventName = null)
5353
{
54-
if (true === $withPriorities) {
55-
if (null !== $eventName) {
56-
return isset($this->listeners[$eventName]) ? $this->listeners[$eventName] : array();
57-
}
58-
59-
return array_filter($this->listeners);
60-
}
61-
6254
if (null !== $eventName) {
6355
if (!isset($this->listeners[$eventName])) {
6456
return array();
@@ -80,6 +72,29 @@ public function getListeners($eventName = null, $withPriorities = false)
8072
return array_filter($this->sorted);
8173
}
8274

75+
/**
76+
* Gets the listener priority for a specific event.
77+
*
78+
* Returns null if the event or the listener does not exist.
79+
*
80+
* @param string $eventName The name of the event
81+
* @param callable $listener The listener to remove
82+
*
83+
* @return int|null The event listener priority
84+
*/
85+
public function getListenerPriority($eventName, $listener)
86+
{
87+
if (!isset($this->listeners[$eventName])) {
88+
return;
89+
}
90+
91+
foreach ($this->listeners[$eventName] as $priority => $listeners) {
92+
if (false !== ($key = array_search($listener, $listeners, true))) {
93+
return $priority;
94+
}
95+
}
96+
}
97+
8398
/**
8499
* {@inheritdoc}
85100
*/
@@ -174,8 +189,6 @@ protected function doDispatch($listeners, $eventName, Event $event)
174189
*/
175190
private function sortListeners($eventName)
176191
{
177-
$this->sorted[$eventName] = array();
178-
179192
krsort($this->listeners[$eventName]);
180193
$this->sorted[$eventName] = call_user_func_array('array_merge', $this->listeners[$eventName]);
181194
}

src/Symfony/Component/EventDispatcher/ImmutableEventDispatcher.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,17 @@ public function removeSubscriber(EventSubscriberInterface $subscriber)
7878
/**
7979
* {@inheritdoc}
8080
*/
81-
public function getListeners($eventName = null, $withPriorities = false)
81+
public function getListeners($eventName = null)
8282
{
83-
return $this->dispatcher->getListeners($eventName, $withPriorities);
83+
return $this->dispatcher->getListeners($eventName);
84+
}
85+
86+
/**
87+
* {@inheritdoc}
88+
*/
89+
public function getListenerPriority($eventName, $listener)
90+
{
91+
return $this->dispatcher->getListenerPriority($eventName, $listener);
8492
}
8593

8694
/**

0 commit comments

Comments
 (0)