Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/fluentform/app/Services/Report/ReportService.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
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 +