SubDomainChangeBuilder.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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\SubDomainChangeBuilderTest;
  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 SubDomainChangeBuilder 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 SubDomainChangeBuilderTest::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. ->setNameFrom($organization->getName())
  57. ;
  58. $this->addRecipient($email, $admin, EmailSendingTypeEnum::TO()->getValue(), ContactPointTypeEnum::PRINCIPAL()->getValue());
  59. $emails = new ArrayCollection();
  60. $emails->add($email);
  61. return $emails;
  62. }
  63. }