diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2021-02-08 11:34:19 +0100 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2021-02-09 10:47:14 +0100 |
commit | abc61a9f63ba088aaea5b3c64d2db3316887061e (patch) | |
tree | 892b75fd10c47c3a36300d139a61e4231b1c19f8 /lib/private/EventDispatcher/SymfonyAdapter.php | |
parent | 9eea1e56dc0c33c504fb0e98578e22115b6b4c79 (diff) | |
download | nextcloud-server-abc61a9f63ba088aaea5b3c64d2db3316887061e.tar.gz nextcloud-server-abc61a9f63ba088aaea5b3c64d2db3316887061e.zip |
Fix the legacy dispatcher argument order
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'lib/private/EventDispatcher/SymfonyAdapter.php')
-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; |