src/Subscriber/User/AmateurUpgradeSubscriber.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\User;
  3. use App\Dictionary\MemberMediaFolder as FolderDictionary;
  4. use App\Event\User\AmateurUpgradeCompleteEvent;
  5. use App\Service\Content\ActorService;
  6. use App\Service\Media\MemberMediaService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class AmateurUpgradeSubscriber implements EventSubscriberInterface
  10. {
  11.     protected EntityManagerInterface $entityManager;
  12.     protected ActorService $actorService;
  13.     protected MemberMediaService $memberMediaService;
  14.     /**
  15.      * AmateurUpgradeSubscriber constructor.
  16.      */
  17.     public function __construct(EntityManagerInterface $entityManagerMemberMediaService $mediaServiceActorService $actorService)
  18.     {
  19.         $this->entityManager $entityManager;
  20.         $this->actorService $actorService;
  21.         $this->memberMediaService $mediaService;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             AmateurUpgradeCompleteEvent::class => [
  27.                 ['updateMemberAfterSuccessfulUpgrade'0],
  28.                 ['updateActorAfterSuccessfulUpgrade'1],
  29.                 ['updateMemberMediaAfterSuccessfulUpgrade'2],
  30.                 ['removeEntityAfterSuccessfulUpgrade'99],
  31.             ],
  32.         ];
  33.     }
  34.     public function getEntityManager(): EntityManagerInterface
  35.     {
  36.         return $this->entityManager;
  37.     }
  38.     /**
  39.      * @throws \Exception
  40.      */
  41.     public function updateMemberAfterSuccessfulUpgrade(AmateurUpgradeCompleteEvent $event)
  42.     {
  43.         if ($event->isRejected()) {
  44.             return;
  45.         }
  46.         $upgrade $event->getAmateurUpgrade();
  47.         $member $upgrade->getAccount()->getMember();
  48.         $member->setAmateurUpgradeDate(new \DateTime());
  49.         $member->setIsAmateur(true);
  50.         // gitlab #546
  51.         if ($personFromUpgrade $upgrade->getPerson()) {
  52.             $member->setPerson($personFromUpgrade);
  53.         }
  54.         $em $this->getEntityManager();
  55.         $em->persist($member);
  56.         $em->flush();
  57.     }
  58.     /**
  59.      * @throws \Doctrine\ORM\ORMException
  60.      * @throws \Doctrine\ORM\OptimisticLockException
  61.      */
  62.     public function updateMemberMediaAfterSuccessfulUpgrade(AmateurUpgradeCompleteEvent $event)
  63.     {
  64.         if ($event->isRejected()) {
  65.             return;
  66.         }
  67.         $upgrade $event->getAmateurUpgrade();
  68.         $genuinePhoto $upgrade->getGenuineCheckPhoto();
  69.         $idShotPhoto $upgrade->getIdShotPhoto();
  70.         $folder $this->memberMediaService->loadFolderByMedia($idShotPhotoFolderDictionary::ACTORS_TEMP);
  71.         if ($folder) {
  72.             $this->memberMediaService->moveToFolder($folderFolderDictionary::ACTORS);
  73.         }
  74.         $genuinePhoto->setIsChecked(true);
  75.         $genuinePhoto->setIsHardcore(false);
  76.         $genuinePhoto->setIsProof(true);
  77.         $this->memberMediaService->storeEntity($genuinePhoto);
  78.         $folder $this->memberMediaService->loadFolderByMedia($genuinePhotoFolderDictionary::ACTORS_TEMP);
  79.         if ($folder) {
  80.             $this->memberMediaService->moveToFolder($folderFolderDictionary::PROFILE);
  81.         }
  82.     }
  83.     /**
  84.      * @throws \Doctrine\ORM\ORMException
  85.      * @throws \Doctrine\ORM\OptimisticLockException
  86.      */
  87.     public function updateActorAfterSuccessfulUpgrade(AmateurUpgradeCompleteEvent $event)
  88.     {
  89.         if ($event->isRejected()) {
  90.             return;
  91.         }
  92.         $upgrade $event->getAmateurUpgrade();
  93.         $member $upgrade->getAccount()->getMember();
  94.         $person $upgrade->getPerson();
  95.         $genuinePhoto $upgrade->getGenuineCheckPhoto();
  96.         $idShotPhoto $upgrade->getIdShotPhoto();
  97.         // gitlab #543 use person from upgrade to automatically create actor from that new person
  98.         if (!$upgrade->getPerson() && $member->getPerson()) {
  99.             $person $member->getPerson();
  100.         }
  101.         if ($idShotPhoto && $genuinePhoto && $person) {
  102.             $actor $this->actorService->createActor($member$person->getFirstName(), $person->getLastName(), $person->getDateOfBirth());
  103.             $actor->setIdShot($idShotPhoto);
  104.             $actor->setIsDefault(true);
  105.             $this->actorService->storeEntity($actor);
  106.         }
  107.     }
  108.     public function removeEntityAfterSuccessfulUpgrade(AmateurUpgradeCompleteEvent $event)
  109.     {
  110.         if ($event->isRejected()) {
  111.             return;
  112.         }
  113.         $upgrade $event->getAmateurUpgrade();
  114.         $this->entityManager->remove($upgrade);
  115.         $this->entityManager->flush();
  116.     }
  117. }