Files
piratepoet/lib/Cron/Workers/UnsubscribeTokens.php
Amine Ben hammou 20eccaad67 Share the $wp property between workers
[MAILPOET-2396]
2020-01-07 09:39:28 +00:00

56 lines
1.7 KiB
PHP

<?php
namespace MailPoet\Cron\Workers;
use MailPoet\Cron\CronHelper;
use MailPoet\Models\Newsletter;
use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Subscriber;
use MailPoet\Util\Security;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon;
class UnsubscribeTokens extends SimpleWorker {
const TASK_TYPE = 'unsubscribe_tokens';
const BATCH_SIZE = 1000;
const AUTOMATIC_SCHEDULING = false;
public function processTaskStrategy(ScheduledTask $task, $timer) {
$meta = $task->getMeta();
do {
$this->cron_helper->enforceExecutionLimit($timer);
$subscribers_count = $this->addTokens(Subscriber::class, $meta['last_subscriber_id']);
$task->meta = $meta;
$task->save();
} while ($subscribers_count === self::BATCH_SIZE);
do {
$this->cron_helper->enforceExecutionLimit($timer);
$newsletters_count = $this->addTokens(Newsletter::class, $meta['last_newsletter_id']);
$task->meta = $meta;
$task->save();
} while ($newsletters_count === self::BATCH_SIZE);
if ($subscribers_count > 0 || $newsletters_count > 0) {
return false;
}
return true;
}
private function addTokens($model, &$last_processed_id = 0) {
$instances = $model::whereNull('unsubscribe_token')
->whereGt('id', (int)$last_processed_id)
->orderByAsc('id')
->limit(self::BATCH_SIZE)
->findMany();
foreach ($instances as $instance) {
$last_processed_id = $instance->id;
$instance->set('unsubscribe_token', Security::generateUnsubscribeToken($model));
$instance->save();
}
return count($instances);
}
public function getNextRunDate() {
return Carbon::createFromTimestamp($this->wp->currentTime('timestamp'));
}
}