OnSubdomainChangeMailBuilder.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\Mailer\Builder;
  4. use App\Entity\Access\Access;
  5. use App\Entity\Organization\Organization;
  6. use App\Entity\Organization\Subdomain;
  7. use App\Enum\Core\ContactPointTypeEnum;
  8. use App\Enum\Core\EmailSendingTypeEnum;
  9. use App\Service\Access\Utils as AccessUtils;
  10. use App\Service\Mailer\Email;
  11. use App\Service\Mailer\Model\MailerModelInterface;
  12. use App\Service\Mailer\Model\SubdomainChangeModel;
  13. use App\Tests\Service\Mailer\Builder\OnSubdomainChangeMailBuilderTest;
  14. use Doctrine\Common\Collections\ArrayCollection;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use function Symfony\Component\DependencyInjection\Loader\Configurator\param;
  17. /**
  18. * Classe SubDomainChangeBuilder qui est chargé de construire l'Email qui sera envoyé
  19. */
  20. class OnSubdomainChangeMailBuilder extends AbstractBuilder implements BuilderInterface
  21. {
  22. public function __construct(
  23. private EntityManagerInterface $entityManager,
  24. private string $opentalentNoReplyEmailAddress,
  25. private AccessUtils $accessUtils
  26. )
  27. {
  28. }
  29. public function support(MailerModelInterface $mailerModel): bool
  30. {
  31. return $mailerModel instanceof SubdomainChangeModel;
  32. }
  33. /**
  34. * @param SubdomainChangeModel $mailerModel
  35. * @return ArrayCollection
  36. *
  37. * @see OnSubdomainChangeMailBuilderTest::testBuild()
  38. */
  39. public function build(MailerModelInterface $mailerModel): ArrayCollection
  40. {
  41. $subdomain = $this->entityManager->getRepository(Subdomain::class)->find($mailerModel->getSubdomainId());
  42. $organization = $this->entityManager->getRepository(Organization::class)->find($mailerModel->getOrganizationId());
  43. $author = $this->entityManager->getRepository(Access::class)->find($mailerModel->getSenderId());
  44. $admin = $this->accessUtils->findAdminFor($organization);
  45. $context = [
  46. 'access' => $admin,
  47. 'organization' => $organization,
  48. 'subdomain' => $subdomain,
  49. 'url' => $mailerModel->getUrl()
  50. ];
  51. $content = $this->render('subdomain', $context);
  52. $email= (new Email())
  53. ->setEmailEntity($this->buildEmailEntity( 'Nouveau sous domaine: ' . $subdomain->getSubdomain(), $author, $content))
  54. ->setContent($content)
  55. ->setFrom($this->opentalentNoReplyEmailAddress)
  56. ->setFromName($organization->getName())
  57. ;
  58. $this->addRecipient($email, $admin, EmailSendingTypeEnum::TO()->getValue(), ContactPointTypeEnum::PRINCIPAL()->getValue());
  59. return new ArrayCollection([$email]);
  60. }
  61. }