PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.27.2
GiveWP – Donation Plugin and Fundraising Platform v2.27.2
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 / Endpoints / ListDonationForms.php
give / src / DonationForms / Endpoints Last commit date
Endpoint.php 4 years ago FormActions.php 3 years ago ListDonationForms.php 3 years ago SwitchDonationFormView.php 4 years ago
ListDonationForms.php
230 lines
1 <?php
2
3 namespace Give\DonationForms\Endpoints;
4
5 use Give\DonationForms\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 ]
72 ],
73 'search' => [
74 'type' => 'string',
75 'required' => false
76 ],
77 'sortColumn' => [
78 'type' => 'string',
79 'required' => false,
80 'sanitize_callback' => 'sanitize_text_field',
81 ],
82 'sortDirection' => [
83 'type' => 'string',
84 'required' => false,
85 'enum' => [
86 'asc',
87 'desc'
88 ],
89 ],
90 'locale' => [
91 'type' => 'string',
92 'required' => false,
93 'default' => get_locale(),
94 ],
95 'return' => [
96 'type' => 'string',
97 'required' => false,
98 'default' => 'columns',
99 'enum' => [
100 'model',
101 'columns'
102 ],
103 ],
104 ],
105 ]
106 );
107 }
108
109 /**
110 * @since 2.24.0 Change this to use the new ListTable class
111 *
112 * @param WP_REST_Request $request
113 *
114 * @return WP_REST_Response
115 */
116 public function handleRequest(WP_REST_Request $request): WP_REST_Response
117 {
118 $this->request = $request;
119 $this->listTable = give(DonationFormsListTable::class);
120
121 $forms = $this->getForms();
122 $totalForms = $this->getTotalFormsCount();
123 $totalPages = (int)ceil($totalForms / $this->request->get_param('perPage'));
124
125 if ('model' === $this->request->get_param('return')) {
126 $items = $forms;
127 } else {
128 $this->listTable->items($forms, $this->request->get_param('locale') ?? '');
129 $items = $this->listTable->getItems();
130
131 foreach($items as &$item ) {
132 $item['name'] = get_the_title($item['id']);
133 $item['edit'] = get_edit_post_link($item['id'], 'edit');
134 $item['permalink'] = get_permalink($item['id']);
135 }
136 }
137
138 return new WP_REST_Response(
139 [
140 'items' => $items,
141 'totalItems' => $totalForms,
142 'totalPages' => $totalPages,
143 'trash' => defined('EMPTY_TRASH_DAYS') && EMPTY_TRASH_DAYS > 0,
144 ]
145 );
146 }
147
148 /**
149 * @since 2.24.0 Refactor to query through the ModelQueryBuilder
150 *
151 * @return array
152 */
153 public function getForms(): array
154 {
155 $page = $this->request->get_param('page');
156 $perPage = $this->request->get_param('perPage');
157 $sortColumns = $this->listTable->getSortColumnById($this->request->get_param('sortColumn') ?: 'id');
158 $sortDirection = $this->request->get_param('sortDirection') ?: 'desc';
159
160 $query = give()->donationForms->prepareQuery();
161 $query = $this->getWhereConditions($query);
162
163 foreach ($sortColumns as $sortColumn) {
164 $query->orderBy($sortColumn, $sortDirection);
165 }
166
167 $query->limit($perPage)
168 ->offset(($page - 1) * $perPage);
169
170 $donationForms = $query->getAll();
171
172 if (!$donationForms) {
173 return [];
174 }
175
176 return $donationForms;
177 }
178
179 /**
180 * @since 2.24.0 Refactor to query through the ModelQueryBuilder
181 *
182 * @return int
183 */
184 public function getTotalFormsCount(): int
185 {
186 $query = DB::table('posts')
187 ->where('post_type', 'give_forms');
188
189 $query = $this->getWhereConditions($query);
190
191 return $query->count();
192 }
193
194 /**
195 * @since 2.24.0
196 *
197 * @param QueryBuilder $query
198 *
199 * @return QueryBuilder
200 */
201 private function getWhereConditions(QueryBuilder $query): QueryBuilder
202 {
203 $search = $this->request->get_param('search');
204 $status = $this->request->get_param('status');
205
206 // Status
207 if ($status === 'any') {
208 $query->whereIn('post_status', ['publish', 'draft', 'pending', 'private']);
209 } else {
210 $query->where('post_status', $status);
211 }
212
213 // Search
214 if ($search) {
215 if (ctype_digit($search)) {
216 $query->where('ID', $search);
217 } else {
218 $searchTerms = array_map('trim', explode(' ', $search));
219 foreach ($searchTerms as $term) {
220 if ($term) {
221 $query->whereLike('post_title', $term);
222 }
223 }
224 }
225 }
226
227 return $query;
228 }
229 }
230