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