PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.4
GiveWP – Donation Plugin and Fundraising Platform v3.0.4
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 / Donors / Endpoints / ListDonors.php
give / src / Donors / Endpoints Last commit date
DeleteDonor.php 2 years ago Endpoint.php 4 years ago ListDonors.php 3 years ago SwitchDonorView.php 4 years ago
ListDonors.php
243 lines
1 <?php
2
3 namespace Give\Donors\Endpoints;
4
5 use Give\Donors\ListTable\DonorsListTable;
6 use Give\Framework\Database\DB;
7 use Give\Framework\QueryBuilder\QueryBuilder;
8 use WP_REST_Request;
9 use WP_REST_Response;
10
11 class ListDonors extends Endpoint
12 {
13 /**
14 * @var string
15 */
16 protected $endpoint = 'admin/donors';
17
18 /**
19 * @var WP_REST_Request
20 */
21 protected $request;
22
23 /**
24 * @var DonorsListTable
25 */
26 protected $listTable;
27
28 /**
29 * @inheritDoc
30 */
31 public function registerRoute()
32 {
33 register_rest_route(
34 'give-api/v2',
35 $this->endpoint,
36 [
37 [
38 'methods' => 'GET',
39 'callback' => [$this, 'handleRequest'],
40 'permission_callback' => [$this, 'permissionsCheck'],
41 ],
42 'args' => [
43 'page' => [
44 'type' => 'integer',
45 'required' => false,
46 'default' => 1,
47 'minimum' => 1
48 ],
49 'perPage' => [
50 'type' => 'integer',
51 'required' => false,
52 'default' => 30,
53 'minimum' => 1
54 ],
55 'donations' => [
56 'type' => 'integer',
57 'required' => false,
58 'default' => 0
59 ],
60 'search' => [
61 'type' => 'string',
62 'required' => false
63 ],
64 'start' => [
65 'type' => 'string',
66 'required' => false,
67 'validate_callback' => [$this, 'validateDate']
68 ],
69 'form' => [
70 'type' => 'integer',
71 'required' => false,
72 'default' => 0
73 ],
74 'end' => [
75 'type' => 'string',
76 'required' => false,
77 'validate_callback' => [$this, 'validateDate']
78 ],
79 'sortColumn' => [
80 'type' => 'string',
81 'required' => false,
82 'sanitize_callback' => 'sanitize_text_field',
83 ],
84 'sortDirection' => [
85 'type' => 'string',
86 'required' => false,
87 'enum' => [
88 'asc',
89 'desc'
90 ],
91 ],
92 'locale' => [
93 'type' => 'string',
94 'required' => false,
95 'default' => get_locale(),
96 ],
97 'return' => [
98 'type' => 'string',
99 'required' => false,
100 'default' => 'columns',
101 'enum' => [
102 'model',
103 'columns'
104 ],
105 ],
106 ],
107 ]
108 );
109 }
110
111 /**
112 * @since 2.24.0 Change this to use the new ListTable class
113 * @since 2.20.0
114 *
115 * @param WP_REST_Request $request
116 *
117 * @return WP_REST_Response
118 */
119 public function handleRequest(WP_REST_Request $request): WP_REST_Response
120 {
121 $this->request = $request;
122 $this->listTable = give(DonorsListTable::class);
123
124 $donors = $this->getDonors();
125 $donorsCount = $this->getTotalDonorsCount();
126 $pageCount = (int)ceil($donorsCount / $request->get_param('perPage'));
127
128 if ('model' === $this->request->get_param('return')) {
129 $items = $donors;
130 } else {
131 $this->listTable->items($donors, $this->request->get_param('locale') ?? '');
132 $items = $this->listTable->getItems();
133 }
134
135 return new WP_REST_Response(
136 [
137 'items' => $items,
138 'totalItems' => $donorsCount,
139 'totalPages' => $pageCount
140 ]
141 );
142 }
143
144 /**
145 * @since 2.24.0 Replace Query Builder with Donors model
146 * @since 2.21.0
147 *
148 * @return array
149 */
150 public function getDonors(): array
151 {
152 $page = $this->request->get_param('page');
153 $perPage = $this->request->get_param('perPage');
154 $sortColumns = $this->listTable->getSortColumnById($this->request->get_param('sortColumn') ?: 'id');
155 $sortDirection = $this->request->get_param('sortDirection') ?: 'desc';
156
157 $query = give()->donors->prepareQuery();
158 $query = $this->getWhereConditions($query);
159
160 foreach ($sortColumns as $sortColumn) {
161 $query->orderBy($sortColumn, $sortDirection);
162 }
163
164 $query->limit($perPage)
165 ->offset(($page - 1) * $perPage);
166
167 $donors = $query->getAll();
168
169 if (!$donors) {
170 return [];
171 }
172
173 return $donors;
174 }
175
176 /**
177 * @since 2.24.0 Replace Query Builder with Donors model
178 * @since 2.21.0
179 *
180 * @return int
181 */
182 public function getTotalDonorsCount(): int
183 {
184 $query = DB::table('give_donors');
185 $query = $this->getWhereConditions($query);
186
187 return $query->count();
188 }
189
190 /**
191 * @since 2.24.0 Replace Query Builder with Donors model
192 * @since 2.21.0
193 *
194 * @param QueryBuilder $query
195 *
196 * @return QueryBuilder
197 */
198 private function getWhereConditions(QueryBuilder $query): QueryBuilder
199 {
200 $search = $this->request->get_param('search');
201 $start = $this->request->get_param('start');
202 $end = $this->request->get_param('end');
203 $form = $this->request->get_param('form');
204
205 if ($search) {
206 if (ctype_digit($search)) {
207 $query->where('id', $search);
208 } else {
209 $query->whereLike('name', $search);
210 $query->orWhereLike('email', $search);
211 }
212 }
213
214 if ($start && $end) {
215 $query->whereBetween('date_created', $start, $end);
216 } else if ($start) {
217 $query->where('date_created', $start, '>=');
218 } else if ($end) {
219 $query->where('date_created', $end, '<=');
220 }
221
222 if ($form) {
223 $query
224 ->whereIn('id', static function (QueryBuilder $builder) use ($form) {
225 $builder
226 ->from('give_donationmeta')
227 ->distinct()
228 ->select('meta_value')
229 ->where('meta_key', '_give_payment_donor_id')
230 ->whereIn('donation_id', static function (QueryBuilder $builder) use ($form) {
231 $builder
232 ->from('give_donationmeta')
233 ->select('donation_id')
234 ->where('meta_key', '_give_payment_form_id')
235 ->where('meta_value', $form);
236 });
237 });
238 }
239
240 return $query;
241 }
242 }
243