PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.15.1
GiveWP – Donation Plugin and Fundraising Platform v3.15.1
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 1 year ago FormActions.php 1 year ago ListDonationForms.php 2 years ago SwitchDonationFormView.php 3 years ago
ListDonationForms.php
234 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 3.2.0 added distinct() to the query
153 * @since 2.24.0 Refactor to query through the ModelQueryBuilder
154 *
155 * @return array
156 */
157 public function getForms(): array
158 {
159 $page = $this->request->get_param('page');
160 $perPage = $this->request->get_param('perPage');
161 $sortColumns = $this->listTable->getSortColumnById($this->request->get_param('sortColumn') ?: 'id');
162 $sortDirection = $this->request->get_param('sortDirection') ?: 'desc';
163
164 $query = give()->donationForms->prepareQuery();
165 $query = $this->getWhereConditions($query);
166
167 foreach ($sortColumns as $sortColumn) {
168 $query->orderBy($sortColumn, $sortDirection);
169 }
170
171 $query->limit($perPage)
172 ->offset(($page - 1) * $perPage);
173
174 $donationForms = $query->distinct()->getAll();
175
176 if ( ! $donationForms) {
177 return [];
178 }
179
180 return $donationForms;
181 }
182
183 /**
184 * @since 2.24.0 Refactor to query through the ModelQueryBuilder
185 *
186 * @return int
187 */
188 public function getTotalFormsCount(): int
189 {
190 $query = DB::table('posts')
191 ->where('post_type', 'give_forms');
192
193 $query = $this->getWhereConditions($query);
194
195 return $query->count();
196 }
197
198 /**
199 * @since 2.24.0
200 *
201 * @param QueryBuilder $query
202 *
203 * @return QueryBuilder
204 */
205 private function getWhereConditions(QueryBuilder $query): QueryBuilder
206 {
207 $search = $this->request->get_param('search');
208 $status = $this->request->get_param('status');
209
210 // Status
211 if ($status === 'any') {
212 $query->whereIn('post_status', ['publish', 'draft', 'pending', 'private', 'upgraded']);
213 } else {
214 $query->where('post_status', $status);
215 }
216
217 // Search
218 if ($search) {
219 if (ctype_digit($search)) {
220 $query->where('ID', $search);
221 } else {
222 $searchTerms = array_map('trim', explode(' ', $search));
223 foreach ($searchTerms as $term) {
224 if ($term) {
225 $query->whereLike('post_title', $term);
226 }
227 }
228 }
229 }
230
231 return $query;
232 }
233 }
234