src/EventListener/JWTCreatedListener.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\App\User;
  4. use App\Entity\App\Vendor;
  5. use App\Entity\Chat\Chat;
  6. use App\Exception\NotFoundException;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  9. use Symfony\Component\HttpFoundation\RequestStack;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. use Psr\Log\LoggerInterface;
  12. class JWTCreatedListener
  13. {
  14.     private $requestStack;
  15.     private $translator;
  16.     private $entityManager;
  17.     private $registerLog;
  18.     /**
  19.      * JWTCreatedListener constructor.
  20.      * @param RequestStack $requestStack
  21.      * @param TranslatorInterface $translator
  22.      * @param EntityManagerInterface $entityManager
  23.      * @param LoggerInterface $registerLog
  24.      */
  25.     public function __construct(
  26.         RequestStack $requestStack,
  27.         TranslatorInterface $translator,
  28.         EntityManagerInterface $entityManager,
  29.         LoggerInterface $registerLog
  30.     ) {
  31.         $this->requestStack $requestStack;
  32.         $this->translator $translator;
  33.         $this->entityManager $entityManager;
  34.         $this->registerLog $registerLog;
  35.     }
  36.     /**
  37.      * @param JWTCreatedEvent $event
  38.      * @throws NotFoundException
  39.      */
  40.     public function onJWTCreated(JWTCreatedEvent $event)
  41.     {
  42.         $user $event->getUser();
  43.         $request $this->requestStack->getCurrentRequest();
  44.         if(!$user instanceof User)
  45.             throw new NotFoundException($this->translator->trans('User current not found'));
  46.         $user->setLastLogin(new \DateTime('now'));
  47.         $this->entityManager->persist($user);
  48.         $payload $event->getData();
  49.         $payload['id'] = $user->getId();
  50.         $payload['ip'] = $request->getClientIp();
  51.         $payload['name'] = $user->getName();
  52.         $payload['lastName'] = $user->getLastName();
  53.         $payload['email'] = $user->getEmail();
  54.         $payload['channelName'] = $user->getChannelName();
  55.         $payload['locale'] = $user->getLocale();
  56.         $payload['created_at'] = $user->getCreatedAt()->getTimestamp();
  57.         $payload['mediaObject'] = $user->getMediaObjectsNormalize();
  58.         $payload['notificationChannel'] = [
  59.             'channelEvent' => 'NEW_NOTIFICATION',
  60.             'channelName' => $user->getChannelName(),
  61.             'channelType' => Chat::CHANNEL_TYPE_PRIVATE
  62.         ];
  63.         $vendor = array();
  64.         try {
  65.             foreach ($user->getVendorStaff() as $staff) {
  66.                 $rolesStaff $staff->getRoleStaff();
  67.                 $vendorRoles = array();
  68.                 foreach ($rolesStaff as $roleStaff) {
  69.                     $vendorRoles[] = array(
  70.                         'id' => $roleStaff->getRole()->getId(),
  71.                         'name' => $roleStaff->getRole()->getName(),
  72.                         'weight' => $roleStaff->getRole()->getWeight()
  73.                     );
  74.                 }
  75.                 //ToDo: Refactorizar para colecciones
  76.                 if ($staff->getVendor() instanceof Vendor) {
  77.                     $actualVendor $staff->getVendor();
  78.                     $modules=[];
  79.                     foreach ( $actualVendor->getCustomModules() as $module){
  80.                         $modules[]=["id" => $module->getId(),"name"=>$module->getName()];
  81.                     }
  82.                     $vendor[] = array(
  83.                         'id' => $actualVendor->getId(),
  84.                         'name' => $actualVendor->getName(),
  85.                         'nit' => $actualVendor->getNit(),
  86.                         'primaryColor' => $actualVendor->getPrimaryColor(),
  87.                         'secundaryColor' => $actualVendor->getSecundaryColor(),
  88.                         'dateFormat' => $actualVendor->getDateFormat(),
  89.                         'is12HourFormat' => $actualVendor->getIs12HourFormat(),
  90.                         'currency' => $actualVendor->getCurrency(),
  91.                         'locale' => strtolower($actualVendor->getLanguage()),
  92.                         'logo' => $actualVendor->getMediaObjectsNormalize(),
  93.                         'timeZone' => $actualVendor->getTimezone(),
  94.                         'roles' => $vendorRoles,
  95.                         'modules' =>$modules,
  96.                         'allowCreateRequestOperator' => $actualVendor->getAllowCreateRequestOperator()
  97.                     );
  98.                 }
  99.             }
  100.         } catch (\Exception $e) {
  101.             $this->registerLog->error($e->getMessage());
  102.         }
  103.         if (!empty($vendor)) {
  104.             $payload['vendors'] = $vendor;
  105.         }
  106.         $event->setData($payload);
  107.     }
  108. }