PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.11.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.11.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
acymailing / back / Controllers / Bounces / Listing.php

Listing.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.11.1, at back/Controllers/Bounces/Listing.php

238 lines 7.8 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\Bounces;
4
5 use AcyMailing\Classes\ListClass;
6 use AcyMailing\Classes\RuleClass;
7 use AcyMailing\Helpers\BounceHelper;
8 use AcyMailing\Helpers\CronHelper;
9 use AcyMailing\Helpers\ToolbarHelper;
10 use AcyMailing\Helpers\UpdateHelper;
11 use AcyMailing\Helpers\WorkflowHelper;
12
13 trait Listing
14 {
15 public function listing(): void
16 {
17 $this->storeRedirectListing(true);
18 }
19
20 public function prepareToolbar(array &$data, string $element = 'bounces'): void
21 {
22 $toolbarHelper = new ToolbarHelper();
23 if ($element === 'bounces') {
24 $toolbarHelper->addButton(
25 'ACYM_CONFIGURE',
26 [
27 'data-task' => 'config',
28 'id' => 'acym__bounce__button__config',
29 'type' => 'button',
30 ],
31 'settings'
32 );
33 $toolbarHelper->addButton(
34 'ACYM_RESET_DEFAULT_RULES',
35 [
36 'data-task' => 'reinstall',
37 'type' => 'button',
38 'data-confirmation-message' => 'ACYM_ARE_YOU_SURE',
39 ],
40 'repeat'
41 );
42 $toolbarHelper->addButton('ACYM_RUN_BOUNCE_HANDLING', ['data-task' => 'test'], 'play_arrow');
43 $toolbarHelper->addButton('ACYM_CREATE', ['data-task' => 'rule', 'type' => 'submit'], 'add', true);
44
45
46 $remindMe = json_decode($this->config->get('remindme', '[]'), true);
47 $messageIdentifier = 'bounce_rules_'.UpdateHelper::BOUNCE_VERSION;
48
49 if (!in_array($messageIdentifier, $remindMe) && $this->config->get('bounceVersion', 0) < UpdateHelper::BOUNCE_VERSION) {
50 $message = acym_translation('ACYM_NEW_BOUNCE_RULES');
51 $message .= '<a href="#" class="acym__do__not__remindme acym__do__not__remindme__info" title="'.$messageIdentifier.'">';
52 $message .= acym_translation('ACYM_DO_NOT_REMIND_ME');
53 $message .= '</a>';
54
55 acym_enqueueMessage($message, 'info', false);
56 }
57 } else {
58 $toolbarHelper = new ToolbarHelper();
59 $toolbarHelper->addSearchBar($data['search'], 'mailboxes_search', 'ACYM_SEARCH');
60 $toolbarHelper->addButton(acym_translation('ACYM_CREATE'), ['data-task' => 'mailboxAction'], 'add', true);
61 $data['toolbar'] = $toolbarHelper;
62 }
63
64 $data['toolbar'] = $toolbarHelper;
65 }
66
67 public function bounces(): void
68 {
69 $data = [];
70
71
72 $data['workflowHelper'] = new WorkflowHelper();
73 if (!acym_level(ACYM_ENTERPRISE)) {
74 acym_setVar('layout', 'splashscreen');
75 $data['isEnterprise'] = false;
76 }
77
78 $this->prepareToolbar($data);
79
80 parent::display($data);
81 }
82
83 public function ajaxSetOrdering(): void
84 {
85 $order = json_decode(acym_getVar('string', 'order'), true);
86 if (empty($order)) {
87 $order = [];
88 }
89
90 $i = 1;
91 $error = false;
92 foreach ($order as $rule) {
93 $query = 'UPDATE #__acym_rule SET `ordering` = '.intval($i).' WHERE `id` = '.intval($rule);
94 $error = acym_query($query) < 0 || $error;
95 $i++;
96 }
97
98 acym_sendAjaxResponse('', [], !$error);
99 }
100
101 public function test(): void
102 {
103 $ruleClass = new RuleClass();
104
105 if ($ruleClass->getOrderingNumber() < 1) {
106 acym_enqueueMessage(acym_translation('ACYM_NO_RULES'), 'error');
107
108 $this->listing();
109
110 return;
111 }
112
113 acym_increasePerf();
114 $bounceHelper = new BounceHelper();
115 $bounceHelper->report = true;
116
117 if ($bounceHelper->init() && $bounceHelper->connect()) {
118 $this->runBounce = true;
119 } else {
120 $errors = $bounceHelper->getErrors();
121 if (!empty($errors)) {
122 acym_enqueueMessage($errors, 'error');
123 $errorString = implode(' ', $errors);
124 $port = $this->config->get('bounce_port');
125 if (preg_match('#certificate#i', $errorString) && !$this->config->get('bounce_certif', false)) {
126 acym_enqueueMessage(acym_translationSprintf('ACYM_YOU_MAY_TURN_ON_OPTION', '<i>'.acym_translation('ACYM_SELF_SIGNED_CERTIFICATE').'</i>'), 'warning');
127 } elseif (!empty($port) && !in_array($port, ['993', '143', '110'])) {
128 acym_enqueueMessage(acym_translation('ACYM_BOUNCE_WRONG_PORT'), 'warning');
129 }
130 }
131 }
132
133 $this->listing();
134 }
135
136 public function process(): void
137 {
138 acym_increasePerf();
139
140 $bounceHelper = new BounceHelper();
141 $bounceHelper->report = true;
142 if (!$bounceHelper->init()) {
143 return;
144 }
145 if (!$bounceHelper->connect()) {
146 acym_display($bounceHelper->getErrors(), 'error');
147
148 return;
149 }
150 $disp = "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n";
151 $disp .= '<title>'.addslashes(acym_translation('ACYM_BOUNCE_PROCESS')).'</title>'."\n";
152 $disp .= "<style>body{font-size:12px;font-family: Arial,Helvetica,sans-serif;padding-top:30px;}</style>\n</head>\n<body>";
153 echo $disp;
154
155 acym_display(acym_translationSprintf('ACYM_BOUNCE_CONNECT_SUCC', $this->config->get('bounce_username')), 'success');
156 $nbMessages = $bounceHelper->getNBMessages();
157 $nbMessagesReport = acym_translationSprintf('ACYM_NB_MAIL_MAILBOX', $nbMessages);
158 acym_display($nbMessagesReport, 'info');
159
160 if (empty($nbMessages)) {
161 exit;
162 }
163
164 $bounceHelper->handleMessages();
165
166 $cronHelper = new CronHelper();
167 $cronHelper->saveReport([$nbMessagesReport], $bounceHelper->messages);
168
169 if ($this->config->get('bounce_max', 0) != 0 && $nbMessages > $this->config->get('bounce_max', 0)) {
170 $url = acym_completeLink('bounces&task=process&continuebounce=1', true, true);
171 if (acym_getVar('int', 'continuebounce')) {
172 echo '<script type="text/javascript">document.location.href=\''.$url.'\';</script>';
173 } else {
174 echo '<div style="padding:20px;"><a href="'.$url.'">'.acym_translation('ACYM_CLICK_HANDLE_ALL_BOUNCES').'</a></div>';
175 }
176 }
177
178 echo '</body></html>';
179 while ($bounceHelper->obend-- > 0) {
180 ob_start();
181 }
182 exit;
183 }
184
185 public function reinstall(): void
186 {
187 $ruleClass = new RuleClass();
188 $ruleClass->cleanTable();
189
190 $updateHelper = new UpdateHelper();
191 $updateHelper->installBounceRules();
192
193 $this->listing();
194 }
195
196 public function config(): void
197 {
198 acym_redirect(acym_completeLink('configuration', false, true));
199 }
200
201 public function delete(): void
202 {
203 $rulesSelected = acym_getVar('array', 'elements_checked', []);
204
205 if (in_array(RuleClass::FINAL_RULE_ID, $rulesSelected)) {
206 acym_enqueueMessage(acym_translation('ACYM_CANNOT_DELETE_FINAL_RULE'), 'error');
207
208 $key = array_search(RuleClass::FINAL_RULE_ID, $rulesSelected);
209 if ($key !== false) {
210 unset($rulesSelected[$key]);
211 }
212 }
213
214 $ruleClass = new RuleClass();
215 $ruleClass->delete($rulesSelected);
216
217 $this->listing();
218 }
219
220 public function setInactive(): void
221 {
222 $rulesSelected = acym_getVar('array', 'elements_checked', []);
223 $ruleClass = new RuleClass();
224 $ruleClass->setInactive($rulesSelected);
225
226 $this->listing();
227 }
228
229 public function setActive(): void
230 {
231 $rulesSelected = acym_getVar('array', 'elements_checked', []);
232 $ruleClass = new RuleClass();
233 $ruleClass->setActive($rulesSelected);
234
235 $this->listing();
236 }
237 }
238