Files
piratepoet/mailpoet/lib/Cron/Workers/SimpleWorker.php
Rostislav Wolny 33f4b2d729 Replace usage of WP's current_time without gmt parameter in libs
This commit replaces usages by Carbon::now or in case we need a timestamp it
keeps current_time but adds the gtm parameter as true.
[MAILPOET-6142]
2024-08-19 15:29:42 +02:00

90 lines
2.6 KiB
PHP

<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
namespace MailPoet\Cron\Workers;
use MailPoet\Cron\CronHelper;
use MailPoet\Cron\CronWorkerInterface;
use MailPoet\Cron\CronWorkerRunner;
use MailPoet\Cron\CronWorkerScheduler;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoetVendor\Carbon\Carbon;
abstract class SimpleWorker implements CronWorkerInterface {
const TASK_TYPE = null;
const AUTOMATIC_SCHEDULING = true;
const SUPPORT_MULTIPLE_INSTANCES = true;
public $timer;
/** @var CronHelper */
protected $cronHelper;
/** @var CronWorkerScheduler */
protected $cronWorkerScheduler;
/** @var ScheduledTasksRepository */
protected $scheduledTasksRepository;
public function __construct() {
if (static::TASK_TYPE === null) {
throw new \Exception('Constant TASK_TYPE is not defined on subclass ' . get_class($this));
}
$this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class);
$this->cronWorkerScheduler = ContainerWrapper::getInstance()->get(CronWorkerScheduler::class);
$this->scheduledTasksRepository = ContainerWrapper::getInstance()->get(ScheduledTasksRepository::class);
}
public function getTaskType() {
return static::TASK_TYPE;
}
public function supportsMultipleInstances() {
return static::SUPPORT_MULTIPLE_INSTANCES;
}
public function schedule() {
$this->cronWorkerScheduler->schedule(static::TASK_TYPE, $this->getNextRunDate());
}
protected function scheduleImmediately(): void {
$this->cronWorkerScheduler->schedule(static::TASK_TYPE, $this->getNextRunDateImmediately());
}
public function checkProcessingRequirements() {
return true;
}
public function init() {
}
public function prepareTaskStrategy(ScheduledTaskEntity $task, $timer) {
return true;
}
public function processTaskStrategy(ScheduledTaskEntity $task, $timer) {
return true;
}
public function getNextRunDate() {
// random day of the next week
$date = Carbon::now()->millisecond(0);
$date->setISODate((int)$date->format('o'), ((int)$date->format('W')) + 1, mt_rand(1, 7));
$date->startOfDay();
return $date;
}
protected function getNextRunDateImmediately(): Carbon {
return Carbon::now()->millisecond(0);
}
public function scheduleAutomatically() {
return static::AUTOMATIC_SCHEDULING;
}
protected function getCompletedTasks() {
return $this->scheduledTasksRepository->findCompletedByType(static::TASK_TYPE, CronWorkerRunner::TASK_BATCH_SIZE);
}
}