PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Automation / Engine / Control / StepScheduler.php
mailpoet / lib / Automation / Engine / Control Last commit date
ActionScheduler.php 3 weeks ago AutomationController.php 2 years ago FilterHandler.php 1 month ago RootStep.php 2 years ago StepHandler.php 2 months ago StepRunController.php 1 year ago StepRunControllerFactory.php 1 year ago StepRunLogger.php 2 months ago StepRunLoggerFactory.php 2 years ago StepScheduler.php 1 year ago SubjectLoader.php 3 years ago SubjectTransformerHandler.php 1 year ago TriggerHandler.php 2 years ago index.php 3 years ago
StepScheduler.php
123 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Automation\Engine\Control;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Automation\Engine\Data\AutomationRun;
9 use MailPoet\Automation\Engine\Data\StepRunArgs;
10 use MailPoet\Automation\Engine\Exceptions;
11 use MailPoet\Automation\Engine\Hooks;
12 use MailPoet\Automation\Engine\Storage\AutomationRunStorage;
13
14 class StepScheduler {
15 /** @var ActionScheduler */
16 private $actionScheduler;
17
18 /** @var AutomationRunStorage */
19 private $automationRunStorage;
20
21 public function __construct(
22 ActionScheduler $actionScheduler,
23 AutomationRunStorage $automationRunStorage
24 ) {
25 $this->actionScheduler = $actionScheduler;
26 $this->automationRunStorage = $automationRunStorage;
27 }
28
29 public function scheduleProgress(StepRunArgs $args, ?int $timestamp = null): int {
30 $runId = $args->getAutomationRun()->getId();
31 $data = $this->getActionData($runId, $args->getStep()->getId(), $args->getRunNumber() + 1);
32 return $this->scheduleStepAction($data, $timestamp);
33 }
34
35 public function scheduleNextStep(StepRunArgs $args, ?int $timestamp = null): int {
36 $step = $args->getStep();
37 $nextSteps = $step->getNextSteps();
38
39 // complete the automation run if there are no more steps
40 if (count($nextSteps) === 0) {
41 $this->completeAutomationRun($args);
42 return 0;
43 }
44
45 if (count($nextSteps) > 1) {
46 throw Exceptions::nextStepNotScheduled($step->getId());
47 }
48
49 return $this->scheduleNextStepByIndex($args, 0, $timestamp);
50 }
51
52 public function scheduleNextStepByIndex(StepRunArgs $args, int $nextStepIndex, ?int $timestamp = null): int {
53 $step = $args->getStep();
54 $nextStep = $step->getNextSteps()[$nextStepIndex] ?? null;
55 if (!$nextStep) {
56 throw Exceptions::nextStepNotFound($step->getId(), $nextStepIndex);
57 }
58
59 $runId = $args->getAutomationRun()->getId();
60 $nextStepId = $nextStep->getId();
61 if (!$nextStepId) {
62 $this->completeAutomationRun($args);
63 return 0;
64 }
65
66 $data = $this->getActionData($runId, $nextStepId);
67 $id = $this->scheduleStepAction($data, $timestamp);
68 $this->automationRunStorage->updateNextStep($runId, $nextStepId);
69 return $id;
70 }
71
72 public function hasScheduledNextStep(StepRunArgs $args): bool {
73 $runId = $args->getAutomationRun()->getId();
74 foreach ($args->getStep()->getNextStepIds() as $nextStepId) {
75 $data = $this->getActionData($runId, $nextStepId);
76 $hasStep = $this->actionScheduler->hasScheduledAction(Hooks::AUTOMATION_STEP, $data);
77 if ($hasStep) {
78 return true;
79 }
80
81 // BC for old steps without run number
82 unset($data[0]['run_number']);
83 $hasStep = $this->actionScheduler->hasScheduledAction(Hooks::AUTOMATION_STEP, $data);
84 if ($hasStep) {
85 return true;
86 }
87 }
88 return false;
89 }
90
91 public function hasScheduledProgress(StepRunArgs $args): bool {
92 $runId = $args->getAutomationRun()->getId();
93 $data = $this->getActionData($runId, $args->getStep()->getId(), $args->getRunNumber() + 1);
94 return $this->actionScheduler->hasScheduledAction(Hooks::AUTOMATION_STEP, $data);
95 }
96
97 public function hasScheduledStep(StepRunArgs $args): bool {
98 return $this->hasScheduledNextStep($args) || $this->hasScheduledProgress($args);
99 }
100
101 private function scheduleStepAction(array $data, ?int $timestamp = null): int {
102 return $timestamp === null
103 ? $this->actionScheduler->enqueue(Hooks::AUTOMATION_STEP, $data)
104 : $this->actionScheduler->schedule($timestamp, Hooks::AUTOMATION_STEP, $data);
105 }
106
107 private function completeAutomationRun(StepRunArgs $args): void {
108 $runId = $args->getAutomationRun()->getId();
109 $this->automationRunStorage->updateNextStep($runId, null);
110 $this->automationRunStorage->updateStatus($runId, AutomationRun::STATUS_COMPLETE);
111 }
112
113 private function getActionData(int $runId, string $stepId, int $runNumber = 1): array {
114 return [
115 [
116 'automation_run_id' => $runId,
117 'step_id' => $stepId,
118 'run_number' => $runNumber,
119 ],
120 ];
121 }
122 }
123