PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.10.1
GiveWP – Donation Plugin and Fundraising Platform v4.10.1
4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 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 11 months ago Endpoint.php 1 year ago ListDonations.php 11 months ago ListDonationsStats.php 11 months ago SwitchDonationView.php 4 years ago
DonationActions.php
204 lines
1 <?php
2
3 namespace Give\Donations\Endpoints;
4
5 use Exception;
6 use Give\Donations\Models\Donation;
7 use WP_Error;
8 use WP_REST_Request;
9 use WP_REST_Response;
10
11 class DonationActions extends Endpoint
12 {
13 /**
14 * @var string
15 */
16 protected $endpoint = 'admin/donations/(?P<action>[\S]+)';
17
18 /**
19 * @inheritDoc
20 *
21 * @since 4.10.0 Add force parameter to delete action
22 */
23 public function registerRoute()
24 {
25 register_rest_route(
26 'give-api/v2',
27 $this->endpoint,
28 [
29 [
30 'methods' => ['POST', 'DELETE'],
31 'callback' => [$this, 'handleRequest'],
32 'permission_callback' => [$this, 'permissionsCheck'],
33 ],
34 'args' => [
35 'action' => [
36 'type' => 'string',
37 'required' => true,
38 'enum' => [
39 'delete',
40 'setStatus',
41 'resendEmailReceipt',
42 ],
43 ],
44 'force' => [
45 'type' => 'boolean',
46 'default' => false,
47 'description' => 'Whether to permanently delete (force=true) or move to trash (force=false, default).',
48 ],
49 'ids' => [
50 'type' => 'string',
51 'required' => true,
52 'validate_callback' => function ($ids) {
53 foreach ($this->splitString($ids) as $id) {
54 if (!$this->validateInt($id)) {
55 return false;
56 }
57 }
58
59 return true;
60 },
61 ],
62 'status' => [
63 'type' => 'string',
64 'required' => false,
65 'enum' => [
66 'publish', // Completed
67 'pending',
68 'processing',
69 'refunded',
70 'revoked',
71 'failed',
72 'cancelled',
73 'abandoned',
74 'preapproval',
75 ],
76 ],
77 ],
78 ]
79 );
80 }
81
82 /**
83 * @since 2.25.2
84 *
85 * @inheritDoc
86 */
87 public function permissionsCheck()
88 {
89 if (!current_user_can('edit_give_payments')) {
90 return new WP_Error(
91 'rest_forbidden',
92 esc_html__('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.10.0 Add force parameter to delete action
102 * @since 4.3.1 add permissions check for delete
103 * @since 2.20.0
104 *
105 * @param WP_REST_Request $request
106 *
107 * @return WP_Error
108 */
109 public function handleRequest(WP_REST_Request $request)
110 {
111 $ids = $this->splitString($request->get_param('ids'));
112 $errors = $successes = [];
113
114 switch ($request->get_param('action')) {
115 case 'delete':
116 if (!current_user_can('delete_give_payments')) {
117 return new WP_Error(
118 'rest_forbidden',
119 esc_html__('You don\'t have permission to delete Donations', 'give'),
120 ['status' => $this->authorizationStatusCode()]
121 );
122 }
123 foreach ($ids as $id) {
124 try {
125 $donation = Donation::find($id);
126
127 if (!$donation) {
128 return new WP_REST_Response(['message' => __('Donation not found', 'give')], 404);
129 }
130
131 if ($request->get_param('force')) {
132 $deleted = $donation->delete(); // Permanently delete the donation
133
134 if (!$deleted) {
135 return new WP_REST_Response(['message' => __('Failed to delete donation', 'give')], 500);
136 }
137 } else {
138 $trashed = $donation->trash(); // Move the donation to trash (soft delete)
139
140 if (!$trashed) {
141 return new WP_REST_Response(['message' => __('Failed to trash donation', 'give')], 500);
142 }
143 }
144
145 $successes[] = $id;
146 } catch (Exception $e) {
147 $errors[] = $id;
148 }
149 }
150
151 break;
152
153 case 'setStatus':
154 if (!current_user_can('view_give_payments')) {
155 return new WP_Error(
156 'rest_forbidden',
157 esc_html__('You don\'t have permission to change donation statuses', 'give'),
158 ['status' => $this->authorizationStatusCode()]
159 );
160 }
161 foreach ($ids as $id) {
162 $updated = give_update_payment_status($id, $request->get_param('status'));
163 $updated ? $successes[] = $id : $errors[] = $id;
164 }
165
166 break;
167
168 case 'resendEmailReceipt':
169 foreach ($ids as $id) {
170 try {
171 do_action('give_donation-receipt_email_notification', $id);
172 $successes[] = $id;
173 } catch (Exception $e) {
174 $errors[] = $id;
175 }
176 }
177
178 break;
179 }
180
181 return new WP_REST_Response([
182 'errors' => $errors,
183 'successes' => $successes
184 ]);
185 }
186
187 /**
188 * Split string
189 *
190 * @param string $ids
191 * @since 2.20.0
192 *
193 * @return string[]
194 */
195 protected function splitString($ids)
196 {
197 if (strpos($ids, ',')) {
198 return array_map('trim', explode(',', $ids));
199 }
200
201 return [trim($ids)];
202 }
203 }
204