PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.0
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 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.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Permissions / Models / SubscriptionPermissionsController.php
surecart / app / src / Permissions / Models Last commit date
BalanceTransactionPermissionsController.php 3 years ago ChargePermissionsController.php 3 years ago CheckoutPermissionsController.php 3 years ago CustomerPermissionsController.php 2 years ago InvoicePermissionsController.php 3 years ago LicensePermissionsController.php 3 years ago MediaPermissionsController.php 3 years ago ModelPermissionsController.php 3 years ago OrderPermissionsController.php 3 years ago PaymentMethodPermissionsController.php 3 years ago PurchasePermissionsController.php 3 years ago RefundPermissionsController.php 3 years ago SubscriptionPermissionsController.php 2 years ago
SubscriptionPermissionsController.php
213 lines
1 <?php
2 namespace SureCart\Permissions\Models;
3
4 use SureCart\Models\Subscription;
5
6 /**
7 * Handle various permissions.
8 */
9 class SubscriptionPermissionsController extends ModelPermissionsController {
10 /**
11 * Subscription cancelation.
12 *
13 * @param \SureCart\Models\User $user User model.
14 * @param array $args {
15 * Arguments that accompany the requested capability check.
16 * @type string $0 Requested capability.
17 * @type int $1 Concerned user ID.
18 * @type mixed ...$2 The quantity to update.
19 * }
20 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
21 * and boolean values represent whether the user has that capability.
22 *
23 * @return boolean
24 */
25 public function cancel_sc_subscription( $user, $args, $allcaps ) {
26 if ( ! empty( $allcaps['edit_sc_subscriptions'] ) ) {
27 return true;
28 }
29
30 // It's disabled on the account.
31 if ( empty( \SureCart::account()->portal_protocol->subscription_cancellations_enabled ) ) {
32 return false;
33 }
34
35 // if we should delay cancellation.
36 $subscription = Subscription::find( $args[2] );
37 if ( $subscription->shouldDelayCancellation() ) {
38 return false;
39 }
40
41 return $this->belongsToUser( Subscription::class, $args[2], $user );
42 }
43
44 /**
45 * Subscription Update Quantity.
46 *
47 * @param \SureCart\Models\User $user User model.
48 * @param array $args {
49 * Arguments that accompany the requested capability check.
50 * @type string $0 Requested capability.
51 * @type int $1 Concerned user ID.
52 * @type mixed ...$2 The quantity to update.
53 * }
54 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
55 * and boolean values represent whether the user has that capability.
56 *
57 * @return boolean
58 */
59 public function update_sc_subscription_quantity( $user, $args, $allcaps ) {
60 if ( ! empty( $allcaps['edit_sc_subscriptions'] ) ) {
61 return true;
62 }
63
64 $subscription = Subscription::find( $args[2] );
65
66 if ( empty( \SureCart::account()->portal_protocol->subscription_quantity_updates_enabled ) ) {
67 $subscription = Subscription::find( $args[2] );
68 if ( is_wp_error( $subscription ) ) {
69 return false;
70 }
71
72 $quantity = $args[3];
73
74 // quantities don't match.
75 if ( $subscription->quantity !== $quantity ) {
76 return false;
77 }
78 }
79
80 return $this->belongsToUser( Subscription::class, $args[2], $user );
81 }
82
83 /**
84 * Subscription Switch.
85 *
86 * @param \SureCart\Models\User $user User model.
87 * @param array $args {
88 * Arguments that accompany the requested capability check.
89 * @type string $0 Requested capability.
90 * @type int $1 Concerned user ID.
91 * @type mixed ...$2 The quantity to update.
92 * }
93 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
94 * and boolean values represent whether the user has that capability.
95 * @return boolean
96 */
97 public function switch_sc_subscription( $user, $args, $allcaps ) {
98 if ( ! empty( $allcaps['edit_sc_subscriptions'] ) ) {
99 return true;
100 }
101
102 if ( empty( $args[2] ) ) {
103 return false;
104 }
105
106 // It's disabled on the account.
107 if ( empty( \SureCart::account()->portal_protocol->subscription_updates_enabled ) ) {
108 return false;
109 }
110
111 return $this->belongsToUser( Subscription::class, $args[2], $user );
112 }
113
114 /**
115 * Can user read.
116 *
117 * @param \SureCart\Models\User $user User model.
118 * @param array $args {
119 * Arguments that accompany the requested capability check.
120 * @type string $0 Requested capability.
121 * @type int $1 Concerned user ID.
122 * @type mixed ...$2 Optional second and further parameters, typically object ID.
123 * }
124 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
125 * and boolean values represent whether the user has that capability.
126 *
127 * @return boolean Does user have permission.
128 */
129 public function read_sc_subscription( $user, $args, $allcaps ) {
130 if ( ! empty( $allcaps['read_sc_subscriptions'] ) ) {
131 return true;
132 }
133 return $this->belongsToUser( Subscription::class, $args[2], $user );
134 }
135
136 /**
137 * Can user list.
138 *
139 * @param \SureCart\Models\User $user User model.
140 * @param array $args {
141 * Arguments that accompany the requested capability check.
142 * @type string $0 Requested capability.
143 * @type int $1 Concerned user ID.
144 * @type string[] ...$2 The ids to list.
145 * }
146 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
147 * and boolean values represent whether the user has that capability.
148 *
149 * @return boolean Does user have permission.
150 */
151 public function read_sc_subscriptions( $user, $args, $allcaps ) {
152 if ( ! empty( $allcaps['read_sc_subscriptions'] ) ) {
153 return true;
154 }
155 return $this->isListingOwnCustomerIds( $user, $args[2]['customer_ids'] ?? array() );
156 }
157
158 /**
159 * Can user edit.
160 *
161 * @param \SureCart\Models\User $user User model.
162 * @param array $args {
163 * Arguments that accompany the requested capability check.
164 * @type string $0 Requested capability.
165 * @type int $1 Concerned user ID.
166 * @type string $2 The id of the subscription.
167 * @type array ...$4 The data that is being requested to update.
168 * }
169 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
170 * and boolean values represent whether the user has that capability.
171 * @return boolean Does user have permission.
172 */
173 public function edit_sc_subscription( $user, $args, $allcaps ) {
174 // no user to check.
175 if ( empty( $user->ID ) ) {
176 return false;
177 }
178
179 // user is not a customer.
180 if ( ! $user->isCustomer() ) {
181 return false;
182 }
183
184 if ( ! empty( $allcaps['edit_sc_subscriptions'] ) ) {
185 return true;
186 }
187
188 // no data provided to update. Make sure to at least pass an empty array.
189 if ( is_null( $args[3] ?? null ) ) {
190 return false;
191 }
192
193 $params = $args[3];
194
195 // request has blacklisted keys.
196 if ( ! $this->requestOnlyHasKeys( $params, array( 'cancel_at_period_end', 'quantity', 'price', 'purge_pending_update', 'payment_method', 'cancellation_act', 'ad_hoc_amount', 'variant', 'discount' ) ) ) {
197 return false;
198 }
199
200 // check if they can modify price.
201 if ( ! empty( $params['price'] ) && ! $this->switch_sc_subscription( $user, $args, $allcaps ) ) {
202 return false;
203 }
204
205 // check if user can modify quantity.
206 if ( ! empty( $params['quantity'] ) && $params['quantity'] > 1 && ! $this->update_sc_subscription_quantity( $user, $args, $allcaps ) ) {
207 return false;
208 }
209
210 return $this->belongsToUser( Subscription::class, $args[2], $user );
211 }
212 }
213