src/Services/MailService.php line 117

Open in your IDE?
  1. <?php
  2. namespace App\Services;
  3. use App\Domain\Email\ExportEmail;
  4. use App\Domain\Email\Receiver;
  5. use App\Domain\SearchParams\ScheduleSearch;
  6. use App\Entity\AppUser;
  7. use App\Entity\Module;
  8. use App\Entity\Schedule;
  9. use App\Events\SendExportEmailEvent;
  10. use App\Events\SendPasswordLinkEvent;
  11. use DateTime;
  12. use Swift_Attachment;
  13. use Swift_Mailer;
  14. use Swift_Message;
  15. use Twig\Environment;
  16. use Twig\Error\LoaderError;
  17. use Twig\Error\RuntimeError;
  18. use Twig\Error\SyntaxError;
  19. /**
  20.  * Class MailService
  21.  * @package App\Services
  22.  */
  23. class MailService
  24. {
  25.     /** @var Swift_Mailer $mailer */
  26.     private $mailer;
  27.     /** @var Environment */
  28.     private $templating;
  29.     /** @var string */
  30.     private $fromEmailAddress;
  31.     /**
  32.      * @var ExportEmailMessageRenderService
  33.      */
  34.     private $renderService;
  35.     /**
  36.      * MailService constructor.
  37.      * @param Swift_Mailer $mailer
  38.      * @param Environment $templating
  39.      * @param string $fromEmailAddress
  40.      * @param ExportEmailMessageRenderService $renderService
  41.      */
  42.     public function __construct(Swift_Mailer $mailerEnvironment $templatingstring $fromEmailAddressExportEmailMessageRenderService $renderService)
  43.     {
  44.         $this->mailer $mailer;
  45.         $this->templating $templating;
  46.         $this->fromEmailAddress $fromEmailAddress;
  47.         $this->renderService $renderService;
  48.     }
  49.     /**
  50.      * @param SendPasswordLinkEvent $event
  51.      * @throws LoaderError
  52.      * @throws RuntimeError
  53.      * @throws SyntaxError
  54.      */
  55.     public function onSendPasswordLinkEmail(SendPasswordLinkEvent $event)
  56.     {
  57.         $passwordRequest $event->getPasswordRequest();
  58.         $user $passwordRequest->getUser();
  59.         $token $passwordRequest->getToken();
  60.         $message = (new Swift_Message('Vergeben Sie ein Passwort für Trainee'))
  61.             ->setFrom($this->fromEmailAddress)
  62.             ->setTo($user->getEmail())
  63.             ->setBody($this->templating->render('mail/password.link.email.html.twig', [
  64.                 'token' => $token,
  65.                 'user' => $user
  66.             ]), 'text/html');
  67.         $this->mailer->send($message);
  68.     }
  69.     /**
  70.      * @param SendExportEmailEvent $event
  71.      * @throws LoaderError
  72.      * @throws RuntimeError
  73.      * @throws SyntaxError
  74.      */
  75.     public function onSendTraineeScheduleExportEmail(SendExportEmailEvent $event)
  76.     {
  77.         $exportEmail $event->getExportEmail();
  78.         $trainee $exportEmail->getSchedule()->getTrainee();
  79.         $message = (new Swift_Message('Zeitplan: ' $trainee->getFirstname() . ' ' $trainee->getLastname()))
  80.             ->setFrom($this->fromEmailAddress)
  81.             ->setTo($exportEmail->getReceiverList())
  82.             ->setBody($this->templating->render('mail/trainee.export.email.html.twig', [
  83.                 'trainee' => $trainee,
  84.                 'message' => $exportEmail->getMessage()
  85.             ]), 'text/html');
  86.         $attachmentPath $exportEmail->getAttachmentPath();
  87.         if ($attachmentPath !== null) {
  88.             $message->attach(
  89.                 Swift_Attachment::fromPath($attachmentPath)
  90.                     ->setFilename(basename($attachmentPath))
  91.             );
  92.         }
  93.         $this->mailer->send($message);
  94.     }
  95.     /**
  96.      * @param SendExportEmailEvent $event
  97.      * @throws LoaderError
  98.      * @throws RuntimeError
  99.      * @throws SyntaxError
  100.      */
  101.     public function onSendDepartmentScheduleExportEmail(SendExportEmailEvent $event)
  102.     {
  103.         $exportEmail $event->getExportEmail();
  104.         $department $exportEmail->getDepartment();
  105.         $start = new DateTime($exportEmail->getStart());
  106.         $message = (new Swift_Message('Zeitplan: ' $department->getName() . '/' $start->format('Y')))
  107.             ->setFrom($this->fromEmailAddress)
  108.             ->setTo($exportEmail->getReceiverList())
  109.             ->setBody($this->templating->render('mail/department.export.email.html.twig', [
  110.                 'department' => $department,
  111.                 'message' => $exportEmail->getMessage()
  112.             ]), 'text/html');
  113.         $attachmentPath $exportEmail->getAttachmentPath();
  114.         if ($attachmentPath !== null) {
  115.             $message->attach(
  116.                 Swift_Attachment::fromPath($attachmentPath)
  117.                     ->setFilename(basename($attachmentPath))
  118.             );
  119.         }
  120.         $this->mailer->send($message);
  121.     }
  122.     /**
  123.      * @param Schedule $schedule
  124.      * @param AppUser $user
  125.      * @return ExportEmail
  126.      * @throws LoaderError
  127.      * @throws RuntimeError
  128.      * @throws SyntaxError
  129.      */
  130.     public function createExportFormData(Schedule $scheduleAppUser $user)
  131.     {
  132.         $sendExport = new ExportEmail();
  133.         $sendExport->setSchedule($schedule);
  134.         $trainee $schedule->getTrainee();
  135.         $preRenderedMessage $this->renderService->generateExportEmailMessage($trainee$user);
  136.         $sendExport->setMessage($preRenderedMessage);
  137.         $appUsers = [];
  138.         $appUsers[] = $user;
  139.         $appUsers[] = $schedule->getTrainee();
  140.         /** @var Module $module */
  141.         foreach ($schedule->getModules() as $module) {
  142.             $department $module->getDepartment();
  143.             $appUsers array_merge($appUsers$department->getContacts()->toArray());
  144.         }
  145.         foreach ($appUsers as $appUser) {
  146.             $receiver = new Receiver();
  147.             $receiver->setEmail($appUser->getEmail());
  148.             $sendExport->addReceiver($receiver);
  149.         }
  150.         return $sendExport;
  151.     }
  152.     /**
  153.      * @param ScheduleSearch $scheduleSearch
  154.      * @param AppUser $user
  155.      * @return ExportEmail
  156.      * @throws LoaderError
  157.      * @throws RuntimeError
  158.      * @throws SyntaxError
  159.      */
  160.     public function createDepartmentExportFormData(ScheduleSearch $scheduleSearchAppUser $user)
  161.     {
  162.         $sendExport = new ExportEmail();
  163.         $sendExport->setDepartment($scheduleSearch->getDepartment());
  164.         $sendExport->setStart($scheduleSearch->getStart()->format('d.m.Y'));
  165.         $department $scheduleSearch->getDepartment();
  166.         $preRenderedMessage $this->renderService->generateExportEmailMessageDepartment($department$user);
  167.         $sendExport->setMessage($preRenderedMessage);
  168.         $appUsers = [];
  169.         $appUsers[] = $user;
  170.         $department $scheduleSearch->getDepartment();
  171.         if($department->getContacts()) {
  172.             $appUsers array_merge($appUsers$department->getContacts()->toArray());
  173.         }
  174.         foreach ($appUsers as $appUser) {
  175.             $receiver = new Receiver();
  176.             $receiver->setEmail($appUser->getEmail());
  177.             $sendExport->addReceiver($receiver);
  178.         }
  179.         return $sendExport;
  180.     }
  181. }