diff --git a/3rdparty b/3rdparty index 90a8336c3b..4466d782fa 160000 --- a/3rdparty +++ b/3rdparty @@ -1 +1 @@ -Subproject commit 90a8336c3b51a3be5869569ef8e84949a1e67608 +Subproject commit 4466d782fafe2b53f3839156d10be0d3eacb47d6 diff --git a/lib/public/EventDispatcher/Event.php b/lib/public/EventDispatcher/Event.php index 8e6a5217af..b07efba0f1 100644 --- a/lib/public/EventDispatcher/Event.php +++ b/lib/public/EventDispatcher/Event.php @@ -26,7 +26,7 @@ declare(strict_types=1); namespace OCP\EventDispatcher; -use Symfony\Contracts\EventDispatcher\Event as SymfonyEvent; +use Psr\EventDispatcher\StoppableEventInterface; /** * Base event class for the event dispatcher service @@ -34,9 +34,21 @@ use Symfony\Contracts\EventDispatcher\Event as SymfonyEvent; * Typically this class isn't instantiated directly but sub classed for specific * event types * + * This class extended \Symfony\Contracts\EventDispatcher\Event until 21.0, since + * 22.0.0 this class directly implements the PSR StoppableEventInterface and no + * longer relies on Symfony. This transition does not come with any changes in API, + * the class has the same methods and behavior before and after this change. + * * @since 17.0.0 */ -class Event extends SymfonyEvent { +class Event implements StoppableEventInterface { + + /** + * @var bool + * + * @since 22.0.0 + */ + private $propagationStopped = false; /** * Compatibility constructor @@ -51,4 +63,25 @@ class Event extends SymfonyEvent { */ public function __construct() { } + + /** + * Stops the propagation of the event to further event listeners + * + * @return void + * + * @since 22.0.0 + */ + public function stopPropagation(): void { + $this->propagationStopped = true; + } + + /** + * {@inheritDoc} + * + * @since 22.0.0 + * @see \Psr\EventDispatcher\StoppableEventInterface + */ + public function isPropagationStopped(): bool { + return $this->propagationStopped; + } }