summaryrefslogtreecommitdiffstats
path: root/lib/private/EventDispatcher/SymfonyAdapter.php
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2021-02-08 11:34:19 +0100
committerChristoph Wurst <christoph@winzerhof-wurst.at>2021-02-09 10:47:14 +0100
commitabc61a9f63ba088aaea5b3c64d2db3316887061e (patch)
tree892b75fd10c47c3a36300d139a61e4231b1c19f8 /lib/private/EventDispatcher/SymfonyAdapter.php
parent9eea1e56dc0c33c504fb0e98578e22115b6b4c79 (diff)
downloadnextcloud-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.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;