Refactor fetching task ids to doctrine in task subscribers listing
[MAILPOET-4006]
This commit is contained in:
committed by
Veljko V
parent
57359c0d8a
commit
823aca38e4
@ -11,6 +11,7 @@ use MailPoet\Models\Newsletter;
|
|||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||||
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
||||||
|
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
@ -31,29 +32,38 @@ class SendingTaskSubscribers extends APIEndpoint {
|
|||||||
/** @var WPFunctions */
|
/** @var WPFunctions */
|
||||||
private $wp;
|
private $wp;
|
||||||
|
|
||||||
|
/** @var SendingQueuesRepository */
|
||||||
|
private $sendingQueuesRepository;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
Listing\Handler $listingHandler,
|
Listing\Handler $listingHandler,
|
||||||
SettingsController $settings,
|
SettingsController $settings,
|
||||||
CronHelper $cronHelper,
|
CronHelper $cronHelper,
|
||||||
|
SendingQueuesRepository $sendingQueuesRepository,
|
||||||
WPFunctions $wp
|
WPFunctions $wp
|
||||||
) {
|
) {
|
||||||
$this->listingHandler = $listingHandler;
|
$this->listingHandler = $listingHandler;
|
||||||
$this->settings = $settings;
|
$this->settings = $settings;
|
||||||
$this->cronHelper = $cronHelper;
|
$this->cronHelper = $cronHelper;
|
||||||
|
$this->sendingQueuesRepository = $sendingQueuesRepository;
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function listing($data = []) {
|
public function listing($data = []) {
|
||||||
$newsletterId = !empty($data['params']['id']) ? (int)$data['params']['id'] : false;
|
$newsletterId = !empty($data['params']['id']) ? (int)$data['params']['id'] : false;
|
||||||
$tasksIds = SendingQueueModel::select('task_id')
|
if (empty($newsletterId)) {
|
||||||
->where('newsletter_id', $newsletterId)
|
return $this->errorResponse([
|
||||||
->findArray();
|
APIError::NOT_FOUND => __('Newsletter not found!', 'mailpoet'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
$tasksIds = $this->sendingQueuesRepository->getTaskIdsByNewsletterId($newsletterId);
|
||||||
|
|
||||||
if (empty($tasksIds)) {
|
if (empty($tasksIds)) {
|
||||||
return $this->errorResponse([
|
return $this->errorResponse([
|
||||||
APIError::NOT_FOUND => __('This email has not been sent yet.', 'mailpoet'),
|
APIError::NOT_FOUND => __('This email has not been sent yet.', 'mailpoet'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
$data['params']['task_ids'] = array_column($tasksIds, 'task_id');
|
$data['params']['task_ids'] = $tasksIds;
|
||||||
$listingData = $this->listingHandler->get('\MailPoet\Models\ScheduledTaskSubscriber', $data);
|
$listingData = $this->listingHandler->get('\MailPoet\Models\ScheduledTaskSubscriber', $data);
|
||||||
|
|
||||||
$items = [];
|
$items = [];
|
||||||
|
@ -48,6 +48,17 @@ class SendingQueuesRepository extends Repository {
|
|||||||
->getOneOrNullResult();
|
->getOneOrNullResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getTaskIdsByNewsletterId(int $newsletterId): array {
|
||||||
|
$results = $this->entityManager->createQueryBuilder()
|
||||||
|
->select('IDENTITY(s.task) as task_id')
|
||||||
|
->from(SendingQueueEntity::class, 's')
|
||||||
|
->andWhere('s.newsletter = :newsletter')
|
||||||
|
->setParameter('newsletter', $newsletterId)
|
||||||
|
->getQuery()
|
||||||
|
->getArrayResult();
|
||||||
|
return array_map('intval', array_column($results, 'task_id'));
|
||||||
|
}
|
||||||
|
|
||||||
public function isSubscriberProcessed(SendingQueueEntity $queue, SubscriberEntity $subscriber): bool {
|
public function isSubscriberProcessed(SendingQueueEntity $queue, SubscriberEntity $subscriber): bool {
|
||||||
$task = $queue->getTask();
|
$task = $queue->getTask();
|
||||||
if (is_null($task)) return false;
|
if (is_null($task)) return false;
|
||||||
|
Reference in New Issue
Block a user