src/EventSubscriber/UserMailSubscriber.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use App\Entity\User;
  5. use Psr\Log\LoggerInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpKernel\Event\ViewEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Symfony\Component\Mailer\MailerInterface;
  11. use Symfony\Component\Mime\Email;
  12. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  13. class UserMailSubscriber implements EventSubscriberInterface
  14. {
  15.     private $mailer;
  16.     private $encoder;
  17.     private LoggerInterface $logger;
  18.     public function __construct(MailerInterface $mailerUserPasswordEncoderInterface $encoderLoggerInterface  $logger)
  19.     {
  20.         $this->mailer $mailer;
  21.         $this->encoder $encoder;
  22.         $this->logger $logger;
  23.     }
  24.     public static function getSubscribedEvents()
  25.     {
  26.         return [
  27.             KernelEvents::VIEW => ['sendMail'EventPriorities::PRE_WRITE],
  28.         ];
  29.     }
  30.     public function sendMail(ViewEvent $event): void
  31.     {
  32.         $this->logger->debug("SENDING EMAIL BEFORE CHECK");
  33.         $user $event->getControllerResult();
  34.         $method $event->getRequest()->getMethod();
  35.         if (!$user instanceof User || Request::METHOD_POST !== $method) {
  36.             return;
  37.         }
  38.         $this->logger->debug($user->getEmail());
  39.         $random $this->generateRandomString(5);
  40.         $password $random;
  41.         $passHash $this->encoder->encodePassword($user$password);
  42.         $this->logger->debug("SENDING EMAIL AFTER CHECK");
  43.         $user->setPassword($passHash);
  44.         $message = (new Email())
  45.             ->from('noreplay@akoulagroupe.com')
  46.             ->cc('figux01@gmail.com')
  47.             ->to($user->getEmail())
  48.             ->subject('MOT DE PASSE ESPACE ADMINISTRATION HOGES')
  49.             ->html('Vous avez été ajouter à la liste des administrateurs du backoffice de l\'application Hoges. Voici votre mot de passe : '.$password);
  50.         try{
  51.             $this->mailer->send($message);
  52.         }catch (\Exception $e){
  53.             $this->logger->error($e->getMessage());
  54.         }
  55.     }
  56.     function generateRandomString($length 5) {
  57.         $characters '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  58.         $charactersLength strlen($characters);
  59.         $randomString '';
  60.         for ($i 0$i $length$i++) {
  61.             $randomString .= $characters[rand(0$charactersLength 1)];
  62.         }
  63.         return $randomString;
  64.     }
  65. }