PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.0.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.0.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 / front / FrontControllers / FrontusersController.php

FrontusersController.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.0.1, at front/FrontControllers/FrontusersController.php

869 lines 29.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }
869