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