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']); } }