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

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

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