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 | front/FrontControllers/FrontusersController.php +0 -877 10.2.2 → 11.1.1 View file →
@@ -1,877 +1,0 @@
1 -<?php
2 -
3 -namespace AcyMailing\FrontControllers;
4 -
5 -use AcyMailing\Classes\FieldClass;
6 -use AcyMailing\Classes\ListClass;
7 -use AcyMailing\Classes\MailClass;
8 -use AcyMailing\Classes\UserClass;
9 -use AcyMailing\Controllers\UsersController;
10 -use AcyMailing\Helpers\CaptchaHelper;
11 -use AcyMailing\Helpers\EntitySelectHelper;
12 -use AcyMailing\Helpers\ToolbarHelper;
13 -use AcyMailing\Helpers\UserHelper;
14 -use AcyMailing\Core\AcymParameter;
15 -
16 -class FrontusersController extends UsersController
17 -{
18 - public function __construct()
19 - {
20 - parent::__construct();
21 -
22 - if (ACYM_CMS == 'joomla') {
23 - $menu = acym_getMenu();
24 - if (is_object($menu)) {
25 - $params = method_exists($menu, 'getParams') ? $menu->getParams() : $menu->params;
26 - $menuParams = new AcymParameter($params);
27 - $this->menuClass = $menuParams->get('pageclass_sfx', '');
28 - }
29 - }
30 -
31 - $this->publicFrontTasks = [
32 - 'subscribe',
33 - 'unsubscribe',
34 - 'unsubscribeAll',
35 - 'saveSubscriptions',
36 - 'unsubscribePage',
37 - 'confirm',
38 - 'profile',
39 - 'savechanges',
40 - 'exportdata',
41 - 'ajaxGetEnqueuedMessages',
42 - 'gdprDelete',
43 - ];
44 -
45 - }
46 -
47 -
48 - private function displayMessage(string $message, bool $ajax, string $type = 'error'): void
49 - {
50 - if ($ajax) {
51 - echo '{"message":"'.acym_translation($message, true).'","type":"'.$type.'","code":"1"}';
52 - } else {
53 - acym_header('Content-type:text/html; charset=utf-8');
54 - echo '<script>alert("'.acym_translation($message, true).'"); window.history.go(-1);</script>';
55 - }
56 - exit;
57 - }
58 -
59 - public function subscribe(): void
60 - {
61 - acym_checkRobots();
62 -
63 - if (!acym_getVar('string', 'acy_source') && !empty($_GET['user'])) {
64 - acym_setVar('acy_source', 'url');
65 - }
66 -
67 - $ajax = acym_getVar('int', 'ajax', 0);
68 - if ($ajax) {
69 - @ob_end_clean();
70 - acym_header('Content-type:text/html; charset=utf-8');
71 - }
72 -
73 - $currentUserid = acym_currentUserId();
74 - if ((int)$this->config->get('allow_visitor', 1) != 1 && empty($currentUserid)) {
75 - if ($ajax) {
76 - echo '{"message":"'.acym_translation('ACYM_ONLY_LOGGED', true).'","type":"error","code":"0"}';
77 - exit;
78 - } else {
79 - acym_askLog(false, 'ACYM_ONLY_LOGGED');
80 -
81 - return;
82 - }
83 - }
84 -
85 - if (empty($currentUserid) && $this->config->get('captcha', 'none') !== 'none' && acym_level(ACYM_ESSENTIAL)) {
86 - $captchaHelper = new CaptchaHelper();
87 - if (!$captchaHelper->check()) {
88 - $this->displayMessage('ACYM_WRONG_CAPTCHA', $ajax);
89 - }
90 - }
91 -
92 - $formData = acym_getVar('array', 'user', [], '');
93 - $user = new \stdClass();
94 - if (!empty($formData['email'])) {
95 - $user->email = $formData['email'];
96 - }
97 -
98 - $userClass = new UserClass();
99 - if (empty($user->email)) {
100 - $connectedUser = $userClass->identify(true, 'userId', 'userKey');
101 - if (!empty($connectedUser->email)) {
102 - $user->email = $connectedUser->email;
103 - }
104 - }
105 - $user->email = trim($user->email);
106 -
107 - if (empty($user->email) || !acym_isValidEmail($user->email, true)) {
108 - $this->displayMessage('ACYM_VALID_EMAIL', $ajax);
109 - }
110 -
111 - $alreadyExists = $userClass->getOneByEmail($user->email);
112 - if (!empty($alreadyExists->id)) {
113 - $user->id = $alreadyExists->id;
114 - }
115 -
116 - $result = $userClass->saveForm($ajax);
117 - $user->id = acym_getVar('int', 'userId');
118 -
119 - if (!empty($userClass->errors)) {
120 - $this->displayMessage(implode('<br /><br />', $userClass->errors), $ajax);
121 - }
122 -
123 - if ($result === false || empty($user->id)) {
124 - $this->displayMessage('ACYM_ERROR_SAVE_USER', $ajax);
125 - }
126 -
127 - $myuser = $userClass->getOneById($user->id);
128 - if (empty($myuser->id)) {
129 - $this->displayMessage('ACYM_ERROR_SAVE_USER', $ajax);
130 - }
131 -
132 - $msgtype = 'success';
133 - $extraMsg = '';
134 - if (empty($myuser->confirmed) && $this->config->get('require_confirmation', 1) == 1) {
135 - $extraMsg = strip_tags(acym_getVar('string', 'confirmation_message'));
136 - if ($userClass->confirmationSentSuccess || empty($userClass->confirmationSentError)) {
137 - $msg = !empty($extraMsg) ? $extraMsg : 'ACYM_CONFIRMATION_SENT';
138 - $code = 2;
139 - } else {
140 - $msg = $userClass->confirmationSentError;
141 - $code = 7;
142 - $msgtype = 'error';
143 - }
144 - } else {
145 - if ($userClass->subscribed) {
146 - $msg = strip_tags(acym_getVar('string', 'confirmation_message'));
147 - if (empty($msg)) $msg = 'ACYM_SUBSCRIPTION_OK';
148 - $code = 3;
149 - } else {
150 - $msg = 'ACYM_ALREADY_SUBSCRIBED';
151 - $code = 5;
152 - $enqueueMsgType = 'info';
153 - }
154 - }
155 -
156 - $replace = [];
157 - foreach ($myuser as $oneProp => $oneVal) {
158 - $replace['{user:'.$oneProp.'}'] = $oneVal;
159 - }
160 -
161 - $msg = str_replace(array_keys($replace), $replace, acym_translation($msg));
162 - if (!empty($extraMsg)) {
163 - $msg = str_replace(array_keys($replace), $replace, acym_translation($extraMsg)).'<br />'.$msg;
164 - }
165 -
166 - if ($ajax) {
167 - $msg = str_replace(["\n", "\r", '"', '\\'], [' ', ' ', "'", '\\\\'], $msg);
168 - echo '{"message":"'.$msg.'","type":"'.$msgtype.'","code":"'.$code.'"}';
169 - exit;
170 - } else {
171 - acym_enqueueMessage($msg, !empty($enqueueMsgType) ? $enqueueMsgType : $msgtype);
172 - }
173 -
174 - $redirectUrl = urldecode(acym_getVar('string', 'redirect', ''));
175 - $redirectUrl = str_replace(array_keys($replace), $replace, $redirectUrl);
176 - if (empty($redirectUrl)) {
177 - $redirectUrl = acym_rootURI();
178 - }
179 -
180 - acym_redirect($redirectUrl, '', 'message', true);
181 - }
182 -
183 - private function unsubscribeDirectly(object $alreadyExists, bool $ajax): void
184 - {
185 - $userClass = new UserClass();
186 - if ($this->config->get('allow_modif', 'data') === 'none') {
187 - $currentUser = $userClass->identify(true, 'userId', 'userKey');
188 - if (empty($currentUser->email)) {
189 - $this->endUnsubscribe('ACYM_LOGIN', $ajax, 'error');
190 -
191 - return;
192 - }
193 - }
194 -
195 - $visibleSubscription = acym_getVar('array', 'subscription', []);
196 - $hiddenLists = trim(acym_getVar('string', 'hiddenlists', ''));
197 - $hiddenSubscription = empty($hiddenLists) ? [] : explode(',', $hiddenLists);
198 - $unsubscribeLists = array_merge($visibleSubscription, $hiddenSubscription);
199 -
200 - $mailId = acym_getVar('int', 'mail_id', 0);
201 - if (!empty($mailId)) {
202 - $mailClass = new MailClass();
203 - $unsubscribeLists = array_keys($mailClass->getAllListsByMailId($mailId));
204 - }
205 -
206 - if (empty($unsubscribeLists)) {
207 - $msg = 'ACYM_NO_SUBSCRIPTION_LINKED_EMAIL';
208 - } elseif (false === $userClass->unsubscribe($alreadyExists->id, $unsubscribeLists)) {
209 - $msg = 'ACYM_UNSUBSCRIPTION_NOT_IN_LIST';
210 - } else {
211 - $msg = 'ACYM_UNSUBSCRIPTION_OK';
212 - }
213 -
214 - $this->endUnsubscribe($msg, $ajax);
215 - }
216 -
217 - private function endUnsubscribe(string $msg, bool $ajax, string $type = 'success'): void
218 - {
219 - $msg = acym_translation($msg);
220 -
221 - if ($ajax) {
222 - echo '{"message":"'.str_replace('"', '\"', $msg).'","type":"'.$type.'","code":"10"}';
223 - exit;
224 - }
225 - acym_enqueueMessage($msg, $type);
226 -
227 - $redirectUrl = urldecode(acym_getVar('string', 'redirectunsub', ''));
228 - if (empty($redirectUrl)) {
229 - $redirectUrl = acym_rootURI();
230 - }
231 -
232 - acym_redirect($redirectUrl);
233 - }
234 -
235 - public function unsubscribe(): void
236 - {
237 - acym_checkRobots();
238 - $userClass = new UserClass();
239 -
240 - $redirectToUnsubPage = $this->config->get('unsubscribe_page', 1);
241 -
242 - $ajax = acym_getVar('int', 'ajax', 0);
243 - if ($ajax) {
244 - @ob_end_clean();
245 - acym_header('Content-type:text/html; charset=utf-8');
246 - }
247 -
248 - $currentUserid = acym_currentUserId();
249 - $user = $userClass->identify(true, 'userId', 'userKey');
250 - if (empty($user) && empty($currentUserid) && $this->config->get('captcha', 'none') !== 'none' && acym_level(ACYM_ESSENTIAL)) {
251 - $captchaClass = new CaptchaHelper();
252 - if (!$captchaClass->check()) {
253 - $this->displayMessage('ACYM_WRONG_CAPTCHA', $ajax);
254 - }
255 - }
256 -
257 - $formData = acym_getVar('array', 'user', []);
258 -
259 - if (empty($formData['email'])) {
260 - if (empty($user)) {
261 - return;
262 - }
263 -
264 - if (!empty($user->email)) {
265 - $email = $user->email;
266 - }
267 - } else {
268 - $email = trim(strip_tags($formData['email']));
269 - }
270 -
271 - $currentEmail = acym_currentUserEmail();
272 - if (empty($email) && !empty($currentEmail)) {
273 - $email = $currentEmail;
274 - }
275 -
276 - if (empty($email) || !acym_isValidEmail($email)) {
277 - $this->displayMessage('ACYM_VALID_EMAIL', $ajax);
278 - }
279 -
280 - $alreadyExists = $userClass->getOneByEmail($email);
281 -
282 - if (empty($alreadyExists->id)) {
283 - $this->displayMessage('ACYM_SUB_NOT_IN_LIST', $ajax);
284 - }
285 -
286 - $fromModuleOrWidget = acym_getVar('string', 'acysubmode', '');
287 - if (!empty($fromModuleOrWidget) && in_array($fromModuleOrWidget, ['form_acym', 'mod_acym', 'widget_acym'])) {
288 - $this->unsubscribeDirectly($alreadyExists, $ajax);
289 - } elseif ($redirectToUnsubPage && !$ajax) {
290 - $this->unsubscribePage($alreadyExists);
291 - } else {
292 - $this->unsubscribeDirectly($alreadyExists, $ajax);
293 - }
294 - }
295 -
296 - private function getUserFromUnsubPage(): object
297 - {
298 - $userID = acym_getVar('int', 'user_id');
299 - $userClass = new UserClass();
300 -
301 - $user = $userClass->getOneById($userID);
302 -
303 - if (empty($user)) {
304 - acym_enqueueMessage(acym_translation('ACYM_USER_NOT_FOUND'), 'error');
305 -
306 - acym_redirect(acym_rootURI());
307 - }
308 -
309 - return $user;
310 - }
311 -
312 - private function unsubscribeAllInner(bool $update = false): void
313 - {
314 - $userClass = new UserClass();
315 - $user = $this->getUserFromUnsubPage();
316 - $redirectUrl = $this->config->get('unsub_redirect_url', acym_rootURI());
317 -
318 - $allLists = $userClass->getUserSubscriptionById($user->id);
319 - if (empty($allLists)) {
320 - acym_enqueueMessage(acym_translation('ACYM_NOT_SUBSCRIBED_ANY_LIST'), 'info');
321 - acym_redirect(!empty($redirectUrl) ? $redirectUrl : acym_rootURI());
322 - }
323 -
324 - $lists = [];
325 - foreach ($allLists as $list) {
326 - if (!$update || $list->visible == 1) {
327 - $lists[] = $list->id;
328 - }
329 - }
330 -
331 - $userClass->sendNotification($user->id, 'acy_notification_unsuball');
332 - $userClass->blockNotifications = true;
333 - $userClass->unsubscribe($user->id, $lists);
334 - }
335 -
336 - private function redirectUnsubWorked(): void
337 - {
338 - acym_enqueueMessage(acym_translation('ACYM_SUBSCRIPTION_UPDATED_OK'));
339 - $redirectUrl = $this->config->get('unsub_redirect_url');
340 - if (!empty($redirectUrl)) {
341 - acym_redirect($redirectUrl);
342 - } else {
343 - acym_redirect(acym_rootURI());
344 - }
345 - }
346 -
347 - public function unsubscribeAll(): void
348 - {
349 - $userClass = new UserClass();
350 - if ($userClass->identify(true, 'user_id', 'user_key') === false) {
351 - acym_enqueueMessage(acym_translation('ACYM_USER_NOT_FOUND'), 'error');
352 -
353 - acym_redirect(acym_rootURI());
354 - }
355 -
356 - $displayCheckedLists = acym_getVar('string', 'displayed_checked_lists', '');
357 - if (!empty($displayCheckedLists)) {
358 - $user = $this->getUserFromUnsubPage();
359 - $userClass->unsubscribe($user->id, explode(',', $displayCheckedLists));
360 - } else {
361 - $this->unsubscribeAllInner();
362 - }
363 -
364 - $ajax = acym_getVar('int', 'ajax', 0);
365 - if (!$ajax) {
366 - $this->redirectUnsubWorked();
367 - }
368 - }
369 -
370 - public function saveSubscriptions(): void
371 - {
372 - $userClass = new UserClass();
373 - if ($userClass->identify(true, 'user_id', 'user_key') === false) {
374 - $this->displayMessage('ACYM_USER_NOT_FOUND', false);
375 - }
376 -
377 - $user = $this->getUserFromUnsubPage();
378 - $listsChecked = acym_getVar('array', 'lists', []);
379 - $listsChecked = array_filter($listsChecked, function ($status) {
380 - return intval($status) === 1;
381 - });
382 - $listsChecked = array_keys($listsChecked);
383 - $displayedCheckedLists = explode(',', acym_getVar('string', 'displayed_checked_lists', ''));
384 - $userSubscriptions = $userClass->getUserSubscriptionById($user->id);
385 -
386 - $userClass->subscribe($user->id, $listsChecked);
387 -
388 - $listsToUnsub = [];
389 - foreach ($userSubscriptions as $subscription) {
390 - if (!in_array($subscription->id, $listsChecked)
391 - && in_array($subscription->id, $displayedCheckedLists)
392 - && intval($subscription->status) === 1) {
393 - $listsToUnsub[] = $subscription->id;
394 - }
395 - }
396 -
397 - $userClass->unsubscribe($user->id, $listsToUnsub);
398 - $this->redirectUnsubWorked();
399 - }
400 -
401 - public function unsubscribePage(object $alreadyExists): void
402 - {
403 - $userClass = new UserClass();
404 - $lang = acym_getVar('string', 'language', acym_getLanguageTag());
405 - $mailId = acym_getVar('int', 'mail_id', 0);
406 - $campaignListOnly = $this->config->get('unsubscribe_campaign_list_only', '0') === '1';
407 - $displaySurvey = $this->config->get('unsubpage_survey', '0') === '1';
408 - $surveyAnswers = $this->config->get('unsub_survey', '[]');
409 - $unsubscribeColor = $this->config->get('unsubscribe_color', '#00a4ff');
410 - $hoverColor = $this->darkenRGBColor($unsubscribeColor, 20);
411 -
412 - $surveyAnswers = json_decode($surveyAnswers, true);
413 -
414 - if (ACYM_CMS === 'joomla' && !empty($_GET['language'])) $lang = $_GET['language'];
415 - acym_setLanguage($lang);
416 - acym_loadLanguage($lang);
417 -
418 - $userSubscriptions = $userClass->getUserSubscriptionById($alreadyExists->id, 'id', false, false, true, false, $mailId, $campaignListOnly);
419 -
420 - $data = [
421 - 'user' => $alreadyExists,
422 - 'mail_id' => $mailId,
423 - 'subscriptions' => $userSubscriptions,
424 - 'lang' => $lang,
425 - ];
426 -
427 - if (acym_isMultilingual()) {
428 - $allLanguages = acym_getLanguages(false, true);
429 - if ($this->config->get('unsubpage_languages_multi_only', '0') === '1') {
430 - $allLanguages = acym_getMultilingualLanguages();
431 - }
432 -
433 - $data['languages'] = [];
434 - foreach ($allLanguages as $key => $language) {
435 - $data['languages'][$key] = $language->name;
436 - }
437 -
438 - $surveyAnswersTranslations = $this->config->get('unsub_survey_translation', '');
439 -
440 - if (!empty($surveyAnswersTranslations)) {
441 - $surveyAnswersTranslations = json_decode($surveyAnswersTranslations, true);
442 - if (isset($surveyAnswersTranslations[$data['lang']])) {
443 - $surveyAnswers = $surveyAnswersTranslations[$data['lang']]['unsub_survey'];
444 - }
445 - }
446 - }
447 -
448 - if ($displaySurvey) {
449 - $data['surveyAnswers'] = $surveyAnswers;
450 - array_unshift($data['surveyAnswers'], acym_translation('ACYM_SELECT_REASON'));
451 - $data['surveyAnswers'][] = acym_translation('ACYM_OTHER');
452 - $data['surveyAnswers'] = array_combine($data['surveyAnswers'], $data['surveyAnswers']);
453 - }
454 -
455 - if (!empty($this->config->get('unsubscribe_color'))) {
456 - $unsubscribeColor = $this->config->get('unsubscribe_color');
457 - $hoverColor = $this->darkenRGBColor($unsubscribeColor, 20);
458 - $data['unsubscribeColor'] = $unsubscribeColor;
459 - $data['hoverColor'] = $hoverColor;
460 - }
461 - $data['svgImage'] = $this->getSVGImage($unsubscribeColor, $hoverColor);
462 -
463 - acym_setVar('layout', 'unsubscribepage');
464 - parent::display($data);
465 - }
466 -
467 - private function getSVGImage(string $unsubscribeColor, string $hoverColor): string
468 - {
469 - if ($this->config->get('display_unsub_image') === '1') {
470 - $svgPath = ACYM_IMAGES.'unsubscribe/unsub_image.svg';
471 -
472 - $svgContent = acym_fileGetContent($svgPath);
473 -
474 - return str_replace(
475 - ['#B118C8', '#C794CF'],
476 - [$unsubscribeColor, $hoverColor],
477 - $svgContent
478 - );
479 - }
480 -
481 - return '';
482 - }
483 -
484 - public function hexToRGB(string $hexColor): array
485 - {
486 - $hexColor = ltrim($hexColor, '#');
487 -
488 - if (strlen($hexColor) === 3) {
489 - $hexColor = $hexColor[0].$hexColor[0].$hexColor[1].$hexColor[1].$hexColor[2].$hexColor[2];
490 - }
491 -
492 - $r = hexdec(substr($hexColor, 0, 2));
493 - $g = hexdec(substr($hexColor, 2, 2));
494 - $b = hexdec(substr($hexColor, 4, 2));
495 -
496 - return [$r, $g, $b];
497 - }
498 -
499 - public function darkenRGBColor(string $hexColor, int $percent): string
500 - {
501 - $rgbValues = $this->hexToRGB($hexColor);
502 -
503 - $darkenedRGB = array_map(function ($value) use ($percent) {
504 - return max(0, $value - ($value * $percent / 100));
505 - }, $rgbValues);
506 -
507 - return sprintf('rgb(%d, %d, %d)', $darkenedRGB[0], $darkenedRGB[1], $darkenedRGB[2]);
508 - }
509 -
510 - public function confirm(): void
511 - {
512 - if (acym_isRobot()) {
513 - return;
514 - }
515 -
516 - $userClass = new UserClass();
517 - $user = $userClass->identify(true, 'userId', 'userKey');
518 - if (empty($user)) {
519 - acym_enqueueMessage(acym_translation('ACYM_USER_NOT_FOUND'), 'error');
520 - acym_redirect(acym_rootURI());
521 -
522 - return;
523 - }
524 -
525 - if ($this->config->get('confirmation_message', 1)) {
526 - if ($user->confirmed) {
527 - acym_enqueueMessage(acym_translation('ACYM_ALREADY_CONFIRMED'), 'info');
528 - } else {
529 - acym_enqueueMessage(acym_translation('ACYM_SUBSCRIPTION_CONFIRMED'), 'success');
530 - }
531 - }
532 -
533 - if (!$user->confirmed) {
534 - $userClass->confirm($user->id);
535 - }
536 -
537 - $redirectUrl = $this->config->get('confirm_redirect');
538 - if (!empty($redirectUrl)) {
539 - $replace = [];
540 - foreach ($user as $key => $val) {
541 - $replace['{user:'.$key.'}'] = $val;
542 - }
543 - $redirectUrl = str_replace(array_keys($replace), $replace, $redirectUrl);
544 - acym_redirect($redirectUrl);
545 -
546 - return;
547 - }
548 -
549 - acym_redirect(acym_rootURI());
550 - }
551 -
552 - public function profile(): void
553 - {
554 - $userClass = new UserClass();
555 - $user = $userClass->identify(true);
556 -
557 - if (empty($user)) {
558 - $allowvisitor = $this->config->get('allow_visitor', 1);
559 - if (empty($allowvisitor)) {
560 - acym_askLog(true, 'ACYM_ONLY_LOGGED', 'message');
561 -
562 - return;
563 - }
564 - }
565 -
566 - global $acymEmailMisspelledLoaded;
567 - $spellChecker = empty($acymEmailMisspelledLoaded) && !empty($this->config->get('email_spellcheck'));
568 - if ($spellChecker) $acymEmailMisspelledLoaded = true;
569 -
570 - if ($spellChecker) {
571 - acym_addStyle(false, ACYM_CSS.'libraries/email-misspelled.min.css?v='.filemtime(ACYM_MEDIA.'css'.DS.'libraries'.DS.'email-misspelled.min.css'));
572 - acym_addScript(false, ACYM_JS.'libraries/email-misspelled.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'libraries'.DS.'email-misspelled.min.js'));
573 - }
574 - acym_addScript(false, ACYM_JS.'module.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'module.min.js'));
575 -
576 - $params = new \stdClass();
577 - $menu = acym_getMenu();
578 - if (is_object($menu)) {
579 - $params->source = 'Menu n°'.$menu->id;
580 - $menuParameters = method_exists($menu, 'getParams') ? $menu->getParams() : $menu->params;
581 - $menuparams = new AcymParameter($menuParameters);
582 -
583 - if (!empty($menuparams)) {
584 - $params->suffix = $menuparams->get('pageclass_sfx', '');
585 - $params->page_heading = $menuparams->get('page_heading');
586 - $params->show_page_heading = $menuparams->get('show_page_heading', 0);
587 -
588 - if ($menuparams->get('menu-meta_description')) {
589 - acym_addMetadata('description', $menuparams->get('menu-meta_description'));
590 - }
591 - if ($menuparams->get('menu-meta_keywords')) {
592 - acym_addMetadata('keywords', $menuparams->get('menu-meta_keywords'));
593 - }
594 - if ($menuparams->get('robots')) {
595 - acym_addMetadata('robots', $menuparams->get('robots'));
596 - }
597 -
598 - $params->lists = $menuparams->get('lists', 'none');
599 - $params->listschecked = $menuparams->get('listschecked', 'none');
600 - $params->dropdown = $menuparams->get('dropdown');
601 - $params->hiddenlists = $menuparams->get('hiddenlists', 'None');
602 - $params->fields = $menuparams->get('fields');
603 - $params->introtext = $menuparams->get('introtext');
604 - $params->posttext = $menuparams->get('posttext');
605 - $params->page_title = $menuparams->get('page_title', '');
606 - }
607 - }
608 - $data = $this->prepareParams($params);
609 -
610 - if (empty($data['user']->language)) {
611 - $cmsUserLanguage = acym_getCmsUserLanguage();
612 - $data['user']->language = empty($cmsUserLanguage) ? acym_getLanguageTag() : $cmsUserLanguage;
613 - }
614 -
615 - $data['captchaHelper'] = new CaptchaHelper();
616 -
617 - acym_setVar('layout', 'profile');
618 - parent::display($data);
619 - }
620 -
621 - public function prepareParams(object $values): array
622 - {
623 - if (!isset($values->lists)) {
624 - $values->lists = 'none';
625 - }
626 - if (!isset($values->listschecked)) {
627 - $values->listschecked = 'none';
628 - }
629 - if (!isset($values->dropdown)) {
630 - $values->dropdown = 0;
631 - }
632 - if (!isset($values->hiddenlists)) {
633 - $values->hiddenlists = 'None';
634 - }
635 - if (empty($values->fields)) {
636 - $values->fields = ['1', '2'];
637 - }
638 - if (!in_array('2', $values->fields) && !in_array(2, $values->fields)) {
639 - $values->fields[] = '2';
640 - }
641 - if (!isset($values->introtext)) {
642 - $values->introtext = '';
643 - }
644 - if (!isset($values->posttext)) {
645 - $values->posttext = '';
646 - }
647 -
648 - foreach (['lists', 'listschecked', 'hiddenlists', 'fields'] as $option) {
649 - if (is_string($values->$option)) {
650 - $values->$option = explode(',', $values->$option);
651 - }
652 - }
653 -
654 - if ((empty($values->lists) || in_array('None', $values->lists)) && (empty($values->hiddenlists) || strtolower(implode('', $values->hiddenlists)) == 'none')) {
655 - $values->lists[] = 'All';
656 - }
657 -
658 - $userClass = new UserClass();
659 - $user = $userClass->identify(true);
660 - if (empty($user)) {
661 - $listClass = new ListClass();
662 - $subscription = $listClass->getAll('id');
663 -
664 - if (acym_isMultilingual()) {
665 - $subscription = $listClass->getTranslatedNameDescription($subscription);
666 - }
667 -
668 - $user = new \stdClass();
669 - $user->id = 0;
670 - $user->key = 0;
671 -
672 - if (!empty($subscription)) {
673 - foreach ($subscription as $id => $onesub) {
674 - $subscription[$id]->status = 1;
675 - if (strtolower(implode('', $values->listschecked)) != 'all' && !in_array($id, $values->listschecked)) {
676 - $subscription[$id]->status = -1;
677 - }
678 - }
679 - }
680 -
681 - acym_addBreadcrumb(acym_translation('ACYM_SUBSCRIPTION'));
682 - if (empty($menu)) {
683 - acym_setPageTitle(acym_translation('ACYM_SUBSCRIPTION'));
684 - }
685 - } else {
686 - $subscription = $userClass->getAllListsUserSubscriptionById($user->id, 'id', true);
687 -
688 - acym_addBreadcrumb(acym_translation('ACYM_MODIFY_SUBSCRIPTION'));
689 - if (empty($menu)) {
690 - acym_setPageTitle(acym_translation('ACYM_MODIFY_SUBSCRIPTION'));
691 - }
692 - }
693 -
694 - if (!empty($values->page_title)) {
695 - acym_addBreadcrumb($values->page_title);
696 - if (empty($menu)) {
697 - acym_setPageTitle($values->page_title);
698 - }
699 - }
700 -
701 - $allLists = $subscription;
702 -
703 - acym_initModule();
704 -
705 - if (!empty($values->lists) && strtolower(implode('', $values->lists)) != 'all') {
706 - if (in_array('None', $values->lists)) {
707 - $subscription = [];
708 - } else {
709 - $newSubscription = [];
710 - foreach ($subscription as $id => $onesub) {
711 - if (in_array($id, $values->lists)) {
712 - $newSubscription[$id] = $onesub;
713 - }
714 - }
715 - $subscription = $newSubscription;
716 - }
717 - }
718 -
719 - if (!empty($values->hiddenlists)) {
720 - $hiddenListsArray = [];
721 - if (strtolower(implode('', $values->hiddenlists)) == 'all') {
722 - $subscription = [];
723 - foreach ($allLists as $oneList) {
724 - if (!empty($oneList->active)) {
725 - $hiddenListsArray[] = $oneList->id;
726 - }
727 - }
728 - } elseif (strtolower(implode('', $values->hiddenlists)) != 'none') {
729 - foreach ($allLists as $oneList) {
730 - if (!$oneList->active || !in_array($oneList->id, $values->hiddenlists)) {
731 - continue;
732 - }
733 - $hiddenListsArray[] = $oneList->id;
734 - unset($subscription[$oneList->id]);
735 - }
736 - }
737 - $values->hiddenlists = $hiddenListsArray;
738 - }
739 -
740 - $defaultSubscription = $subscription;
741 - $forceLists = acym_getVar('string', 'listid', '');
742 - if (!empty($forceLists)) {
743 - $subscription = [];
744 - $forceLists = explode(',', $forceLists);
745 - foreach ($forceLists as $oneList) {
746 - if (!empty($defaultSubscription[$oneList])) {
747 - $subscription[$oneList] = $defaultSubscription[$oneList];
748 - }
749 - }
750 - }
751 - $forceHiddenLists = acym_getVar('string', 'hiddenlist', '');
752 - if (!empty($forceHiddenLists)) {
753 - $forceHiddenLists = explode(',', $forceHiddenLists);
754 - $tmpList = [];
755 - foreach ($forceHiddenLists as $oneList) {
756 - if (!empty($defaultSubscription[$oneList]) || in_array($oneList, $values->hiddenlists)) {
757 - $tmpList[] = $oneList;
758 - }
759 - }
760 - $values->hiddenlists = $tmpList;
761 - }
762 -
763 - $displayLists = false;
764 - foreach ($subscription as $oneSub) {
765 - if (!empty($oneSub->active) && $oneSub->visible) {
766 - $displayLists = true;
767 - break;
768 - }
769 - }
770 -
771 - $fieldClass = new FieldClass();
772 - $allfields = $fieldClass->getFieldsByID($values->fields);
773 - $fields = [];
774 - foreach ($allfields as $field) {
775 - if (intval($field->active) === 0) continue;
776 - $fields[$field->id] = $field;
777 - }
778 - $values->fields = $fields;
779 -
780 - $data = [
781 - 'config' => $this->config,
782 - 'displayLists' => $displayLists,
783 - 'user' => $user,
784 - 'subscription' => $subscription,
785 - 'fieldClass' => $fieldClass,
786 - ];
787 -
788 - foreach ($values as $key => $value) {
789 - $data[$key] = $value;
790 - }
791 -
792 - return $data;
793 - }
794 -
795 - public function savechanges(): void
796 - {
797 - acym_checkToken();
798 - acym_checkRobots();
799 -
800 - $userClass = new UserClass();
801 -
802 -
803 - $status = $userClass->saveForm();
804 - if ($status) {
805 - if ($userClass->confirmationSentSuccess) {
806 - $this->displayMessage('ACYM_CONFIRMATION_SENT', true, 'success');
807 - } elseif ($userClass->newUser) {
808 - $this->displayMessage('ACYM_SUBSCRIPTION_OK', true, 'success');
809 - } else {
810 - $this->displayMessage('ACYM_SUBSCRIPTION_UPDATED_OK', true, 'success');
811 - }
812 - } elseif (!empty($userClass->requireId)) {
813 - $this->displayMessage('ACYM_IDENTIFICATION_SENT', true, 'success');
814 - } elseif (!empty($userClass->errors)) {
815 - $this->displayMessage(implode('<br/>', $userClass->errors), true);
816 - } else {
817 - $this->displayMessage('ACYM_ERROR_SAVING', true);
818 - }
819 -
820 - exit;
821 - }
822 -
823 - public function exportdata(): void
824 - {
825 - acym_checkToken();
826 -
827 - $userClass = new UserClass();
828 - $user = $userClass->identify(true, 'userId', 'userKey');
829 -
830 - if (empty($user->id)) {
831 - acym_redirect(acym_rootURI());
832 - }
833 -
834 - $userHelper = new UserHelper();
835 - $userHelper->exportdata((int)$user->id);
836 - }
837 -
838 - public function gdprDelete(): void
839 - {
840 - acym_checkToken();
841 -
842 - $userClass = new UserClass();
843 - $user = $userClass->identify(true, 'userId', 'userKey');
844 - if (empty($user->id)) {
845 - acym_redirect(acym_rootURI());
846 - }
847 -
848 - $userClass->delete([$user->id], true);
849 - }
850 -
851 - public function ajaxGetEnqueuedMessages(): void
852 - {
853 - acym_session();
854 -
855 - $output = '';
856 - $types = ['success', 'info', 'warning', 'error'];
857 - foreach ($types as $type) {
858 - if (empty($_SESSION['acymessage'.$type])) continue;
859 -
860 - $messages = $_SESSION['acymessage'.$type];
861 - if (!is_array($messages)) {
862 - $messages = [$messages];
863 - }
864 -
865 - $output .= '<div class="acym_callout acym__callout__front__'.$type.'" role="alert">';
866 - $output .= '<div>'.implode(' ', $messages).'</div>';
867 - $output .= '<button class="acym_callout_close" aria-label="'.acym_escape(acym_translation('ACYM_CLOSE_NOTIFICATION')).'">x</button></div>';
868 -
869 - unset($_SESSION['acymessage'.$type]);
870 - }
871 -
872 - if (!empty($output)) {
873 - $output = '<div id="acym__callout__container">'.$output.'</div>';
874 - }
875 - acym_sendAjaxResponse('', ['messages' => $output]);
876 - }
877 -}