Refactor to Doctrine
[MAILPOET-3765]
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Cron\Workers;
|
namespace MailPoet\Cron\Workers;
|
||||||
|
|
||||||
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Mailer\Mailer;
|
use MailPoet\Mailer\Mailer;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||||
@@ -9,6 +10,7 @@ use MailPoet\Models\Subscriber;
|
|||||||
use MailPoet\Services\Bridge;
|
use MailPoet\Services\Bridge;
|
||||||
use MailPoet\Services\Bridge\API;
|
use MailPoet\Services\Bridge\API;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
|
use MailPoet\Subscribers\SubscribersRepository;
|
||||||
use MailPoet\Tasks\Bounce as BounceTask;
|
use MailPoet\Tasks\Bounce as BounceTask;
|
||||||
use MailPoet\Tasks\Subscribers as TaskSubscribers;
|
use MailPoet\Tasks\Subscribers as TaskSubscribers;
|
||||||
use MailPoet\Tasks\Subscribers\BatchIterator;
|
use MailPoet\Tasks\Subscribers\BatchIterator;
|
||||||
@@ -30,13 +32,18 @@ class Bounce extends SimpleWorker {
|
|||||||
/** @var Bridge */
|
/** @var Bridge */
|
||||||
private $bridge;
|
private $bridge;
|
||||||
|
|
||||||
|
/** @var SubscribersRepository */
|
||||||
|
private $subscribersRepository;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SettingsController $settings,
|
SettingsController $settings,
|
||||||
|
SubscribersRepository $subscribersRepository,
|
||||||
Bridge $bridge
|
Bridge $bridge
|
||||||
) {
|
) {
|
||||||
$this->settings = $settings;
|
$this->settings = $settings;
|
||||||
$this->bridge = $bridge;
|
$this->bridge = $bridge;
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
$this->subscribersRepository = $subscribersRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function init() {
|
public function init() {
|
||||||
@@ -73,10 +80,7 @@ class Bounce extends SimpleWorker {
|
|||||||
// abort if execution limit is reached
|
// abort if execution limit is reached
|
||||||
$this->cronHelper->enforceExecutionLimit($timer);
|
$this->cronHelper->enforceExecutionLimit($timer);
|
||||||
|
|
||||||
$subscriberEmails = Subscriber::select('email')
|
$subscriberEmails = $this->subscribersRepository->getUndeletedSubscribersEmailsByIds($subscribersToProcessIds);
|
||||||
->whereIn('id', $subscribersToProcessIds)
|
|
||||||
->whereNull('deleted_at')
|
|
||||||
->findArray();
|
|
||||||
$subscriberEmails = array_column($subscriberEmails, 'email');
|
$subscriberEmails = array_column($subscriberEmails, 'email');
|
||||||
|
|
||||||
$this->processEmails($subscriberEmails);
|
$this->processEmails($subscriberEmails);
|
||||||
@@ -98,11 +102,12 @@ class Bounce extends SimpleWorker {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($email['bounce'] === self::BOUNCED_HARD) {
|
if ($email['bounce'] === self::BOUNCED_HARD) {
|
||||||
$subscriber = Subscriber::findOne($email['address']);
|
$subscriber = $this->subscribersRepository->findOneBy(['email' => $email['address']]);
|
||||||
$subscriber->status = Subscriber::STATUS_BOUNCED;
|
if (!$subscriber instanceof SubscriberEntity) continue;
|
||||||
$subscriber->save();
|
$subscriber->setStatus(SubscriberEntity::STATUS_BOUNCED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$this->subscribersRepository->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNextRunDate() {
|
public function getNextRunDate() {
|
||||||
|
@@ -329,4 +329,19 @@ class SubscribersRepository extends Repository {
|
|||||||
$subscriberEntity->setLastEngagementAt($now);
|
$subscriberEntity->setLastEngagementAt($now);
|
||||||
$this->flush();
|
$this->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $ids
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function getUndeletedSubscribersEmailsByIds(array $ids): array {
|
||||||
|
return $this->entityManager->createQueryBuilder()
|
||||||
|
->select('s.email')
|
||||||
|
->from(SubscriberEntity::class, 's')
|
||||||
|
->where('s.deletedAt IS NULL')
|
||||||
|
->andWhere('s.id IN (:ids)')
|
||||||
|
->setParameter('ids', $ids)
|
||||||
|
->getQuery()
|
||||||
|
->getArrayResult();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,7 +10,6 @@ use MailPoet\Entities\SubscriberEntity;
|
|||||||
use MailPoet\Mailer\Mailer;
|
use MailPoet\Mailer\Mailer;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
|
||||||
use MailPoet\Services\Bridge;
|
use MailPoet\Services\Bridge;
|
||||||
use MailPoet\Services\Bridge\API;
|
use MailPoet\Services\Bridge\API;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
@@ -50,6 +49,7 @@ class BounceTest extends \MailPoetTest {
|
|||||||
|
|
||||||
$this->worker = new Bounce(
|
$this->worker = new Bounce(
|
||||||
$this->diContainer->get(SettingsController::class),
|
$this->diContainer->get(SettingsController::class),
|
||||||
|
$this->subscribersRepository,
|
||||||
$this->diContainer->get(Bridge::class)
|
$this->diContainer->get(Bridge::class)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -64,7 +64,11 @@ class BounceTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItCanInitializeBridgeAPI() {
|
public function testItCanInitializeBridgeAPI() {
|
||||||
$this->setMailPoetSendingMethod();
|
$this->setMailPoetSendingMethod();
|
||||||
$worker = new Bounce($this->diContainer->get(SettingsController::class), $this->diContainer->get(Bridge::class));
|
$worker = new Bounce(
|
||||||
|
$this->diContainer->get(SettingsController::class),
|
||||||
|
$this->subscribersRepository,
|
||||||
|
$this->diContainer->get(Bridge::class)
|
||||||
|
);
|
||||||
$worker->init();
|
$worker->init();
|
||||||
expect($worker->api instanceof API)->true();
|
expect($worker->api instanceof API)->true();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user