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