summaryrefslogtreecommitdiff
path: root/vendor/doctrine/orm/src/Event
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/doctrine/orm/src/Event')
-rw-r--r--vendor/doctrine/orm/src/Event/ListenersInvoker.php98
-rw-r--r--vendor/doctrine/orm/src/Event/LoadClassMetadataEventArgs.php25
-rw-r--r--vendor/doctrine/orm/src/Event/OnClassMetadataNotFoundEventArgs.php49
-rw-r--r--vendor/doctrine/orm/src/Event/OnClearEventArgs.php19
-rw-r--r--vendor/doctrine/orm/src/Event/OnFlushEventArgs.php19
-rw-r--r--vendor/doctrine/orm/src/Event/PostFlushEventArgs.php19
-rw-r--r--vendor/doctrine/orm/src/Event/PostLoadEventArgs.php13
-rw-r--r--vendor/doctrine/orm/src/Event/PostPersistEventArgs.php13
-rw-r--r--vendor/doctrine/orm/src/Event/PostRemoveEventArgs.php13
-rw-r--r--vendor/doctrine/orm/src/Event/PostUpdateEventArgs.php13
-rw-r--r--vendor/doctrine/orm/src/Event/PreFlushEventArgs.php19
-rw-r--r--vendor/doctrine/orm/src/Event/PrePersistEventArgs.php13
-rw-r--r--vendor/doctrine/orm/src/Event/PreRemoveEventArgs.php13
-rw-r--r--vendor/doctrine/orm/src/Event/PreUpdateEventArgs.php100
14 files changed, 426 insertions, 0 deletions
diff --git a/vendor/doctrine/orm/src/Event/ListenersInvoker.php b/vendor/doctrine/orm/src/Event/ListenersInvoker.php
new file mode 100644
index 0000000..c0c327e
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/ListenersInvoker.php
@@ -0,0 +1,98 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\Common\EventArgs;
8use Doctrine\Common\EventManager;
9use Doctrine\ORM\EntityManagerInterface;
10use Doctrine\ORM\Mapping\ClassMetadata;
11use Doctrine\ORM\Mapping\EntityListenerResolver;
12
13/**
14 * A method invoker based on entity lifecycle.
15 */
16class ListenersInvoker
17{
18 final public const INVOKE_NONE = 0;
19 final public const INVOKE_LISTENERS = 1;
20 final public const INVOKE_CALLBACKS = 2;
21 final public const INVOKE_MANAGER = 4;
22
23 /** The Entity listener resolver. */
24 private readonly EntityListenerResolver $resolver;
25
26 /** The EventManager used for dispatching events. */
27 private readonly EventManager $eventManager;
28
29 public function __construct(EntityManagerInterface $em)
30 {
31 $this->eventManager = $em->getEventManager();
32 $this->resolver = $em->getConfiguration()->getEntityListenerResolver();
33 }
34
35 /**
36 * Get the subscribed event systems
37 *
38 * @param ClassMetadata $metadata The entity metadata.
39 * @param string $eventName The entity lifecycle event.
40 *
41 * @psalm-return int-mask-of<self::INVOKE_*> Bitmask of subscribed event systems.
42 */
43 public function getSubscribedSystems(ClassMetadata $metadata, string $eventName): int
44 {
45 $invoke = self::INVOKE_NONE;
46
47 if (isset($metadata->lifecycleCallbacks[$eventName])) {
48 $invoke |= self::INVOKE_CALLBACKS;
49 }
50
51 if (isset($metadata->entityListeners[$eventName])) {
52 $invoke |= self::INVOKE_LISTENERS;
53 }
54
55 if ($this->eventManager->hasListeners($eventName)) {
56 $invoke |= self::INVOKE_MANAGER;
57 }
58
59 return $invoke;
60 }
61
62 /**
63 * Dispatches the lifecycle event of the given entity.
64 *
65 * @param ClassMetadata $metadata The entity metadata.
66 * @param string $eventName The entity lifecycle event.
67 * @param object $entity The Entity on which the event occurred.
68 * @param EventArgs $event The Event args.
69 * @psalm-param int-mask-of<self::INVOKE_*> $invoke Bitmask to invoke listeners.
70 */
71 public function invoke(
72 ClassMetadata $metadata,
73 string $eventName,
74 object $entity,
75 EventArgs $event,
76 int $invoke,
77 ): void {
78 if ($invoke & self::INVOKE_CALLBACKS) {
79 foreach ($metadata->lifecycleCallbacks[$eventName] as $callback) {
80 $entity->$callback($event);
81 }
82 }
83
84 if ($invoke & self::INVOKE_LISTENERS) {
85 foreach ($metadata->entityListeners[$eventName] as $listener) {
86 $class = $listener['class'];
87 $method = $listener['method'];
88 $instance = $this->resolver->resolve($class);
89
90 $instance->$method($entity, $event);
91 }
92 }
93
94 if ($invoke & self::INVOKE_MANAGER) {
95 $this->eventManager->dispatchEvent($eventName, $event);
96 }
97 }
98}
diff --git a/vendor/doctrine/orm/src/Event/LoadClassMetadataEventArgs.php b/vendor/doctrine/orm/src/Event/LoadClassMetadataEventArgs.php
new file mode 100644
index 0000000..b450616
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/LoadClassMetadataEventArgs.php
@@ -0,0 +1,25 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\ORM\Mapping\ClassMetadata;
9use Doctrine\Persistence\Event\LoadClassMetadataEventArgs as BaseLoadClassMetadataEventArgs;
10
11/**
12 * Class that holds event arguments for a loadMetadata event.
13 *
14 * @extends BaseLoadClassMetadataEventArgs<ClassMetadata<object>, EntityManagerInterface>
15 */
16class LoadClassMetadataEventArgs extends BaseLoadClassMetadataEventArgs
17{
18 /**
19 * Retrieve associated EntityManager.
20 */
21 public function getEntityManager(): EntityManagerInterface
22 {
23 return $this->getObjectManager();
24 }
25}
diff --git a/vendor/doctrine/orm/src/Event/OnClassMetadataNotFoundEventArgs.php b/vendor/doctrine/orm/src/Event/OnClassMetadataNotFoundEventArgs.php
new file mode 100644
index 0000000..762c083
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/OnClassMetadataNotFoundEventArgs.php
@@ -0,0 +1,49 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\ManagerEventArgs;
9use Doctrine\Persistence\Mapping\ClassMetadata;
10use Doctrine\Persistence\ObjectManager;
11
12/**
13 * Class that holds event arguments for a `onClassMetadataNotFound` event.
14 *
15 * This object is mutable by design, allowing callbacks having access to it to set the
16 * found metadata in it, and therefore "cancelling" a `onClassMetadataNotFound` event
17 *
18 * @extends ManagerEventArgs<EntityManagerInterface>
19 */
20class OnClassMetadataNotFoundEventArgs extends ManagerEventArgs
21{
22 private ClassMetadata|null $foundMetadata = null;
23
24 /** @param EntityManagerInterface $objectManager */
25 public function __construct(
26 private readonly string $className,
27 ObjectManager $objectManager,
28 ) {
29 parent::__construct($objectManager);
30 }
31
32 public function setFoundMetadata(ClassMetadata|null $classMetadata): void
33 {
34 $this->foundMetadata = $classMetadata;
35 }
36
37 public function getFoundMetadata(): ClassMetadata|null
38 {
39 return $this->foundMetadata;
40 }
41
42 /**
43 * Retrieve class name for which a failed metadata fetch attempt was executed
44 */
45 public function getClassName(): string
46 {
47 return $this->className;
48 }
49}
diff --git a/vendor/doctrine/orm/src/Event/OnClearEventArgs.php b/vendor/doctrine/orm/src/Event/OnClearEventArgs.php
new file mode 100644
index 0000000..29a42f2
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/OnClearEventArgs.php
@@ -0,0 +1,19 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\OnClearEventArgs as BaseOnClearEventArgs;
9
10/**
11 * Provides event arguments for the onClear event.
12 *
13 * @link www.doctrine-project.org
14 *
15 * @extends BaseOnClearEventArgs<EntityManagerInterface>
16 */
17class OnClearEventArgs extends BaseOnClearEventArgs
18{
19}
diff --git a/vendor/doctrine/orm/src/Event/OnFlushEventArgs.php b/vendor/doctrine/orm/src/Event/OnFlushEventArgs.php
new file mode 100644
index 0000000..b0594ca
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/OnFlushEventArgs.php
@@ -0,0 +1,19 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\ManagerEventArgs;
9
10/**
11 * Provides event arguments for the preFlush event.
12 *
13 * @link www.doctrine-project.org
14 *
15 * @extends ManagerEventArgs<EntityManagerInterface>
16 */
17class OnFlushEventArgs extends ManagerEventArgs
18{
19}
diff --git a/vendor/doctrine/orm/src/Event/PostFlushEventArgs.php b/vendor/doctrine/orm/src/Event/PostFlushEventArgs.php
new file mode 100644
index 0000000..ca41ba8
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/PostFlushEventArgs.php
@@ -0,0 +1,19 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\ManagerEventArgs;
9
10/**
11 * Provides event arguments for the postFlush event.
12 *
13 * @link www.doctrine-project.org
14 *
15 * @extends ManagerEventArgs<EntityManagerInterface>
16 */
17class PostFlushEventArgs extends ManagerEventArgs
18{
19}
diff --git a/vendor/doctrine/orm/src/Event/PostLoadEventArgs.php b/vendor/doctrine/orm/src/Event/PostLoadEventArgs.php
new file mode 100644
index 0000000..8344e68
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/PostLoadEventArgs.php
@@ -0,0 +1,13 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\LifecycleEventArgs;
9
10/** @extends LifecycleEventArgs<EntityManagerInterface> */
11final class PostLoadEventArgs extends LifecycleEventArgs
12{
13}
diff --git a/vendor/doctrine/orm/src/Event/PostPersistEventArgs.php b/vendor/doctrine/orm/src/Event/PostPersistEventArgs.php
new file mode 100644
index 0000000..926ac1c
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/PostPersistEventArgs.php
@@ -0,0 +1,13 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\LifecycleEventArgs;
9
10/** @extends LifecycleEventArgs<EntityManagerInterface> */
11final class PostPersistEventArgs extends LifecycleEventArgs
12{
13}
diff --git a/vendor/doctrine/orm/src/Event/PostRemoveEventArgs.php b/vendor/doctrine/orm/src/Event/PostRemoveEventArgs.php
new file mode 100644
index 0000000..8bf857e
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/PostRemoveEventArgs.php
@@ -0,0 +1,13 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\LifecycleEventArgs;
9
10/** @extends LifecycleEventArgs<EntityManagerInterface> */
11final class PostRemoveEventArgs extends LifecycleEventArgs
12{
13}
diff --git a/vendor/doctrine/orm/src/Event/PostUpdateEventArgs.php b/vendor/doctrine/orm/src/Event/PostUpdateEventArgs.php
new file mode 100644
index 0000000..c9ff004
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/PostUpdateEventArgs.php
@@ -0,0 +1,13 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\LifecycleEventArgs;
9
10/** @extends LifecycleEventArgs<EntityManagerInterface> */
11final class PostUpdateEventArgs extends LifecycleEventArgs
12{
13}
diff --git a/vendor/doctrine/orm/src/Event/PreFlushEventArgs.php b/vendor/doctrine/orm/src/Event/PreFlushEventArgs.php
new file mode 100644
index 0000000..671535c
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/PreFlushEventArgs.php
@@ -0,0 +1,19 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\ManagerEventArgs;
9
10/**
11 * Provides event arguments for the preFlush event.
12 *
13 * @link www.doctrine-project.com
14 *
15 * @extends ManagerEventArgs<EntityManagerInterface>
16 */
17class PreFlushEventArgs extends ManagerEventArgs
18{
19}
diff --git a/vendor/doctrine/orm/src/Event/PrePersistEventArgs.php b/vendor/doctrine/orm/src/Event/PrePersistEventArgs.php
new file mode 100644
index 0000000..e70c3cf
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/PrePersistEventArgs.php
@@ -0,0 +1,13 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\LifecycleEventArgs;
9
10/** @extends LifecycleEventArgs<EntityManagerInterface> */
11final class PrePersistEventArgs extends LifecycleEventArgs
12{
13}
diff --git a/vendor/doctrine/orm/src/Event/PreRemoveEventArgs.php b/vendor/doctrine/orm/src/Event/PreRemoveEventArgs.php
new file mode 100644
index 0000000..3af0d02
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/PreRemoveEventArgs.php
@@ -0,0 +1,13 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\Persistence\Event\LifecycleEventArgs;
9
10/** @extends LifecycleEventArgs<EntityManagerInterface> */
11final class PreRemoveEventArgs extends LifecycleEventArgs
12{
13}
diff --git a/vendor/doctrine/orm/src/Event/PreUpdateEventArgs.php b/vendor/doctrine/orm/src/Event/PreUpdateEventArgs.php
new file mode 100644
index 0000000..090487b
--- /dev/null
+++ b/vendor/doctrine/orm/src/Event/PreUpdateEventArgs.php
@@ -0,0 +1,100 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Event;
6
7use Doctrine\ORM\EntityManagerInterface;
8use Doctrine\ORM\PersistentCollection;
9use Doctrine\Persistence\Event\LifecycleEventArgs;
10use InvalidArgumentException;
11
12use function get_debug_type;
13use function sprintf;
14
15/**
16 * Class that holds event arguments for a preUpdate event.
17 *
18 * @extends LifecycleEventArgs<EntityManagerInterface>
19 */
20class PreUpdateEventArgs extends LifecycleEventArgs
21{
22 /** @var array<string, array{mixed, mixed}|PersistentCollection> */
23 private array $entityChangeSet;
24
25 /**
26 * @param mixed[][] $changeSet
27 * @psalm-param array<string, array{mixed, mixed}|PersistentCollection> $changeSet
28 */
29 public function __construct(object $entity, EntityManagerInterface $em, array &$changeSet)
30 {
31 parent::__construct($entity, $em);
32
33 $this->entityChangeSet = &$changeSet;
34 }
35
36 /**
37 * Retrieves entity changeset.
38 *
39 * @return mixed[][]
40 * @psalm-return array<string, array{mixed, mixed}|PersistentCollection>
41 */
42 public function getEntityChangeSet(): array
43 {
44 return $this->entityChangeSet;
45 }
46
47 /**
48 * Checks if field has a changeset.
49 */
50 public function hasChangedField(string $field): bool
51 {
52 return isset($this->entityChangeSet[$field]);
53 }
54
55 /**
56 * Gets the old value of the changeset of the changed field.
57 */
58 public function getOldValue(string $field): mixed
59 {
60 $this->assertValidField($field);
61
62 return $this->entityChangeSet[$field][0];
63 }
64
65 /**
66 * Gets the new value of the changeset of the changed field.
67 */
68 public function getNewValue(string $field): mixed
69 {
70 $this->assertValidField($field);
71
72 return $this->entityChangeSet[$field][1];
73 }
74
75 /**
76 * Sets the new value of this field.
77 */
78 public function setNewValue(string $field, mixed $value): void
79 {
80 $this->assertValidField($field);
81
82 $this->entityChangeSet[$field][1] = $value;
83 }
84
85 /**
86 * Asserts the field exists in changeset.
87 *
88 * @throws InvalidArgumentException
89 */
90 private function assertValidField(string $field): void
91 {
92 if (! isset($this->entityChangeSet[$field])) {
93 throw new InvalidArgumentException(sprintf(
94 'Field "%s" is not a valid field of the entity "%s" in PreUpdateEventArgs.',
95 $field,
96 get_debug_type($this->getObject()),
97 ));
98 }
99 }
100}