PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.0
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.0
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 +96 -37 10.2.2 → 11.1.0 View file →
@@ -9,9 +9,8 @@
9 9 use AcyMailing\Classes\QueueClass;
10 10 use AcyMailing\Classes\SegmentClass;
11 11 use AcyMailing\Classes\TagClass;
12 12 use AcyMailing\Classes\UserClass;
13 -use AcyMailing\Controllers\AutomationController;
14 13 use AcyMailing\Controllers\MailsController;
15 14 use AcyMailing\Controllers\SegmentsController;
16 15 use AcyMailing\Helpers\EditorHelper;
17 16 use AcyMailing\Helpers\EntitySelectHelper;
@@ -25,8 +24,9 @@
25 24 {
26 25 public function newEmail(): void
27 26 {
28 27 acym_setVar('layout', 'new_email');
28 + $mailClass = new MailClass();
29 29
30 30 $data = [
31 31 'selectedType' => acym_getVar('string', 'email_type', ''),
32 32 'menuClass' => $this->menuClass,
@@ -34,9 +34,9 @@
34 34
35 35 $listClass = new ListClass();
36 36 if (acym_isAdmin()) {
37 37 $returnUrl = urlencode(base64_encode(acym_completeLink('campaigns')));
38 - $favoriteTemplate = $this->config->get('favorite_template', 0);
38 + $favoriteTemplate = $mailClass->getFavoriteTemplateId();
39 39 $welcomeUnsub = '&list_id={dataid}&type_editor=acyEditor&return='.$returnUrl;
40 40
41 41 if (empty($favoriteTemplate)) {
42 42 $data = array_merge(
@@ -100,9 +100,9 @@
100 100
101 101 parent::display($data);
102 102 }
103 103
104 - private function prepareSegmentDisplay(array &$data, array $sendingParams): void
104 + private function prepareSegmentDisplay(array &$data, ?array $sendingParams): void
105 105 {
106 106 $data['menuClass'] = $this->menuClass;
107 107 $data['displaySegmentTab'] = !empty($sendingParams) && array_key_exists('segment', $sendingParams);
108 108 }
@@ -112,14 +112,15 @@
112 112 acym_setVar('layout', 'choose_email');
113 113 acym_setVar('step', 'chooseTemplate');
114 114 $pagination = new PaginationHelper();
115 115
116 + // Get filters data
116 117 $campaignId = acym_getVar('int', 'campaignId', 0);
117 118 $campaignClass = new CampaignClass();
118 119 $searchFilter = $this->getVarFiltersListing('string', 'mailchoose_search', '');
119 120 $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');
121 + $ordering = $this->getVarFiltersListing('cmd', 'mailchoose_ordering', 'creation_date');
122 + $orderingSortOrder = $this->getVarFiltersListing('cmd', 'mailchoose_ordering_sort_order', 'DESC');
122 123 $campaign = $campaignClass->getOneByIdWithMail($campaignId);
123 124 $campaignType = $this->getVarFiltersListing('string', 'campaign_type', 'now');
124 125 $abTest = acym_getVar('bool', 'abtest', false);
125 126
@@ -133,8 +134,9 @@
133 134 } else {
134 135 $this->breadcrumb[acym_translation('ACYM_NEW_CAMPAIGN')] = '';
135 136 }
136 137
138 + // Get pagination data
137 139 $mailsPerPage = $pagination->getListLimit();
138 140 $page = $this->getVarFiltersListing('int', 'mailchoose_pagination_page', 1);
139 141
140 142 $mailClass = new MailClass();
@@ -150,8 +152,9 @@
150 152 'gettingTemplates' => true,
151 153 ]
152 154 );
153 155
156 + // Prepare the pagination
154 157 $pagination->setStatus($matchingMails['total']->total, $page, $mailsPerPage);
155 158
156 159 $tagClass = new TagClass();
157 160
@@ -184,8 +187,13 @@
184 187 $campaignId = acym_getVar('int', 'campaignId', 0);
185 188 $mailId = acym_getVar('int', 'from', 0);
186 189 $mailClass = new MailClass();
187 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)
188 196 $checkAutosave = empty($mailId);
189 197 $editLink = 'campaigns&task=edit&step=editEmail';
190 198
191 199 if (empty($campaignId)) {
@@ -250,9 +258,9 @@
250 258 $data['mailInformation']->body = $mail->body;
251 259 $data['mailInformation']->settings = $mail->settings;
252 260 $data['mailInformation']->stylesheet = $mail->stylesheet;
253 261 $data['mailInformation']->headers = $mail->headers;
254 - $data['mailInformation']->attachments = empty($mail->attachments) ? [] : json_decode($mail->attachments);
262 + $data['mailInformation']->attachments = empty($mail->attachments) ? [] : json_decode($mail->attachments, true);
255 263 $data['mailInformation']->links_language = $mail->links_language;
256 264
257 265 $data['mailInformation']->from_email = $mail->from_email;
258 266 $data['mailInformation']->from_name = $mail->from_name;
@@ -273,9 +281,9 @@
273 281 }
274 282 $pluginHelper->cleanHtml($data['mailInformation']->body);
275 283
276 284 $editLink .= '&type_editor='.$data['typeEditor'];
277 - $this->breadcrumb[acym_escape(empty($data['mailInformation']->name) ? acym_translation('ACYM_NEW_CAMPAIGN') : $data['mailInformation']->name)] = acym_completeLink(
285 + $this->breadcrumb[empty($data['mailInformation']->name) ? acym_translation('ACYM_NEW_CAMPAIGN') : $data['mailInformation']->name] = acym_completeLink(
278 286 $editLink
279 287 );
280 288 }
281 289
@@ -297,10 +305,12 @@
297 305 }
298 306
299 307 $data['editor']->editor = $data['typeEditor'];
300 308 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).'">';
309 + if (!isset($data['mailInformation']->stylesheet)) {
310 + $data['mailInformation']->stylesheet = '';
311 + }
312 + $data['needDisplayStylesheet'] = $data['mailInformation']->stylesheet;
303 313 } else {
304 314 $data['needDisplayStylesheet'] = '';
305 315 }
306 316
@@ -398,9 +408,9 @@
398 408
399 409 $data['before-save'] = '';
400 410
401 411 if ($data['editor']->editor === 'acyEditor') {
402 - $data['before-save'] = 'acym-data-before="acym_editorWysidVersions.storeCurrentValues(true);acym_editorWysidFormAction.cleanMceInput();"';
412 + $data['before-save'] = 'wysidSwitch';
403 413 }
404 414
405 415 $data['menuClass'] = $this->menuClass;
406 416
@@ -420,9 +430,9 @@
420 430 die('Access denied for this campaign');
421 431 }
422 432
423 433 $currentCampaign = $campaignClass->getOneByIdWithMail($campaignId);
424 - $this->breadcrumb[acym_escape($currentCampaign->name)] = acym_completeLink('campaigns&task=edit&step=recipients&campaignId='.$campaignId);
434 + $this->breadcrumb[$currentCampaign->name] = acym_completeLink('campaigns&task=edit&step=recipients&campaignId='.$campaignId);
425 435
426 436 $campaign = [
427 437 'campaignInformation' => $campaignId,
428 438 'currentCampaign' => $currentCampaign,
@@ -467,9 +477,9 @@
467 477 'workflowHelper' => new WorkflowHelper(),
468 478 ];
469 479
470 480
471 - $this->breadcrumb[acym_escape($mail->name)] = acym_completeLink(acym_completeLink('campaigns&task=edit&step=recipients&campaignId='.$campaign->id));
481 + $this->breadcrumb[$mail->name] = acym_completeLink(acym_completeLink('campaigns&task=edit&step=recipients&campaignId='.$campaign->id));
472 482 parent::display($data);
473 483 }
474 484
475 485 public function sendSettings(): void
@@ -490,13 +500,14 @@
490 500 if (!$campaignClass->hasUserAccess($campaignId)) {
491 501 die('Access denied for this campaign');
492 502 }
493 503
504 + //To know if we create or modify the campaign
494 505 $from = acym_getVar('string', 'from');
495 506
496 507 $campaignClass = new CampaignClass();
497 508 $currentCampaign = $campaignClass->getOneByIdWithMail($campaignId);
498 - $this->breadcrumb[acym_escape($currentCampaign->name)] = acym_completeLink('campaigns&task=edit&step=sendSettings&campaignId='.$campaignId);
509 + $this->breadcrumb[$currentCampaign->name] = acym_completeLink('campaigns&task=edit&step=sendSettings&campaignId='.$campaignId);
499 510
500 511 if (!empty($currentCampaign->sent) && empty($currentCampaign->active)) {
501 512 $currentCampaign->sending_date = '';
502 513 }
@@ -508,12 +519,15 @@
508 519 'campaignClass' => $campaignClass,
509 520 ];
510 521
511 522 $data['currentCampaign'] = $currentCampaign;
523 + $data['currentCampaign']->bcc = $currentCampaign->bcc ?? '';
524 + $data['currentCampaign']->bounce_email = $currentCampaign->bounce_email ?? '';
512 525 $data['currentCampaign']->send_now = $currentCampaign->sending_type === CampaignClass::SENDING_TYPE_NOW;
513 526 $data['currentCampaign']->send_scheduled = $currentCampaign->sending_type === CampaignClass::SENDING_TYPE_SCHEDULED;
514 527 $data['currentCampaign']->send_auto = $currentCampaign->sending_type === CampaignClass::SENDING_TYPE_AUTO;
515 528
529 + // Handle special emails
516 530 $data['currentCampaign']->send_specific = [];
517 531 if (!in_array($currentCampaign->sending_type, CampaignClass::SENDING_TYPES)) {
518 532 acym_trigger(
519 533 'getCampaignSpecificSendSettings',
@@ -548,9 +562,9 @@
548 562 $data['triggers_display'] = [];
549 563
550 564 foreach ($triggers as $key => $trigger) {
551 565 $data['triggers_select'][$key] = $trigger->name;
552 - $data['triggers_display'][$key] = $trigger->option;
566 + $data['triggers_display'][$key] = $trigger;
553 567 }
554 568
555 569 if (!empty($data['currentCampaign']->sending_params) && empty($data['currentCampaign']->sending_params['trigger_type'])) {
556 570 foreach (array_keys($triggers) as $oneTrigger) {
@@ -560,9 +574,20 @@
560 574 }
561 575 }
562 576
563 577 $data['containerClass'] = $this->stepContainerClass;
564 - $data['langChoice'] = acym_isMultilingual() ? '' : acym_languageOption($data['currentCampaign']->links_language, 'senderInformation[links_language]');
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 +
565 590 $this->prepareListingClasses($data);
566 591 $this->prepareSegmentDisplay($data, $data['currentCampaign']->sending_params);
567 592 $this->prepareMultilingualOption($data);
568 593
@@ -570,9 +595,9 @@
570 595 }
571 596
572 597 public function saveEditEmail(bool $ajax = false): int
573 598 {
574 - acym_checkToken();
599 + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
575 600
576 601 $campaignClass = new CampaignClass();
577 602 $mailClass = new MailClass();
578 603 $formData = acym_getVar('array', 'mail', []);
@@ -597,9 +622,9 @@
597 622
598 623 $campaign = new stdClass();
599 624 $campaign->draft = 1;
600 625 $campaign->active = 0;
601 - $campaign->sending_type = $types[$campaignType];
626 + $campaign->sending_type = $types[$campaignType] ?? CampaignClass::SENDING_TYPE_NOW;
602 627 $campaign->sent = 0;
603 628 $campaign->sending_params = [];
604 629 } else {
605 630 if (!$campaignClass->hasUserAccess($campaignId)) {
@@ -610,13 +635,14 @@
610 635 $mail = $mailClass->getOneById($campaign->mail_id);
611 636 $mailArchiveClass = new MailArchiveClass();
612 637 $archive = $mailArchiveClass->getOneByMailId($mail->id);
613 638 if (!empty($archive)) {
614 - $mailArchiveClass->delete($archive->id);
639 + $mailArchiveClass->delete([$archive->id]);
615 640 }
616 641 }
617 642 $campaign->visible = acym_getVar('int', 'visible', 1);
618 643
644 + // Get the name and subject
619 645 foreach ($formData as $name => $data) {
620 646 if (!in_array($name, $allowedFields)) {
621 647 continue;
622 648 }
@@ -622,8 +648,9 @@
622 648 }
623 649 $mail->{acym_secureDBColumn($name)} = $data;
624 650 }
625 651
652 + // Name is mandatory. If empty copy subject (can't be an empty field)
626 653 if (empty($mail->name)) $mail->name = empty($mail->subject) ? acym_translation('ACYM_CAMPAIGN_NAME') : $mail->subject;
627 654
628 655 if (empty($mail->subject)) $mail->subject = acym_translation('ACYM_EMAIL_SUBJECT');
629 656
@@ -637,9 +664,9 @@
637 664 $mail->reply_to_name = acym_getVar('string', 'reply_to_name', '', 'REQUEST');
638 665 $mail->drag_editor = strpos($mail->body, 'acym__wysid__template') === false ? 0 : 1;
639 666 $mail->attachments = empty($mail->attachments) ? [] : json_decode($mail->attachments, true);
640 667
641 - $mainColors = acym_getVar('string', 'main_colors', '', 'REQUEST', ACYM_ALLOWRAW);;
668 + $mainColors = acym_getVar('string', 'main_colors', '', 'REQUEST', ACYM_ALLOWRAW);
642 669 if (!empty($mail->mail_settings)) {
643 670 $mailSettings = json_decode($mail->mail_settings, false);
644 671 } else {
645 672 $mailSettings = new stdClass();
@@ -655,10 +682,10 @@
655 682 if (!empty($versions)) {
656 683 if (!empty($versions['main']['subject'])) $mail->subject = $versions['main']['subject'];
657 684 if (!empty($versions['main']['preview'])) $mail->preheader = $versions['main']['preview'];
658 685 if (!empty($versions['main']['content'])) $mail->body = $versions['main']['content'];
659 - if (!empty($versions['main']['content'])) $mail->settings = $versions['main']['settings'];
660 - if (!empty($versions['main']['content'])) $mail->stylesheet = $versions['main']['stylesheet'];
686 + if (!empty($versions['main']['settings'])) $mail->settings = $versions['main']['settings'];
687 + if (!empty($versions['main']['stylesheet'])) $mail->stylesheet = $versions['main']['stylesheet'];
661 688
662 689 if ($versionType === 'multilingual') {
663 690 $mail->links_language = $this->config->get('multilingual_default');
664 691 }
@@ -665,9 +692,10 @@
665 692
666 693 unset($versions['main']);
667 694 }
668 695
669 - if ($mailID = $mailClass->save($mail)) {
696 + $mailID = $mailClass->save($mail);
697 + if (!empty($mailID)) {
670 698 if (acym_getVar('string', 'nextstep', '') === 'listing') {
671 699 acym_enqueueMessage(acym_translation('ACYM_SUCCESSFULLY_SAVED'));
672 700 }
673 701 } else {
@@ -687,11 +715,11 @@
687 715 $abTestSendingParams = empty($campaign->sending_params['abtest']) ? [] : $campaign->sending_params['abtest'];
688 716 foreach ($versions as $code => $version) {
689 717 if (empty($version['subject'])) {
690 718 if ($versionType === 'multilingual') {
691 - $mailClass->delete($mailClass->getTranslationId($mailID, $code));
719 + $mailClass->delete([$mailClass->getTranslationId($mailID, $code)]);
692 720 } elseif (!empty($abTestSendingParams[$code])) {
693 - $mailClass->delete($abTestSendingParams[$code]);
721 + $mailClass->delete([$abTestSendingParams[$code]]);
694 722 }
695 723 continue;
696 724 }
697 725
@@ -739,10 +767,18 @@
739 767 }
740 768
741 769 public function saveRecipients(): void
742 770 {
771 + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
772 +
743 773 $allLists = json_decode(acym_getVar('string', 'acym__entity_select__selected'));
744 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 + }
745 781 $campaignId = acym_getVar('int', 'campaignId');
746 782 $addSegmentStep = acym_getVar('int', 'add_segment_step');
747 783
748 784 $campaignClass = new CampaignClass();
@@ -780,14 +816,19 @@
780 816 }
781 817
782 818 public function saveSegment(): void
783 819 {
784 - if (!acym_isAdmin()) {
820 + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
821 +
822 + if (!acym_isAdmin() || !acym_isAllowed('campaigns')) {
785 823 die('Access denied for segments');
786 824 }
787 825
788 826 $segmentSelected = acym_getVar('int', 'segment_selected', 0);
789 827 $filters = acym_getVar('array', 'acym_action', []);
828 + if (acym_conditionsContainRestrictedFilter($filters) && !acym_hasAdminPermissions()) {
829 + die('Access denied for segments');
830 + }
790 831 $campaignId = acym_getVar('int', 'campaignId', 0);
791 832
792 833 if (empty($campaignId)) {
793 834 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
@@ -828,8 +869,10 @@
828 869 }
829 870
830 871 public function saveSendSettings(): void
831 872 {
873 + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
874 +
832 875 $campaignClass = new CampaignClass();
833 876 $mailClass = new MailClass();
834 877 $campaignId = acym_getVar('int', 'campaignId');
835 878
@@ -870,11 +913,11 @@
870 913 'need_confirm_to_send' => $needConfirmToSend,
871 914 'trigger_type' => $triggerType,
872 915 ];
873 916
874 - $startDate = acym_getVar('string', 'start_date', 0);
875 - if (!empty($startDate)) {
876 - $specificSendingParams['start_date'] = acym_date(acym_getTime($startDate), 'Y-m-d H:i:s', false);
917 + $nextDate = acym_getVar('string', 'next_date', 0);
918 + if (!empty($nextDate)) {
919 + $currentCampaign->next_trigger = acym_getTime($nextDate);
877 920 }
878 921
879 922 if (!empty($currentCampaign->sending_params['number_generated'])) {
880 923 $specificSendingParams['number_generated'] = $currentCampaign->sending_params['number_generated'];
@@ -879,8 +922,9 @@
879 922 if (!empty($currentCampaign->sending_params['number_generated'])) {
880 923 $specificSendingParams['number_generated'] = $currentCampaign->sending_params['number_generated'];
881 924 }
882 925
926 + // Clean old settings saved in the campaign
883 927 $triggers = [];
884 928 $fakeSettings = [];
885 929 acym_trigger('onAcymDeclareTriggers', [&$triggers, &$fakeSettings], 'plgAcymTime');
886 930 $settings = array_merge(array_keys($triggers['classic']), ['trigger_type', 'need_confirm_to_send']);
@@ -892,8 +936,9 @@
892 936 if (!empty($currentCampaign->sending_params['abtest']) && !empty($sendingParams['abtest'])) {
893 937 $sendingParams['abtest'] = array_merge($currentCampaign->sending_params['abtest'], $sendingParams['abtest']);
894 938 }
895 939
940 + // Handle special emails
896 941 if (!in_array($sendingType, CampaignClass::SENDING_TYPES)) {
897 942 $specialSendings = [];
898 943 acym_trigger('saveCampaignSpecificSendSettings', [$currentCampaign->sending_type, &$specialSendings]);
899 944 if (!empty($specialSendings)) {
@@ -937,9 +982,10 @@
937 982 $currentCampaign->sending_date = acym_date(acym_getTime($sendingDate), 'Y-m-d H:i:s', false);
938 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');
939 984 }
940 985
941 - if ($campaignClass->save($currentCampaign)) {
986 + $savedCampaignId = $campaignClass->save($currentCampaign);
987 + if (!empty($savedCampaignId)) {
942 988 if (acym_getVar('string', 'nextstep', '') === 'listing') {
943 989 acym_enqueueMessage(acym_translation('ACYM_SUCCESSFULLY_SAVED'));
944 990 }
945 991 } else {
@@ -955,8 +1001,11 @@
955 1001
956 1002 $this->edit();
957 1003 }
958 1004
1005 + /**
1006 + * Needed for the steps system
1007 + */
959 1008 public function saveSummary(): void
960 1009 {
961 1010 $this->edit();
962 1011 }
@@ -1030,9 +1079,11 @@
1030 1079 if (empty($data['receiver'])) {
1031 1080 $receiver = new stdClass();
1032 1081 $receiver->email = $currentUserEmail;
1033 1082 $newID = $userClass->save($receiver);
1034 - $data['receiver'] = $userClass->getOneById($newID);
1083 + if (!empty($newID)) {
1084 + $data['receiver'] = $userClass->getOneById($newID);
1085 + }
1035 1086 }
1036 1087 }
1037 1088
1038 1089 private function prepareCampaignSummary(array &$data): bool
@@ -1049,16 +1100,18 @@
1049 1100 }
1050 1101
1051 1102 $campaign->isAuto = $campaign->sending_type === CampaignClass::SENDING_TYPE_AUTO;
1052 1103
1053 - $startDate = '';
1104 + $nextDate = '';
1054 1105 if ($campaign->isAuto) {
1055 1106 $textToDisplay = new stdClass();
1056 1107 $textToDisplay->triggers = $campaign->sending_params;
1057 1108 acym_trigger('onAcymDeclareSummary_triggers', [&$textToDisplay], 'plgAcymTime');
1058 1109 $textToDisplay = $textToDisplay->triggers;
1059 - if (!empty($campaign->sending_params['start_date'])) {
1060 - $startDate = $campaign->sending_params['start_date'];
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'];
1061 1114 }
1062 1115 }
1063 1116
1064 1117 $data['automatic'] = [
@@ -1067,9 +1120,9 @@
1067 1120 ? ''
1068 1121 : acym_translation('ACYM_THIS_WILL_GENERATE_CAMPAIGN_AUTOMATICALLY').' '.acym_strtolower(
1069 1122 $textToDisplay[$textToDisplay['trigger_type']]
1070 1123 ),
1071 - 'startDate' => $startDate,
1124 + 'nextDate' => $nextDate,
1072 1125 ];
1073 1126 $data['campaignInformation'] = $campaign;
1074 1127 $data['mailId'] = $campaign->mail_id;
1075 1128
@@ -1127,13 +1180,15 @@
1127 1180 $listsIds[] = $oneList->list_id;
1128 1181 }
1129 1182
1130 1183 if (empty($data['campaignInformation']->sending_params)) {
1184 + // No segment saved, get subscribers count the easy way
1131 1185 $listClass = new ListClass();
1132 1186 $nbSubscribers = $listClass->getSubscribersCount($listsIds);
1133 1187 } else {
1188 + // There may be segments
1134 1189 $campaignClass = new CampaignClass();
1135 - $nbSubscribers = $campaignClass->countUsersCampaign($data['campaignInformation']->id);
1190 + $nbSubscribers = $campaignClass->countUsersCampaign($data['campaignInformation']->id, true);
1136 1191 }
1137 1192 }
1138 1193
1139 1194 $data['listsReceiver'] = $campaignLists;
@@ -1139,8 +1194,9 @@
1139 1194 $data['listsReceiver'] = $campaignLists;
1140 1195 $data['listsIds'] = $listsIds;
1141 1196 $data['nbSubscribers'] = $nbSubscribers;
1142 1197
1198 + // Campaign already sent, calculate the number of new receivers
1143 1199 if (!empty($data['campaignInformation']->sent) && !empty($data['campaignInformation']->active)) {
1144 1200 $queueClass = new QueueClass();
1145 1201 $data['mailInformation']->sending_params = $data['campaignInformation']->sending_params;
1146 1202
@@ -1173,8 +1229,10 @@
1173 1229
1174 1230 $mailClass = new MailClass();
1175 1231 $emailsToTest = $mailClass->getParentAndChildMails($campaign->mail_id);
1176 1232
1233 + $isDemo = false;
1234 +
1177 1235 $data = [
1178 1236 'id' => $campaign->id,
1179 1237 'currentCampaign' => $campaign,
1180 1238 'test_emails' => $defaultEmails,
@@ -1180,8 +1238,9 @@
1180 1238 'test_emails' => $defaultEmails,
1181 1239 'upgrade' => !acym_level(ACYM_ESSENTIAL),
1182 1240 'version' => 'enterprise',
1183 1241 'emails_to_test' => $emailsToTest,
1242 + 'isDemo' => $isDemo,
1184 1243 ];
1185 1244 if (!acym_isAcyCheckerInstalled()) {
1186 1245 $lists = $campaignClass->getListsByMailId($campaign->mail_id);
1187 1246 $listClass = new ListClass();
@@ -1190,15 +1249,15 @@
1190 1249
1191 1250 $this->prepareListingClasses($data);
1192 1251 $this->prepareSegmentDisplay($data, $campaign->sending_params);
1193 1252
1194 - $this->breadcrumb[acym_escape($campaign->name)] = acym_completeLink('campaigns&task=edit&step=tests&campaignId='.$campaign->id);
1253 + $this->breadcrumb[$campaign->name] = acym_completeLink('campaigns&task=edit&step=tests&campaignId='.$campaign->id);
1195 1254 parent::display($data);
1196 1255 }
1197 1256
1198 1257 public function saveTests(): void
1199 1258 {
1200 - if (!acym_isAdmin()) {
1259 + if (!acym_isAdmin() || !acym_isAllowed('campaigns')) {
1201 1260 die('Access denied for tests step');
1202 1261 }
1203 1262
1204 1263 $this->edit();