PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.0.5
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.0.5
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 11.0.5, at back/Controllers/StatsController.php

178 lines 6.0 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 $tasksToStore = [
50 'globalStats',
51 'detailedStats',
52 'clickMap',
53 'linksDetails',
54 'userClickDetails',
55 'statsByList',
56 ];
57
58 $statsTask = acym_getVar('string', 'stats_task', '', 'SESSION');
59 if ($this->taskCalled === 'listing' && empty($statsTask)) {
60 return 'globalStats';
61 }
62
63 if ((empty($this->taskCalled) || $this->taskCalled === 'listing') && !empty($statsTask) && in_array($statsTask, $tasksToStore)) {
64 return $statsTask;
65 }
66
67 if (!empty($this->taskCalled) && !in_array($this->taskCalled, $tasksToStore) && method_exists($this, $this->taskCalled)) {
68 return $this->taskCalled;
69 } elseif (!empty($this->taskCalled) && $this->taskCalled != 'listing' && in_array($this->taskCalled, $tasksToStore)) {
70 acym_setSession('stats_task', $this->taskCalled);
71
72 return $task;
73 } elseif (!empty($statsTask) && method_exists($this, $statsTask)) {
74 return $statsTask;
75 } else {
76 return $this->defaulttask;
77 }
78 }
79
80 public function searchSentMail(): void
81 {
82 $idsSelected = acym_getVar('string', 'id', '');
83 if (!empty($idsSelected)) {
84 $idsSelected = explode(',', $idsSelected);
85 $mailClass = new MailClass();
86 $mails = $mailClass->getByIds($idsSelected);
87 $data = [];
88 if (!empty($mails)) {
89 $mails = $mailClass->decode($mails);
90 foreach ($mails as $mail) {
91 $data[] = [
92 'value' => $mail->id,
93 'text' => $mail->name,
94 ];
95 }
96 }
97
98 echo json_encode($data);
99 exit;
100 }
101
102 $return = [];
103 $search = acym_getVar('string', 'search', '');
104
105 $mailStatClass = new MailStatClass();
106 $mails = $mailStatClass->getAllMailsForStats($search);
107
108 foreach ($mails as $oneMail) {
109 $return[] = [$oneMail->id, $oneMail->name];
110 }
111
112 echo json_encode($return);
113 exit;
114 }
115
116 public function prepareDefaultPageInfo(array &$data, bool $needMailId = false): bool
117 {
118 $data['workflowHelper'] = new WorkflowHelper();
119
120 //If we unselect all email in the dropdown the getVarFiltersListing is not resetting correctly the selected mails ids
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