Add action scheduler method to cron trigger

[MAILPOET-4274]
This commit is contained in:
Rostislav Wolny
2022-05-18 13:15:20 +02:00
committed by Veljko V
parent ccfdd229ec
commit 2b44684c38
2 changed files with 19 additions and 4 deletions

View File

@@ -8,10 +8,12 @@ use MailPoet\Settings\SettingsController;
class CronTrigger {
const METHOD_LINUX_CRON = 'Linux Cron';
const METHOD_WORDPRESS = 'WordPress';
const METHOD_ACTION_SCHEDULER = 'Action Scheduler';
const METHODS = [
'wordpress' => self::METHOD_WORDPRESS,
'linux_cron' => self::METHOD_LINUX_CRON,
'action_scheduler' => self::METHOD_ACTION_SCHEDULER,
'none' => 'Disabled',
];
@@ -24,12 +26,17 @@ class CronTrigger {
/** @var SettingsController */
private $settings;
/** @var DaemonActionSchedulerRunner */
private $cronActionScheduler;
public function __construct(
WordPress $wordpressTrigger,
SettingsController $settings
SettingsController $settings,
DaemonActionSchedulerRunner $cronActionScheduler
) {
$this->wordpressTrigger = $wordpressTrigger;
$this->settings = $settings;
$this->cronActionScheduler = $cronActionScheduler;
}
public function init() {
@@ -37,6 +44,10 @@ class CronTrigger {
try {
if ($currentMethod === self::METHOD_WORDPRESS) {
return $this->wordpressTrigger->run();
} elseif ($currentMethod === self::METHOD_ACTION_SCHEDULER) {
// register Action Scheduler
require_once __DIR__ . '/../../vendor/woocommerce/action-scheduler/action-scheduler.php';
$this->cronActionScheduler->init();
}
return false;
} catch (\Exception $e) {

View File

@@ -4,7 +4,7 @@ namespace MailPoet\Test\Cron;
use Codeception\Stub;
use MailPoet\Cron\CronTrigger;
use MailPoet\Cron\Triggers\MailPoet;
use MailPoet\Cron\DaemonActionSchedulerRunner;
use MailPoet\Cron\Triggers\WordPress;
use MailPoet\Settings\SettingsController;
@@ -12,9 +12,11 @@ class CronTriggerTest extends \MailPoetUnitTest {
public function testItDefinesConstants() {
expect(CronTrigger::METHOD_LINUX_CRON)->same('Linux Cron');
expect(CronTrigger::METHOD_WORDPRESS)->same('WordPress');
expect(CronTrigger::METHOD_ACTION_SCHEDULER)->same('Action Scheduler');
expect(CronTrigger::METHODS)->equals([
'wordpress' => 'WordPress',
'linux_cron' => 'Linux Cron',
'action_scheduler' => 'Action Scheduler',
'none' => 'Disabled',
]);
expect(CronTrigger::DEFAULT_METHOD)->equals('WordPress');
@@ -52,9 +54,11 @@ class CronTriggerTest extends \MailPoetUnitTest {
private function createCronTrigger(
SettingsController $settings,
WordPress $wordpressTrigger = null
WordPress $wordpressTrigger = null,
DaemonActionSchedulerRunner $actionSchedulerRunner = null
) {
$wordpressTrigger = $wordpressTrigger ?: $this->make(WordPress::class, ['run' => true]);
return new CronTrigger($wordpressTrigger, $settings);
$actionSchedulerRunner = $actionSchedulerRunner ?: $this->make(DaemonActionSchedulerRunner::class, ['init' => true]);
return new CronTrigger($wordpressTrigger, $settings, $actionSchedulerRunner);
}
}