summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2021-02-09 14:39:12 +0100
committerGitHub <noreply@github.com>2021-02-09 14:39:12 +0100
commitf797a943936fc1bee9ccc0a893bd41a90416436d (patch)
tree8c4594f2617eaa43ede2d3f41b89b9f10c975809 /lib
parent4c6bc62f38616c219be0667bf335c1b70f5ec1aa (diff)
parentabc61a9f63ba088aaea5b3c64d2db3316887061e (diff)
downloadnextcloud-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.php30
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;