PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.1.0
GiveWP – Donation Plugin and Fundraising Platform v3.1.0
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / DonationForms / V2 / Endpoints / ListDonationForms.php
give / src / DonationForms / V2 / Endpoints Last commit date
Endpoint.php 3 years ago FormActions.php 3 years ago ListDonationForms.php 2 years ago SwitchDonationFormView.php 3 years ago
ListDonationForms.php
233 lines
1 <?php
2
3 namespace Give\DonationForms\V2\Endpoints;
4
5 use Give\DonationForms\V2\ListTable\DonationFormsListTable;
6 use Give\Framework\Database\DB;
7 use Give\Framework\QueryBuilder\QueryBuilder;
8 use WP_REST_Request;
9 use WP_REST_Response;
10
11 /**
12 * @since 2.19.0
13 */
14 class ListDonationForms extends Endpoint
15 {
16 /**
17 * @var string
18 */
19 protected $endpoint = 'admin/forms';
20
21 /**
22 * @var WP_REST_Request
23 */
24 private $request;
25
26 /**
27 * @var DonationFormsListTable
28 */
29 protected $listTable;
30
31 /**
32 * @inheritDoc
33 */
34 public function registerRoute()
35 {
36 register_rest_route(
37 'give-api/v2',
38 $this->endpoint,
39 [
40 [
41 'methods' => 'GET',
42 'callback' => [$this, 'handleRequest'],
43 'permission_callback' => [$this, 'permissionsCheck'],
44 ],
45 'args' => [
46 'page' => [
47 'type' => 'integer',
48 'required' => false,
49 'default' => 1,
50 'minimum' => 1,
51 ],
52 'perPage' => [
53 'type' => 'integer',
54 'required' => false,
55 'default' => 30,
56 'minimum' => 1,
57 ],
58 'status' => [
59 'type' => 'string',
60 'required' => false,
61 'default' => 'any',
62 'enum' => [
63 'publish',
64 'future',
65 'draft',
66 'pending',
67 'trash',
68 'auto-draft',
69 'inherit',
70 'any',
71 'upgraded',
72 ],
73 ],
74 'search' => [
75 'type' => 'string',
76 'required' => false,
77 ],
78 'sortColumn' => [
79 'type' => 'string',
80 'required' => false,
81 'sanitize_callback' => 'sanitize_text_field',
82 ],
83 'sortDirection' => [
84 'type' => 'string',
85 'required' => false,
86 'enum' => [
87 'asc',
88 'desc',
89 ],
90 ],
91 'locale' => [
92 'type' => 'string',
93 'required' => false,
94 'default' => get_locale(),
95 ],
96 'return' => [
97 'type' => 'string',
98 'required' => false,
99 'default' => 'columns',
100 'enum' => [
101 'model',
102 'columns',
103 ],
104 ],
105 ],
106 ]
107 );
108 }
109
110 /**
111 * @since 2.24.0 Change this to use the new ListTable class
112 *
113 * @param WP_REST_Request $request
114 *
115 * @return WP_REST_Response
116 */
117 public function handleRequest(WP_REST_Request $request): WP_REST_Response
118 {
119 $this->request = $request;
120 $this->listTable = give(DonationFormsListTable::class);
121
122 $forms = $this->getForms();
123 $totalForms = $this->getTotalFormsCount();
124 $totalPages = (int)ceil($totalForms / $this->request->get_param('perPage'));
125
126 if ('model' === $this->request->get_param('return')) {
127 $items = $forms;
128 } else {
129 $this->listTable->items($forms, $this->request->get_param('locale') ?? '');
130 $items = $this->listTable->getItems();
131
132 foreach ($items as $i => &$item) {
133 $item['name'] = get_the_title($item['id']);
134 $item['edit'] = get_edit_post_link($item['id'], 'edit');
135 $item['permalink'] = get_permalink($item['id']);
136 $item['v3form'] = (bool)give_get_meta($item['id'], 'formBuilderSettings');
137 $item['status_raw'] = $forms[$i]->status->getValue();
138 }
139 }
140
141 return new WP_REST_Response(
142 [
143 'items' => $items,
144 'totalItems' => $totalForms,
145 'totalPages' => $totalPages,
146 'trash' => defined('EMPTY_TRASH_DAYS') && EMPTY_TRASH_DAYS > 0,
147 ]
148 );
149 }
150
151 /**
152 * @since 2.24.0 Refactor to query through the ModelQueryBuilder
153 *
154 * @return array
155 */
156 public function getForms(): array
157 {
158 $page = $this->request->get_param('page');
159 $perPage = $this->request->get_param('perPage');
160 $sortColumns = $this->listTable->getSortColumnById($this->request->get_param('sortColumn') ?: 'id');
161 $sortDirection = $this->request->get_param('sortDirection') ?: 'desc';
162
163 $query = give()->donationForms->prepareQuery();
164 $query = $this->getWhereConditions($query);
165
166 foreach ($sortColumns as $sortColumn) {
167 $query->orderBy($sortColumn, $sortDirection);
168 }
169
170 $query->limit($perPage)
171 ->offset(($page - 1) * $perPage);
172
173 $donationForms = $query->getAll();
174
175 if ( ! $donationForms) {
176 return [];
177 }
178
179 return $donationForms;
180 }
181
182 /**
183 * @since 2.24.0 Refactor to query through the ModelQueryBuilder
184 *
185 * @return int
186 */
187 public function getTotalFormsCount(): int
188 {
189 $query = DB::table('posts')
190 ->where('post_type', 'give_forms');
191
192 $query = $this->getWhereConditions($query);
193
194 return $query->count();
195 }
196
197 /**
198 * @since 2.24.0
199 *
200 * @param QueryBuilder $query
201 *
202 * @return QueryBuilder
203 */
204 private function getWhereConditions(QueryBuilder $query): QueryBuilder
205 {
206 $search = $this->request->get_param('search');
207 $status = $this->request->get_param('status');
208
209 // Status
210 if ($status === 'any') {
211 $query->whereIn('post_status', ['publish', 'draft', 'pending', 'private', 'upgraded']);
212 } else {
213 $query->where('post_status', $status);
214 }
215
216 // Search
217 if ($search) {
218 if (ctype_digit($search)) {
219 $query->where('ID', $search);
220 } else {
221 $searchTerms = array_map('trim', explode(' ', $search));
222 foreach ($searchTerms as $term) {
223 if ($term) {
224 $query->whereLike('post_title', $term);
225 }
226 }
227 }
228 }
229
230 return $query;
231 }
232 }
233