diff --git a/mailpoet/lib/API/JSON/v1/SendingTaskSubscribers.php b/mailpoet/lib/API/JSON/v1/SendingTaskSubscribers.php index 1344be5c30..80dfd9dab3 100644 --- a/mailpoet/lib/API/JSON/v1/SendingTaskSubscribers.php +++ b/mailpoet/lib/API/JSON/v1/SendingTaskSubscribers.php @@ -11,6 +11,7 @@ use MailPoet\Models\Newsletter; use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTaskSubscriber; use MailPoet\Models\SendingQueue as SendingQueueModel; +use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Settings\SettingsController; use MailPoet\WP\Functions as WPFunctions; @@ -31,29 +32,38 @@ class SendingTaskSubscribers extends APIEndpoint { /** @var WPFunctions */ private $wp; + /** @var SendingQueuesRepository */ + private $sendingQueuesRepository; + public function __construct( Listing\Handler $listingHandler, SettingsController $settings, CronHelper $cronHelper, + SendingQueuesRepository $sendingQueuesRepository, WPFunctions $wp ) { $this->listingHandler = $listingHandler; $this->settings = $settings; $this->cronHelper = $cronHelper; + $this->sendingQueuesRepository = $sendingQueuesRepository; $this->wp = $wp; } public function listing($data = []) { $newsletterId = !empty($data['params']['id']) ? (int)$data['params']['id'] : false; - $tasksIds = SendingQueueModel::select('task_id') - ->where('newsletter_id', $newsletterId) - ->findArray(); + if (empty($newsletterId)) { + return $this->errorResponse([ + APIError::NOT_FOUND => __('Newsletter not found!', 'mailpoet'), + ]); + } + $tasksIds = $this->sendingQueuesRepository->getTaskIdsByNewsletterId($newsletterId); + if (empty($tasksIds)) { return $this->errorResponse([ 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); $items = []; diff --git a/mailpoet/lib/Newsletter/Sending/SendingQueuesRepository.php b/mailpoet/lib/Newsletter/Sending/SendingQueuesRepository.php index 127618b4bd..718ac009a5 100644 --- a/mailpoet/lib/Newsletter/Sending/SendingQueuesRepository.php +++ b/mailpoet/lib/Newsletter/Sending/SendingQueuesRepository.php @@ -48,6 +48,17 @@ class SendingQueuesRepository extends Repository { ->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 { $task = $queue->getTask(); if (is_null($task)) return false;