Replace Paris models with Doctrine entities in AuthorizedEmailsController

[MAILPOET-4347]
This commit is contained in:
Rodrigo Primo 2022-07-27 17:52:03 -03:00 committed by Veljko V
parent d225f4e044
commit 85e7997197
2 changed files with 45 additions and 18 deletions

View File

@ -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')

View File

@ -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(),
];
}