71 lines
2 KiB
PHP
71 lines
2 KiB
PHP
<?php declare(strict_types = 1);
|
|
|
|
namespace MailPoet\Cron;
|
|
|
|
if (!defined('ABSPATH')) exit;
|
|
|
|
|
|
use MailPoet\Cron\ActionScheduler\Actions\DaemonRun;
|
|
use MailPoet\Cron\ActionScheduler\Actions\DaemonTrigger;
|
|
use MailPoet\Cron\ActionScheduler\ActionScheduler;
|
|
use MailPoet\Cron\ActionScheduler\RemoteExecutorHandler;
|
|
use MailPoet\WP\Functions as WPFunctions;
|
|
|
|
class DaemonActionSchedulerRunner {
|
|
/** @var ActionScheduler */
|
|
private $actionScheduler;
|
|
|
|
/** @var RemoteExecutorHandler */
|
|
private $remoteExecutorHandler;
|
|
|
|
/** @var DaemonTrigger */
|
|
private $daemonTriggerAction;
|
|
|
|
/** @var DaemonRun */
|
|
private $daemonRunAction;
|
|
|
|
/** @var WPFunctions */
|
|
private $wp;
|
|
|
|
public function __construct(
|
|
ActionScheduler $actionScheduler,
|
|
RemoteExecutorHandler $remoteExecutorHandler,
|
|
DaemonTrigger $daemonTriggerAction,
|
|
DaemonRun $daemonRunAction,
|
|
WPFunctions $wp
|
|
) {
|
|
$this->actionScheduler = $actionScheduler;
|
|
$this->remoteExecutorHandler = $remoteExecutorHandler;
|
|
$this->daemonTriggerAction = $daemonTriggerAction;
|
|
$this->daemonRunAction = $daemonRunAction;
|
|
$this->wp = $wp;
|
|
}
|
|
|
|
public function init(bool $isActive = true): void {
|
|
if (!$isActive) {
|
|
$this->deactivateOnTrigger();
|
|
return;
|
|
}
|
|
$this->daemonRunAction->init();
|
|
$this->daemonTriggerAction->init();
|
|
$this->remoteExecutorHandler->init();
|
|
}
|
|
|
|
public function deactivate(): void {
|
|
$this->actionScheduler->unscheduleAllCronActions();
|
|
}
|
|
|
|
/**
|
|
* Unschedule all MailPoet actions when next "trigger" action is processed.
|
|
* Note: We can't unschedule the actions directly inside the trigger action itself,
|
|
* because the action is recurring and would reschedule itself anyway.
|
|
* We need do the deactivation after the action scheduler process finishes.
|
|
*/
|
|
private function deactivateOnTrigger(): void {
|
|
$this->wp->addAction(DaemonTrigger::NAME, [$this, 'deactivateAfterProcess']);
|
|
}
|
|
|
|
public function deactivateAfterProcess(): void {
|
|
$this->wp->addAction('action_scheduler_after_process_queue', [$this, 'deactivate']);
|
|
}
|
|
}
|