Nenhuma Descrição

SendingTaskSubscribers.php 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace MailPoet\API\JSON\v1;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\API\JSON\Endpoint as APIEndpoint;
  5. use MailPoet\API\JSON\Error as APIError;
  6. use MailPoet\Config\AccessControl;
  7. use MailPoet\Cron\CronHelper;
  8. use MailPoet\Listing;
  9. use MailPoet\Models\Newsletter;
  10. use MailPoet\Models\ScheduledTask;
  11. use MailPoet\Models\ScheduledTaskSubscriber;
  12. use MailPoet\Models\SendingQueue as SendingQueueModel;
  13. use MailPoet\Settings\SettingsController;
  14. use MailPoet\WP\Functions as WPFunctions;
  15. class SendingTaskSubscribers extends APIEndpoint {
  16. public $permissions = [
  17. 'global' => AccessControl::PERMISSION_MANAGE_EMAILS,
  18. ];
  19. /** @var Listing\Handler */
  20. private $listingHandler;
  21. /** @var SettingsController */
  22. private $settings;
  23. /** @var CronHelper */
  24. private $cronHelper;
  25. /** @var WPFunctions */
  26. private $wp;
  27. public function __construct(
  28. Listing\Handler $listingHandler,
  29. SettingsController $settings,
  30. CronHelper $cronHelper,
  31. WPFunctions $wp
  32. ) {
  33. $this->listingHandler = $listingHandler;
  34. $this->settings = $settings;
  35. $this->cronHelper = $cronHelper;
  36. $this->wp = $wp;
  37. }
  38. public function listing($data = []) {
  39. $newsletterId = !empty($data['params']['id']) ? (int)$data['params']['id'] : false;
  40. $tasksIds = SendingQueueModel::select('task_id')
  41. ->where('newsletter_id', $newsletterId)
  42. ->findArray();
  43. if (empty($tasksIds)) {
  44. return $this->errorResponse([
  45. APIError::NOT_FOUND => __('This email has not been sent yet.', 'mailpoet'),
  46. ]);
  47. }
  48. $data['params']['task_ids'] = array_column($tasksIds, 'task_id');
  49. $listingData = $this->listingHandler->get('\MailPoet\Models\ScheduledTaskSubscriber', $data);
  50. $items = [];
  51. foreach ($listingData['items'] as $item) {
  52. $items[] = $item->asArray();
  53. }
  54. return $this->successResponse($items, [
  55. 'count' => $listingData['count'],
  56. 'filters' => $listingData['filters'],
  57. 'groups' => $listingData['groups'],
  58. 'mta_log' => $this->settings->get('mta_log'),
  59. 'mta_method' => $this->settings->get('mta.method'),
  60. 'cron_accessible' => $this->cronHelper->isDaemonAccessible(),
  61. 'current_time' => $this->wp->currentTime('mysql'),
  62. ]);
  63. }
  64. public function resend($data = []) {
  65. $taskId = !empty($data['taskId']) ? (int)$data['taskId'] : false;
  66. $subscriberId = !empty($data['subscriberId']) ? (int)$data['subscriberId'] : false;
  67. $taskSubscriber = ScheduledTaskSubscriber::where('task_id', $taskId)
  68. ->where('subscriber_id', $subscriberId)
  69. ->findOne();
  70. $task = ScheduledTask::findOne($taskId);
  71. $sendingQueue = SendingQueueModel::where('task_id', $taskId)->findOne();
  72. if (
  73. !($task instanceof ScheduledTask)
  74. || !($taskSubscriber instanceof ScheduledTaskSubscriber)
  75. || !($sendingQueue instanceof SendingQueueModel)
  76. || $taskSubscriber->failed != 1
  77. ) {
  78. return $this->errorResponse([
  79. APIError::NOT_FOUND => __('Failed sending task not found!', 'mailpoet'),
  80. ]);
  81. }
  82. $newsletter = Newsletter::findOne($sendingQueue->newsletterId);
  83. if (!($newsletter instanceof Newsletter)) {
  84. return $this->errorResponse([
  85. APIError::NOT_FOUND => __('Newsletter not found!', 'mailpoet'),
  86. ]);
  87. }
  88. $taskSubscriber->error = '';
  89. $taskSubscriber->failed = 0;
  90. $taskSubscriber->processed = 0;
  91. $taskSubscriber->save();
  92. $task->status = null;
  93. $task->save();
  94. $newsletter->status = Newsletter::STATUS_SENDING;
  95. $newsletter->save();
  96. return $this->successResponse([]);
  97. }
  98. }