src/Event/JwtCreatedListener.php line 48

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Event;
  4. use ApiPlatform\Core\Api\IriConverterInterface;
  5. use App\Entity\User\User;
  6. use App\Repository\ActiveServices\ProjectConditionRepository;
  7. use App\Repository\ActiveServices\ProjectRepository;
  8. use App\Repository\Notification\NotificationAreaRepository;
  9. use App\Repository\Notification\NotificationTypeRepository;
  10. use App\Repository\User\RoleRepository;
  11. use App\Service\ActiveServices\NotificationServicesApiConnectService;
  12. use App\Service\NotificationGenerator\NotificationGenerator;
  13. use DateTime;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  16. class JwtCreatedListener
  17. {
  18.     public function __construct(
  19.         private readonly IriConverterInterface $iriConverter,
  20.         private readonly EntityManagerInterface $entityManager,
  21.         private readonly ProjectRepository $projectRepository,
  22.         private readonly ProjectConditionRepository $projectConditionRepository,
  23.         private readonly NotificationServicesApiConnectService $notificationServicesApiConnectService,
  24.         private readonly RoleRepository $roleRepository,
  25.         private readonly NotificationGenerator $notificationGenerator,
  26.         private readonly NotificationAreaRepository $notificationAreaRepository,
  27.         private readonly NotificationTypeRepository $notificationTypeRepository,
  28.     ) {}
  29.     public function onJWTCreated(JWTCreatedEvent $event)
  30.     {
  31.         $user $event->getUser();
  32.         assert($user instanceof User);
  33.         $company $user->getCompany();
  34.         $payload $event->getData();
  35.         $payload['user'] = $this->iriConverter->getIriFromItem($user);
  36.         $payload['company'] = $company $this->iriConverter->getIriFromItem($company) : null;
  37.         $payload['impersonateFrom'] = $user->getIsUserImpersonate() ? $user->getImpersonateFrom() : null;
  38.         $payload['preImpersonateRole'] = $user->getIsUserImpersonate() ? $user->getPreImpersonateRole() : null;
  39.         $event->setData($payload);
  40.     }
  41.     public function noteLoginData(JWTCreatedEvent $event)
  42.     {
  43.         /** @var User $user */
  44.         $user $event->getUser();
  45.         $update false;
  46.         assert($user instanceof User);
  47.         if ($user->getRole() === $this->roleRepository->getImpersonateRole()) {
  48.             if (str_contains(strtolower($user->getEmail()), 'fakeowner@aadmi.com')) {
  49.                 $user->setRole($this->roleRepository->getFakeAccountManagerRole());
  50.             } else {
  51.                 $user->setRole($this->roleRepository->getAccountManagerRole());
  52.             }
  53.             $update true;
  54.         }
  55.         if (!$user->getIsUserImpersonate()) {
  56.             $user->setLastLoginTime(new \DateTime());
  57.             $user->setIsUserSawQRCode(true);
  58.             $update true;
  59.         }
  60.         if ($update) {
  61.             $this->entityManager->persist($user);
  62.             $this->entityManager->flush();
  63.         }
  64.     }
  65.     public function changeProjectConditionStatus(JWTCreatedEvent $event)
  66.     {
  67.         /** @var User $user */
  68.         $user $event->getUser();
  69.         $projectsComapny $this->projectRepository->findBy(['company' => $user->getCompany()]);
  70.         $projectsUser $this->projectRepository->findBy(['user' => $user]);
  71.         $projects array_merge($projectsComapny$projectsUser);
  72.         foreach ($projects as $project) {
  73.             if (null !== $project->getCompletedAt() && $this->projectConditionRepository->getConditionArchive() !== $project->getConditionStatus()) {
  74.                 /** @var DataTime $completedAt */
  75.                 $completedAt $project->getCompletedAt();
  76.                 $completedAt->modify('+10 day');
  77.                 if ($completedAt < new DateTime() && $project->getConditionStatus() === $this->projectConditionRepository->getConditionActive()) {
  78.                     $project->setConditionStatus($this->projectConditionRepository->getConditionArchive());
  79.                 }
  80.                 $this->entityManager->persist($project);
  81.                 $this->entityManager->flush();
  82.             }
  83.             // if ($project->getDeadline() !== null) {
  84.             //     try {
  85.             //         $projectDeadLine = $project->getDeadline();
  86.             //         if (($projectDeadLine->modify('+3 days')) <= (new DateTime())) {
  87.             //             $this->notificationGenerator->addNotificationForCompany(
  88.             //                 $project->getCompany(),
  89.             //                 $this->notificationAreaRepository->getNotificationAreaProjectOnTrack(),
  90.             //                 $this->notificationTypeRepository->getNotificationTypeSystem(),
  91.             //                 $project,
  92.             //             );
  93.             //         }
  94.             //     } catch (\Throwable $th) {
  95.             //     }
  96.             // }
  97.         }
  98.     }
  99. }