PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.3.2
GiveWP – Donation Plugin and Fundraising Platform v4.3.2
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
201 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.0.0
86 */
87 public function registerGetDonations()
88 {
89 register_rest_route(
90 DonationRoute::NAMESPACE,
91 DonationRoute::DONATIONS,
92 [
93 [
94 'methods' => WP_REST_Server::READABLE,
95 'callback' => function (WP_REST_Request $request) {
96 return $this->donationRequestController->getDonations($request);
97 },
98 'permission_callback' => function (WP_REST_Request $request) {
99 return $this->permissionsCheck($request);
100 },
101 ],
102 'args' => [
103 'page' => [
104 'type' => 'integer',
105 'default' => 1,
106 'minimum' => 1,
107 ],
108 'per_page' => [
109 'type' => 'integer',
110 'default' => 30,
111 'minimum' => 1,
112 'maximum' => 100,
113 ],
114 'sort' => [
115 'type' => 'string',
116 'default' => 'id',
117 'enum' => [
118 'id',
119 'createdAt',
120 'updatedAt',
121 'status',
122 'amount',
123 'feeAmountRecovered',
124 'donorId',
125 'firstName',
126 'lastName',
127 ],
128 ],
129 'direction' => [
130 'type' => 'string',
131 'default' => 'DESC',
132 'enum' => ['ASC', 'DESC'],
133 ],
134 'mode' => [
135 'type' => 'string',
136 'default' => 'live',
137 'enum' => ['live', 'test'],
138 ],
139 'campaignId' => [
140 'type' => 'integer',
141 'default' => 0,
142 ],
143 'includeSensitiveData' => [
144 'type' => 'boolean',
145 'default' => false,
146 ],
147 'anonymousDonations' => [
148 'type' => 'string',
149 'default' => 'exclude',
150 'enum' => [
151 'exclude',
152 'include',
153 'redact',
154 ],
155 ],
156 ],
157 ]
158 );
159 }
160
161 /**
162 * @since 4.0.0
163 */
164 public function permissionsCheck(WP_REST_Request $request)
165 {
166 $isAdmin = current_user_can('manage_options');
167
168 $includeSensitiveData = $request->get_param('includeSensitiveData');
169 if ( ! $isAdmin && $includeSensitiveData) {
170 return new WP_Error(
171 'rest_forbidden',
172 esc_html__('You do not have permission to include sensitive data.', 'give'),
173 ['status' => $this->authorizationStatusCode()]
174 );
175 }
176
177 $donationAnonymousMode = new DonationAnonymousMode($request->get_param('anonymousDonations'));
178 if ( ! $isAdmin && $donationAnonymousMode->isIncluded()) {
179 return new WP_Error(
180 'rest_forbidden',
181 esc_html__('You do not have permission to include anonymous donations.', 'give'),
182 ['status' => $this->authorizationStatusCode()]
183 );
184 }
185
186 return true;
187 }
188
189 /**
190 * @since 4.0.0
191 */
192 public function authorizationStatusCode(): int
193 {
194 if (is_user_logged_in()) {
195 return 403;
196 }
197
198 return 401;
199 }
200 }
201