Aucune description

UnsubscribeTokens.php 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace MailPoet\Cron\Workers;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Models\Newsletter;
  5. use MailPoet\Models\ScheduledTask;
  6. use MailPoet\Models\Subscriber;
  7. use MailPoet\Util\Security;
  8. use MailPoetVendor\Carbon\Carbon;
  9. class UnsubscribeTokens extends SimpleWorker {
  10. const TASK_TYPE = 'unsubscribe_tokens';
  11. const BATCH_SIZE = 1000;
  12. const AUTOMATIC_SCHEDULING = false;
  13. public function processTaskStrategy(ScheduledTask $task, $timer) {
  14. $meta = $task->getMeta();
  15. do {
  16. $this->cronHelper->enforceExecutionLimit($timer);
  17. $subscribersCount = $this->addTokens(Subscriber::class, $meta['last_subscriber_id']);
  18. $task->meta = $meta;
  19. $task->save();
  20. } while ($subscribersCount === self::BATCH_SIZE);
  21. do {
  22. $this->cronHelper->enforceExecutionLimit($timer);
  23. $newslettersCount = $this->addTokens(Newsletter::class, $meta['last_newsletter_id']);
  24. $task->meta = $meta;
  25. $task->save();
  26. } while ($newslettersCount === self::BATCH_SIZE);
  27. if ($subscribersCount > 0 || $newslettersCount > 0) {
  28. return false;
  29. }
  30. return true;
  31. }
  32. private function addTokens($model, &$lastProcessedId = 0) {
  33. $instances = $model::whereNull('unsubscribe_token')
  34. ->whereGt('id', (int)$lastProcessedId)
  35. ->orderByAsc('id')
  36. ->limit(self::BATCH_SIZE)
  37. ->findMany();
  38. foreach ($instances as $instance) {
  39. $lastProcessedId = $instance->id;
  40. $instance->set('unsubscribe_token', Security::generateUnsubscribeToken($model));
  41. $instance->save();
  42. }
  43. return count($instances);
  44. }
  45. public function getNextRunDate() {
  46. return Carbon::createFromTimestamp($this->wp->currentTime('timestamp'));
  47. }
  48. }