Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/fluentform/app/Services/Report/ReportService.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
3
+
namespace FluentForm\App\Services\Report;
4
+
5
+
use Exception;
6
+
use FluentForm\App\Models\Form;
7
+
use FluentForm\App\Models\Submission;
8
+
use FluentForm\Framework\Helpers\ArrayHelper as Arr;
9
+
use FluentForm\Framework\Support\Sanitizer;
10
+
11
+
12
+
class ReportService
13
+
{
14
+
/**
15
+
* Get Form Report
16
+
* @param array $attr
17
+
* @return array|mixed $response
18
+
* @throws Exception
19
+
*/
20
+
public function form($attr = [])
21
+
{
22
+
$formId = (int) Arr::get($attr, 'form_id');
23
+
ReportHelper::maybeMigrateData($formId);
24
+
try {
25
+
$form = Form::findOrFail($formId);
26
+
} catch (Exception $e) {
27
+
throw new \Exception("The form couldn't be found.");
28
+
}
29
+
30
+
$statuses = Arr::get($attr, 'statuses', ['read', 'unread', 'unapproved', 'approved', 'declined', 'unconfirmed', 'confirmed']);
31
+
return ReportHelper::generateReport($form, $statuses);
32
+
}
33
+
34
+
/**
35
+
* Get Submissions Report
36
+
*
37
+
* @throws Exception
38
+
*/
39
+
public function submissions($args)
40
+
{
41
+
try {
42
+
return Submission::report($args);
43
+
} catch (Exception $e) {
44
+
throw new Exception(esc_html($e->getMessage()));
45
+
}
46
+
}
47
+
48
+
/**
49
+
* Get forms for dropdown
50
+
*
51
+
* @return array
52
+
*/
53
+
public function getFormsDropdown()
54
+
{
55
+
$forms = Form::select(['id', 'title', 'has_payment'])
56
+
->orderBy('id', 'DESC')
57
+
->get();
58
+
59
+
return [
60
+
'forms' => $forms
61
+
];
62
+
}
63
+
64
+
/**
65
+
* Get Overview Chart Data
66
+
*
67
+
* @param array $data
68
+
* @return array
69
+
*/
70
+
public function getOverviewChart($data)
71
+
{
72
+
$data = $this->sanitizeCommonParams($data);
73
+
$startDate = $data['start_date'];
74
+
$endDate = $data['end_date'];
75
+
$formId = $data['form_id'];
76
+
77
+
return [
78
+
'overview_chart' => ReportHelper::getOverviewChartData($startDate, $endDate, $formId, 'activity')
79
+
];
80
+
}
81
+
82
+
/**
83
+
* Get Revenue Chart Data
84
+
*
85
+
* @param array $data
86
+
* @return array
87
+
*/
88
+
public function getRevenueChart($data)
89
+
{
90
+
$data = $this->sanitizeCommonParams($data);
91
+
$startDate = $data['start_date'];
92
+
$endDate = $data['end_date'];
93
+
$formId = $data['form_id'];
94
+
95
+
return [
96
+
'revenue_chart' => ReportHelper::getOverviewChartData($startDate, $endDate, $formId, 'revenue')
97
+
];
98
+
}
99
+
100
+
101
+
/**
102
+
* Get Form Stats Data
103
+
*
104
+
* @param array $data
105
+
* @return array
106
+
*/
107
+
public function getFormStats($data)
108
+
{
109
+
$data = $this->sanitizeCommonParams($data);
110
+
$startDate = $data['start_date'];
111
+
$endDate = $data['end_date'];
112
+
$formId = $data['form_id'];
113
+
114
+
return [
115
+
'form_stats' => ReportHelper::getFormStats($startDate, $endDate, $formId)
116
+
];
117
+
}
118
+
119
+
120
+
/**
121
+
* Get API Logs Data
122
+
*
123
+
* @param array $data
124
+
* @return array
125
+
*/
126
+
public function getApiLogs($data)
127
+
{
128
+
$data = $this->sanitizeCommonParams($data);
129
+
$startDate = $data['start_date'];
130
+
$endDate = $data['end_date'];
131
+
$formId = $data['form_id'];
132
+
133
+
return [
134
+
'api_logs' => ReportHelper::getApiLogs($startDate, $endDate, $formId)
135
+
];
136
+
}
137
+
138
+
/**
139
+
* Get Top Performing Forms Data
140
+
*
141
+
* @param array $data
142
+
* @return array
143
+
*/
144
+
public function getTopPerformingForms($data)
145
+
{
146
+
$data = $this->sanitizeCommonParams($data);
147
+
$startDate = $data['start_date'];
148
+
$endDate = $data['end_date'];
149
+
$metric = Arr::get($data, 'metric', 'entries');
150
+
151
+
if (!in_array($metric, ['entries', 'payments', 'views'])) {
152
+
$metric = 'entries';
153
+
}
154
+
155
+
$result = ReportHelper::getTopPerformingForms($startDate, $endDate, $metric);
156
+
return [
157
+
'top_performing_forms' => Arr::get($result, 'data', []),
158
+
'disable_message' => Arr::get($result, 'disable_message', '')
159
+
];
160
+
}
161
+
162
+
163
+
public function getPaymentTypes($data)
164
+
{
165
+
$data = $this->sanitizeCommonParams($data);
166
+
167
+
$startDate = $data['start_date'];
168
+
$endDate = $data['end_date'];
169
+
$formId = $data['form_id'];
170
+
$data['payment_types'] = [
171
+
'subscription' => ReportHelper::getPaymentsByType($startDate, $endDate, 'subscription', $formId),
172
+
'onetime' => ReportHelper::getPaymentsByType($startDate, $endDate, 'onetime', $formId),
173
+
];
174
+
return $data;
175
+
}
176
+
177
+
/**
178
+
* Sanitize and prepare common parameters
179
+
*
180
+
* @param array $data
181
+
* @return array
182
+
*/
183
+
public function sanitizeCommonParams($data)
184
+
{
185
+
$data = Sanitizer::sanitize($data, [
186
+
'start_date' => 'sanitizeTextField',
187
+
'end_date' => 'sanitizeTextField',
188
+
'metric' => 'sanitizeTextField',
189
+
]);
190
+
191
+
$startDate = Arr::get($data, 'start_date');
192
+
$endDate = Arr::get($data, 'end_date');
193
+
$formId = intval(Arr::get($data, 'form_id'));
194
+
195
+
// Set default date range if not provided
196
+
if (!$startDate || !$endDate) {
197
+
$now = new \DateTime();
198
+
$endDate = $now->format('Y-m-d 23:59:59');
199
+
200
+
$thirtyDaysAgo = new \DateTime();
201
+
$thirtyDaysAgo->modify('-30 days');
202
+
$startDate = $thirtyDaysAgo->format('Y-m-d 00:00:00');
203
+
}
204
+
205
+
return [
206
+
'start_date' => $startDate,
207
+
'end_date' => $endDate,
208
+
'form_id' => $formId,
209
+
'metric' => Arr::get($data, 'metric', 'entries')
210
+
];
211
+
}
212
+
}
213
+