PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.0
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.0
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
← All changes | back/Controllers/Scenarios/Edition.php +320 -0 10.0.0 → 11.1.0 View file →
@@ -1,0 +1,320 @@
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 = acym_stripTags($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 = acym_stripTags($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 = acym_stripTags($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 + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
264 +
265 + $this->saveInner();
266 + $this->listing();
267 + }
268 +
269 + public function save(): void
270 + {
271 + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
272 +
273 + $scenarioId = $this->saveInner();
274 +
275 + acym_setVar('scenarioId', $scenarioId);
276 +
277 + $this->performances();
278 + }
279 +
280 + public function createMail(): void
281 + {
282 + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
283 +
284 + $options = acym_getVar('array', 'send_mail', []);
285 +
286 + if (empty($options['step_id'])) {
287 + return;
288 + }
289 +
290 + $scenarioId = $this->saveInner();
291 +
292 + if (empty($scenarioId)) {
293 + return;
294 + }
295 +
296 + $type = MailClass::TYPE_SCENARIO;
297 +
298 + $urlParams = [
299 + 'task' => 'edit',
300 + 'step' => 'editEmail',
301 + 'type' => $type,
302 + 'return' => acym_completeLink('scenarios&task=edit&step=editScenario&mailId={mailid}&scenarioId='.$scenarioId.'&stepId='.$options['step_id']),
303 + ];
304 +
305 + // Conditional mail ID
306 + if (!empty($options['mail_id'])) {
307 + $urlParams['id'] = $options['mail_id'];
308 + }
309 +
310 + $redirectLink = acym_completeLink('mails&'.http_build_query($urlParams), false, true);
311 +
312 + acym_redirect($redirectLink);
313 + }
314 +
315 + public function prepareStepIds(array &$data): void
316 + {
317 + $scenarioStepClass = new ScenarioStepClass();
318 + $data['allScenarioStepIds'] = $scenarioStepClass->getAllStepIds();
319 + }
320 +}