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