PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.4.0
GiveWP – Donation Plugin and Fundraising Platform v4.4.0
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 / API / REST / V3 / Routes / Donations / RegisterDonationRoutes.php
give / src / API / REST / V3 / Routes / Donations Last commit date
ValueObjects 1 year ago RegisterDonationRoutes.php 1 year ago
RegisterDonationRoutes.php
226 lines
1 <?php
2
3 namespace Give\API\REST\V3\Routes\Donations;
4
5 use Give\API\REST\V3\Routes\Donations\ValueObjects\DonationAnonymousMode;
6 use Give\API\REST\V3\Routes\Donations\ValueObjects\DonationRoute;
7 use Give\Donations\Controllers\DonationRequestController;
8 use WP_Error;
9 use WP_REST_Request;
10 use WP_REST_Server;
11
12 /**
13 * @since 4.0.0
14 */
15 class RegisterDonationRoutes
16 {
17 /**
18 * @var DonationRequestController
19 */
20 protected $donationRequestController;
21
22 /**
23 * @since 4.0.0
24 */
25 public function __construct(DonationRequestController $donationRequestController)
26 {
27 $this->donationRequestController = $donationRequestController;
28 }
29
30 /**
31 * @since 4.0.0
32 */
33 public function __invoke()
34 {
35 $this->registerGetDonation();
36 $this->registerGetDonations();
37 }
38
39 /**
40 * Get Donation route
41 *
42 * @since 4.0.0
43 */
44 public function registerGetDonation()
45 {
46 register_rest_route(
47 DonationRoute::NAMESPACE,
48 DonationRoute::DONATION,
49 [
50 [
51 'methods' => WP_REST_Server::READABLE,
52 'callback' => function (WP_REST_Request $request) {
53 return $this->donationRequestController->getDonation($request);
54 },
55 'permission_callback' => function (WP_REST_Request $request) {
56 return $this->permissionsCheck($request);
57 },
58 ],
59 'args' => [
60 'id' => [
61 'type' => 'integer',
62 'required' => true,
63 ],
64 'includeSensitiveData' => [
65 'type' => 'boolean',
66 'default' => false,
67 ],
68 'anonymousDonations' => [
69 'type' => 'string',
70 'default' => 'exclude',
71 'enum' => [
72 'exclude',
73 'include',
74 'redact',
75 ],
76 ],
77 ],
78 ]
79 );
80 }
81
82 /**
83 * Get Donations route
84 *
85 * @since 4.4.0 add status parameter.
86 * @since 4.0.0
87 */
88 public function registerGetDonations()
89 {
90 register_rest_route(
91 DonationRoute::NAMESPACE,
92 DonationRoute::DONATIONS,
93 [
94 [
95 'methods' => WP_REST_Server::READABLE,
96 'callback' => function (WP_REST_Request $request) {
97 return $this->donationRequestController->getDonations($request);
98 },
99 'permission_callback' => function (WP_REST_Request $request) {
100 return $this->permissionsCheck($request);
101 },
102 ],
103 'args' => [
104 'page' => [
105 'type' => 'integer',
106 'default' => 1,
107 'minimum' => 1,
108 ],
109 'per_page' => [
110 'type' => 'integer',
111 'default' => 30,
112 'minimum' => 1,
113 'maximum' => 100,
114 ],
115 'sort' => [
116 'type' => 'string',
117 'default' => 'id',
118 'enum' => [
119 'id',
120 'createdAt',
121 'updatedAt',
122 'status',
123 'amount',
124 'feeAmountRecovered',
125 'donorId',
126 'firstName',
127 'lastName',
128 ],
129 ],
130 'direction' => [
131 'type' => 'string',
132 'default' => 'DESC',
133 'enum' => ['ASC', 'DESC'],
134 ],
135 'mode' => [
136 'type' => 'string',
137 'default' => 'live',
138 'enum' => ['live', 'test'],
139 ],
140 'status' => [
141 'type' => 'array',
142 'items' => [
143 'type' => 'string',
144 'enum' => [
145 'any',
146 'publish',
147 'give_subscription',
148 'pending',
149 'processing',
150 'refunded',
151 'revoked',
152 'failed',
153 'cancelled',
154 'abandoned',
155 'preapproval'
156 ],
157 ],
158 'default' => ['any'],
159 ],
160 'campaignId' => [
161 'type' => 'integer',
162 'default' => 0,
163 ],
164 'donorId' => [
165 'type' => 'integer',
166 'default' => 0,
167 ],
168 'includeSensitiveData' => [
169 'type' => 'boolean',
170 'default' => false,
171 ],
172 'anonymousDonations' => [
173 'type' => 'string',
174 'default' => 'exclude',
175 'enum' => [
176 'exclude',
177 'include',
178 'redact',
179 ],
180 ],
181 ],
182 ]
183 );
184 }
185
186 /**
187 * @since 4.0.0
188 */
189 public function permissionsCheck(WP_REST_Request $request)
190 {
191 $isAdmin = current_user_can('manage_options');
192
193 $includeSensitiveData = $request->get_param('includeSensitiveData');
194 if ( ! $isAdmin && $includeSensitiveData) {
195 return new WP_Error(
196 'rest_forbidden',
197 esc_html__('You do not have permission to include sensitive data.', 'give'),
198 ['status' => $this->authorizationStatusCode()]
199 );
200 }
201
202 $donationAnonymousMode = new DonationAnonymousMode($request->get_param('anonymousDonations'));
203 if ( ! $isAdmin && $donationAnonymousMode->isIncluded()) {
204 return new WP_Error(
205 'rest_forbidden',
206 esc_html__('You do not have permission to include anonymous donations.', 'give'),
207 ['status' => $this->authorizationStatusCode()]
208 );
209 }
210
211 return true;
212 }
213
214 /**
215 * @since 4.0.0
216 */
217 public function authorizationStatusCode(): int
218 {
219 if (is_user_logged_in()) {
220 return 403;
221 }
222
223 return 401;
224 }
225 }
226