From 85e7997197c17f28bb0702f85a1941e7252ca6c8 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Wed, 27 Jul 2022 17:52:03 -0300 Subject: [PATCH] Replace Paris models with Doctrine entities in AuthorizedEmailsController [MAILPOET-4347] --- .../lib/Newsletter/NewslettersRepository.php | 36 +++++++++++++++++++ .../Services/AuthorizedEmailsController.php | 27 +++++--------- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/mailpoet/lib/Newsletter/NewslettersRepository.php b/mailpoet/lib/Newsletter/NewslettersRepository.php index c2ab305f71..58827c09d5 100644 --- a/mailpoet/lib/Newsletter/NewslettersRepository.php +++ b/mailpoet/lib/Newsletter/NewslettersRepository.php @@ -464,6 +464,42 @@ class NewslettersRepository extends Repository { ->getResult(); } + /** + * Returns a list of emails that are either scheduled standard emails + * or active automatic emails of the provided types. + * + * @param array $automaticEmailTypes + * + * @return array + */ + public function getScheduledStandardEmailsAndActiveAutomaticEmails(array $automaticEmailTypes): array { + $queryBuilder = $this->entityManager->createQueryBuilder(); + + $newsletters = $queryBuilder + ->select('n') + ->from(NewsletterEntity::class, 'n') + ->orWhere( + $queryBuilder->expr()->andX( + $queryBuilder->expr()->eq('n.type', ':typeStandard'), + $queryBuilder->expr()->eq('n.status', ':statusScheduled') + ) + ) + ->orWhere( + $queryBuilder->expr()->andX( + $queryBuilder->expr()->in('n.type', ':automaticEmailTypes'), + $queryBuilder->expr()->eq('n.status', ':statusActive') + ) + ) + ->setParameter('typeStandard', NewsletterEntity::TYPE_STANDARD) + ->setParameter('statusScheduled', NewsletterEntity::STATUS_SCHEDULED) + ->setParameter('automaticEmailTypes', $automaticEmailTypes) + ->setParameter('statusActive', NewsletterEntity::STATUS_ACTIVE) + ->getQuery() + ->getResult(); + + return $newsletters; + } + private function fetchChildrenIds(array $parentIds) { $ids = $this->entityManager->createQueryBuilder()->select('n.id') ->from(NewsletterEntity::class, 'n') diff --git a/mailpoet/lib/Services/AuthorizedEmailsController.php b/mailpoet/lib/Services/AuthorizedEmailsController.php index 680b3b3c36..758c097869 100644 --- a/mailpoet/lib/Services/AuthorizedEmailsController.php +++ b/mailpoet/lib/Services/AuthorizedEmailsController.php @@ -6,7 +6,6 @@ use MailPoet\Entities\NewsletterEntity; use MailPoet\Mailer\Mailer; use MailPoet\Mailer\MailerError; use MailPoet\Mailer\MailerLog; -use MailPoet\Models\Newsletter; use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Settings\SettingsController; @@ -29,9 +28,9 @@ class AuthorizedEmailsController { private $newslettersRepository; private $automaticEmailTypes = [ - Newsletter::TYPE_WELCOME, - Newsletter::TYPE_NOTIFICATION, - Newsletter::TYPE_AUTOMATIC, + NewsletterEntity::TYPE_WELCOME, + NewsletterEntity::TYPE_NOTIFICATION, + NewsletterEntity::TYPE_AUTOMATIC, ]; public function __construct( @@ -137,7 +136,7 @@ class AuthorizedEmailsController { if ($newsletter->getType() === NewsletterEntity::TYPE_STANDARD && $newsletter->getStatus() === NewsletterEntity::STATUS_SCHEDULED) { $this->checkAuthorizedEmailAddresses(); } - if (in_array($newsletter->getType(), $this->automaticEmailTypes, true) && $newsletter->getStatus() === Newsletter::STATUS_ACTIVE) { + if (in_array($newsletter->getType(), $this->automaticEmailTypes, true) && $newsletter->getStatus() === NewsletterEntity::STATUS_ACTIVE) { $this->checkAuthorizedEmailAddresses(); } } @@ -153,25 +152,17 @@ class AuthorizedEmailsController { } private function validateAddressesInScheduledAndAutomaticEmails($authorizedEmails, $result = []) { - $condittion = sprintf( - "(`type` = '%s' AND `status` = '%s') OR (`type` IN ('%s') AND `status` = '%s')", - Newsletter::TYPE_STANDARD, - Newsletter::STATUS_SCHEDULED, - implode("', '", $this->automaticEmailTypes), - Newsletter::STATUS_ACTIVE - ); - - $newsletters = Newsletter::whereRaw($condittion)->findMany(); + $newsletters = $this->newslettersRepository->getScheduledStandardEmailsAndActiveAutomaticEmails($this->automaticEmailTypes); $invalidSendersInNewsletters = []; foreach ($newsletters as $newsletter) { - if ($this->validateAuthorizedEmail($authorizedEmails, $newsletter->senderAddress)) { + if ($this->validateAuthorizedEmail($authorizedEmails, $newsletter->getSenderAddress())) { continue; } $invalidSendersInNewsletters[] = [ - 'newsletter_id' => $newsletter->id, - 'subject' => $newsletter->subject, - 'sender_address' => $newsletter->senderAddress, + 'newsletter_id' => $newsletter->getId(), + 'subject' => $newsletter->getSubject(), + 'sender_address' => $newsletter->getSenderAddress(), ]; }