Skip to content

Commit

Permalink
fix issues #2897
Browse files Browse the repository at this point in the history
  • Loading branch information
zoghal committed Feb 26, 2014
1 parent 0f584c0 commit 9d4f3e9
Showing 1 changed file with 16 additions and 19 deletions.
35 changes: 16 additions & 19 deletions lib/Cake/Event/CakeEventManager.php
Expand Up @@ -259,30 +259,27 @@ public function dispatch($event) {
* @return array
*/
public function listeners($eventKey) {
$localListeners = array();
$priorities = array();
if (!$this->_isGlobal) {
$globalListeners = self::instance()->prioritisedListeners($eventKey);
} else {
$globalListeners = $this->prioritisedListeners($eventKey);
$localListeners = $this->prioritisedListeners($eventKey);
$localListeners = empty($localListeners) ? array() : $localListeners;
}
$listeners = array_merge($this->_listeners, self::instance()->_listeners);
$globalListeners = self::instance()->prioritisedListeners($eventKey);
$globalListeners = empty($globalListeners) ? array() : $globalListeners;

if (empty($listeners[$eventKey]) && empty($globalListeners)) {
return array();
}
$priorities = array_merge(array_keys($globalListeners), array_keys($localListeners));
$priorities = array_unique($priorities);
asort($priorities);

$listeners = $listeners[$eventKey];
foreach ($globalListeners as $priority => $priorityQ) {
if (!empty($listeners[$priority])) {
$listeners[$priority] = array_merge($priorityQ, $listeners[$priority]);
unset($globalListeners[$priority]);
}
}
$listeners = $listeners + $globalListeners;

ksort($listeners);
$result = array();
foreach ($listeners as $priorityQ) {
$result = array_merge($result, $priorityQ);
foreach ($priorities as $priority) {
if (isset($globalListeners[$priority])) {
$result = array_merge($result, $globalListeners[$priority]);
}
if (isset($localListeners[$priority])) {
$result = array_merge($result, $localListeners[$priority]);
}
}
return $result;
}
Expand Down

0 comments on commit 9d4f3e9

Please sign in to comment.