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; } }