|
|
@@ -0,0 +1,58 @@
|
|
|
+<?php
|
|
|
+declare(strict_types=1);
|
|
|
+
|
|
|
+namespace App\DataPersister\Access;
|
|
|
+
|
|
|
+use ApiPlatform\Core\DataPersister\ContextAwareDataPersisterInterface;
|
|
|
+use App\Entity\Access\Access;
|
|
|
+use App\Service\Access\Utils;
|
|
|
+use App\Service\Core\ContactPointUtils;
|
|
|
+use Exception;
|
|
|
+use App\ApiResources\Access\AdminAccess;
|
|
|
+use Doctrine\ORM\EntityManagerInterface;
|
|
|
+use Symfony\Component\Security\Core\Security;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * Classe AdminAccessDataPersister qui est un custom dataPersister gérant la resource AdminAccess
|
|
|
+ */
|
|
|
+class AdminAccessDataPersister implements ContextAwareDataPersisterInterface
|
|
|
+{
|
|
|
+ public function __construct(
|
|
|
+ private Security $security,
|
|
|
+ private EntityManagerInterface $entityManager,
|
|
|
+ private Utils $accessUtils,
|
|
|
+ private ContactPointUtils $contactPointUtils
|
|
|
+ )
|
|
|
+ { }
|
|
|
+
|
|
|
+ public function supports($data, array $context = []): bool
|
|
|
+ {
|
|
|
+ return $data instanceof AdminAccess;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param AdminAccess $data
|
|
|
+ * @param array $context
|
|
|
+ * @return void|null
|
|
|
+ */
|
|
|
+ public function persist($data, array $context = [])
|
|
|
+ {
|
|
|
+ /** @var Access $access */
|
|
|
+ $access = $this->security->getUser();
|
|
|
+
|
|
|
+ $administrator = $this->accessUtils->getAdminAccess($access->getOrganization());
|
|
|
+ if(!$administrator) return null;
|
|
|
+
|
|
|
+ $contactPoint = $this->contactPointUtils->getPersonContactPointPrincipal($administrator);
|
|
|
+ if(!$contactPoint) return null;
|
|
|
+
|
|
|
+ $contactPoint->setEmail($data->getEmail());
|
|
|
+ $this->entityManager->flush();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function remove($data, array $context = [])
|
|
|
+ {
|
|
|
+ throw new Exception('not supported', 500);
|
|
|
+ }
|
|
|
+}
|