PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.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
← All changes | back/Controllers/Campaigns/Edition.php +0 -1218 10.11.1 → 11.1.1 View file →
@@ -1,1218 +1,0 @@
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 -}