summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2021-02-10 09:13:02 +0100
committerChristoph Wurst <christoph@winzerhof-wurst.at>2021-02-10 15:15:29 +0100
commit0a28440bf62d7f0a29652265864f058c18632a7f (patch)
treef2a63160b7cef7865cb5d181f63046c112c676e2 /lib
parentd42f9e65a22c7ca94a8858af640719c7c9d85c8a (diff)
downloadnextcloud-server-0a28440bf62d7f0a29652265864f058c18632a7f.tar.gz
nextcloud-server-0a28440bf62d7f0a29652265864f058c18632a7f.zip
Make our event base class independent of Symfony and follow PSR
Symfony is migrating towards a pure PSR event dispatcher, hence their event class is POPO that implements the PSR stoppable event interface. Since we can do that ourself and this change doesn't come with any API changes (breakage), it's easy for us to become independent of Symfony but also stay PSR-compliant at the same step. Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'lib')
-rw-r--r--lib/public/EventDispatcher/Event.php37
1 files changed, 35 insertions, 2 deletions
diff --git a/lib/public/EventDispatcher/Event.php b/lib/public/EventDispatcher/Event.php
index 8e6a5217af9..b07efba0f19 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;
+ }
}