|
|
@@ -0,0 +1,49 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+declare(strict_types=1);
|
|
|
+
|
|
|
+namespace App\Service\OnChange\Access;
|
|
|
+
|
|
|
+use App\Entity\Access\Access;
|
|
|
+use App\Service\Access\AccessProfileCreator;
|
|
|
+use App\Service\MercureHub;
|
|
|
+use App\Service\OnChange\OnChangeContext;
|
|
|
+use App\Service\OnChange\OnChangeDefault;
|
|
|
+use Symfony\Bundle\SecurityBundle\Security;
|
|
|
+use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Classe OnAccessChange qui comporte toutes les opérations automatiques se produisant lors de l'évolution d'un Access.
|
|
|
+ */
|
|
|
+class OnAccessChange extends OnChangeDefault
|
|
|
+{
|
|
|
+ public function __construct(
|
|
|
+ private Security $security,
|
|
|
+ private AccessProfileCreator $accessProfileCreator,
|
|
|
+ private MercureHub $mercureHub,
|
|
|
+ ) {
|
|
|
+ }
|
|
|
+
|
|
|
+ public function onChange(mixed $access, OnChangeContext $context): void
|
|
|
+ {
|
|
|
+ $this->publishNewProfile($access);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Publie via mercure le nouveau profil de l'access
|
|
|
+ *
|
|
|
+ * @param Access $access
|
|
|
+ * @return void
|
|
|
+ * @throws \Exception
|
|
|
+ */
|
|
|
+ public function publishNewProfile(Access $access): void {
|
|
|
+ $token = $this->security->getToken();
|
|
|
+
|
|
|
+ /** @var ?Access $originalAccess */
|
|
|
+ $originalAccess = $token instanceof SwitchUserToken ? $token->getOriginalToken()->getUser() : null;
|
|
|
+
|
|
|
+ $profile = $this->accessProfileCreator->getAccessProfile($access, $originalAccess);
|
|
|
+
|
|
|
+ $this->mercureHub->publishUpdate($access->getId(), $profile);
|
|
|
+ }
|
|
|
+}
|