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 / Donors / Endpoints / DeleteDonor.php
give / src / Donors / Endpoints Last commit date
DeleteDonor.php 5 months ago Endpoint.php 5 months ago ListDonors.php 8 months ago ListDonorsStats.php 8 months ago SwitchDonorView.php 4 years ago
DeleteDonor.php
144 lines
1 <?php
2
3 namespace Give\Donors\Endpoints;
4
5 use Exception;
6 use Give\Donors\Models\Donor;
7 use Give\Framework\Permissions\Facades\UserPermissions;
8 use WP_Error;
9 use WP_REST_Request;
10 use WP_REST_Response;
11
12 class DeleteDonor extends Endpoint
13 {
14 /**
15 * @var string
16 */
17 protected $endpoint = 'admin/donors/delete';
18
19 /**
20 * @inheritDoc
21 */
22 public function registerRoute()
23 {
24 register_rest_route(
25 'give-api/v2',
26 $this->endpoint,
27 [
28 [
29 'methods' => 'DELETE',
30 'callback' => [$this, 'handleRequest'],
31 'permission_callback' => [$this, 'permissionsCheck'],
32 ],
33 'args' => [
34 'ids' => [
35 'type' => 'string',
36 'required' => true,
37 'validate_callback' => function ($ids) {
38 foreach ($this->splitString($ids) as $id) {
39 if ( ! $this->validateInt($id)) {
40 return false;
41 }
42 }
43
44 return true;
45 },
46 ],
47 'deleteDonationsAndRecords' => [
48 'type' => 'boolean',
49 'required' => 'false',
50 'default' => 'false',
51 ],
52 ],
53 ]
54 );
55 }
56
57 /**
58 * @since 4.14.0.0 replace permission callback logic with UserPermissions facade
59 * @since 4.3.1 updated permissions check
60 * @since 3.0.0 update validation to align with legacy view
61 * @since 2.25.2
62 *
63 * @inheritDoc
64 */
65 public function permissionsCheck()
66 {
67 if (UserPermissions::donors()->canDelete()) {
68 return true;
69 }
70
71 return new WP_Error(
72 'rest_forbidden',
73 __('You don\'t have permission to delete Donors', 'give'),
74 ['status' => $this->authorizationStatusCode()]
75 );
76 }
77
78 /**
79 * @since 2.20.0
80 * @since 2.23.1 Cast `$ids` as integers.
81 *
82 * @param WP_REST_Request $request
83 *
84 * @return WP_REST_Response
85 */
86 public function handleRequest(WP_REST_Request $request)
87 {
88 $ids = array_map('intval', $this->splitString($request->get_param('ids')));
89 $delete_donation = $request->get_param('deleteDonationsAndRecords');
90 $errors = $successes = [];
91
92 foreach ($ids as $id) {
93 try {
94 /**
95 * Fires before deleting donor.
96 *
97 * @since 2.20.0
98 *
99 * @param int $donor_id The ID of the donor.
100 * @param bool $delete_donor Confirm Donor Deletion.
101 * @param bool $delete_donation Confirm Donor related donations deletion.
102 */
103 do_action('give_pre_delete_donor', $id, true, $delete_donation);
104 $donor = Donor::find($id);
105 if ($delete_donation) {
106 foreach ($donor->donations as $donation) {
107 $donation->delete();
108 }
109 } else {
110 give_update_payment_meta($id, '_give_payment_donor_id', 0);
111 }
112 $donor->delete();
113 $successes[] = $id;
114 } catch (Exception $e) {
115 $errors[] = $id;
116 }
117 }
118
119 return new WP_REST_Response([
120 'errors' => $errors,
121 'successes' => $successes,
122 ]);
123 }
124
125
126 /**
127 * Split string
128 *
129 * @since 2.20.0
130 *
131 * @param string $ids
132 *
133 * @return string[]
134 */
135 protected function splitString($ids)
136 {
137 if (strpos($ids, ',')) {
138 return array_map('trim', explode(',', $ids));
139 }
140
141 return [trim($ids)];
142 }
143 }
144