From b428f81d7bf514bb4aa26afb7393332539a3c4eb Mon Sep 17 00:00:00 2001 From: Raphael Odini Date: Tue, 24 Oct 2023 11:26:08 +0200 Subject: [PATCH 1/2] Create ShiftReminderEvent --- src/AppBundle/Event/ShiftReminderEvent.php | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/AppBundle/Event/ShiftReminderEvent.php diff --git a/src/AppBundle/Event/ShiftReminderEvent.php b/src/AppBundle/Event/ShiftReminderEvent.php new file mode 100644 index 000000000..d91868a6f --- /dev/null +++ b/src/AppBundle/Event/ShiftReminderEvent.php @@ -0,0 +1,23 @@ +shift = $shift; + } + + public function getShift() + { + return $this->shift; + } +} From 3d999fab4fdeab9883b85c9bec2ec25d928f5c35 Mon Sep 17 00:00:00 2001 From: Raphael Odini Date: Tue, 24 Oct 2023 11:55:55 +0200 Subject: [PATCH 2/2] ShiftReminderCommand: dispatch email send --- app/config/services.yml | 1 + .../Command/ShiftGenerateCommand.php | 2 - .../Command/ShiftReminderCommand.php | 39 ++++++------------- .../EventListener/EmailingEventListener.php | 39 +++++++++++++++++++ 4 files changed, 51 insertions(+), 30 deletions(-) diff --git a/app/config/services.yml b/app/config/services.yml index 9815f0664..e09efb7dc 100644 --- a/app/config/services.yml +++ b/app/config/services.yml @@ -165,6 +165,7 @@ services: - { name: kernel.event_listener, event: shift.reserved, method: onShiftReserved } - { name: kernel.event_listener, event: shift.booked, method: onShiftBooked } - { name: kernel.event_listener, event: shift.freed, method: onShiftFreed } + - { name: kernel.event_listener, event: shift.reminder, method: onShiftReminder } - { name: kernel.event_listener, event: shift.deleted, method: onShiftDeleted } - { name: kernel.event_listener, event: member.cycle.start, method: onMemberCycleStart } - { name: kernel.event_listener, event: member.cycle.half, method: onMemberCycleHalf } diff --git a/src/AppBundle/Command/ShiftGenerateCommand.php b/src/AppBundle/Command/ShiftGenerateCommand.php index 233e90afa..71acafab3 100644 --- a/src/AppBundle/Command/ShiftGenerateCommand.php +++ b/src/AppBundle/Command/ShiftGenerateCommand.php @@ -26,8 +26,6 @@ protected function configure() protected function execute(InputInterface $input, OutputInterface $output) { $em = $this->getContainer()->get('doctrine')->getManager(); - $mailer = $this->getContainer()->get('mailer'); - $router = $this->getContainer()->get('router'); $admin = $em->getRepository('AppBundle:User')->findSuperAdminAccount(); $use_fly_and_fixed = $this->getContainer()->getParameter('use_fly_and_fixed'); diff --git a/src/AppBundle/Command/ShiftReminderCommand.php b/src/AppBundle/Command/ShiftReminderCommand.php index 0fccb79fc..35e198fd0 100644 --- a/src/AppBundle/Command/ShiftReminderCommand.php +++ b/src/AppBundle/Command/ShiftReminderCommand.php @@ -3,6 +3,7 @@ namespace AppBundle\Command; use AppBundle\Entity\Shift; +use AppBundle\Event\ShiftReminderEvent; use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -22,19 +23,15 @@ protected function configure() protected function execute(InputInterface $input, OutputInterface $output) { + $em = $this->getContainer()->get('doctrine')->getManager(); + $from_given = $input->getArgument('date'); $from = date_create_from_format('Y-m-d',$from_given); if (!$from || $from->format('Y-m-d') != $from_given) { $output->writeln(' wrong date format. Use Y-m-d '); return; } - - $count = 0; - $output->writeln(''.$from->format('d M Y').''); - //////////////////////// - $em = $this->getContainer()->get('doctrine')->getManager(); - $mailer = $this->getContainer()->get('mailer'); $qb = $em->getRepository('AppBundle:Shift')->createQueryBuilder('s') ->where('s.start >= :start') @@ -43,34 +40,20 @@ protected function execute(InputInterface $input, OutputInterface $output) ->setParameter('end', $from->add(\DateInterval::createFromDateString('+1 day'))->format('Y-m-d')); $shifts = $qb->getQuery()->getResult(); - $shiftEmail = $this->getContainer()->getParameter('emails.shift'); - $dynamicContent = $em->getRepository('AppBundle:DynamicContent')->findOneByCode("SHIFT_REMINDER_EMAIL")->getContent(); - $template = $this->getContainer()->get('twig')->createTemplate($dynamicContent); + $message = 'Shift reminder for ' . count($shifts) . ' créneau' . ((count($shifts)>1) ? 'x':''); + $output->writeln(''.$message.''); - /** @var Shift $shift */ + $count_reminder_sent = 0; + $dispatcher = $this->getContainer()->get('event_dispatcher'); foreach ($shifts as $shift) { - if ($shift->getShifter()) { //send reminder - $dynamicContent = $this->getContainer()->get('twig')->render($template, array('beneficiary' => $shift->getShifter())); - $reminder = (new \Swift_Message('[ESPACE MEMBRES] Ton créneau')) - ->setFrom($shiftEmail['address'], $shiftEmail['from_name']) - ->setTo($shift->getShifter()->getEmail()) - ->setBody( - $this->getContainer()->get('twig')->render( - 'emails/shift_reminder.html.twig', - array( - 'shift' => $shift, - 'dynamicContent' => $dynamicContent - ) - ), - 'text/html' - ); - $mailer->send($reminder); - $count++; + if ($shift->getShifter()) { + $dispatcher->dispatch(ShiftReminderEvent::NAME, new ShiftReminderEvent($shift)); + $count_reminder_sent++; } } - $message = $count.' email'.(($count>1) ? 's':'').' envoyé'.(($count>1) ? 's':''); + $message = $count_reminder_sent . ' email' . (($count_reminder_sent>1) ? 's':'') . ' envoyé' . (($count_reminder_sent>1) ? 's':''); $output->writeln('>>> '.$message.' '); } } diff --git a/src/AppBundle/EventListener/EmailingEventListener.php b/src/AppBundle/EventListener/EmailingEventListener.php index d33be1bcc..d2b1308a6 100644 --- a/src/AppBundle/EventListener/EmailingEventListener.php +++ b/src/AppBundle/EventListener/EmailingEventListener.php @@ -15,6 +15,7 @@ use AppBundle\Event\ShiftReservedEvent; use AppBundle\Event\ShiftBookedEvent; use AppBundle\Event\ShiftFreedEvent; +use AppBundle\Event\ShiftReminderEvent; use AppBundle\Event\ShiftDeletedEvent; use Doctrine\ORM\EntityManagerInterface; use Monolog\Logger; @@ -373,6 +374,44 @@ public function onShiftFreed(ShiftFreedEvent $event) } } + /** + * @param ShiftReminderEvent $event + * @throws \Exception + */ + public function onShiftReminder(ShiftReminderEvent $event) + { + $this->logger->info("Emailing Listener: onShiftReminder"); + + $shift = $event->getShift(); + $beneficiary = $shift->getShifter(); + + $dynamicContent = $this->em->getRepository('AppBundle:DynamicContent')->findOneByCode("SHIFT_REMINDER_EMAIL")->getContent(); + $template = $this->container->get('twig')->createTemplate($dynamicContent); + $dynamicContent = $this->container->get('twig')->render($template, array('beneficiary' => $beneficiary)); + + // send a reminder e-mail to the beneficiary + if ($beneficiary) { + $emailObject = '[ESPACE MEMBRES] Ton créneau'; + $emailTo = $beneficiary->getEmail(); + + $email = (new \Swift_Message($emailObject)) + ->setFrom($this->shift_email['address'], $this->shift_email['from_name']) + ->setTo($emailTo) + ->setBody( + $this->renderView( + 'emails/shift_reminder.html.twig', + array( + 'shift' => $shift, + 'dynamicContent' => $dynamicContent + ) + ), + 'text/html' + ); + + $this->mailer->send($email); + } + } + /** * @param ShiftDeletedEvent $event * @throws \Exception