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

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

1,219 lines 49.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\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, true);
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'] = 'data-before-action="wysidSwitch"';
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']['settings'])) $mail->settings = $versions['main']['settings'];
660 if (!empty($versions['main']['stylesheet'])) $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 $mailID = $mailClass->save($mail);
670 if (!empty($mailID)) {
671 if (acym_getVar('string', 'nextstep', '') === 'listing') {
672 acym_enqueueMessage(acym_translation('ACYM_SUCCESSFULLY_SAVED'));
673 }
674 } else {
675 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
676 if (!empty($mailClass->errors)) {
677 acym_enqueueMessage($mailClass->errors, 'error');
678 }
679
680 if (!$ajax) {
681 $this->listing();
682 }
683
684 return 0;
685 }
686
687 if (!empty($versions) && in_array($versionType, ['multilingual', 'abtest'])) {
688 $abTestSendingParams = empty($campaign->sending_params['abtest']) ? [] : $campaign->sending_params['abtest'];
689 foreach ($versions as $code => $version) {
690 if (empty($version['subject'])) {
691 if ($versionType === 'multilingual') {
692 $mailClass->delete([$mailClass->getTranslationId($mailID, $code)]);
693 } elseif (!empty($abTestSendingParams[$code])) {
694 $mailClass->delete([$abTestSendingParams[$code]]);
695 }
696 continue;
697 }
698
699 unset($mail->id);
700 $versionId = null;
701 if ($versionType === 'multilingual') {
702 $versionId = $mailClass->getTranslationId($mailID, $code);
703 } elseif (!empty($abTestSendingParams[$code])) {
704 $versionId = $abTestSendingParams[$code];
705 }
706 if (!empty($versionId)) {
707 $mail->id = $versionId;
708 }
709
710 $mail->subject = $version['subject'];
711 $mail->preheader = $version['preview'];
712 $mail->body = $version['content'];
713 $mail->parent_id = $mailID;
714 $mail->settings = $version['settings'];
715 $mail->stylesheet = $version['stylesheet'];
716
717 if ($versionType === 'multilingual') {
718 $mail->links_language = $code;
719 $mail->language = $code;
720 }
721
722 $versionMailId = $mailClass->save($mail);
723 $abTestSendingParams[$code] = $versionMailId;
724 }
725
726 if ($versionType === 'abtest') {
727 $campaign->sending_params['abtest'] = $abTestSendingParams;
728 }
729 }
730
731 $campaign->mail_id = $mailID;
732 $campaign->id = $campaignClass->save($campaign);
733
734 if (!$ajax) {
735 acym_setVar('campaignId', $campaign->id);
736 $this->edit();
737 }
738
739 return (int)$campaign->id;
740 }
741
742 public function saveRecipients(): void
743 {
744 $allLists = json_decode(acym_getVar('string', 'acym__entity_select__selected'));
745 $allListsUnselected = json_decode(acym_getVar('string', 'acym__entity_select__unselected'));
746 if (empty($allLists)) {
747 $allLists = [];
748 }
749 if (empty($allListsUnselected)) {
750 $allListsUnselected = [];
751 }
752 $campaignId = acym_getVar('int', 'campaignId');
753 $addSegmentStep = acym_getVar('int', 'add_segment_step');
754
755 $campaignClass = new CampaignClass();
756
757 if (!$campaignClass->hasUserAccess($campaignId)) {
758 die('Access denied for this campaign');
759 }
760
761 $currentCampaign = $campaignClass->getOneByIdWithMail($campaignId);
762
763 if ((!$currentCampaign->sent || $currentCampaign->active) && !empty($currentCampaign->mail_id)) {
764 $campaignClass->manageListsToCampaign($allLists, $currentCampaign->mail_id, $allListsUnselected);
765 if (acym_getVar('string', 'nextstep', '') === 'listing') {
766 acym_enqueueMessage(acym_translationSprintf('ACYM_LIST_IS_SAVED', $currentCampaign->name));
767 }
768 }
769
770 if (!empty($addSegmentStep)) {
771 if (!isset($currentCampaign->sending_params['segment'])) {
772 $currentCampaign->sending_params['segment'] = [];
773 }
774 $campaignClass->save($currentCampaign);
775 acym_setVar('nextstep', 'segment');
776 $this->segment();
777
778 return;
779 }
780
781 if (isset($currentCampaign->sending_params['segment'])) unset($currentCampaign->sending_params['segment']);
782 $campaignClass->save($currentCampaign);
783
784 acym_setVar('campaignId', $currentCampaign->id);
785
786 $this->edit();
787 }
788
789 public function saveSegment(): void
790 {
791 if (!acym_isAdmin()) {
792 die('Access denied for segments');
793 }
794
795 $segmentSelected = acym_getVar('int', 'segment_selected', 0);
796 $filters = acym_getVar('array', 'acym_action', []);
797 $campaignId = acym_getVar('int', 'campaignId', 0);
798
799 if (empty($campaignId)) {
800 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
801 $this->listing();
802
803 return;
804 }
805
806 $segmentSavedId = acym_getVar('int', 'saved_segment_id', 0);
807
808 if (!empty($segmentSavedId)) {
809 $segmentSelected = $segmentSavedId;
810 }
811
812 $campaignClass = new CampaignClass();
813 $campaign = $campaignClass->getOneById($campaignId);
814
815 if (empty($campaign)) {
816 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
817 $this->listing();
818
819 return;
820 }
821
822 if (empty($segmentSelected) && empty($filters)) {
823 $campaign->sending_params['segment'] = [];
824 } elseif (!empty($segmentSelected)) {
825 $campaign->sending_params['segment'] = ['segment_id' => $segmentSelected];
826 } else {
827 $campaign->sending_params['segment'] = ['filters' => (object)$filters['filters']];
828 }
829
830 $campaign->sending_params['segment']['invert'] = acym_getVar('string', 'invert', 0);
831
832 $campaignClass->save($campaign);
833
834 $this->edit();
835 }
836
837 public function saveSendSettings(): void
838 {
839 $campaignClass = new CampaignClass();
840 $mailClass = new MailClass();
841 $campaignId = acym_getVar('int', 'campaignId');
842
843 if (!$campaignClass->hasUserAccess($campaignId)) {
844 die('Access denied for this campaign');
845 }
846
847 $senderInformation = acym_getVar('', 'senderInformation');
848 $sendingDate = acym_getVar('string', 'sendingDate');
849 $sendingType = acym_getVar('string', 'sending_type', CampaignClass::SENDING_TYPE_NOW);
850 $sendingParams = acym_getVar('array', 'sending_params', []);
851 $specificSendingParams = [];
852 $isScheduled = CampaignClass::SENDING_TYPE_SCHEDULED === $sendingType;
853
854 $currentCampaign = $campaignClass->getOneById($campaignId);
855
856 if (empty($currentCampaign)) {
857 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_DOESNT_EXISTS'), 'error');
858
859 $this->listing();
860
861 return;
862 }
863
864 if (CampaignClass::SENDING_TYPE_AUTO === $sendingType) {
865 $triggerType = acym_getVar('string', 'acym_triggers', '');
866 if (empty($triggerType)) {
867 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
868 $this->listing();
869
870 return;
871 }
872
873 $needConfirmToSend = acym_getVar('int', 'need_confirm', 0);
874
875 $specificSendingParams = [
876 $triggerType => acym_getVar('array', $triggerType, ''),
877 'need_confirm_to_send' => $needConfirmToSend,
878 'trigger_type' => $triggerType,
879 ];
880
881 $nextDate = acym_getVar('string', 'next_date', 0);
882 if (!empty($nextDate)) {
883 $currentCampaign->next_trigger = acym_getTime($nextDate);
884 }
885
886 if (!empty($currentCampaign->sending_params['number_generated'])) {
887 $specificSendingParams['number_generated'] = $currentCampaign->sending_params['number_generated'];
888 }
889
890 $triggers = [];
891 $fakeSettings = [];
892 acym_trigger('onAcymDeclareTriggers', [&$triggers, &$fakeSettings], 'plgAcymTime');
893 $settings = array_merge(array_keys($triggers['classic']), ['trigger_type', 'need_confirm_to_send']);
894 foreach ($settings as $oneSetting) {
895 unset($currentCampaign->sending_params[$oneSetting]);
896 }
897 }
898
899 if (!empty($currentCampaign->sending_params['abtest']) && !empty($sendingParams['abtest'])) {
900 $sendingParams['abtest'] = array_merge($currentCampaign->sending_params['abtest'], $sendingParams['abtest']);
901 }
902
903 if (!in_array($sendingType, CampaignClass::SENDING_TYPES)) {
904 $specialSendings = [];
905 acym_trigger('saveCampaignSpecificSendSettings', [$currentCampaign->sending_type, &$specialSendings]);
906 if (!empty($specialSendings)) {
907 $specificSendingParams = $specialSendings[0];
908 }
909 }
910
911 if (!empty($currentCampaign->mail_id)) {
912 $currentMail = $mailClass->getOneById($currentCampaign->mail_id);
913 }
914
915 $currentCampaign->sending_type = $sendingType;
916 if (empty($currentCampaign->sending_params)) {
917 $currentCampaign->sending_params = [];
918 }
919
920 $currentCampaign->sending_params = array_merge($currentCampaign->sending_params, $sendingParams, $specificSendingParams);
921 if (!empty($currentCampaign->sending_params['admin_notification_emails']) && empty($sendingParams['admin_notification_emails'])) {
922 $currentCampaign->sending_params['admin_notification_emails'] = [];
923 }
924
925 if (empty($currentMail) || empty($senderInformation)) {
926 $this->listing();
927
928 return;
929 }
930
931 $currentMail->from_name = $senderInformation['from_name'];
932 $currentMail->from_email = $senderInformation['from_email'];
933 $currentMail->reply_to_name = $senderInformation['reply_to_name'];
934 $currentMail->reply_to_email = $senderInformation['reply_to_email'];
935 $currentMail->bounce_email = $senderInformation['bounce_email'];
936 $currentMail->bcc = $senderInformation['bcc'];
937 $currentMail->tracking = $senderInformation['tracking'];
938 $currentMail->translation = empty($senderInformation['translation']) ? '' : $senderInformation['translation'];
939 if (isset($senderInformation['links_language'])) $currentMail->links_language = $senderInformation['links_language'];
940
941 $mailClass->save($currentMail);
942
943 if ($isScheduled && !empty($sendingDate)) {
944 $currentCampaign->sending_date = acym_date(acym_getTime($sendingDate), 'Y-m-d H:i:s', false);
945 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');
946 }
947
948 $savedCampaignId = $campaignClass->save($currentCampaign);
949 if (!empty($savedCampaignId)) {
950 if (acym_getVar('string', 'nextstep', '') === 'listing') {
951 acym_enqueueMessage(acym_translation('ACYM_SUCCESSFULLY_SAVED'));
952 }
953 } else {
954 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
955 if (!empty($campaignClass->errors)) {
956 acym_enqueueMessage($campaignClass->errors, 'error');
957 }
958
959 $this->listing();
960
961 return;
962 }
963
964 $this->edit();
965 }
966
967 public function saveSummary(): void
968 {
969 $this->edit();
970 }
971
972 public function summary(): void
973 {
974 acym_setVar('step', 'summary');
975 acym_setVar('layout', 'summary');
976
977 $data = [
978 'mailClass' => new MailClass(),
979 'campaignClass' => new CampaignClass(),
980 'containerClass' => $this->stepContainerClass,
981 ];
982
983 $this->prepareCurrentUserSummary($data);
984 if (!$this->prepareCampaignSummary($data)) {
985 acym_enqueueMessage(acym_translation('ACYM_CANT_GET_CAMPAIGN_INFORMATION'), 'error');
986 $this->listing();
987
988 return;
989 }
990
991 $data['mailInformation'] = $this->prepareMailDataSummary($data, (int)$data['campaignInformation']->mail_id);
992 $this->prepareReceiversSummary($data);
993 $this->prepareAbTest($data, false);
994 $this->prepareAllMailsForAbtest($data);
995 $this->prepareMultilingual($data, false);
996 $this->prepareAllMailsForMultilingual($data);
997 $this->prepareListingClasses($data);
998 $this->prepareSegmentData($data);
999 $this->prepareSegmentDisplay($data, $data['campaignInformation']->sending_params);
1000
1001 $this->breadcrumb[$data['campaignInformation']->name] = acym_completeLink('campaigns&task=edit&step=summary&campaignId='.$data['campaignInformation']->id);
1002 parent::display($data);
1003 }
1004
1005 private function prepareSegmentData(array &$data): void
1006 {
1007 if (empty($data['campaignInformation']->sending_params['segment'])) {
1008 return;
1009 }
1010
1011 $segmentParams = $data['campaignInformation']->sending_params['segment'];
1012
1013 $isExcluded = !empty($segmentParams['invert']) && $segmentParams['invert'] === 'exclude';
1014
1015 $segmentController = new SegmentsController();
1016
1017 if (!empty($segmentParams['segment_id'])) {
1018 $segmentClass = new SegmentClass();
1019 $segment = $segmentClass->getOneById($segmentParams['segment_id']);
1020
1021 $data['segment'] = [
1022 'name' => $segment->name,
1023 'count' => $segmentController->countSegmentById((int)$segment->id, $data['listsIds'], false, $isExcluded),
1024 ];
1025 } else {
1026 $data['segment'] = [
1027 'name' => acym_translation('ACYM_YOUR_CUSTOM_SEGMENT'),
1028 'count' => $segmentController->countSegmentByParams($segmentParams, $data['listsIds'], $isExcluded),
1029 ];
1030 }
1031 }
1032
1033 private function prepareCurrentUserSummary(array &$data): void
1034 {
1035 $userClass = new UserClass();
1036 $currentUserEmail = acym_currentUserEmail();
1037 $data['receiver'] = $userClass->getOneByEmail($currentUserEmail);
1038 if (empty($data['receiver'])) {
1039 $receiver = new stdClass();
1040 $receiver->email = $currentUserEmail;
1041 $newID = $userClass->save($receiver);
1042 if (!empty($newID)) {
1043 $data['receiver'] = $userClass->getOneById($newID);
1044 }
1045 }
1046 }
1047
1048 private function prepareCampaignSummary(array &$data): bool
1049 {
1050 $campaignId = acym_getVar('int', 'campaignId');
1051 $campaignClass = new CampaignClass();
1052 $campaign = empty($campaignId) ? null : $campaignClass->getOneByIdWithMail($campaignId);
1053 if (is_null($campaign)) {
1054 return false;
1055 }
1056
1057 if (!$campaignClass->hasUserAccess($campaignId)) {
1058 die('Access denied for this campaign');
1059 }
1060
1061 $campaign->isAuto = $campaign->sending_type === CampaignClass::SENDING_TYPE_AUTO;
1062
1063 $nextDate = '';
1064 if ($campaign->isAuto) {
1065 $textToDisplay = new stdClass();
1066 $textToDisplay->triggers = $campaign->sending_params;
1067 acym_trigger('onAcymDeclareSummary_triggers', [&$textToDisplay], 'plgAcymTime');
1068 $textToDisplay = $textToDisplay->triggers;
1069 if (!empty($campaign->next_trigger)) {
1070 $nextDate = $campaign->next_trigger;
1071 } elseif (!empty($campaign->sending_params['start_date'])) {
1072 $nextDate = $campaign->sending_params['start_date'];
1073 }
1074 }
1075
1076 $data['automatic'] = [
1077 'isAuto' => $campaign->isAuto,
1078 'text' => empty($textToDisplay)
1079 ? ''
1080 : acym_translation('ACYM_THIS_WILL_GENERATE_CAMPAIGN_AUTOMATICALLY').' '.acym_strtolower(
1081 $textToDisplay[$textToDisplay['trigger_type']]
1082 ),
1083 'nextDate' => $nextDate,
1084 ];
1085 $data['campaignInformation'] = $campaign;
1086 $data['mailId'] = $campaign->mail_id;
1087
1088 acym_trigger('onAcymCampaignSummary', [&$data]);
1089
1090 return true;
1091 }
1092
1093 private function prepareMailDataSummary(array &$data, int $mailId): object
1094 {
1095 $mailArchiveClass = new MailArchiveClass();
1096 $data['isArchiveCached'] = !empty($mailArchiveClass->getOneByMailId($mailId));
1097
1098 $mailData = $data['mailClass']->getOneById($mailId);
1099 $mailData->from_name = empty($mailData->from_name) ? $this->config->get('from_name') : $mailData->from_name;
1100 $mailData->from_email = empty($mailData->from_email) ? $this->config->get('from_email') : $mailData->from_email;
1101
1102 $useFromInReply = $this->config->get('from_as_replyto');
1103 $replytoName = $this->config->get('replyto_name');
1104 $replytoEmail = $this->config->get('replyto_email');
1105
1106 if (!empty($mailData->reply_to_name)) {
1107 $replytoName = $mailData->reply_to_name;
1108 } elseif ($useFromInReply != 0 || empty($replytoName)) {
1109 $replytoName = $this->config->get('from_name');
1110 }
1111
1112 if (!empty($mailData->reply_to_email)) {
1113 $replytoEmail = $mailData->reply_to_email;
1114 } elseif ($useFromInReply != 0 || empty($replytoEmail)) {
1115 $replytoEmail = $this->config->get('from_email');
1116 }
1117
1118 $mailData->reply_to_name = $replytoName;
1119 $mailData->reply_to_email = $replytoEmail;
1120
1121 acym_trigger('replaceContent', [&$mailData, false]);
1122 acym_trigger('replaceUserInformation', [&$mailData, &$data['receiver'], false]);
1123
1124 $editorHelper = new EditorHelper();
1125 $mailData->settings = empty($mailData->settings) ? [] : json_decode($mailData->settings, true);
1126 $mailData->stylesheet .= $editorHelper->getSettingsStyle($mailData->settings);
1127
1128 return $mailData;
1129 }
1130
1131 protected function prepareReceiversSummary(array &$data): void
1132 {
1133 $nbSubscribers = 0;
1134 $campaignLists = $data['mailClass']->getAllListsWithCountSubscribersByMailIds([$data['campaignInformation']->mail_id]);
1135 $listsIds = [];
1136
1137 if (!empty($campaignLists)) {
1138 foreach ($campaignLists as $oneList) {
1139 $listsIds[] = $oneList->list_id;
1140 }
1141
1142 if (empty($data['campaignInformation']->sending_params)) {
1143 $listClass = new ListClass();
1144 $nbSubscribers = $listClass->getSubscribersCount($listsIds);
1145 } else {
1146 $campaignClass = new CampaignClass();
1147 $nbSubscribers = $campaignClass->countUsersCampaign($data['campaignInformation']->id, true);
1148 }
1149 }
1150
1151 $data['listsReceiver'] = $campaignLists;
1152 $data['listsIds'] = $listsIds;
1153 $data['nbSubscribers'] = $nbSubscribers;
1154
1155 if (!empty($data['campaignInformation']->sent) && !empty($data['campaignInformation']->active)) {
1156 $queueClass = new QueueClass();
1157 $data['mailInformation']->sending_params = $data['campaignInformation']->sending_params;
1158
1159 $automationHelper = $queueClass->getMailReceivers($data['mailInformation'], true);
1160 $data['receiversNew'] = acym_loadResult($automationHelper->getQuery(['COUNT(DISTINCT `user`.id)']));
1161 $automationHelper->removeFlag(SegmentsController::FLAG_COUNT);
1162 }
1163 }
1164
1165 public function tests(): void
1166 {
1167 $campaignClass = new CampaignClass();
1168 acym_setVar('step', 'tests');
1169 acym_setVar('layout', 'tests');
1170 $campaignId = acym_getVar('int', 'campaignId', 0);
1171
1172 $campaign = $campaignClass->getOneByIdWithMail($campaignId);
1173
1174 if (empty($campaign->id)) {
1175 acym_enqueueMessage(acym_translation('ACYM_CANT_GET_CAMPAIGN_INFORMATION'), 'error');
1176 $this->listing();
1177
1178 return;
1179 }
1180
1181 $testEmails = acym_getVar('array', 'test_emails', [acym_currentUserEmail()]);
1182 foreach ($testEmails as $oneEmail) {
1183 $defaultEmails[$oneEmail] = $oneEmail;
1184 }
1185
1186 $mailClass = new MailClass();
1187 $emailsToTest = $mailClass->getParentAndChildMails($campaign->mail_id);
1188
1189 $data = [
1190 'id' => $campaign->id,
1191 'currentCampaign' => $campaign,
1192 'test_emails' => $defaultEmails,
1193 'upgrade' => !acym_level(ACYM_ESSENTIAL),
1194 'version' => 'enterprise',
1195 'emails_to_test' => $emailsToTest,
1196 ];
1197 if (!acym_isAcyCheckerInstalled()) {
1198 $lists = $campaignClass->getListsByMailId($campaign->mail_id);
1199 $listClass = new ListClass();
1200 $data['recipients'] = $listClass->getTotalSubCount($lists);
1201 }
1202
1203 $this->prepareListingClasses($data);
1204 $this->prepareSegmentDisplay($data, $campaign->sending_params);
1205
1206 $this->breadcrumb[acym_escape($campaign->name)] = acym_completeLink('campaigns&task=edit&step=tests&campaignId='.$campaign->id);
1207 parent::display($data);
1208 }
1209
1210 public function saveTests(): void
1211 {
1212 if (!acym_isAdmin()) {
1213 die('Access denied for tests step');
1214 }
1215
1216 $this->edit();
1217 }
1218 }
1219