Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/fluentform/app/Modules/Entries/EntryQuery.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 +
3 + namespace FluentForm\App\Modules\Entries;
4 +
5 + class EntryQuery
6 + {
7 + /**
8 + * Request object
9 + *
10 + * @var \FluentForm\Framework\Request\Request $request
11 + */
12 + protected $request;
13 + protected $formModel;
14 + protected $responseModel;
15 +
16 + protected $formId = false;
17 +
18 + protected $per_page = 10;
19 + protected $page_number = 1;
20 + protected $status = false;
21 + protected $is_favourite = null;
22 + protected $sort_by = 'ASC';
23 + protected $search = false;
24 + protected $wheres = [];
25 +
26 + protected $startDate;
27 + protected $endDate;
28 +
29 + public function __construct()
30 + {
31 + $this->request = wpFluentForm('request');
32 + $this->formModel = wpFluent()->table('fluentform_forms');
33 + $this->responseModel = wpFluent()->table('fluentform_submissions');
34 + }
35 +
36 + public function getResponses()
37 + {
38 + $query = $this->responseModel
39 + ->where('form_id', $this->formId)
40 + ->orderBy('id', \FluentForm\App\Helpers\Helper::sanitizeOrderValue($this->sort_by));
41 +
42 + if ($this->per_page > 0) {
43 + $query = $query->limit($this->per_page);
44 + }
45 +
46 + if ($this->page_number > 0) {
47 + $query = $query->offset(($this->page_number - 1) * $this->per_page);
48 + }
49 +
50 + if ($this->is_favourite) {
51 + $query->where('is_favourite', $this->is_favourite);
52 + $query->where('status', '!=', 'trashed');
53 + } else {
54 + if (!$this->status) {
55 + $query->where('status', '!=', 'trashed');
56 + } else {
57 + $query->where('status', $this->status);
58 + }
59 + }
60 +
61 + if ($this->startDate && $this->endDate) {
62 + $endDate = $this->endDate;
63 + $endDate .= ' 23:59:59';
64 + $query->where('created_at', '>=', $this->startDate);
65 + $query->where('created_at', '<=', $endDate);
66 + }
67 +
68 + if ($this->search) {
69 + $searchString = $this->search;
70 + $query->where(function ($q) use ($searchString) {
71 + $q->where('id', 'LIKE', "%{$searchString}%")
72 + ->orWhere('response', 'LIKE', "%{$searchString}%")
73 + ->orWhere('status', 'LIKE', "%{$searchString}%")
74 + ->orWhere('created_at', 'LIKE', "%{$searchString}%");
75 + });
76 + }
77 +
78 + if ($this->wheres) {
79 + foreach ($this->wheres as $where) {
80 + if (is_array($where) && count($where) > 1) {
81 + if (count($where) > 2) {
82 + $column = $where[0];
83 + $operator = $where[1];
84 + $value = $where[2];
85 + } else {
86 + $column = $where[0];
87 + $operator = '=';
88 + $value = $where[1];
89 + }
90 + if (is_array($value)) {
91 + $query->whereIn($column, $value);
92 + } else {
93 + $query->where($column, $operator, $value);
94 + }
95 + }
96 + }
97 + }
98 +
99 + $total = $query->count();
100 + $responses = $query->get();
101 +
102 + $responses = apply_filters_deprecated(
103 + 'fluentform_get_raw_responses',
104 + [
105 + $responses,
106 + $this->formId
107 + ],
108 + FLUENTFORM_FRAMEWORK_UPGRADE,
109 + 'fluentform/get_raw_responses',
110 + 'Use fluentform/get_raw_responses instead of fluentform_get_raw_responses.'
111 + );
112 +
113 + $responses = apply_filters('fluentform/get_raw_responses', $responses, $this->formId);
114 +
115 + return [
116 + 'data' => $responses,
117 + 'paginate' => [
118 + 'total' => $total,
119 + 'per_page' => $this->per_page,
120 + 'current_page' => $this->page_number,
121 + 'last_page' => ceil($total / $this->per_page),
122 + ],
123 + ];
124 + }
125 +
126 + public function getResponse($entryId)
127 + {
128 + return wpFluent()->table('fluentform_submissions')->find($entryId);
129 + }
130 +
131 + public function getNextResponse($entryId)
132 + {
133 + $query = $this->getNextPrevEntryQuery();
134 +
135 + $operator = 'ASC' == $this->sort_by ? '>' : '<';
136 +
137 + return $query->select('id')
138 + ->where('id', $operator, $entryId)
139 + ->orderBy('id', \FluentForm\App\Helpers\Helper::sanitizeOrderValue($this->sort_by))
140 + ->first();
141 + }
142 +
143 + public function getPrevResponse($entryId)
144 + {
145 + $query = $this->getNextPrevEntryQuery();
146 +
147 + $operator = 'ASC' == $this->sort_by ? '<' : '>';
148 +
149 + $orderBy = 'ASC' == $this->sort_by ? 'DESC' : 'ASC';
150 +
151 + return $query->select('id')
152 + ->where('id', $operator, $entryId)
153 + ->orderBy('id', $orderBy)
154 + ->first();
155 + }
156 +
157 + protected function getNextPrevEntryQuery()
158 + {
159 + $query = wpFluent()->table('fluentform_submissions')->limit(1);
160 +
161 + if ($this->is_favourite) {
162 + $query->where('is_favourite', $this->is_favourite)->where('status', '!=', 'trashed');
163 + } else {
164 + if (!$this->status) {
165 + $query->where('status', '!=', 'trashed');
166 + } else {
167 + $query->where('status', $this->status);
168 + }
169 + }
170 +
171 + if ($this->search) {
172 + $query->where('response', 'LIKE', "%{$this->search}%");
173 + }
174 +
175 + return $query->where('form_id', $this->formId);
176 + }
177 +
178 + public function groupCount($form_id)
179 + {
180 + $statuses = $this->responseModel
181 + ->select($this->responseModel->raw('status, COUNT(*) as count'))
182 + ->where('form_id', $form_id)
183 + ->groupBy('status')
184 + ->get();
185 +
186 + $counts = [];
187 + foreach ($statuses as $status) {
188 + $counts[$status->status] = $status->count;
189 + }
190 +
191 + $counts['all'] = array_sum($counts);
192 + if (isset($counts['trashed'])) {
193 + $counts['all'] -= $counts['trashed'];
194 + }
195 +
196 + $favorites = wpFluent()
197 + ->table('fluentform_submissions')
198 + ->where('form_id', $form_id)
199 + ->where('is_favourite', 1)
200 + ->where('status', '!=', 'trashed')
201 + ->count();
202 +
203 + $counts['favourites'] = $favorites;
204 +
205 + return array_merge([
206 + 'unread' => 0,
207 + 'read' => 0,
208 + 'spam' => 0,
209 + 'trashed' => 0,
210 + ], $counts);
211 + }
212 + }
213 +