PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.10.2
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.10.2
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 / Controllers / Scenarios / Edition.php

Edition.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.10.2, at back/Controllers/Scenarios/Edition.php

314 lines 9.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Controllers\Scenarios;
4
5 use AcyMailing\Classes\MailClass;
6 use AcyMailing\Classes\ScenarioClass;
7 use AcyMailing\Classes\ScenarioStepClass;
8 use AcyMailing\Helpers\WorkflowHelper;
9
10 trait Edition
11 {
12 public function editScenario(): void
13 {
14 acym_setVar('layout', 'edit_scenario');
15 acym_setVar('step', 'editScenario');
16
17 $data = [
18 'workflowHelper' => new WorkflowHelper(),
19 ];
20
21 $this->prepareScenario($data);
22 $this->prepareFlow($data);
23 $this->prepareTriggers($data);
24 $this->prepareConditions($data);
25 $this->prepareActions($data);
26 $this->prepareReturnFromMailCreation($data);
27 $this->prepareSendEmailAction($data);
28 $this->prepareStepIds($data);
29 $this->prepareTemplateModal($data);
30
31 if (!empty($data['scenario']->id)) {
32 $this->breadcrumb[$data['scenario']->name] = acym_completeLink('scenarios&task=edit&step=editScenario&scenarioId='.$data['scenario']->id);
33 } else {
34 $this->breadcrumb[acym_translation('ACYM_NEW_SCENARIO')] = acym_completeLink('scenarios&task=edit&step=editScenario');
35 }
36
37 parent::display($data);
38 }
39
40 private function prepareTemplateModal(array &$data): void
41 {
42 $data['defaultTemplates'] = [
43 [
44 'name' => acym_translation('ACYM_ONBOARDING'),
45 'image' => 'onboarding.png',
46 ],
47 [
48 'name' => acym_translation('ACYM_ONBOARDING'),
49 'image' => 'onboarding.png',
50 ],
51 [
52 'name' => acym_translation('ACYM_ONBOARDING'),
53 'image' => 'onboarding.png',
54 ],
55 [
56 'name' => acym_translation('ACYM_ONBOARDING'),
57 'image' => 'onboarding.png',
58 ],
59 ];
60
61 ob_start();
62 include acym_getPartial('scenarios', 'modal_template');
63 $data['modalTemplate'] = ob_get_clean();
64 }
65
66 private function prepareReturnFromMailCreation(array &$data): void
67 {
68 $mailId = acym_getVar('int', 'mailId', 0);
69 $stepId = acym_getVar('string', 'stepId', '');
70
71 if (empty($mailId) || empty($stepId)) {
72 return;
73 }
74
75 $data['returnFromMailCreationStepId'] = $stepId;
76
77 $this->changeMailIdInFlowByStepId($data['flow'], $stepId, $mailId);
78 }
79
80 private function changeMailIdInFlowByStepId(array &$node, string $stepId, int $mailId): void
81 {
82 if (!empty($node['slug']) && $node['slug'] === $stepId) {
83 $existingOptions = !empty($node['params']['option']) && is_array($node['params']['option']) ? $node['params']['option'] : [];
84
85 $existingOptions['acym_action[actions][__and__][acy_send_email][mail_id]'] = $mailId;
86 $existingOptions['mail_id'] = $mailId;
87
88 $node['params']['option'] = $existingOptions;
89
90 return;
91 }
92
93 if (!empty($node['children'])) {
94 foreach ($node['children'] as &$childNode) {
95 $this->changeMailIdInFlowByStepId($childNode, $stepId, $mailId);
96 }
97 }
98 }
99
100 private function prepareSendEmailAction(array &$data): void
101 {
102 if (!empty($data['flow'])) {
103 $this->searchForSendEmailAction($data['flow']);
104 }
105 }
106
107 private function searchForSendEmailAction(array &$node): void
108 {
109 if (!empty($node['params']['action']) && $node['params']['action'] === 'acy_send_email') {
110 $complexKey = 'acym_action[actions][__and__][acy_send_email][mail_id]';
111
112 $mailId = 0;
113 if (!empty($node['params']['option'][$complexKey])) {
114 $mailId = (int)$node['params']['option'][$complexKey];
115 } elseif (!empty($node['params']['option']['mail_id'])) {
116 $mailId = (int)$node['params']['option']['mail_id'];
117 }
118
119 if (!empty($mailId)) {
120 $mail = $this->mailClass->getOneById($mailId);
121 if (!empty($mail)) {
122 $node['params']['option']['mail'] = $mail;
123 }
124 }
125 }
126
127 if (!empty($node['children'])) {
128 foreach ($node['children'] as &$childNode) {
129 $this->searchForSendEmailAction($childNode);
130 }
131 }
132 }
133
134 private function prepareScenario(array &$data): void
135 {
136 $scenarioId = acym_getVar('int', 'scenarioId', 0);
137
138 $scenarioClass = new ScenarioClass();
139 $scenario = new \stdClass();
140 $scenario->name = '';
141 $scenario->active = 0;
142 $scenario->trigger_once = 0;
143 if (!empty($scenarioId)) {
144 $scenario = $scenarioClass->getOneById($scenarioId);
145 }
146 $data['scenario'] = $scenario;
147 }
148
149 private function prepareFlow(array &$data): void
150 {
151 if (empty($data['scenario']->id)) {
152 return;
153 }
154
155 $flow = [
156 'condition' => false,
157 'params' => $data['scenario']->trigger_params,
158 'children' => [],
159 ];
160
161 $scenarioStepClass = new ScenarioStepClass();
162 $steps = $scenarioStepClass->getAllByScenarioId($data['scenario']->id);
163
164 $nodeReferences = [];
165
166 foreach ($steps as $item) {
167 $nodeReferences[$item->id] = [
168 'slug' => $item->id,
169 'params' => $item->params,
170 'condition' => $item->type == ScenarioClass::TYPE_CONDITION,
171 'children' => [],
172 'conditionValid' => $item->condition_valid,
173 ];
174 }
175
176 foreach ($steps as $item) {
177 if (empty($item->previous_id)) {
178 $flow['children'][] = &$nodeReferences[$item->id];
179 } else {
180 $key = 0;
181 if (!is_null($item->condition_valid)) {
182 $key = empty($item->condition_valid) ? 1 : 0;
183 }
184 $nodeReferences[$item->previous_id]['children'][$key] = &$nodeReferences[$item->id];
185 }
186 }
187
188 $data['flow'] = $flow;
189 }
190
191 private function prepareTriggers(array &$data): void
192 {
193 $defaultValues = [];
194 $triggers = ['classic' => [], 'user' => []];
195 acym_trigger('onAcymDeclareTriggersScenario', [&$triggers, &$defaultValues]);
196
197 $triggersFormatted = [];
198 foreach ($triggers['user'] as $key => $trigger) {
199 $trigger->key = $key;
200 $trigger->name = strip_tags($trigger->name);
201 $triggersFormatted[] = $trigger;
202 }
203
204 $data['triggers'] = $triggersFormatted;
205 }
206
207 private function prepareConditions(array &$data): void
208 {
209 $conditions = ['user' => [], 'classic' => []];
210 acym_trigger('onAcymDeclareConditionsScenario', [&$conditions]);
211
212 $conditionsFormatted = [];
213 foreach ($conditions['user'] as $key => $condition) {
214 $condition->key = $key;
215 $condition->name = strip_tags($condition->name);
216 $conditionsFormatted[] = $condition;
217 }
218
219 $data['conditions'] = $conditionsFormatted;
220 }
221
222 private function prepareActions(array &$data): void
223 {
224 $actions = [];
225 acym_trigger('onAcymDeclareActionsScenario', [&$actions]);
226
227 $actionsFormatted = [];
228 foreach ($actions as $key => $action) {
229 $action->key = $key;
230 $action->name = strip_tags($action->name);
231 $actionsFormatted[] = $action;
232 }
233
234 $data['actions'] = $actionsFormatted;
235 }
236
237 private function saveInner(): int
238 {
239 $id = acym_getVar('int', 'scenarioId', 0);
240 $scenario = acym_getVar('array', 'scenario', []);
241
242 if (empty($scenario)) {
243 return 0;
244 }
245
246 $scenario = (object)$scenario;
247
248 if (empty($scenario->name)) {
249 $scenario->name = acym_translation('ACYM_NEW_SCENARIO');
250 }
251
252 if (!empty($id)) {
253 $scenario->id = $id;
254 }
255
256 $scenarioClass = new ScenarioClass();
257
258 return $scenarioClass->save($scenario);
259 }
260
261 public function saveExit(): void
262 {
263 $this->saveInner();
264 $this->listing();
265 }
266
267 public function save(): void
268 {
269 $scenarioId = $this->saveInner();
270
271 acym_setVar('scenarioId', $scenarioId);
272
273 $this->performances();
274 }
275
276 public function createMail(): void
277 {
278 $options = acym_getVar('array', 'send_mail', []);
279
280 if (empty($options['step_id'])) {
281 return;
282 }
283
284 $scenarioId = $this->saveInner();
285
286 if (empty($scenarioId)) {
287 return;
288 }
289
290 $type = MailClass::TYPE_SCENARIO;
291
292 $urlParams = [
293 'task' => 'edit',
294 'step' => 'editEmail',
295 'type' => $type,
296 'return' => acym_completeLink('scenarios&task=edit&step=editScenario&mailId={mailid}&scenarioId='.$scenarioId.'&stepId='.$options['step_id']),
297 ];
298
299 if (!empty($options['mail_id'])) {
300 $urlParams['id'] = $options['mail_id'];
301 }
302
303 $redirectLink = acym_completeLink('mails&'.http_build_query($urlParams), false, true);
304
305 acym_redirect($redirectLink);
306 }
307
308 public function prepareStepIds(array &$data): void
309 {
310 $scenarioStepClass = new ScenarioStepClass();
311 $data['allScenarioStepIds'] = $scenarioStepClass->getAllStepIds();
312 }
313 }
314