Refactor fetching newsletter options in SendingQueue using doctrine

[MAILPOET-4511]
This commit is contained in:
Rostislav Wolny
2022-07-27 15:42:56 +02:00
committed by Veljko V
parent 3b5d737143
commit 5042cdd15e
4 changed files with 36 additions and 13 deletions

View File

@@ -145,7 +145,8 @@ class SendingQueue {
['task_id' => $queue->taskId] ['task_id' => $queue->taskId]
); );
$newsletter = $this->newsletterTask->getNewsletterFromQueue($queue); $newsletter = $this->newsletterTask->getNewsletterFromQueue($queue);
if (!$newsletter) { $newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id);
if (!$newsletter || !$newsletterEntity) {
return; return;
} }
// pre-process newsletter (render, replace shortcodes/links, etc.) // pre-process newsletter (render, replace shortcodes/links, etc.)
@@ -160,11 +161,7 @@ class SendingQueue {
} }
// clone the original object to be used for processing // clone the original object to be used for processing
$_newsletter = (object)$newsletter->asArray(); $_newsletter = (object)$newsletter->asArray();
$options = $newsletter->options()->findMany(); $_newsletter->options = $newsletterEntity->getOptionsAsArray();
if (!empty($options)) {
$options = array_column($options, 'value', 'name');
}
$_newsletter->options = $options;
// configure mailer // configure mailer
$this->mailerTask->configureMailer($newsletter); $this->mailerTask->configureMailer($newsletter);
// get newsletter segments // get newsletter segments

View File

@@ -443,6 +443,21 @@ class NewsletterEntity {
return $option ?: null; return $option ?: null;
} }
/**
* @return array<string, mixed> Associative array of newsletter option values with option names as keys
*/
public function getOptionsAsArray(): array {
$optionsArray = [];
foreach ($this->options as $option) {
$name = $option->getName();
if (!$name) {
continue;
}
$optionsArray[$name] = $option->getValue();
}
return $optionsArray;
}
public function getOptionValue(string $name) { public function getOptionValue(string $name) {
$option = $this->getOption($name); $option = $this->getOption($name);
return $option ? $option->getValue() : null; return $option ? $option->getValue() : null;

View File

@@ -52,6 +52,17 @@ class NewsletterOptionEntity {
return $this->value; return $this->value;
} }
/**
* @return string|null
*/
public function getName() {
$optionField = $this->getOptionField();
if ($optionField === null) {
return null;
}
return $optionField->getName();
}
/** /**
* @param string|null $value * @param string|null $value
*/ */

View File

@@ -189,8 +189,8 @@ class SendingQueueTest extends \MailPoetTest {
} }
public function testItEnforcesExecutionLimitsBeforeQueueProcessing() { public function testItEnforcesExecutionLimitsBeforeQueueProcessing() {
$sendingQueueWorker = $this->make($this->getSendingQueueWorker( $sendingQueueWorker = $this->make(
$this->makeEmpty(NewslettersRepository::class)), $this->getSendingQueueWorker(),
[ [
'processQueue' => Expected::never(), 'processQueue' => Expected::never(),
'enforceSendingAndExecutionLimits' => Expected::exactly(1, function() { 'enforceSendingAndExecutionLimits' => Expected::exactly(1, function() {
@@ -202,7 +202,7 @@ class SendingQueueTest extends \MailPoetTest {
$this->sendingThrottlingHandler, $this->sendingThrottlingHandler,
$this->statsNotificationsWorker, $this->statsNotificationsWorker,
$this->loggerFactory, $this->loggerFactory,
$this->makeEmpty(NewslettersRepository::class), $this->newslettersRepository,
$this->cronHelper, $this->cronHelper,
$this->subscribersFinder, $this->subscribersFinder,
$this->segmentsRepository, $this->segmentsRepository,
@@ -307,7 +307,7 @@ class SendingQueueTest extends \MailPoetTest {
public function testItEnforcesExecutionLimitsAfterQueueProcessing() { public function testItEnforcesExecutionLimitsAfterQueueProcessing() {
$sendingQueueWorker = $this->make( $sendingQueueWorker = $this->make(
$this->getSendingQueueWorker($this->makeEmpty(NewslettersRepository::class)), $this->getSendingQueueWorker(),
[ [
'processQueue' => function() { 'processQueue' => function() {
// this function returns a queue object // this function returns a queue object
@@ -320,7 +320,7 @@ class SendingQueueTest extends \MailPoetTest {
$this->sendingThrottlingHandler, $this->sendingThrottlingHandler,
$this->statsNotificationsWorker, $this->statsNotificationsWorker,
$this->loggerFactory, $this->loggerFactory,
$this->makeEmpty(NewslettersRepository::class), $this->newslettersRepository,
$this->cronHelper, $this->cronHelper,
$this->subscribersFinder, $this->subscribersFinder,
$this->segmentsRepository, $this->segmentsRepository,
@@ -781,7 +781,7 @@ class SendingQueueTest extends \MailPoetTest {
$this->newsletterSegment->delete(); $this->newsletterSegment->delete();
$sendingQueueWorker = $this->getSendingQueueWorker( $sendingQueueWorker = $this->getSendingQueueWorker(
$this->makeEmpty(NewslettersRepository::class), null,
$this->construct( $this->construct(
MailerTask::class, MailerTask::class,
[$this->diContainer->get(MailerFactory::class)], [$this->diContainer->get(MailerFactory::class)],