PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.11.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.11.1
11.1.1 11.1.0 11.0.5 11.0.4 11.0.3 11.0.2 11.0.1 11.0.0 10.11.1 10.11.0 10.10.2 10.10.1 10.10.0 10.9.1 trunk 10.0.0 10.0.1 10.1.0 10.1.1 10.1.2 10.1.3 10.1.4 10.2.0 10.2.1 10.2.2 All 62 releases
acymailing / back / Classes / ScenarioStepClass.php

ScenarioStepClass.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.11.1, at back/Classes/ScenarioStepClass.php

156 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Classes;
4
5 use AcyMailing\Core\AcymClass;
6
7 class ScenarioStepClass extends AcymClass
8 {
9 public function __construct()
10 {
11 parent::__construct();
12
13 $this->table = 'scenario_step';
14 $this->pkey = 'id';
15 }
16
17 public function save(object $element): ?int
18 {
19 if (!empty($element->params) && !is_string($element->params)) {
20 $element->params = json_encode($element->params);
21 }
22
23 $scenarioStep = acym_loadObject('SELECT * FROM #__acym_scenario_step WHERE `id` = '.acym_escapeDB($element->id));
24
25 $previousForce = $this->forceInsert;
26 $this->forceInsert = empty($scenarioStep);
27 $id = parent::save($element);
28 $this->forceInsert = $previousForce;
29
30 return (int)$id;
31 }
32
33 public function getAllByScenarioId(int $scenarioId): array
34 {
35 $steps = array_map([$this, 'formatStep'], acym_loadObjectList('SELECT * FROM #__acym_scenario_step WHERE scenario_id = '.$scenarioId, 'id'));
36
37 usort($steps, function ($a, $b) {
38 if ($a->previous_id === $b->id) {
39 return 1;
40 }
41
42 if ($b->previous_id === $a->id) {
43 return -1;
44 }
45
46 return 0;
47 });
48
49
50 return $steps;
51 }
52
53 public function getFirstStepByScenarioId(int $scenarioId): ?object
54 {
55 $step = acym_loadObject('SELECT * FROM #__acym_scenario_step WHERE previous_id IS NULL AND scenario_id = '.$scenarioId);
56 if (empty($step)) {
57 return null;
58 }
59
60 return $this->formatStep($step);
61 }
62
63 public function getStepByPreviousStepId(string $parentId): ?object
64 {
65 $step = acym_loadObject('SELECT * FROM #__acym_scenario_step WHERE previous_id = '.acym_escapeDB($parentId));
66 if (empty($step)) {
67 return null;
68 }
69
70 return $this->formatStep($step);
71 }
72
73 public function getAllStepsToDelete(int $scenarioId, array $stepIdsToKeep): array
74 {
75 $stepIdsToKeepEscaped = [];
76 foreach ($stepIdsToKeep as $stepIdToKeep) {
77 $stepIdsToKeepEscaped[] = acym_escapeDB($stepIdToKeep);
78 }
79
80 $query = 'SELECT id FROM #__acym_scenario_step WHERE scenario_id = '.$scenarioId;
81
82 if (!empty($stepIdsToKeepEscaped)) {
83 $query .= ' AND id NOT IN ('.implode(',', $stepIdsToKeepEscaped).')';
84 }
85
86 return acym_loadResultArray($query);
87 }
88
89 public function getStepByPreviousConditionId(string $parentId, bool $conditionValid): ?object
90 {
91 $conditionValidValue = $conditionValid ? 1 : 0;
92
93 $step = acym_loadObject('SELECT * FROM #__acym_scenario_step WHERE condition_valid = '.$conditionValidValue.' AND previous_id = '.acym_escapeDB($parentId));
94 if (empty($step)) {
95 return null;
96 }
97
98 return $this->formatStep($step);
99 }
100
101 public function getAvailableStepsByDate(string $date): array
102 {
103 $query = 'SELECT scenario_step.*, scenario_process.user_id, scenario_process.id AS scenario_process_id
104 FROM #__acym_scenario_step AS scenario_step
105 JOIN #__acym_scenario_queue AS scenario_queue ON scenario_step.id = scenario_queue.step_id AND scenario_queue.execution_date <= '.acym_escapeDB($date).'
106 JOIN #__acym_scenario_process AS scenario_process ON scenario_queue.scenario_process_id = scenario_process.id';
107
108 return array_map([$this, 'formatStep'], acym_loadObjectList($query));
109 }
110
111 public function getNumberOfProcessByStepByScenarioId(int $scenarioId): array
112 {
113 $query = 'SELECT scenario_history.scenario_step_id , COUNT(scenario_history.id) AS count
114 FROM #__acym_scenario_step AS scenario_step
115 JOIN #__acym_scenario_history_line AS scenario_history ON scenario_step.id = scenario_history.scenario_step_id AND scenario_history.scenario_step_id IS NOT NULL
116 WHERE scenario_step.scenario_id = '.$scenarioId.'
117 GROUP BY scenario_step_id';
118
119 return acym_loadObjectList($query, 'scenario_step_id');
120 }
121
122 public function getAllStepIds(): array
123 {
124 return acym_loadResultArray('SELECT id FROM #__acym_scenario_step');
125 }
126
127 public function generateNewStepId(array $allStepIds = []): string
128 {
129 if (empty($allStepIds)) {
130 $allStepIds = $this->getAllStepIds();
131 }
132
133 $letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
134 $randomString = '';
135 $length = 24;
136
137 for ($i = 0; $i < $length; $i++) {
138 $randomIndex = rand(0, strlen($letters) - 1);
139 $randomString .= $letters[$randomIndex];
140 }
141
142 if (in_array($randomString, $allStepIds)) {
143 return $this->generateNewStepId($allStepIds);
144 }
145
146 return $randomString;
147 }
148
149 private function formatStep(object $step): object
150 {
151 $step->params = json_decode($step->params, true);
152
153 return $step;
154 }
155 }
156