diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2021-02-09 14:39:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-09 14:39:12 +0100 |
commit | f797a943936fc1bee9ccc0a893bd41a90416436d (patch) | |
tree | 8c4594f2617eaa43ede2d3f41b89b9f10c975809 /lib | |
parent | 4c6bc62f38616c219be0667bf335c1b70f5ec1aa (diff) | |
parent | abc61a9f63ba088aaea5b3c64d2db3316887061e (diff) | |
download | nextcloud-server-f797a943936fc1bee9ccc0a893bd41a90416436d.tar.gz nextcloud-server-f797a943936fc1bee9ccc0a893bd41a90416436d.zip |
Merge pull request #25531 from nextcloud/fix/dispatcher-argument-order
Fix the legacy dispatcher argument order
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/EventDispatcher/SymfonyAdapter.php | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/private/EventDispatcher/SymfonyAdapter.php b/lib/private/EventDispatcher/SymfonyAdapter.php index 3bd74e719fb..39985cb112c 100644 --- a/lib/private/EventDispatcher/SymfonyAdapter.php +++ b/lib/private/EventDispatcher/SymfonyAdapter.php @@ -35,6 +35,8 @@ use OCP\EventDispatcher\Event; use OCP\ILogger; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use function is_object; +use function is_string; /** * @deprecated 20.0.0 use \OCP\EventDispatcher\IEventDispatcher @@ -54,6 +56,28 @@ class SymfonyAdapter implements EventDispatcherInterface { $this->logger = $logger; } + private static function detectEventAndName($a, $b) { + if (is_object($a) && (is_string($b) || $b === null)) { + // a is the event, the other one is the optional name + return [$a, $b]; + } + if (is_object($b) && (is_string($a) || $a === null)) { + // b is the event, the other one is the optional name + return [$b, $a]; + } + if (is_string($a) && $b === null) { + // a is a payload-less event + return [null, $a]; + } + if (is_string($b) && $a === null) { + // b is a payload-less event + return [null, $b]; + } + + // Anything else we can't detect + return [$a, $b]; + } + /** * Dispatches an event to all registered listeners. * @@ -67,7 +91,13 @@ class SymfonyAdapter implements EventDispatcherInterface { * @deprecated 20.0.0 */ public function dispatch($eventName, $event = null): object { + [$event, $eventName] = self::detectEventAndName($event, $eventName); + // type hinting is not possible, due to usage of GenericEvent + if ($event instanceof Event && $eventName === null) { + $this->eventDispatcher->dispatchTyped($event); + return $event; + } if ($event instanceof Event) { $this->eventDispatcher->dispatch($eventName, $event); return $event; |