PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.10.2
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.10.2
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 / StatsController.php

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

178 lines 5.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\Controllers;
4
5 use AcyMailing\Classes\CampaignClass;
6 use AcyMailing\Classes\MailClass;
7 use AcyMailing\Classes\MailStatClass;
8 use AcyMailing\Helpers\WorkflowHelper;
9 use AcyMailing\Core\AcymController;
10 use AcyMailing\Controllers\Stats\GlobalStats;
11 use AcyMailing\Controllers\Stats\Detailed;
12 use AcyMailing\Controllers\Stats\ClickMap;
13 use AcyMailing\Controllers\Stats\LinksDetails;
14 use AcyMailing\Controllers\Stats\UserLinksDetails;
15 use AcyMailing\Controllers\Stats\Lists;
16
17 class StatsController extends AcymController
18 {
19 use GlobalStats;
20 use Detailed;
21 use ClickMap;
22 use LinksDetails;
23 use UserLinksDetails;
24 use Lists;
25
26 private array $selectedMailIds = [];
27 private array $multiLanguageMailAdded = [];
28 private array $generatedMailAdded = [];
29
30 public function __construct()
31 {
32 parent::__construct();
33
34 $this->defaulttask = 'globalStats';
35 $this->breadcrumb[acym_translation('ACYM_STATISTICS')] = acym_completeLink('stats');
36 $this->loadScripts = [
37 'all' => ['datepicker', 'thumbnail'],
38 ];
39 }
40
41 public function call(string $task, bool $isFront = false): void
42 {
43 $task = $this->storeAndGetTask($task);
44 parent::call($task, $isFront);
45 }
46
47 private function storeAndGetTask(string $task): string
48 {
49 acym_session();
50
51 $tasksToStore = [
52 'globalStats',
53 'detailedStats',
54 'clickMap',
55 'linksDetails',
56 'userClickDetails',
57 'statsByList',
58 ];
59
60 if ($this->taskCalled === 'listing' && empty($_SESSION['stats_task'])) {
61 return 'globalStats';
62 }
63
64 if ((empty($this->taskCalled) || $this->taskCalled === 'listing') && !empty($_SESSION['stats_task']) && in_array($_SESSION['stats_task'], $tasksToStore)) {
65 return $_SESSION['stats_task'];
66 }
67
68 if (!empty($this->taskCalled) && !in_array($this->taskCalled, $tasksToStore) && method_exists($this, $this->taskCalled)) {
69 return $this->taskCalled;
70 } elseif (!empty($this->taskCalled) && $this->taskCalled != 'listing' && in_array($this->taskCalled, $tasksToStore)) {
71 $_SESSION['stats_task'] = $this->taskCalled;
72
73 return $task;
74 } elseif (!empty($_SESSION['stats_task']) && method_exists($this, $_SESSION['stats_task'])) {
75 return $_SESSION['stats_task'];
76 } else {
77 return $this->defaulttask;
78 }
79 }
80
81 public function searchSentMail(): void
82 {
83 $idsSelected = acym_getVar('string', 'id', '');
84 if (!empty($idsSelected)) {
85 $idsSelected = explode(',', $idsSelected);
86 $mailClass = new MailClass();
87 $mails = $mailClass->getByIds($idsSelected);
88 $data = [];
89 if (!empty($mails)) {
90 $mails = $mailClass->decode($mails);
91 foreach ($mails as $mail) {
92 $data[] = [
93 'value' => $mail->id,
94 'text' => $mail->name,
95 ];
96 }
97 }
98
99 echo json_encode($data);
100 exit;
101 }
102
103 $return = [];
104 $search = acym_getVar('string', 'search', '');
105
106 $mailStatClass = new MailStatClass();
107 $mails = $mailStatClass->getAllMailsForStats($search);
108
109 foreach ($mails as $oneMail) {
110 $return[] = [$oneMail->id, $oneMail->name];
111 }
112
113 echo json_encode($return);
114 exit;
115 }
116
117 public function prepareDefaultPageInfo(array &$data, bool $needMailId = false): bool
118 {
119 $data['workflowHelper'] = new WorkflowHelper();
120
121 $overrideFilterMailIds = acym_getVar('string', 'task', '') === 'listing' && empty(acym_getVar('array', 'mail_ids', []));
122 $data['selectedMailid'] = $this->getVarFiltersListing('array', 'mail_ids', [], $overrideFilterMailIds);
123
124 foreach ($data['selectedMailid'] as $i => $mailId) {
125 if (empty($mailId)) {
126 unset($data['selectedMailid'][$i]);
127 }
128 }
129
130 if ($needMailId && empty($data['selectedMailid'])) {
131 $this->globalStats();
132
133 return false;
134 }
135
136 $mailStatClass = new MailStatClass();
137 $data['sentMails'] = $mailStatClass->getAllMailsForStats();
138 $data['show_date_filters'] = true;
139 $data['page_title'] = false;
140
141 if (count($data['selectedMailid']) == 1) {
142 $overrideFilterMailIdVersion = !empty(acym_getVar('array', 'mail_ids', []));
143
144 $versionMailSelected = $this->getVarFiltersListing('int', 'mail_id_version', 0, $overrideFilterMailIdVersion);
145 if (!empty($versionMailSelected)) {
146 $data['selectedMailid'] = [$versionMailSelected];
147 }
148 }
149
150 $mailClass = new MailClass();
151 if (count($data['selectedMailid']) == 1) {
152 $data['mailInformation'] = $mailClass->getOneById($data['selectedMailid'][0]);
153 $campaignClass = new CampaignClass();
154 $data['isAbTest'] = $campaignClass->isAbTestMail($data['selectedMailid'][0]);
155 }
156
157 if (!empty($data['selectedMailid'])) {
158 $this->generatedMailAdded = $mailClass->getAutomaticMailIds($data['selectedMailid']);
159 $data['selectedMailid'] = array_merge($data['selectedMailid'], $this->generatedMailAdded);
160 }
161 if (count($data['selectedMailid']) > 1) {
162 $this->multiLanguageMailAdded = $mailClass->getMultilingualMailIds($data['selectedMailid']);
163 $data['selectedMailid'] = array_merge($data['selectedMailid'], $this->multiLanguageMailAdded);
164 $data['no_click_map'] = true;
165 }
166
167 if (empty($data['selectedMailid'])) {
168 $this->selectedMailIds = [];
169 } else {
170 $this->selectedMailIds = $data['selectedMailid'];
171 }
172
173 acym_arrayToInteger($this->selectedMailIds);
174
175 return true;
176 }
177 }
178