src/EventDispatcher/PurchaseSuccessEmailSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\EventDispatcher;
  3. use App\Entity\User;
  4. use App\Entity\Purchase;
  5. use App\Repository\PurchaseRepository;
  6. use App\Event\PurchaseSuccessEvent;
  7. use Psr\Log\LoggerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Mailer\MailerInterface;
  10. use Symfony\Component\Mime\Address;
  11. use Symfony\Component\Mime\Email;
  12. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  13. use Symfony\Component\Security\Core\Security;
  14. class PurchaseSuccessEmailSubscriber implements EventSubscriberInterface
  15. {
  16.   protected $logger;
  17.   protected $mailer;
  18.   protected $security;
  19.   protected $purchaseRepository;
  20.    public function __construct(LoggerInterface $logger, MailerInterface $mailer, Security $security, PurchaseRepository $purchaseRepository)
  21.   {
  22.      $this->logger = $logger;
  23.      $this->mailer = $mailer;
  24.      $this->security = $security;
  25.     $this->purchaseRepository = $purchaseRepository;
  26.    }
  27.    public static function getSubscribedEvents() :array
  28.     {
  29.       //je dis au dispatcher ; à tout moment si tu reçois 
  30.       //l'évnmnt purchase.success alors tu appelles  sendSuccessEmail
  31.        return [
  32.          'purchase.success' => 'sendSuccessEmail'
  33.        ];
  34.     }
  35.    public function sendSuccessEmail(PurchaseSuccessEvent $purchaseSuccessEvent)
  36.    {
  37.  //dd($purchaseSuccessEvent);
  38.       // récupérer l'utilisateur en ligne
  39.       // rappel je ne suis pas dans un controller avec l'abstractcontroller
  40.       // j'ai donc besoin d'utiliser un service , Security
  41.       /** @var User */
  42.       $currentUser = $this->security->getUser();
  43.      // dd($currentUser);
  44.       // recuperer la commande  
  45.       $purchase = $purchaseSuccessEvent->getPurchase();
  46.      
  47.      // Récupérer les détails de la commande à partir du repository
  48.    //$purchaseDetails = $this->purchaseRepository->findPurchaseDetails($purchase->getId());
  49.        $purchaseDetails = $this->purchaseRepository->findPurchaseDetails($purchase->getId());
  50.      //dd($purchaseDetails);
  51.      // Extraire les informations nécessaires des détails de la commande
  52.     $start = $purchaseDetails[0]['start'];
  53.   //   dd($start);
  54.      $end = $purchaseDetails[0]['end'];
  55.      
  56.      // Attention Utilisez une adresse e-mail autorisée par IONOS comme expéditeur
  57.      $fromEmail = 'basenautique@jereservemonactivite.fr'; // Adresse IONOS autorisée
  58.       // ecrire le mail 
  59.       $email = new TemplatedEmail();
  60.       $email->to(new Address($currentUser->getEmail(), $currentUser->getFullName()))
  61.           ->from($fromEmail)
  62.           ->subject("Votre commande ({$purchase->getId()}) est bien confirmée ")
  63.           ->htmlTemplate('emails/purchase_success.html.twig')
  64.           ->context([
  65.             'purchase' => $purchase,
  66.             'user' => $currentUser,
  67.            'start' => $start,
  68.            'end' => $end
  69.           ]);
  70.       //envoyer l'email
  71.       $this->mailer->send($email);
  72.    //  $this->logger->info("Email envoyé pour la commande n°" .
  73.      // $purchaseSuccessEvent->getPurchase()->getId());
  74.      $this->logger->info("Email envoyé pour la commande n°" . $purchase->getId());
  75.    }
  76. }