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
acymailing / back / Controllers / Campaigns / AutoCampaigns.php

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

202 lines 6.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Controllers\Campaigns;
4
5 use AcyMailing\Classes\CampaignClass;
6 use AcyMailing\Classes\MailClass;
7
8
9 trait AutoCampaigns
10 {
11 public function campaigns_auto(): void
12 {
13 if (!acym_level(ACYM_ENTERPRISE)) {
14 $this->campaigns();
15 }
16 }
17
18 private function getIsPendingGenerated(array &$data): void
19 {
20 $campaignClass = new CampaignClass();
21 $campaingsGenerated = $campaignClass->getAllCampaignsGeneratedWaiting();
22 $data['generatedPending'] = !empty($campaingsGenerated);
23 }
24
25 private function getAutoCampaignsFrequency(array &$data): void
26 {
27 foreach ($data['allCampaigns'] as $key => $campaign) {
28 if (empty($campaign->sending_params)) continue;
29 $textToDisplay = new \stdClass();
30 $textToDisplay->triggers = $campaign->sending_params;
31 acym_trigger('onAcymDeclareSummary_triggers', [&$textToDisplay], 'plgAcymTime');
32
33 if (empty($textToDisplay->triggers['trigger_type']) || empty($textToDisplay->triggers[$textToDisplay->triggers['trigger_type']])) {
34 $data['allCampaigns'][$key]->sending_params['trigger_text'] = acym_translation('ACYM_ERROR_WHILE_RECOVERING_TRIGGERS');
35 $message = acym_translationSprintf('ACYM_ERROR_WHILE_RECOVERING_TRIGGERS_NOTIF_X', $campaign->id);
36 $message .= ' <a id="acym__queue__configure-cron" href="'.acym_completeLink('campaigns&task=campaigns_auto').'">'.acym_translation(
37 'ACYM_GOTO_CAMPAIGNS_AUTO'
38 ).'</a>';
39 $message .= '<p class="acym__do__not__remindme" title="auto_campaigns_triggers_reminder">'.acym_translation('ACYM_DO_NOT_REMIND_ME').'</p>';
40
41 $notification = [
42 'name' => 'auto_campaigns_triggers_reminder',
43 'removable' => 1,
44 ];
45 acym_enqueueMessage($message, 'warning', true, [$notification]);
46 } else {
47 $data['allCampaigns'][$key]->sending_params['trigger_text'] = $textToDisplay->triggers[$textToDisplay->triggers['trigger_type']];
48 }
49 }
50 }
51
52 public function summaryGenerated(): void
53 {
54 $campaignId = acym_getVar('int', 'campaignId', 0);
55 $mailClass = new MailClass();
56
57 acym_setVar('layout', 'summary_generated');
58
59 $generatedCampaign = $this->loadCampaignMail($campaignId);
60
61 if (empty($generatedCampaign)) {
62 acym_enqueueMessage(acym_translation('ACYM_COULD_NOT_LOAD_CAMPAIGN'), 'error');
63 $this->listing();
64
65 return;
66 }
67
68 $campaign = $generatedCampaign['campaign'];
69 $mail = $generatedCampaign['mail'];
70
71 $lists = $mailClass->getAllListsByMailId($mail->id);
72
73 if (empty($lists)) {
74 $this->listing();
75
76 return;
77 }
78
79 $parentCampaign = $this->loadCampaignMail((int)$campaign->parent_id);
80 if (empty($parentCampaign)) {
81 $parentCampaign = [
82 'campaign' => false,
83 'mail' => false,
84 ];
85 }
86
87 //if campaign wait for confirmation
88 $campaign->waiting_confirmation = false;
89 if ($campaign->draft && $campaign->active) {
90 $campaign->waiting_confirmation = true;
91 }
92 //if campaign canceled
93 $campaign->canceled = false;
94 if (!$campaign->draft && !$campaign->active) {
95 $campaign->canceled = true;
96 }
97
98 $data = [
99 'campaign' => $campaign,
100 'mailId' => $campaign->mail_id,
101 'mail' => $mail,
102 'lists' => $lists,
103 'parent_campaign' => $parentCampaign['campaign'],
104 'parent_mail' => $parentCampaign['mail'],
105 'mailClass' => $mailClass,
106 ];
107
108 $this->prepareMultilingual($data, false);
109 $this->prepareAllMailsForMultilingual($data);
110
111 $this->breadcrumb[$mail->name] = acym_completeLink('campaigns&task=summaryGenerated&campaignId='.$campaign->id);
112 parent::display($data);
113 }
114
115 protected function changeStatusGeneratedCampaign(string $statusToApply = 'disable'): void
116 {
117 $campaignId = acym_getVar('int', 'campaignId', 0);
118 $campaignClass = new CampaignClass();
119
120 $campaign = $this->loadCampaignMail($campaignId);
121
122 if (empty($campaign)) {
123 acym_enqueueMessage(acym_translation('ACYM_COULD_NOT_LOAD_CAMPAIGN'), 'error');
124 $this->listing();
125
126 return;
127 }
128
129 $campaign = $campaign['campaign'];
130
131 if ('disable' === $statusToApply) {
132 $campaign->sent = 0;
133 $campaign->active = 0;
134 $campaign->draft = 0;
135 $successMsg = acym_translation('ACYM_CAMPAIGN_HAS_BEEN_DISABLED');
136 } else {
137 $campaign->active = 1;
138 $campaign->draft = 1;
139 $successMsg = acym_translation('ACYM_CAMPAIGN_HAS_BEEN_ENABLED');
140 }
141
142 $savedCampaignId = $campaignClass->save($campaign);
143 if (!empty($savedCampaignId)) {
144 acym_enqueueMessage($successMsg);
145 } else {
146 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
147 }
148
149 if ('enable' === $statusToApply) {
150 acym_setVar('campaignId', $campaignId);
151 $this->summaryGenerated();
152 } else {
153 acym_setVar('campaigns_status', 'generated');
154 $this->listing();
155 }
156 }
157
158 public function disableGeneratedCampaign(): void
159 {
160 wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
161
162 $this->changeStatusGeneratedCampaign();
163 }
164
165 public function enableGeneratedCampaign(): void
166 {
167 wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
168
169 $this->changeStatusGeneratedCampaign('enable');
170 }
171
172 private function loadCampaignMail(int $campaignId): array
173 {
174 if (empty($campaignId)) {
175 return [];
176 }
177
178 $campaignClass = new CampaignClass();
179 $mailClass = new MailClass();
180
181 $campaign = $campaignClass->getOneById($campaignId);
182 if (empty($campaign)) {
183 return [];
184 }
185
186 $mail = $mailClass->getOneById($campaign->mail_id);
187 if (empty($mail)) {
188 return [];
189 }
190
191 if (empty($mail->from_name)) $mail->from_name = $this->config->get('from_name');
192 if (empty($mail->from_email)) $mail->from_email = $this->config->get('from_email');
193 if (empty($mail->reply_to_name)) $mail->reply_to_name = $this->config->get('replyto_name');
194 if (empty($mail->reply_to_email)) $mail->reply_to_email = $this->config->get('replyto_email');
195
196 return [
197 'campaign' => $campaign,
198 'mail' => $mail,
199 ];
200 }
201 }
202