PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / Donations / Endpoints / DonationActions.php
give / src / Donations / Endpoints Last commit date
DonationActions.php 5 months ago Endpoint.php 5 months ago ListDonations.php 8 months ago ListDonationsStats.php 9 months ago SwitchDonationView.php 4 years ago
DonationActions.php
232 lines
1 <?php
2
3 namespace Give\Donations\Endpoints;
4
5 use Exception;
6 use Give\Donations\Models\Donation;
7 use Give\Framework\Permissions\Facades\UserPermissions;
8 use WP_Error;
9 use WP_REST_Request;
10 use WP_REST_Response;
11
12 class DonationActions extends Endpoint
13 {
14 /**
15 * @var string
16 */
17 protected $endpoint = 'admin/donations/(?P<action>[\S]+)';
18
19 /**
20 * @inheritDoc
21 *
22 * @since 4.12.0 Remove force parameter from delete action and add trash and untrash actions
23 * @since 4.10.0 Add force parameter to delete action
24 */
25 public function registerRoute()
26 {
27 register_rest_route(
28 'give-api/v2',
29 $this->endpoint,
30 [
31 [
32 'methods' => ['POST', 'DELETE'],
33 'callback' => [$this, 'handleRequest'],
34 'permission_callback' => [$this, 'permissionsCheck'],
35 ],
36 'args' => [
37 'action' => [
38 'type' => 'string',
39 'required' => true,
40 'enum' => [
41 'delete',
42 'trash',
43 'untrash',
44 'setStatus',
45 'resendEmailReceipt',
46 ],
47 ],
48 'ids' => [
49 'type' => 'string',
50 'required' => true,
51 'validate_callback' => function ($ids) {
52 foreach ($this->splitString($ids) as $id) {
53 if (!$this->validateInt($id)) {
54 return false;
55 }
56 }
57
58 return true;
59 },
60 ],
61 'status' => [
62 'type' => 'string',
63 'required' => false,
64 'enum' => [
65 'publish', // Completed
66 'pending',
67 'processing',
68 'refunded',
69 'revoked',
70 'failed',
71 'cancelled',
72 'abandoned',
73 'preapproval',
74 ],
75 ],
76 ],
77 ]
78 );
79 }
80
81 /**
82 * @since 4.14.0 update permission capability to use facade
83 * @since 2.25.2
84 *
85 * @inheritDoc
86 */
87 public function permissionsCheck()
88 {
89 if (!UserPermissions::donations()->canEdit()) {
90 return new WP_Error(
91 'rest_forbidden',
92 __('You don\'t have permission to edit Donations', 'give'),
93 ['status' => $this->authorizationStatusCode()]
94 );
95 }
96
97 return true;
98 }
99
100 /**
101 * @since 4.14.0 update permission capability to use facade
102 * @since 4.12.0 Add trash and untrash actions
103 * @since 4.3.1 add permissions check for delete
104 * @since 2.20.0
105 *
106 * @param WP_REST_Request $request
107 *
108 * @return WP_Error
109 */
110 public function handleRequest(WP_REST_Request $request)
111 {
112 $ids = $this->splitString($request->get_param('ids'));
113 $errors = $successes = [];
114
115 switch ($request->get_param('action')) {
116 case 'delete':
117 if (!UserPermissions::donations()->canDelete()) {
118 return new WP_Error(
119 'rest_forbidden',
120 __('You don\'t have permission to delete Donation', 'give'),
121 ['status' => $this->authorizationStatusCode()]
122 );
123 }
124
125 foreach ($ids as $id) {
126 $donation = Donation::find($id);
127
128 if (!$donation) {
129 $errors[] = $id;
130 continue;
131 }
132
133 try {
134 $donation->delete();
135 $successes[] = $id;
136 } catch (Exception $e) {
137 $errors[] = $id;
138 }
139 }
140
141 break;
142
143 case 'trash':
144 foreach ($ids as $id) {
145 $donation = Donation::find($id);
146
147 if (!$donation) {
148 $errors[] = $id;
149 continue;
150 }
151
152 try {
153 $donation->trash();
154 $successes[] = $id;
155 } catch (Exception $e) {
156 $errors[] = $id;
157 }
158 }
159
160 break;
161
162 case 'untrash':
163 foreach ($ids as $id) {
164 $donation = Donation::find($id);
165
166 if (!$donation) {
167 $errors[] = $id;
168 continue;
169 }
170
171 try {
172 $donation->unTrash();
173 $successes[] = $id;
174 } catch (Exception $e) {
175 $errors[] = $id;
176 }
177 }
178
179 break;
180
181 case 'setStatus':
182 if (!UserPermissions::donations()->canEdit()) {
183 return new WP_Error(
184 'rest_forbidden',
185 __('You don\'t have permission to change donation statuses', 'give'),
186 ['status' => $this->authorizationStatusCode()]
187 );
188 }
189 foreach ($ids as $id) {
190 $updated = give_update_payment_status($id, $request->get_param('status'));
191 $updated ? $successes[] = $id : $errors[] = $id;
192 }
193
194 break;
195
196 case 'resendEmailReceipt':
197 foreach ($ids as $id) {
198 try {
199 do_action('give_donation-receipt_email_notification', $id);
200 $successes[] = $id;
201 } catch (Exception $e) {
202 $errors[] = $id;
203 }
204 }
205
206 break;
207 }
208
209 return new WP_REST_Response([
210 'errors' => $errors,
211 'successes' => $successes
212 ]);
213 }
214
215 /**
216 * Split string
217 *
218 * @param string $ids
219 * @since 2.20.0
220 *
221 * @return string[]
222 */
223 protected function splitString($ids)
224 {
225 if (strpos($ids, ',')) {
226 return array_map('trim', explode(',', $ids));
227 }
228
229 return [trim($ids)];
230 }
231 }
232