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 / front / FrontControllers / FronturlController.php

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

120 lines 3.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\FrontControllers;
4
5 use AcyMailing\Classes\MailClass;
6 use AcyMailing\Classes\MailStatClass;
7 use AcyMailing\Classes\UrlClass;
8 use AcyMailing\Classes\UrlClickClass;
9 use AcyMailing\Classes\UserClass;
10 use AcyMailing\Classes\UserStatClass;
11 use AcyMailing\Core\AcymController;
12
13 class FronturlController extends AcymController
14 {
15 public function __construct()
16 {
17 parent::__construct();
18
19 $this->publicFrontTasks = [
20 'click',
21 ];
22 }
23
24 public function click(): void
25 {
26 $urlId = acym_getVar('int', 'urlid');
27 $mailId = acym_getVar('int', 'mailid');
28 $userId = acym_getVar('int', 'userid');
29
30 $urlClass = new UrlClass();
31 $urlObject = $urlClass->getOneUrlById($urlId);
32
33 if (empty($urlObject->id)) {
34 acym_raiseError(404, acym_translation('ACYM_PAGE_NOT_FOUND'));
35 }
36
37 $urlObject->url = preg_replace(
38 [
39 '#&idU=[0-9]+#i',
40 '#idU=[0-9]+&#i',
41 '#\?idU=[0-9]+#i',
42 ],
43 '',
44 $urlObject->url
45 );
46
47 $mailClass = new MailClass();
48 $mail = $mailClass->getOneById($mailId);
49
50 $userStatClass = new UserStatClass();
51 $userStat = $userStatClass->getOneByMailAndUserId($mailId, $userId);
52
53 $delay = $this->config->get('tracking_delay', 0);
54 if (empty($mail) || empty($userStat) || acym_isRobot() || (!empty($delay) && acym_getTimeFromUTCDate($userStat->send_date) > time() - $delay)) {
55 acym_redirect($this->resolveSubscriberTags($urlObject->url, $userId));
56 }
57
58 $urlClick = new \stdClass();
59 $urlClick->mail_id = $mailId;
60 $urlClick->url_id = $urlObject->id;
61 $urlClick->click = 1;
62 $urlClick->user_id = $userId;
63 $urlClick->date_click = acym_date('now', 'Y-m-d H:i:s', false);
64
65 $mailStatClass = new MailStatClass();
66 $urlClickClass = new UrlClickClass();
67 $urlClickClass->save($urlClick);
68
69 if (empty($userStat->open)) {
70 $userStatToInsert = new \stdClass();
71 $userStatToInsert->user_id = $userId;
72 $userStatToInsert->mail_id = $mailId;
73 $userStatToInsert->open = 1;
74 $userStatToInsert->open_date = acym_date('now', 'Y-m-d H:i:s', false);
75 $userStatClass->save($userStatToInsert);
76
77 $mailStat = new \stdClass();
78 $mailStat->mail_id = $mailId;
79 $mailStat->open_unique = 1;
80 $mailStat->open_total = 1;
81 $mailStatClass->save($mailStat);
82 }
83
84 $clickStats = $urlClickClass->getOneByMailIdAndUserId($mailId, $userId);
85 $mailStatClass->incrementClicks($mailId, $clickStats->click == 1);
86
87 $userClass = new UserClass();
88 $subscriber = $userClass->getOneById($userId);
89 if (!empty($subscriber)) {
90 $subscriber->last_open_date = acym_date('now', 'Y-m-d H:i:s', false);
91 $subscriber->last_click_date = acym_date('now', 'Y-m-d H:i:s', false);
92 $userClass->triggers = false;
93 $userClass->sendConf = false;
94 $userClass->save($subscriber);
95 }
96
97 acym_redirect($this->resolveSubscriberTags($urlObject->url, $userId));
98 }
99
100 private function resolveSubscriberTags(string $url, int $userId): string
101 {
102 if (!preg_match('#\{|%7B#i', $url)) {
103 return $url;
104 }
105
106 $userClass = new UserClass();
107 $subscriber = $userClass->identify(true, 'userid', 'userkey');
108
109 if (empty($subscriber) || (int)$subscriber->id !== $userId) {
110 return $url;
111 }
112
113 $tempEmail = new \stdClass();
114 $tempEmail->body = $url;
115 acym_trigger('replaceUserInformation', [&$tempEmail, &$subscriber, true]);
116
117 return $tempEmail->body;
118 }
119 }
120