PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.13.0
GiveWP – Donation Plugin and Fundraising Platform v4.13.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 / DonationForms / Routes / Permissions / DonationFormPermissions.php
give / src / DonationForms / Routes / Permissions Last commit date
DonationFormPermissions.php 9 months ago
DonationFormPermissions.php
121 lines
1 <?php
2
3 namespace Give\DonationForms\Routes\Permissions;
4
5 use Give\DonationForms\ValueObjects\DonationFormStatus;
6 use WP_Error;
7 use WP_REST_Request;
8
9 /**
10 * @since 4.10.1
11 */
12 class DonationFormPermissions
13 {
14 /**
15 * Check if current user can edit donation forms.
16 *
17 * @since 4.10.1
18 */
19 public static function canEdit(): bool
20 {
21 return current_user_can('manage_options') ||
22 current_user_can('edit_give_forms');
23 }
24
25 /**
26 * Check if current user can view private/draft donation forms.
27 *
28 * @since 4.10.1
29 */
30 public static function canViewPrivate(): bool
31 {
32 return current_user_can('manage_options') ||
33 current_user_can('edit_give_forms');
34 }
35
36 /**
37 * @since 4.10.1
38 */
39 public static function authorizationStatusCode(): int
40 {
41 return is_user_logged_in() ? 403 : 401;
42 }
43
44 /**
45 * Validate donation form access permissions for GET items (collections).
46 *
47 * @since 4.10.1
48 *
49 * @param WP_REST_Request $request
50 *
51 * @return true|WP_Error
52 */
53 public static function validationForGetItems(WP_REST_Request $request)
54 {
55 $status = $request->get_param('status');
56
57 // If no status is specified, allow access (defaults to published forms)
58 if (empty($status)) {
59 return true;
60 }
61
62 // Convert single status to array for consistent handling
63 if (!is_array($status)) {
64 $status = [$status];
65 }
66
67 // Check if user is trying to access any non-published forms
68 $hasNonPublishedStatus = !empty(array_filter($status, function($formStatus) {
69 return $formStatus !== DonationFormStatus::PUBLISHED;
70 }));
71
72 if ($hasNonPublishedStatus && !self::canViewPrivate()) {
73 return new WP_Error(
74 'rest_forbidden',
75 esc_html__('You do not have permission to view private, draft, or trashed donation forms.', 'give'),
76 ['status' => self::authorizationStatusCode()]
77 );
78 }
79
80 return true;
81 }
82
83 /**
84 * Validate donation form access permissions for individual form GET method.
85 *
86 * @since 4.10.1
87 *
88 * @param WP_REST_Request $request
89 *
90 * @return true|WP_Error
91 */
92 public static function validationForGetItem(WP_REST_Request $request)
93 {
94 // Individual form access validation is handled in the controller
95 // where we can access the actual form data and its status
96 return true;
97 }
98
99 /**
100 * Validate donation form access permissions for associate forms with campaign.
101 *
102 * @since 4.10.1
103 *
104 * @param WP_REST_Request $request
105 *
106 * @return true|WP_Error
107 */
108 public static function validationForAssociateForms(WP_REST_Request $request)
109 {
110 if (!self::canEdit()) {
111 return new WP_Error(
112 'rest_forbidden',
113 esc_html__('You do not have permission to associate forms with campaigns.', 'give'),
114 ['status' => self::authorizationStatusCode()]
115 );
116 }
117
118 return true;
119 }
120 }
121