| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- declare(strict_types=1);
- namespace App\Service\Mailer\Builder;
- use App\Entity\Access\Access;
- use App\Entity\Core\ContactPoint;
- use App\Entity\Organization\Organization;
- use App\Enum\Message\ReportMessageSatusEnum;
- use App\Repository\Core\ContactPointRepository;
- use App\Service\Mailer\Email;
- use App\Entity\Message\Email as EmailEntity;
- use App\Service\Mailer\EmailRecipient;
- use Symfony\Contracts\Service\Attribute\Required;
- use Twig\Environment;
- /**
- * Classe AbstractBuilder qui définit les fonctions de bases de chaque builder
- */
- class AbstractBuilder implements AbstractBuilderInterface
- {
- protected Environment $twig;
- protected ContactPointRepository $contactPointRepository;
- #[Required]
- public function setTwig(Environment $twig): void
- { $this->twig = $twig; }
- #[Required]
- public function setContactPointRepository(ContactPointRepository $contactPointRepository): void
- { $this->contactPointRepository = $contactPointRepository; }
- /**
- * @param string $subject
- * @param Access $author
- * @param string $content
- * @return EmailEntity
- */
- public function buildEmailEntity(string $subject, Access $author, string $content): EmailEntity{
- return (new EmailEntity())
- ->setUniqueSendId(uniqid())
- ->setAuthor($author)
- ->setAbout($subject)
- ->setIsSystem(true)
- ->setDateSent(new \DateTime('now'))
- ->setText($content)
- ;
- }
- /**
- * @param string $template
- * @param array $context
- * @return string
- * @throws \Twig\Error\LoaderError
- * @throws \Twig\Error\RuntimeError
- * @throws \Twig\Error\SyntaxError
- * @throws \Twig_Error_Loader
- * @throws \Twig_Error_Runtime
- * @throws \Twig_Error_Syntax
- */
- public function renderer(string $template, array $context)
- {
- return $this->twig->render(sprintf('@templates/emails/%s.html.twig', $template), $context);
- }
- /**
- * @param Email $email
- * @param Access|Organization|string $target
- * @param string $sendType
- * @param string|null $contactPointType
- */
- public function addRecipient(Email $email, Access|Organization|string $target, string $sendType, string $contactPointType = null): void{
- $emailRecipient = (new EmailRecipient())
- ->setSendType($sendType);
- if($target instanceof Access){
- $emailRecipient->setAccess($target);
- $emailRecipient->setName($target->getPerson()->getFullName());
- $this->setMailToRecipient($this->contactPointRepository->getByTypeAndPerson($contactPointType, $target->getPerson()), $emailRecipient);
- }else if ($target instanceof Organization){
- $emailRecipient->setOrganization($target);
- $emailRecipient->setName($target->getName());
- $this->setMailToRecipient($this->contactPointRepository->getByTypeAndOrganization($contactPointType, $target), $emailRecipient);
- }else{
- $emailRecipient->setSendStatus(ReportMessageSatusEnum::DELIVERED()->getValue());
- $emailRecipient->setEmailAddress($target);
- }
- $email->addEmailRecipient($emailRecipient);
- }
- /**
- * @param array $contactPoints
- * @param EmailRecipient $recipient
- */
- public function setMailToRecipient(array $contactPoints, EmailRecipient $recipient): void {
- if($contactPoint = $this->getFirstContactPointWithEmail($contactPoints)){
- $recipient->setSendStatus(ReportMessageSatusEnum::DELIVERED()->getValue());
- $recipient->setEmailAddress($contactPoint->getEmail());
- }else{
- $recipient->setSendStatus(ReportMessageSatusEnum::MISSING()->getValue());
- }
- }
- /**
- * @param $contactPoints
- * @return ContactPoint
- */
- public function getFirstContactPointWithEmail($contactPoints): ContactPoint{
- $find = false;
- $cmpt = 0;
- $contactPoint = null;
- while(count($contactPoints) > $cmpt && !$find){
- if($contactPoints[$cmpt]->getEmail()){
- $find = true;
- $contactPoint = $contactPoints[$cmpt];
- }
- $cmpt++;
- }
- return $contactPoint;
- }
- }
|