PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.2.2
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.2.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 / Campaigns / Edition.php

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

1,207 lines 49.1 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\Campaigns;
4
5 use AcyMailing\Classes\CampaignClass;
6 use AcyMailing\Classes\MailArchiveClass;
7 use AcyMailing\Classes\MailClass;
8 use AcyMailing\Classes\ListClass;
9 use AcyMailing\Classes\QueueClass;
10 use AcyMailing\Classes\SegmentClass;
11 use AcyMailing\Classes\TagClass;
12 use AcyMailing\Classes\UserClass;
13 use AcyMailing\Controllers\AutomationController;
14 use AcyMailing\Controllers\MailsController;
15 use AcyMailing\Controllers\SegmentsController;
16 use AcyMailing\Helpers\EditorHelper;
17 use AcyMailing\Helpers\EntitySelectHelper;
18 use AcyMailing\Helpers\PaginationHelper;
19 use AcyMailing\Helpers\PluginHelper;
20 use AcyMailing\Helpers\WorkflowHelper;
21 use AcyMailing\Types\UploadFileType;
22 use stdClass;
23
24 trait Edition
25 {
26 public function newEmail(): void
27 {
28 acym_setVar('layout', 'new_email');
29
30 $data = [
31 'selectedType' => acym_getVar('string', 'email_type', ''),
32 'menuClass' => $this->menuClass,
33 ];
34
35 $listClass = new ListClass();
36 if (acym_isAdmin()) {
37 $returnUrl = urlencode(base64_encode(acym_completeLink('campaigns')));
38 $favoriteTemplate = $this->config->get('favorite_template', 0);
39 $welcomeUnsub = '&list_id={dataid}&type_editor=acyEditor&return='.$returnUrl;
40
41 if (empty($favoriteTemplate)) {
42 $data = array_merge(
43 $data,
44 [
45 'lists' => $listClass->getAllForSelect(),
46 'campaign_link' => acym_completeLink('campaigns&task=edit&step=chooseTemplate&campaign_type=now'),
47 'campaign_test_link' => acym_completeLink('campaigns&task=edit&step=chooseTemplate&campaign_type=now&abtest=1'),
48 'campaign_auto_link' => acym_completeLink('campaigns&task=edit&step=chooseTemplate&campaign_type=auto'),
49 'followup_link' => acym_completeLink('campaigns&task=edit&step=followupTrigger'),
50 'campaign_scheduled_link' => acym_completeLink('campaigns&task=edit&step=chooseTemplate&campaign_type=scheduled'),
51 'welcome_email_link' => acym_completeLink('mails&task=edit&type='.MailClass::TYPE_WELCOME.$welcomeUnsub),
52 'unsubscribe_email_link' => acym_completeLink('mails&task=edit&type='.MailClass::TYPE_UNSUBSCRIBE.$welcomeUnsub),
53 ]
54 );
55 } else {
56 $data = array_merge(
57 $data,
58 [
59 'lists' => $listClass->getAllForSelect(),
60 'campaign_link' => acym_completeLink('campaigns&task=edit&step=editEmail&from='.$favoriteTemplate.'&campaign_type=now'),
61 'campaign_test_link' => acym_completeLink('campaigns&task=edit&step=editEmail&from='.$favoriteTemplate.'&campaign_type=now&abtest=1'),
62 'campaign_auto_link' => acym_completeLink('campaigns&task=edit&step=editEmail&from='.$favoriteTemplate.'&campaign_type=auto'),
63 'followup_link' => acym_completeLink('campaigns&task=edit&step=followupTrigger'),
64 'campaign_scheduled_link' => acym_completeLink('campaigns&task=edit&step=editEmail&from='.$favoriteTemplate.'&campaign_type=scheduled'),
65 'welcome_email_link' => acym_completeLink('mails&task=edit&type='.MailClass::TYPE_WELCOME.'&from='.$favoriteTemplate.$welcomeUnsub),
66 'unsubscribe_email_link' => acym_completeLink('mails&task=edit&type='.MailClass::TYPE_UNSUBSCRIBE.'&from='.$favoriteTemplate.$welcomeUnsub),
67 ]
68 );
69 }
70
71 $data['extraBlocks'] = [];
72 acym_trigger('getNewEmailsTypeBlock', [&$data['extraBlocks']]);
73 $data['isNewslettersTab'] = !in_array(
74 $data['selectedType'],
75 array_merge(
76 [
77 MailClass::TYPE_WELCOME,
78 MailClass::TYPE_UNSUBSCRIBE,
79 ],
80 array_column($data['extraBlocks'], 'email_type')
81 )
82 );
83 } else {
84 global $Itemid;
85 $itemId = empty($Itemid) ? '' : '&Itemid='.$Itemid;
86 $returnUrl = urlencode(base64_encode(acym_frontendLink('frontcampaigns'.$itemId)));
87
88 $welcomeUnsub = '&list_id={dataid}&type_editor=acyEditor&return='.$returnUrl.$itemId;
89 $data = array_merge(
90 $data,
91 [
92 'lists' => $listClass->getAllForSelect(true, acym_currentUserId()),
93 'campaign_link' => acym_frontendLink('frontcampaigns&task=edit&step=chooseTemplate&campaign_type=now'.$itemId.'&'.acym_getFormToken()),
94 'campaign_scheduled_link' => acym_frontendLink('frontcampaigns&task=edit&step=chooseTemplate&campaign_type=scheduled'.$itemId.'&'.acym_getFormToken()),
95 'welcome_email_link' => acym_frontendLink('frontmails&task=edit&type='.MailClass::TYPE_WELCOME.$welcomeUnsub.'&'.acym_getFormToken()),
96 'unsubscribe_email_link' => acym_frontendLink('frontmails&task=edit&type='.MailClass::TYPE_UNSUBSCRIBE.$welcomeUnsub.'&'.acym_getFormToken()),
97 ]
98 );
99 }
100
101 parent::display($data);
102 }
103
104 private function prepareSegmentDisplay(array &$data, array $sendingParams): void
105 {
106 $data['menuClass'] = $this->menuClass;
107 $data['displaySegmentTab'] = !empty($sendingParams) && array_key_exists('segment', $sendingParams);
108 }
109
110 public function chooseTemplate(): void
111 {
112 acym_setVar('layout', 'choose_email');
113 acym_setVar('step', 'chooseTemplate');
114 $pagination = new PaginationHelper();
115
116 $campaignId = acym_getVar('int', 'campaignId', 0);
117 $campaignClass = new CampaignClass();
118 $searchFilter = $this->getVarFiltersListing('string', 'mailchoose_search', '');
119 $tagFilter = $this->getVarFiltersListing('string', 'mailchoose_tag', '');
120 $ordering = $this->getVarFiltersListing('string', 'mailchoose_ordering', 'creation_date');
121 $orderingSortOrder = $this->getVarFiltersListing('string', 'mailchoose_ordering_sort_order', 'DESC');
122 $campaign = $campaignClass->getOneByIdWithMail($campaignId);
123 $campaignType = $this->getVarFiltersListing('string', 'campaign_type', 'now');
124 $abTest = acym_getVar('bool', 'abtest', false);
125
126 $this->setTaskListing($campaignType);
127
128 if (!empty($campaign)) {
129 if (!$campaignClass->hasUserAccess($campaign->id)) {
130 die('Access denied for this campaign');
131 }
132 $this->breadcrumb[$campaign->name] = '';
133 } else {
134 $this->breadcrumb[acym_translation('ACYM_NEW_CAMPAIGN')] = '';
135 }
136
137 $mailsPerPage = $pagination->getListLimit();
138 $page = $this->getVarFiltersListing('int', 'mailchoose_pagination_page', 1);
139
140 $mailClass = new MailClass();
141 $matchingMails = $mailClass->getMatchingElements(
142 [
143 'ordering' => $ordering,
144 'ordering_sort_order' => $orderingSortOrder,
145 'search' => $searchFilter,
146 'elementsPerPage' => $mailsPerPage,
147 'offset' => ($page - 1) * $mailsPerPage,
148 'tag' => $tagFilter,
149 'creator_id' => $this->setFrontEndParamsForTemplateChoose(),
150 'gettingTemplates' => true,
151 ]
152 );
153
154 $pagination->setStatus($matchingMails['total']->total, $page, $mailsPerPage);
155
156 $tagClass = new TagClass();
157
158 $data = [
159 'allMails' => $matchingMails['elements'],
160 'allTags' => $tagClass->getAllTagsByType(TagClass::TYPE_MAIL),
161 'pagination' => $pagination,
162 'search' => $searchFilter,
163 'tag' => $tagFilter,
164 'ordering' => $ordering,
165 'campaignID' => $campaignId,
166 'campaign_type' => $campaignType,
167 'abtest' => $abTest,
168 ];
169 $this->prepareListingClasses($data);
170 $this->prepareSegmentDisplay($data, empty($campaign->sending_params) ? [] : $campaign->sending_params);
171
172 $data['menuClass'] = $this->menuClass;
173
174 parent::display($data);
175 }
176
177 protected function setFrontEndParamsForTemplateChoose(): int
178 {
179 return 0;
180 }
181
182 private function prepareEditCampaign(array &$data): void
183 {
184 $campaignId = acym_getVar('int', 'campaignId', 0);
185 $mailId = acym_getVar('int', 'from', 0);
186 $mailClass = new MailClass();
187 $data['mailClass'] = $mailClass;
188 $checkAutosave = empty($mailId);
189 $editLink = 'campaigns&task=edit&step=editEmail';
190
191 if (empty($campaignId)) {
192 $data['mailInformation'] = new stdClass();
193 $data['mailInformation']->id = 0;
194 $data['mailInformation']->name = '';
195 $data['mailInformation']->tags = [];
196 $data['mailInformation']->subject = '';
197 $data['mailInformation']->preheader = '';
198 $data['mailInformation']->body = '';
199 $data['mailInformation']->settings = null;
200 $data['mailInformation']->links_language = '';
201 $data['mailInformation']->visible = 1;
202 $data['mailInformation']->mail_settings = null;
203
204 $editLink .= '&from='.$mailId;
205 } else {
206 $campaignClass = new CampaignClass();
207 if (!$campaignClass->hasUserAccess($campaignId)) {
208 die('Access denied for this campaign');
209 }
210
211 if (!empty($mailId)) {
212 $campaignClass->resetAbTestVersion($campaignId);
213 }
214
215 $data['mailInformation'] = $campaignClass->getOneByIdWithMail($campaignId);
216 if (empty($mailId)) {
217 $mailId = $data['mailInformation']->mail_id;
218 }
219 $editLink .= '&campaignId='.$campaignId;
220
221 if (in_array($data['mailInformation']->sending_type, ['birthday', 'woocommerce_cart'])) {
222 $this->setTaskListing($data['mailInformation']->sending_type);
223 }
224 }
225
226 if ($mailId == -1 || (empty($campaignId) && empty($mailId))) {
227 $data['mailInformation']->name = '';
228 $data['mailInformation']->tags = [];
229 $data['mailInformation']->subject = '';
230 $data['mailInformation']->preheader = '';
231 $data['mailInformation']->body = '';
232 $data['mailInformation']->settings = null;
233 $data['mailInformation']->attachments = [];
234 $data['mailInformation']->stylesheet = '';
235 $data['mailInformation']->headers = '';
236 $data['mailInformation']->from_email = '';
237 $data['mailInformation']->from_name = '';
238 $data['mailInformation']->reply_to_email = '';
239 $data['mailInformation']->reply_to_name = '';
240 $data['mailInformation']->mail_settings = null;
241 $data['typeEditor'] = 'acyEditor';
242 } elseif (!empty($mailId)) {
243 $mail = $mailClass->getOneById($mailId);
244 if (!acym_isAdmin() && ACYM_CMS === 'joomla' && acym_isPluginActive('sef')) {
245 $mail->body = str_replace(['url(&quot;', '&quot;)'], ["url('", "')"], $mail->body);
246 }
247 $data['mailInformation']->tags = $mail->tags;
248 $data['mailInformation']->subject = $mail->subject;
249 $data['mailInformation']->preheader = $mail->preheader;
250 $data['mailInformation']->body = $mail->body;
251 $data['mailInformation']->settings = $mail->settings;
252 $data['mailInformation']->stylesheet = $mail->stylesheet;
253 $data['mailInformation']->headers = $mail->headers;
254 $data['mailInformation']->attachments = empty($mail->attachments) ? [] : json_decode($mail->attachments);
255 $data['mailInformation']->links_language = $mail->links_language;
256
257 $data['mailInformation']->from_email = $mail->from_email;
258 $data['mailInformation']->from_name = $mail->from_name;
259 $data['mailInformation']->reply_to_email = $mail->reply_to_email;
260 $data['mailInformation']->reply_to_name = $mail->reply_to_name;
261 $data['mailInformation']->mail_settings = $mail->mail_settings;
262
263 if ($checkAutosave) {
264 $data['mailInformation']->autosave = $mail->autosave;
265 }
266 }
267 $data['mailId'] = $mailId;
268 $data['campaignID'] = $data['mailInformation']->id;
269
270 $pluginHelper = new PluginHelper();
271 if (empty($data['mailInformation']->body)) {
272 $data['mailInformation']->body = '';
273 }
274 $pluginHelper->cleanHtml($data['mailInformation']->body);
275
276 $editLink .= '&type_editor='.$data['typeEditor'];
277 $this->breadcrumb[acym_escape(empty($data['mailInformation']->name) ? acym_translation('ACYM_NEW_CAMPAIGN') : $data['mailInformation']->name)] = acym_completeLink(
278 $editLink
279 );
280 }
281
282 private function prepareEditor(array &$data): void
283 {
284 $data['editor'] = new EditorHelper();
285 $data['editor']->content = $data['mailInformation']->body;
286 $data['editor']->autoSave = !empty($data['mailInformation']->autosave) ? $data['mailInformation']->autosave : '';
287 if (!empty($data['mailInformation']->settings)) {
288 $data['editor']->settings = $data['mailInformation']->settings;
289 }
290
291 if (!empty($data['mailInformation']->stylesheet)) {
292 $data['editor']->stylesheet = $data['mailInformation']->stylesheet;
293 }
294
295 if (empty($data['typeEditor']) && strpos($data['editor']->content, 'acym__wysid__template') !== false) {
296 $data['typeEditor'] = 'acyEditor';
297 }
298
299 $data['editor']->editor = $data['typeEditor'];
300 if ($data['editor']->editor != 'acyEditor' || empty($data['editor']->editor)) {
301 if (!isset($data['mailInformation']->stylesheet)) $data['mailInformation']->stylesheet = '';
302 $data['needDisplayStylesheet'] = '<input type="hidden" name="editor_stylesheet" value="'.acym_escape($data['mailInformation']->stylesheet).'">';
303 } else {
304 $data['needDisplayStylesheet'] = '';
305 }
306
307 $data['editor']->mailId = empty($data['mailId']) ? 0 : $data['mailId'];
308
309 if ($data['editor']->isDragAndDrop()) {
310 $this->loadScripts['edit_email'][] = 'editor-wysid';
311 $this->loadScripts['edit_email']['vue-applications'] = ['custom_view'];
312 } else {
313 $this->loadScripts['edit_email'][] = 'dtextPicker';
314 }
315 }
316
317 public function prepareMaxUpload(array &$data): void
318 {
319 $maxupload = ini_get('upload_max_filesize');
320 $maxpost = ini_get('post_max_size');
321 $data['maxupload'] = acym_bytes($maxupload) > acym_bytes($maxpost) ? $maxpost : $maxupload;
322 }
323
324 private function prepareAbTest(array &$data, bool $editor = true): void
325 {
326 $data['abtest'] = false;
327
328 }
329
330 private function prepareMultilingual(array &$data, bool $editor = true): void
331 {
332 $data['multilingual'] = 0;
333
334 }
335
336 private function prepareAllMailsForAbtest(array &$data): void
337 {
338 $mailClass = new MailClass();
339
340 $mails = $mailClass->getParentAndChildMails($data['mailId']);
341
342 if (empty($mails)) {
343 acym_enqueueMessage(acym_translation('ACYM_COULD_NOT_LOAD_ABTEST_MAILS'), 'error');
344
345 return;
346 }
347
348 foreach ($mails as $key => $oneMail) {
349 $mails[$key] = $this->prepareMailDataSummary($data, (int)$oneMail->id);
350 }
351
352 $data['abtest_mails'] = $mails;
353 }
354
355 private function prepareAllMailsForMultilingual(array &$data): void
356 {
357 $mailClass = new MailClass();
358
359 $mails = $mailClass->getMultilingualMails($data['mailId']);
360
361 if (empty($mails)) {
362 acym_enqueueMessage(acym_translation('ACYM_COULD_NOT_LOAD_MULTILINGUAL_MAILS'), 'error');
363
364 return;
365 }
366
367 foreach ($mails as $key => $oneMail) {
368 $mails[$key] = $this->prepareMailDataSummary($data, (int)$oneMail->id);
369 }
370
371 $data['multilingual_mails'] = $mails;
372 }
373
374 public function editEmail(): void
375 {
376 acym_setVar('layout', 'edit_email');
377 acym_setVar('numberattachment', '0');
378 acym_setVar('step', 'editEmail');
379
380 $tagClass = new TagClass();
381
382 $data = [
383 'containerClass' => $this->stepContainerClass,
384 'social_icons' => $this->config->get('social_icons', '{}'),
385 'allTags' => $tagClass->getAllTagsByType(TagClass::TYPE_MAIL),
386 'campaign_type' => acym_getVar('string', 'campaign_type', 'now'),
387 'typeEditor' => acym_getVar('string', 'type_editor', ''),
388 'uploadFileType' => new UploadFileType(),
389 ];
390
391 $this->prepareEditCampaign($data);
392 $this->prepareEditor($data);
393 $this->prepareMaxUpload($data);
394 $this->prepareAbTest($data);
395 $this->prepareMultilingual($data);
396 $this->prepareListingClasses($data);
397 $this->prepareSegmentDisplay($data, empty($data['mailInformation']->sending_params) ? [] : $data['mailInformation']->sending_params);
398
399 $data['before-save'] = '';
400
401 if ($data['editor']->editor === 'acyEditor') {
402 $data['before-save'] = 'acym-data-before="acym_editorWysidVersions.storeCurrentValues(true);acym_editorWysidFormAction.cleanMceInput();"';
403 }
404
405 $data['menuClass'] = $this->menuClass;
406
407 parent::display($data);
408 }
409
410 public function recipients(): void
411 {
412 acym_setVar('layout', 'recipients');
413 acym_setVar('step', 'recipients');
414
415 $campaignId = acym_getVar('int', 'campaignId');
416 $campaignClass = new CampaignClass();
417 $mailClass = new MailClass();
418
419 if (empty($campaignId) || !$campaignClass->hasUserAccess($campaignId)) {
420 die('Access denied for this campaign');
421 }
422
423 $currentCampaign = $campaignClass->getOneByIdWithMail($campaignId);
424 $this->breadcrumb[acym_escape($currentCampaign->name)] = acym_completeLink('campaigns&task=edit&step=recipients&campaignId='.$campaignId);
425
426 $campaign = [
427 'campaignInformation' => $campaignId,
428 'currentCampaign' => $currentCampaign,
429 'containerClass' => $this->stepContainerClass,
430 'entitySelectHelper' => new EntitySelectHelper(),
431 ];
432
433 $campaignLists = $mailClass->getAllListsByMailId($currentCampaign->mail_id);
434 $campaign['campaignListsId'] = array_keys($campaignLists);
435 acym_arrayToInteger($campaign['campaignListsId']);
436 $campaign['campaignListsSelected'] = json_encode($campaign['campaignListsId']);
437
438 $this->prepareListingClasses($campaign);
439 $this->prepareSegmentDisplay($campaign, $campaign['currentCampaign']->sending_params);
440
441 parent::display($campaign);
442 }
443
444 public function segment(): void
445 {
446 acym_setVar('layout', 'segment');
447 acym_setVar('step', 'segment');
448
449 $campaignClass = new CampaignClass();
450 $mailClass = new MailClass();
451 $campaignId = acym_getVar('int', 'campaignId');
452
453 if (empty($campaignId)) {
454 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), 'error');
455 $this->listing();
456
457 return;
458 }
459
460 $campaign = $campaignClass->getOneById($campaignId);
461
462 $mail = $mailClass->getOneById($campaign->mail_id);
463 $data = [
464 'campaign' => $campaign,
465 'containerClass' => $this->stepContainerClass,
466 'displaySegmentTab' => true,
467 'workflowHelper' => new WorkflowHelper(),
468 ];
469
470
471 $this->breadcrumb[acym_escape($mail->name)] = acym_completeLink(acym_completeLink('campaigns&task=edit&step=recipients&campaignId='.$campaign->id));
472 parent::display($data);
473 }
474
475 public function sendSettings(): void
476 {
477 acym_setVar('layout', 'send_settings');
478 acym_setVar('step', 'sendSettings');
479 $campaignId = acym_getVar('int', 'campaignId');
480 $campaignClass = new CampaignClass();
481 $campaignInformation = empty($campaignId) ? null : $campaignClass->getOneById($campaignId);
482
483 if (is_null($campaignInformation)) {
484 acym_enqueueMessage(acym_translation('ACYM_CANT_GET_CAMPAIGN_INFORMATION'), 'error');
485 $this->listing();
486
487 return;
488 }
489
490 if (!$campaignClass->hasUserAccess($campaignId)) {
491 die('Access denied for this campaign');
492 }
493
494 $from = acym_getVar('string', 'from');
495
496 $campaignClass = new CampaignClass();
497 $currentCampaign = $campaignClass->getOneByIdWithMail($campaignId);
498 $this->breadcrumb[acym_escape($currentCampaign->name)] = acym_completeLink('campaigns&task=edit&step=sendSettings&campaignId='.$campaignId);
499
500 if (!empty($currentCampaign->sent) && empty($currentCampaign->active)) {
501 $currentCampaign->sending_date = '';
502 }
503
504 $data = [
505 'nbSubscribers' => $campaignClass->countUsersCampaign($campaignId, true),
506 'from' => $from,
507 'suggestedDate' => acym_date('1534771620', 'j M Y H:i'),
508 'campaignClass' => $campaignClass,
509 ];
510
511 $data['currentCampaign'] = $currentCampaign;
512 $data['currentCampaign']->send_now = $currentCampaign->sending_type === CampaignClass::SENDING_TYPE_NOW;
513 $data['currentCampaign']->send_scheduled = $currentCampaign->sending_type === CampaignClass::SENDING_TYPE_SCHEDULED;
514 $data['currentCampaign']->send_auto = $currentCampaign->sending_type === CampaignClass::SENDING_TYPE_AUTO;
515
516 $data['currentCampaign']->send_specific = [];
517 if (!in_array($currentCampaign->sending_type, CampaignClass::SENDING_TYPES)) {
518 acym_trigger(
519 'getCampaignSpecificSendSettings',
520 [
521 $currentCampaign->sending_type,
522 $currentCampaign->sending_params,
523 &$data['currentCampaign']->send_specific,
524 ]
525 );
526 }
527
528 $data['senderInformations'] = new stdClass();
529 $data['senderInformations']->from_name = empty($currentCampaign->from_name) ? '' : $currentCampaign->from_name;
530 $data['senderInformations']->from_email = empty($currentCampaign->from_email) ? '' : $currentCampaign->from_email;
531 $data['senderInformations']->reply_to_name = empty($currentCampaign->reply_to_name) ? '' : $currentCampaign->reply_to_name;
532 $data['senderInformations']->reply_to_email = empty($currentCampaign->reply_to_email) ? '' : $currentCampaign->reply_to_email;
533 $data['senderInformations']->bounce_email = empty($currentCampaign->bounce_email) ? '' : $currentCampaign->bounce_email;
534
535 $data['config_values'] = new stdClass();
536 $data['config_values']->from_name = $this->config->get('from_name');
537 $data['config_values']->from_email = $this->config->get('from_email');
538 $data['config_values']->reply_to_name = $this->config->get('replyto_name');
539 $data['config_values']->reply_to_email = $this->config->get('replyto_email');
540 $data['config_values']->bounce_email = $this->config->get('bounce_email');
541
542 $triggers = [];
543
544 acym_trigger('onAcymDeclareTriggers', [&$triggers, &$currentCampaign->sending_params], 'plgAcymTime');
545 $triggers = $triggers['classic'];
546
547 $data['triggers_select'] = [];
548 $data['triggers_display'] = [];
549
550 foreach ($triggers as $key => $trigger) {
551 $data['triggers_select'][$key] = $trigger->name;
552 $data['triggers_display'][$key] = $trigger->option;
553 }
554
555 if (!empty($data['currentCampaign']->sending_params) && empty($data['currentCampaign']->sending_params['trigger_type'])) {
556 foreach (array_keys($triggers) as $oneTrigger) {
557 if (!empty($data['currentCampaign']->sending_params[$oneTrigger])) {
558 $data['currentCampaign']->sending_params['trigger_type'] = $oneTrigger;
559 }
560 }
561 }
562
563 $data['containerClass'] = $this->stepContainerClass;
564 $data['langChoice'] = acym_isMultilingual() ? '' : acym_languageOption($data['currentCampaign']->links_language, 'senderInformation[links_language]');
565 $this->prepareListingClasses($data);
566 $this->prepareSegmentDisplay($data, $data['currentCampaign']->sending_params);
567 $this->prepareMultilingualOption($data);
568
569 parent::display($data);
570 }
571
572 public function saveEditEmail(bool $ajax = false): int
573 {
574 acym_checkToken();
575
576 $campaignClass = new CampaignClass();
577 $mailClass = new MailClass();
578 $formData = acym_getVar('array', 'mail', []);
579 $versions = acym_getVar('array', 'versions', [], 'REQUEST', ACYM_ALLOWRAW);
580 $versionType = acym_getVar('string', 'version_type', '');
581 $allowedFields = acym_getColumns('mail');
582 $campaignId = acym_getVar('int', 'campaignId', 0);
583 $campaignType = acym_getVar('string', 'campaign_type', 'now');
584
585 $types = [
586 'now' => CampaignClass::SENDING_TYPE_NOW,
587 'auto' => CampaignClass::SENDING_TYPE_AUTO,
588 'scheduled' => CampaignClass::SENDING_TYPE_SCHEDULED,
589 ];
590
591 acym_trigger('getCampaignTypes', [&$types]);
592
593 if (empty($campaignId)) {
594 $mail = new stdClass();
595 $mail->creation_date = acym_date('now', 'Y-m-d H:i:s', false);
596 $mail->type = MailClass::TYPE_STANDARD;
597
598 $campaign = new stdClass();
599 $campaign->draft = 1;
600 $campaign->active = 0;
601 $campaign->sending_type = $types[$campaignType];
602 $campaign->sent = 0;
603 $campaign->sending_params = [];
604 } else {
605 if (!$campaignClass->hasUserAccess($campaignId)) {
606 die('Access denied for this campaign');
607 }
608
609 $campaign = $campaignClass->getOneById($campaignId);
610 $mail = $mailClass->getOneById($campaign->mail_id);
611 $mailArchiveClass = new MailArchiveClass();
612 $archive = $mailArchiveClass->getOneByMailId($mail->id);
613 if (!empty($archive)) {
614 $mailArchiveClass->delete($archive->id);
615 }
616 }
617 $campaign->visible = acym_getVar('int', 'visible', 1);
618
619 foreach ($formData as $name => $data) {
620 if (!in_array($name, $allowedFields)) {
621 continue;
622 }
623 $mail->{acym_secureDBColumn($name)} = $data;
624 }
625
626 if (empty($mail->name)) $mail->name = empty($mail->subject) ? acym_translation('ACYM_CAMPAIGN_NAME') : $mail->subject;
627
628 if (empty($mail->subject)) $mail->subject = acym_translation('ACYM_EMAIL_SUBJECT');
629
630 $mail->body = acym_getVar('string', 'editor_content', '', 'REQUEST', ACYM_ALLOWRAW);
631 $mail->settings = acym_getVar('string', 'editor_settings', '', 'REQUEST', ACYM_ALLOWRAW);
632 $mail->stylesheet = acym_getVar('string', 'editor_stylesheet', '', 'REQUEST', ACYM_ALLOWRAW);
633 $mail->headers = acym_getVar('string', 'editor_headers', '', 'REQUEST', ACYM_ALLOWRAW);
634 $mail->from_email = acym_getVar('string', 'from_email', '', 'REQUEST');
635 $mail->from_name = acym_getVar('string', 'from_name', '', 'REQUEST');
636 $mail->reply_to_email = acym_getVar('string', 'reply_to_email', '', 'REQUEST');
637 $mail->reply_to_name = acym_getVar('string', 'reply_to_name', '', 'REQUEST');
638 $mail->drag_editor = strpos($mail->body, 'acym__wysid__template') === false ? 0 : 1;
639 $mail->attachments = empty($mail->attachments) ? [] : json_decode($mail->attachments, true);
640
641 $mainColors = acym_getVar('string', 'main_colors', '', 'REQUEST', ACYM_ALLOWRAW);;
642 if (!empty($mail->mail_settings)) {
643 $mailSettings = json_decode($mail->mail_settings, false);
644 } else {
645 $mailSettings = new stdClass();
646 }
647 $mailSettings->mainColors = $mainColors;
648 $mail->mail_settings = json_encode($mailSettings);
649
650 $mail->tags = acym_getVar('array', 'template_tags', []);
651
652 $mailController = new MailsController();
653 $mailController->setAttachmentToMail($mail);
654
655 if (!empty($versions)) {
656 if (!empty($versions['main']['subject'])) $mail->subject = $versions['main']['subject'];
657 if (!empty($versions['main']['preview'])) $mail->preheader = $versions['main']['preview'];
658 if (!empty($versions['main']['content'])) $mail->body = $versions['main']['content'];
659 if (!empty($versions['main']['content'])) $mail->settings = $versions['main']['settings'];
660 if (!empty($versions['main']['content'])) $mail->stylesheet = $versions['main']['stylesheet'];
661
662 if ($versionType === 'multilingual') {
663 $mail->links_language = $this->config->get('multilingual_default');
664 }
665
666 unset($versions['main']);
667 }
668
669 if ($mailID = $mailClass->save($mail)) {
670 if (acym_getVar('string', 'nextstep', '') === 'listing') {
671 acym_enqueueMessage(acym_translation('ACYM_SUCCESSFULLY_SAVED'));
672 }
673 } else {
674 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
675 if (!empty($mailClass->errors)) {
676 acym_enqueueMessage($mailClass->errors, 'error');
677 }
678
679 if (!$ajax) {
680 $this->listing();
681 }
682
683 return 0;
684 }
685
686 if (!empty($versions) && in_array($versionType, ['multilingual', 'abtest'])) {
687 $abTestSendingParams = empty($campaign->sending_params['abtest']) ? [] : $campaign->sending_params['abtest'];
688 foreach ($versions as $code => $version) {
689 if (empty($version['subject'])) {
690 if ($versionType === 'multilingual') {
691 $mailClass->delete($mailClass->getTranslationId($mailID, $code));
692 } elseif (!empty($abTestSendingParams[$code])) {
693 $mailClass->delete($abTestSendingParams[$code]);
694 }
695 continue;
696 }
697
698 unset($mail->id);
699 $versionId = null;
700 if ($versionType === 'multilingual') {
701 $versionId = $mailClass->getTranslationId($mailID, $code);
702 } elseif (!empty($abTestSendingParams[$code])) {
703 $versionId = $abTestSendingParams[$code];
704 }
705 if (!empty($versionId)) {
706 $mail->id = $versionId;
707 }
708
709 $mail->subject = $version['subject'];
710 $mail->preheader = $version['preview'];
711 $mail->body = $version['content'];
712 $mail->parent_id = $mailID;
713 $mail->settings = $version['settings'];
714 $mail->stylesheet = $version['stylesheet'];
715
716 if ($versionType === 'multilingual') {
717 $mail->links_language = $code;
718 $mail->language = $code;
719 }
720
721 $versionMailId = $mailClass->save($mail);
722 $abTestSendingParams[$code] = $versionMailId;
723 }
724
725 if ($versionType === 'abtest') {
726 $campaign->sending_params['abtest'] = $abTestSendingParams;
727 }
728 }
729
730 $campaign->mail_id = $mailID;
731 $campaign->id = $campaignClass->save($campaign);
732
733 if (!$ajax) {
734 acym_setVar('campaignId', $campaign->id);
735 $this->edit();
736 }
737
738 return (int)$campaign->id;
739 }
740
741 public function saveRecipients(): void
742 {
743 $allLists = json_decode(acym_getVar('string', 'acym__entity_select__selected'));
744 $allListsUnselected = json_decode(acym_getVar('string', 'acym__entity_select__unselected'));
745 $campaignId = acym_getVar('int', 'campaignId');
746 $addSegmentStep = acym_getVar('int', 'add_segment_step');
747
748 $campaignClass = new CampaignClass();
749
750 if (!$campaignClass->hasUserAccess($campaignId)) {
751 die('Access denied for this campaign');
752 }
753
754 $currentCampaign = $campaignClass->getOneByIdWithMail($campaignId);
755
756 if ((!$currentCampaign->sent || $currentCampaign->active) && !empty($currentCampaign->mail_id)) {
757 $campaignClass->manageListsToCampaign($allLists, $currentCampaign->mail_id, $allListsUnselected);
758 if (acym_getVar('string', 'nextstep', '') === 'listing') {
759 acym_enqueueMessage(acym_translationSprintf('ACYM_LIST_IS_SAVED', $currentCampaign->name));
760 }
761 }
762
763 if (!empty($addSegmentStep)) {
764 if (!isset($currentCampaign->sending_params['segment'])) {
765 $currentCampaign->sending_params['segment'] = [];
766 }
767 $campaignClass->save($currentCampaign);
768 acym_setVar('nextstep', 'segment');
769 $this->segment();
770
771 return;
772 }
773
774 if (isset($currentCampaign->sending_params['segment'])) unset($currentCampaign->sending_params['segment']);
775 $campaignClass->save($currentCampaign);
776
777 acym_setVar('campaignId', $currentCampaign->id);
778
779 $this->edit();
780 }
781
782 public function saveSegment(): void
783 {
784 if (!acym_isAdmin()) {
785 die('Access denied for segments');
786 }
787
788 $segmentSelected = acym_getVar('int', 'segment_selected', 0);
789 $filters = acym_getVar('array', 'acym_action', []);
790 $campaignId = acym_getVar('int', 'campaignId', 0);
791
792 if (empty($campaignId)) {
793 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
794 $this->listing();
795
796 return;
797 }
798
799 $segmentSavedId = acym_getVar('int', 'saved_segment_id', 0);
800
801 if (!empty($segmentSavedId)) {
802 $segmentSelected = $segmentSavedId;
803 }
804
805 $campaignClass = new CampaignClass();
806 $campaign = $campaignClass->getOneById($campaignId);
807
808 if (empty($campaign)) {
809 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
810 $this->listing();
811
812 return;
813 }
814
815 if (empty($segmentSelected) && empty($filters)) {
816 $campaign->sending_params['segment'] = [];
817 } elseif (!empty($segmentSelected)) {
818 $campaign->sending_params['segment'] = ['segment_id' => $segmentSelected];
819 } else {
820 $campaign->sending_params['segment'] = ['filters' => (object)$filters['filters']];
821 }
822
823 $campaign->sending_params['segment']['invert'] = acym_getVar('string', 'invert', 0);
824
825 $campaignClass->save($campaign);
826
827 $this->edit();
828 }
829
830 public function saveSendSettings(): void
831 {
832 $campaignClass = new CampaignClass();
833 $mailClass = new MailClass();
834 $campaignId = acym_getVar('int', 'campaignId');
835
836 if (!$campaignClass->hasUserAccess($campaignId)) {
837 die('Access denied for this campaign');
838 }
839
840 $senderInformation = acym_getVar('', 'senderInformation');
841 $sendingDate = acym_getVar('string', 'sendingDate');
842 $sendingType = acym_getVar('string', 'sending_type', CampaignClass::SENDING_TYPE_NOW);
843 $sendingParams = acym_getVar('array', 'sending_params', []);
844 $specificSendingParams = [];
845 $isScheduled = CampaignClass::SENDING_TYPE_SCHEDULED === $sendingType;
846
847 $currentCampaign = $campaignClass->getOneById($campaignId);
848
849 if (empty($currentCampaign)) {
850 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_DOESNT_EXISTS'), 'error');
851
852 $this->listing();
853
854 return;
855 }
856
857 if (CampaignClass::SENDING_TYPE_AUTO === $sendingType) {
858 $triggerType = acym_getVar('string', 'acym_triggers', '');
859 if (empty($triggerType)) {
860 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
861 $this->listing();
862
863 return;
864 }
865
866 $needConfirmToSend = acym_getVar('int', 'need_confirm', 0);
867
868 $specificSendingParams = [
869 $triggerType => acym_getVar('array', $triggerType, ''),
870 'need_confirm_to_send' => $needConfirmToSend,
871 'trigger_type' => $triggerType,
872 ];
873
874 $startDate = acym_getVar('string', 'start_date', 0);
875 if (!empty($startDate)) {
876 $specificSendingParams['start_date'] = acym_date(acym_getTime($startDate), 'Y-m-d H:i:s', false);
877 }
878
879 if (!empty($currentCampaign->sending_params['number_generated'])) {
880 $specificSendingParams['number_generated'] = $currentCampaign->sending_params['number_generated'];
881 }
882
883 $triggers = [];
884 $fakeSettings = [];
885 acym_trigger('onAcymDeclareTriggers', [&$triggers, &$fakeSettings], 'plgAcymTime');
886 $settings = array_merge(array_keys($triggers['classic']), ['trigger_type', 'need_confirm_to_send']);
887 foreach ($settings as $oneSetting) {
888 unset($currentCampaign->sending_params[$oneSetting]);
889 }
890 }
891
892 if (!empty($currentCampaign->sending_params['abtest']) && !empty($sendingParams['abtest'])) {
893 $sendingParams['abtest'] = array_merge($currentCampaign->sending_params['abtest'], $sendingParams['abtest']);
894 }
895
896 if (!in_array($sendingType, CampaignClass::SENDING_TYPES)) {
897 $specialSendings = [];
898 acym_trigger('saveCampaignSpecificSendSettings', [$currentCampaign->sending_type, &$specialSendings]);
899 if (!empty($specialSendings)) {
900 $specificSendingParams = $specialSendings[0];
901 }
902 }
903
904 if (!empty($currentCampaign->mail_id)) {
905 $currentMail = $mailClass->getOneById($currentCampaign->mail_id);
906 }
907
908 $currentCampaign->sending_type = $sendingType;
909 if (empty($currentCampaign->sending_params)) {
910 $currentCampaign->sending_params = [];
911 }
912
913 $currentCampaign->sending_params = array_merge($currentCampaign->sending_params, $sendingParams, $specificSendingParams);
914 if (!empty($currentCampaign->sending_params['admin_notification_emails']) && empty($sendingParams['admin_notification_emails'])) {
915 $currentCampaign->sending_params['admin_notification_emails'] = [];
916 }
917
918 if (empty($currentMail) || empty($senderInformation)) {
919 $this->listing();
920
921 return;
922 }
923
924 $currentMail->from_name = $senderInformation['from_name'];
925 $currentMail->from_email = $senderInformation['from_email'];
926 $currentMail->reply_to_name = $senderInformation['reply_to_name'];
927 $currentMail->reply_to_email = $senderInformation['reply_to_email'];
928 $currentMail->bounce_email = $senderInformation['bounce_email'];
929 $currentMail->bcc = $senderInformation['bcc'];
930 $currentMail->tracking = $senderInformation['tracking'];
931 $currentMail->translation = empty($senderInformation['translation']) ? '' : $senderInformation['translation'];
932 if (isset($senderInformation['links_language'])) $currentMail->links_language = $senderInformation['links_language'];
933
934 $mailClass->save($currentMail);
935
936 if ($isScheduled && !empty($sendingDate)) {
937 $currentCampaign->sending_date = acym_date(acym_getTime($sendingDate), 'Y-m-d H:i:s', false);
938 if ($currentCampaign->sending_date < acym_date('now', 'Y-m-d H:i:s', false)) acym_enqueueMessage(acym_translation('ACYM_BE_CAREFUL_SENDING_DATE_IN_PAST'), 'warning');
939 }
940
941 if ($campaignClass->save($currentCampaign)) {
942 if (acym_getVar('string', 'nextstep', '') === 'listing') {
943 acym_enqueueMessage(acym_translation('ACYM_SUCCESSFULLY_SAVED'));
944 }
945 } else {
946 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
947 if (!empty($campaignClass->errors)) {
948 acym_enqueueMessage($campaignClass->errors, 'error');
949 }
950
951 $this->listing();
952
953 return;
954 }
955
956 $this->edit();
957 }
958
959 public function saveSummary(): void
960 {
961 $this->edit();
962 }
963
964 public function summary(): void
965 {
966 acym_setVar('step', 'summary');
967 acym_setVar('layout', 'summary');
968
969 $data = [
970 'mailClass' => new MailClass(),
971 'campaignClass' => new CampaignClass(),
972 'containerClass' => $this->stepContainerClass,
973 ];
974
975 $this->prepareCurrentUserSummary($data);
976 if (!$this->prepareCampaignSummary($data)) {
977 acym_enqueueMessage(acym_translation('ACYM_CANT_GET_CAMPAIGN_INFORMATION'), 'error');
978 $this->listing();
979
980 return;
981 }
982
983 $data['mailInformation'] = $this->prepareMailDataSummary($data, (int)$data['campaignInformation']->mail_id);
984 $this->prepareReceiversSummary($data);
985 $this->prepareAbTest($data, false);
986 $this->prepareAllMailsForAbtest($data);
987 $this->prepareMultilingual($data, false);
988 $this->prepareAllMailsForMultilingual($data);
989 $this->prepareListingClasses($data);
990 $this->prepareSegmentData($data);
991 $this->prepareSegmentDisplay($data, $data['campaignInformation']->sending_params);
992
993 $this->breadcrumb[$data['campaignInformation']->name] = acym_completeLink('campaigns&task=edit&step=summary&campaignId='.$data['campaignInformation']->id);
994 parent::display($data);
995 }
996
997 private function prepareSegmentData(array &$data): void
998 {
999 if (empty($data['campaignInformation']->sending_params['segment'])) {
1000 return;
1001 }
1002
1003 $segmentParams = $data['campaignInformation']->sending_params['segment'];
1004
1005 $isExcluded = !empty($segmentParams['invert']) && $segmentParams['invert'] === 'exclude';
1006
1007 $segmentController = new SegmentsController();
1008
1009 if (!empty($segmentParams['segment_id'])) {
1010 $segmentClass = new SegmentClass();
1011 $segment = $segmentClass->getOneById($segmentParams['segment_id']);
1012
1013 $data['segment'] = [
1014 'name' => $segment->name,
1015 'count' => $segmentController->countSegmentById((int)$segment->id, $data['listsIds'], false, $isExcluded),
1016 ];
1017 } else {
1018 $data['segment'] = [
1019 'name' => acym_translation('ACYM_YOUR_CUSTOM_SEGMENT'),
1020 'count' => $segmentController->countSegmentByParams($segmentParams, $data['listsIds'], $isExcluded),
1021 ];
1022 }
1023 }
1024
1025 private function prepareCurrentUserSummary(array &$data): void
1026 {
1027 $userClass = new UserClass();
1028 $currentUserEmail = acym_currentUserEmail();
1029 $data['receiver'] = $userClass->getOneByEmail($currentUserEmail);
1030 if (empty($data['receiver'])) {
1031 $receiver = new stdClass();
1032 $receiver->email = $currentUserEmail;
1033 $newID = $userClass->save($receiver);
1034 $data['receiver'] = $userClass->getOneById($newID);
1035 }
1036 }
1037
1038 private function prepareCampaignSummary(array &$data): bool
1039 {
1040 $campaignId = acym_getVar('int', 'campaignId');
1041 $campaignClass = new CampaignClass();
1042 $campaign = empty($campaignId) ? null : $campaignClass->getOneByIdWithMail($campaignId);
1043 if (is_null($campaign)) {
1044 return false;
1045 }
1046
1047 if (!$campaignClass->hasUserAccess($campaignId)) {
1048 die('Access denied for this campaign');
1049 }
1050
1051 $campaign->isAuto = $campaign->sending_type === CampaignClass::SENDING_TYPE_AUTO;
1052
1053 $startDate = '';
1054 if ($campaign->isAuto) {
1055 $textToDisplay = new stdClass();
1056 $textToDisplay->triggers = $campaign->sending_params;
1057 acym_trigger('onAcymDeclareSummary_triggers', [&$textToDisplay], 'plgAcymTime');
1058 $textToDisplay = $textToDisplay->triggers;
1059 if (!empty($campaign->sending_params['start_date'])) {
1060 $startDate = $campaign->sending_params['start_date'];
1061 }
1062 }
1063
1064 $data['automatic'] = [
1065 'isAuto' => $campaign->isAuto,
1066 'text' => empty($textToDisplay)
1067 ? ''
1068 : acym_translation('ACYM_THIS_WILL_GENERATE_CAMPAIGN_AUTOMATICALLY').' '.acym_strtolower(
1069 $textToDisplay[$textToDisplay['trigger_type']]
1070 ),
1071 'startDate' => $startDate,
1072 ];
1073 $data['campaignInformation'] = $campaign;
1074 $data['mailId'] = $campaign->mail_id;
1075
1076 acym_trigger('onAcymCampaignSummary', [&$data]);
1077
1078 return true;
1079 }
1080
1081 private function prepareMailDataSummary(array &$data, int $mailId): object
1082 {
1083 $mailArchiveClass = new MailArchiveClass();
1084 $data['isArchiveCached'] = !empty($mailArchiveClass->getOneByMailId($mailId));
1085
1086 $mailData = $data['mailClass']->getOneById($mailId);
1087 $mailData->from_name = empty($mailData->from_name) ? $this->config->get('from_name') : $mailData->from_name;
1088 $mailData->from_email = empty($mailData->from_email) ? $this->config->get('from_email') : $mailData->from_email;
1089
1090 $useFromInReply = $this->config->get('from_as_replyto');
1091 $replytoName = $this->config->get('replyto_name');
1092 $replytoEmail = $this->config->get('replyto_email');
1093
1094 if (!empty($mailData->reply_to_name)) {
1095 $replytoName = $mailData->reply_to_name;
1096 } elseif ($useFromInReply != 0 || empty($replytoName)) {
1097 $replytoName = $this->config->get('from_name');
1098 }
1099
1100 if (!empty($mailData->reply_to_email)) {
1101 $replytoEmail = $mailData->reply_to_email;
1102 } elseif ($useFromInReply != 0 || empty($replytoEmail)) {
1103 $replytoEmail = $this->config->get('from_email');
1104 }
1105
1106 $mailData->reply_to_name = $replytoName;
1107 $mailData->reply_to_email = $replytoEmail;
1108
1109 acym_trigger('replaceContent', [&$mailData, false]);
1110 acym_trigger('replaceUserInformation', [&$mailData, &$data['receiver'], false]);
1111
1112 $editorHelper = new EditorHelper();
1113 $mailData->settings = empty($mailData->settings) ? [] : json_decode($mailData->settings, true);
1114 $mailData->stylesheet .= $editorHelper->getSettingsStyle($mailData->settings);
1115
1116 return $mailData;
1117 }
1118
1119 protected function prepareReceiversSummary(array &$data): void
1120 {
1121 $nbSubscribers = 0;
1122 $campaignLists = $data['mailClass']->getAllListsWithCountSubscribersByMailIds([$data['campaignInformation']->mail_id]);
1123 $listsIds = [];
1124
1125 if (!empty($campaignLists)) {
1126 foreach ($campaignLists as $oneList) {
1127 $listsIds[] = $oneList->list_id;
1128 }
1129
1130 if (empty($data['campaignInformation']->sending_params)) {
1131 $listClass = new ListClass();
1132 $nbSubscribers = $listClass->getSubscribersCount($listsIds);
1133 } else {
1134 $campaignClass = new CampaignClass();
1135 $nbSubscribers = $campaignClass->countUsersCampaign($data['campaignInformation']->id);
1136 }
1137 }
1138
1139 $data['listsReceiver'] = $campaignLists;
1140 $data['listsIds'] = $listsIds;
1141 $data['nbSubscribers'] = $nbSubscribers;
1142
1143 if (!empty($data['campaignInformation']->sent) && !empty($data['campaignInformation']->active)) {
1144 $queueClass = new QueueClass();
1145 $data['mailInformation']->sending_params = $data['campaignInformation']->sending_params;
1146
1147 $automationHelper = $queueClass->getMailReceivers($data['mailInformation'], true);
1148 $data['receiversNew'] = acym_loadResult($automationHelper->getQuery(['COUNT(DISTINCT `user`.id)']));
1149 $automationHelper->removeFlag(SegmentsController::FLAG_COUNT);
1150 }
1151 }
1152
1153 public function tests(): void
1154 {
1155 $campaignClass = new CampaignClass();
1156 acym_setVar('step', 'tests');
1157 acym_setVar('layout', 'tests');
1158 $campaignId = acym_getVar('int', 'campaignId', 0);
1159
1160 $campaign = $campaignClass->getOneByIdWithMail($campaignId);
1161
1162 if (empty($campaign->id)) {
1163 acym_enqueueMessage(acym_translation('ACYM_CANT_GET_CAMPAIGN_INFORMATION'), 'error');
1164 $this->listing();
1165
1166 return;
1167 }
1168
1169 $testEmails = acym_getVar('array', 'test_emails', [acym_currentUserEmail()]);
1170 foreach ($testEmails as $oneEmail) {
1171 $defaultEmails[$oneEmail] = $oneEmail;
1172 }
1173
1174 $mailClass = new MailClass();
1175 $emailsToTest = $mailClass->getParentAndChildMails($campaign->mail_id);
1176
1177 $data = [
1178 'id' => $campaign->id,
1179 'currentCampaign' => $campaign,
1180 'test_emails' => $defaultEmails,
1181 'upgrade' => !acym_level(ACYM_ESSENTIAL),
1182 'version' => 'enterprise',
1183 'emails_to_test' => $emailsToTest,
1184 ];
1185 if (!acym_isAcyCheckerInstalled()) {
1186 $lists = $campaignClass->getListsByMailId($campaign->mail_id);
1187 $listClass = new ListClass();
1188 $data['recipients'] = $listClass->getTotalSubCount($lists);
1189 }
1190
1191 $this->prepareListingClasses($data);
1192 $this->prepareSegmentDisplay($data, $campaign->sending_params);
1193
1194 $this->breadcrumb[acym_escape($campaign->name)] = acym_completeLink('campaigns&task=edit&step=tests&campaignId='.$campaign->id);
1195 parent::display($data);
1196 }
1197
1198 public function saveTests(): void
1199 {
1200 if (!acym_isAdmin()) {
1201 die('Access denied for tests step');
1202 }
1203
1204 $this->edit();
1205 }
1206 }
1207