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