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 -868 10.0.1 → 11.1.1 View file →
@@ -1,868 +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($message, $ajax, $type = 'error')
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()
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($alreadyExists, $ajax)
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($msg, $ajax, $type = 'success')
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()
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()
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($update = false)
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()
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()
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()
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 -
378 - $user = $this->getUserFromUnsubPage();
379 - $listsChecked = acym_getVar('array', 'lists', []);
380 - $listsChecked = array_filter($listsChecked, function ($status) {
381 - return intval($status) === 1;
382 - });
383 - $listsChecked = array_keys($listsChecked);
384 - $displayedCheckedLists = explode(',', acym_getVar('string', 'displayed_checked_lists', ''));
385 - $userSubscriptions = $userClass->getUserSubscriptionById($user->id);
386 -
387 - $userClass->subscribe($user->id, $listsChecked);
388 -
389 - $listsToUnsub = [];
390 - foreach ($userSubscriptions as $subscription) {
391 - if (!in_array($subscription->id, $listsChecked)
392 - && in_array($subscription->id, $displayedCheckedLists)
393 - && intval($subscription->status) === 1) {
394 - $listsToUnsub[] = $subscription->id;
395 - }
396 - }
397 -
398 - $userClass->unsubscribe($user->id, $listsToUnsub);
399 - $this->redirectUnsubWorked();
400 - }
401 -
402 - public function unsubscribePage($alreadyExists)
403 - {
404 - $userClass = new UserClass();
405 - $lang = acym_getVar('string', 'language', acym_getLanguageTag());
406 - $mailId = acym_getVar('int', 'mail_id', 0);
407 - $campaignListOnly = $this->config->get('unsubscribe_campaign_list_only', '0') === '1';
408 - $displaySurvey = $this->config->get('unsubpage_survey', '0') === '1';
409 - $surveyAnswers = $this->config->get('unsub_survey', '[]');
410 - $unsubscribeColor = $this->config->get('unsubscribe_color', '#00a4ff');
411 - $hoverColor = $this->darkenRGBColor($unsubscribeColor, 20);
412 -
413 - $surveyAnswers = json_decode($surveyAnswers, true);
414 -
415 - if (ACYM_CMS === 'joomla' && !empty($_GET['language'])) $lang = $_GET['language'];
416 - acym_setLanguage($lang);
417 - acym_loadLanguage($lang);
418 -
419 - $userSubscriptions = $userClass->getUserSubscriptionById($alreadyExists->id, 'id', false, false, true, false, $mailId, $campaignListOnly);
420 -
421 - $data = [
422 - 'user' => $alreadyExists,
423 - 'mail_id' => $mailId,
424 - 'subscriptions' => $userSubscriptions,
425 - 'lang' => $lang,
426 - ];
427 -
428 - if (acym_isMultilingual()) {
429 - $allLanguages = acym_getLanguages(false, true);
430 - if ($this->config->get('unsubpage_languages_multi_only', '0') === '1') {
431 - $allLanguages = acym_getMultilingualLanguages();
432 - }
433 -
434 - $data['languages'] = [];
435 - foreach ($allLanguages as $key => $language) {
436 - $data['languages'][$key] = $language->name;
437 - }
438 -
439 - $surveyAnswersTranslations = $this->config->get('unsub_survey_translation', '');
440 -
441 - if (!empty($surveyAnswersTranslations)) {
442 - $surveyAnswersTranslations = json_decode($surveyAnswersTranslations, true);
443 - if (isset($surveyAnswersTranslations[$data['lang']])) {
444 - $surveyAnswers = $surveyAnswersTranslations[$data['lang']]['unsub_survey'];
445 - }
446 - }
447 - }
448 -
449 - if ($displaySurvey) {
450 - $data['surveyAnswers'] = $surveyAnswers;
451 - array_unshift($data['surveyAnswers'], acym_translation('ACYM_SELECT_REASON'));
452 - $data['surveyAnswers'][] = acym_translation('ACYM_OTHER');
453 - $data['surveyAnswers'] = array_combine($data['surveyAnswers'], $data['surveyAnswers']);
454 - }
455 -
456 - if (!empty($this->config->get('unsubscribe_color'))) {
457 - $unsubscribeColor = $this->config->get('unsubscribe_color');
458 - $hoverColor = $this->darkenRGBColor($unsubscribeColor, 20);
459 - $data['unsubscribeColor'] = $unsubscribeColor;
460 - $data['hoverColor'] = $hoverColor;
461 - }
462 - $data['svgImage'] = $this->getSVGImage($unsubscribeColor, $hoverColor);
463 -
464 - acym_setVar('layout', 'unsubscribepage');
465 - parent::display($data);
466 - }
467 -
468 - public function getSVGImage($unsubscribeColor, $hoverColor)
469 - {
470 - if ($this->config->get('display_unsub_image') === '1') {
471 - $svgPath = ACYM_IMAGES.'unsubscribe/unsub_image.svg';
472 -
473 - $svgContent = acym_fileGetContent($svgPath);
474 -
475 - return str_replace(
476 - ['#B118C8', '#C794CF'],
477 - [$unsubscribeColor, $hoverColor],
478 - $svgContent
479 - );
480 - }
481 -
482 - return '';
483 - }
484 -
485 - public function hexToRGB($hexColor)
486 - {
487 - $hexColor = ltrim($hexColor, '#');
488 -
489 - if (strlen($hexColor) === 3) {
490 - $hexColor = $hexColor[0].$hexColor[0].$hexColor[1].$hexColor[1].$hexColor[2].$hexColor[2];
491 - }
492 -
493 - $r = hexdec(substr($hexColor, 0, 2));
494 - $g = hexdec(substr($hexColor, 2, 2));
495 - $b = hexdec(substr($hexColor, 4, 2));
496 -
497 - return [$r, $g, $b];
498 - }
499 -
500 - public function darkenRGBColor($hexColor, $percent)
501 - {
502 - $rgbValues = $this->hexToRGB($hexColor);
503 -
504 - $darkenedRGB = array_map(function ($value) use ($percent) {
505 - return max(0, $value - ($value * $percent / 100));
506 - }, $rgbValues);
507 -
508 - return sprintf('rgb(%d, %d, %d)', $darkenedRGB[0], $darkenedRGB[1], $darkenedRGB[2]);
509 - }
510 -
511 - public function confirm()
512 - {
513 - if (acym_isRobot()) {
514 - return;
515 - }
516 -
517 - $userClass = new UserClass();
518 - $user = $userClass->identify(true, 'userId', 'userKey');
519 - if (empty($user)) {
520 - acym_enqueueMessage(acym_translation('ACYM_USER_NOT_FOUND'), 'error');
521 - acym_redirect(acym_rootURI());
522 -
523 - return;
524 - }
525 -
526 - if ($this->config->get('confirmation_message', 1)) {
527 - if ($user->confirmed) {
528 - acym_enqueueMessage(acym_translation('ACYM_ALREADY_CONFIRMED'), 'info');
529 - } else {
530 - acym_enqueueMessage(acym_translation('ACYM_SUBSCRIPTION_CONFIRMED'), 'success');
531 - }
532 - }
533 -
534 - if (!$user->confirmed) {
535 - $userClass->confirm($user->id);
536 - }
537 -
538 - $redirectUrl = $this->config->get('confirm_redirect');
539 - if (!empty($redirectUrl)) {
540 - $replace = [];
541 - foreach ($user as $key => $val) {
542 - $replace['{user:'.$key.'}'] = $val;
543 - }
544 - $redirectUrl = str_replace(array_keys($replace), $replace, $redirectUrl);
545 - acym_redirect($redirectUrl);
546 -
547 - return;
548 - }
549 -
550 - acym_redirect(acym_rootURI());
551 - }
552 -
553 - public function profile()
554 - {
555 - $userClass = new UserClass();
556 - $user = $userClass->identify(true);
557 -
558 - if (empty($user)) {
559 - $allowvisitor = $this->config->get('allow_visitor', 1);
560 - if (empty($allowvisitor)) {
561 - acym_askLog(true, 'ACYM_ONLY_LOGGED', 'message');
562 -
563 - return;
564 - }
565 - }
566 -
567 - global $acymEmailMisspelledLoaded;
568 - $spellChecker = empty($acymEmailMisspelledLoaded) && !empty($this->config->get('email_spellcheck'));
569 - if ($spellChecker) $acymEmailMisspelledLoaded = true;
570 -
571 - if ($spellChecker) {
572 - acym_addStyle(false, ACYM_CSS.'libraries/email-misspelled.min.css?v='.filemtime(ACYM_MEDIA.'css'.DS.'libraries'.DS.'email-misspelled.min.css'));
573 - acym_addScript(false, ACYM_JS.'libraries/email-misspelled.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'libraries'.DS.'email-misspelled.min.js'));
574 - }
575 - acym_addScript(false, ACYM_JS.'module.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'module.min.js'));
576 -
577 - $params = new \stdClass();
578 - $menu = acym_getMenu();
579 - if (is_object($menu)) {
580 - $params->source = 'Menu n°'.$menu->id;
581 - $menuParameters = method_exists($menu, 'getParams') ? $menu->getParams() : $menu->params;
582 - $menuparams = new AcymParameter($menuParameters);
583 -
584 - if (!empty($menuparams)) {
585 - $params->suffix = $menuparams->get('pageclass_sfx', '');
586 - $params->page_heading = $menuparams->get('page_heading');
587 - $params->show_page_heading = $menuparams->get('show_page_heading', 0);
588 -
589 - if ($menuparams->get('menu-meta_description')) {
590 - acym_addMetadata('description', $menuparams->get('menu-meta_description'));
591 - }
592 - if ($menuparams->get('menu-meta_keywords')) {
593 - acym_addMetadata('keywords', $menuparams->get('menu-meta_keywords'));
594 - }
595 - if ($menuparams->get('robots')) {
596 - acym_addMetadata('robots', $menuparams->get('robots'));
597 - }
598 -
599 - $params->lists = $menuparams->get('lists', 'none');
600 - $params->listschecked = $menuparams->get('listschecked', 'none');
601 - $params->dropdown = $menuparams->get('dropdown');
602 - $params->hiddenlists = $menuparams->get('hiddenlists', 'None');
603 - $params->fields = $menuparams->get('fields');
604 - $params->introtext = $menuparams->get('introtext');
605 - $params->posttext = $menuparams->get('posttext');
606 - $params->page_title = $menuparams->get('page_title', '');
607 - }
608 - }
609 - $data = $this->prepareParams($params);
610 -
611 - if (empty($data['user']->language)) {
612 - $cmsUserLanguage = acym_getCmsUserLanguage();
613 - $data['user']->language = empty($cmsUserLanguage) ? acym_getLanguageTag() : $cmsUserLanguage;
614 - }
615 -
616 - $data['captchaHelper'] = new CaptchaHelper();
617 -
618 - acym_setVar('layout', 'profile');
619 - parent::display($data);
620 - }
621 -
622 - public function prepareParams($values): array
623 - {
624 - if (!isset($values->lists)) {
625 - $values->lists = 'none';
626 - }
627 - if (!isset($values->listschecked)) {
628 - $values->listschecked = 'none';
629 - }
630 - if (!isset($values->dropdown)) {
631 - $values->dropdown = 0;
632 - }
633 - if (!isset($values->hiddenlists)) {
634 - $values->hiddenlists = 'None';
635 - }
636 - if (empty($values->fields)) {
637 - $values->fields = ['1', '2'];
638 - }
639 - if (!in_array('2', $values->fields) && !in_array(2, $values->fields)) {
640 - $values->fields[] = '2';
641 - }
642 - if (!isset($values->introtext)) {
643 - $values->introtext = '';
644 - }
645 - if (!isset($values->posttext)) {
646 - $values->posttext = '';
647 - }
648 -
649 - foreach (['lists', 'listschecked', 'hiddenlists', 'fields'] as $option) {
650 - if (is_string($values->$option)) {
651 - $values->$option = explode(',', $values->$option);
652 - }
653 - }
654 -
655 - if ((empty($values->lists) || in_array('None', $values->lists)) && (empty($values->hiddenlists) || strtolower(implode('', $values->hiddenlists)) == 'none')) {
656 - $values->lists[] = 'All';
657 - }
658 -
659 - $userClass = new UserClass();
660 - $user = $userClass->identify(true);
661 - if (empty($user)) {
662 - $listClass = new ListClass();
663 - $subscription = $listClass->getAll('id', true);
664 - $user = new \stdClass();
665 - $user->id = 0;
666 - $user->key = 0;
667 -
668 - if (!empty($subscription)) {
669 - foreach ($subscription as $id => $onesub) {
670 - $subscription[$id]->status = 1;
671 - if (strtolower(implode('', $values->listschecked)) != 'all' && !in_array($id, $values->listschecked)) {
672 - $subscription[$id]->status = -1;
673 - }
674 - }
675 - }
676 -
677 - acym_addBreadcrumb(acym_translation('ACYM_SUBSCRIPTION'));
678 - if (empty($menu)) {
679 - acym_setPageTitle(acym_translation('ACYM_SUBSCRIPTION'));
680 - }
681 - } else {
682 - $subscription = $userClass->getAllListsUserSubscriptionById($user->id, 'id', true);
683 -
684 - acym_addBreadcrumb(acym_translation('ACYM_MODIFY_SUBSCRIPTION'));
685 - if (empty($menu)) {
686 - acym_setPageTitle(acym_translation('ACYM_MODIFY_SUBSCRIPTION'));
687 - }
688 - }
689 -
690 - if (!empty($values->page_title)) {
691 - acym_addBreadcrumb($values->page_title);
692 - if (empty($menu)) {
693 - acym_setPageTitle($values->page_title);
694 - }
695 - }
696 -
697 - $allLists = $subscription;
698 -
699 - acym_initModule();
700 -
701 - if (!empty($values->lists) && strtolower(implode('', $values->lists)) != 'all') {
702 - if (in_array('None', $values->lists)) {
703 - $subscription = [];
704 - } else {
705 - $newSubscription = [];
706 - foreach ($subscription as $id => $onesub) {
707 - if (in_array($id, $values->lists)) {
708 - $newSubscription[$id] = $onesub;
709 - }
710 - }
711 - $subscription = $newSubscription;
712 - }
713 - }
714 -
715 - if (!empty($values->hiddenlists)) {
716 - $hiddenListsArray = [];
717 - if (strtolower(implode('', $values->hiddenlists)) == 'all') {
718 - $subscription = [];
719 - foreach ($allLists as $oneList) {
720 - if (!empty($oneList->active)) {
721 - $hiddenListsArray[] = $oneList->id;
722 - }
723 - }
724 - } elseif (strtolower(implode('', $values->hiddenlists)) != 'none') {
725 - foreach ($allLists as $oneList) {
726 - if (!$oneList->active || !in_array($oneList->id, $values->hiddenlists)) {
727 - continue;
728 - }
729 - $hiddenListsArray[] = $oneList->id;
730 - unset($subscription[$oneList->id]);
731 - }
732 - }
733 - $values->hiddenlists = $hiddenListsArray;
734 - }
735 -
736 - $defaultSubscription = $subscription;
737 - $forceLists = acym_getVar('string', 'listid', '');
738 - if (!empty($forceLists)) {
739 - $subscription = [];
740 - $forceLists = explode(',', $forceLists);
741 - foreach ($forceLists as $oneList) {
742 - if (!empty($defaultSubscription[$oneList])) {
743 - $subscription[$oneList] = $defaultSubscription[$oneList];
744 - }
745 - }
746 - }
747 - $forceHiddenLists = acym_getVar('string', 'hiddenlist', '');
748 - if (!empty($forceHiddenLists)) {
749 - $forceHiddenLists = explode(',', $forceHiddenLists);
750 - $tmpList = [];
751 - foreach ($forceHiddenLists as $oneList) {
752 - if (!empty($defaultSubscription[$oneList]) || in_array($oneList, $values->hiddenlists)) {
753 - $tmpList[] = $oneList;
754 - }
755 - }
756 - $values->hiddenlists = $tmpList;
757 - }
758 -
759 - $displayLists = false;
760 - foreach ($subscription as $oneSub) {
761 - if (!empty($oneSub->active) && $oneSub->visible) {
762 - $displayLists = true;
763 - break;
764 - }
765 - }
766 -
767 - $fieldClass = new FieldClass();
768 - $allfields = $fieldClass->getFieldsByID($values->fields);
769 - $fields = [];
770 - foreach ($allfields as $field) {
771 - if (intval($field->active) === 0) continue;
772 - $fields[$field->id] = $field;
773 - }
774 - $values->fields = $fields;
775 -
776 - $data = [
777 - 'config' => $this->config,
778 - 'displayLists' => $displayLists,
779 - 'user' => $user,
780 - 'subscription' => $subscription,
781 - 'fieldClass' => $fieldClass,
782 - ];
783 -
784 - foreach ($values as $key => $value) {
785 - $data[$key] = $value;
786 - }
787 -
788 - return $data;
789 - }
790 -
791 - public function savechanges()
792 - {
793 - acym_checkToken();
794 - acym_checkRobots();
795 -
796 - $userClass = new UserClass();
797 -
798 -
799 - $status = $userClass->saveForm();
800 - if ($status) {
801 - if ($userClass->confirmationSentSuccess) {
802 - $this->displayMessage('ACYM_CONFIRMATION_SENT', true, 'success');
803 - } elseif ($userClass->newUser) {
804 - $this->displayMessage('ACYM_SUBSCRIPTION_OK', true, 'success');
805 - } else {
806 - $this->displayMessage('ACYM_SUBSCRIPTION_UPDATED_OK', true, 'success');
807 - }
808 - } elseif (!empty($userClass->requireId)) {
809 - $this->displayMessage('ACYM_IDENTIFICATION_SENT', true, 'success');
810 - } elseif (!empty($userClass->errors)) {
811 - $this->displayMessage(implode('<br/>', $userClass->errors), true);
812 - } else {
813 - $this->displayMessage('ACYM_ERROR_SAVING', true);
814 - }
815 -
816 - exit;
817 - }
818 -
819 - public function exportdata()
820 - {
821 - acym_checkToken();
822 -
823 - $userClass = new UserClass();
824 - $user = $userClass->identify(true, 'userId', 'userKey');
825 -
826 - if (empty($user->id)) {
827 - acym_redirect(acym_rootURI());
828 - }
829 -
830 - $userHelper = new UserHelper();
831 - $userHelper->exportdata($user->id);
832 - }
833 -
834 - public function gdprDelete()
835 - {
836 - acym_checkToken();
837 - $userClass = new UserClass();
838 - $user = $userClass->identify(true, 'userId', 'userKey');
839 - $userClass->delete($user->id);
840 - }
841 -
842 - public function ajaxGetEnqueuedMessages()
843 - {
844 - acym_session();
845 -
846 - $output = '';
847 - $types = ['success', 'info', 'warning', 'error'];
848 - foreach ($types as $type) {
849 - if (empty($_SESSION['acymessage'.$type])) continue;
850 -
851 - $messages = $_SESSION['acymessage'.$type];
852 - if (!is_array($messages)) {
853 - $messages = [$messages];
854 - }
855 -
856 - $output .= '<div class="acym_callout acym__callout__front__'.$type.'" role="alert">';
857 - $output .= implode(' ', $messages);
858 - $output .= '<button class="acym_callout_close" aria-label="'.acym_escape(acym_translation('ACYM_CLOSE_NOTIFICATION')).'">x</button></div>';
859 -
860 - unset($_SESSION['acymessage'.$type]);
861 - }
862 -
863 - if (!empty($output)) {
864 - $output = '<div id="acym__callout__container">'.$output.'</div>';
865 - }
866 - acym_sendAjaxResponse('', ['messages' => $output]);
867 - }
868 -}