PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
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
ActivationPermissionsController.php 2 years ago BalanceTransactionPermissionsController.php 3 years ago ChargePermissionsController.php 3 years ago CheckoutPermissionsController.php 1 year ago CustomerPermissionsController.php 2 years ago InvoicePermissionsController.php 3 years ago LicensePermissionsController.php 3 years ago MediaPermissionsController.php 3 years ago ModelPermissionsController.php 1 year 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
241 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 restoring.
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 restore_sc_subscription( $user, $args, $allcaps ) {
60 if ( ! empty( $allcaps['edit_sc_subscriptions'] ) ) {
61 return true;
62 }
63
64 return $this->belongsToUser( Subscription::class, $args[2], $user );
65 }
66
67 /**
68 * Subscription Update Quantity.
69 *
70 * @param \SureCart\Models\User $user User model.
71 * @param array $args {
72 * Arguments that accompany the requested capability check.
73 * @type string $0 Requested capability.
74 * @type int $1 Concerned user ID.
75 * @type mixed ...$2 The quantity to update.
76 * }
77 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
78 * and boolean values represent whether the user has that capability.
79 *
80 * @return boolean
81 */
82 public function update_sc_subscription_quantity( $user, $args, $allcaps ) {
83 if ( ! empty( $allcaps['edit_sc_subscriptions'] ) ) {
84 return true;
85 }
86
87 $subscription = Subscription::find( $args[2] );
88
89 if ( empty( \SureCart::account()->portal_protocol->subscription_quantity_updates_enabled ) ) {
90 $subscription = Subscription::find( $args[2] );
91 if ( is_wp_error( $subscription ) ) {
92 return false;
93 }
94
95 $quantity = $args[3];
96
97 // quantities don't match.
98 if ( $subscription->quantity !== $quantity ) {
99 return false;
100 }
101 }
102
103 return $this->belongsToUser( Subscription::class, $args[2], $user );
104 }
105
106 /**
107 * Subscription Switch.
108 *
109 * @param \SureCart\Models\User $user User model.
110 * @param array $args {
111 * Arguments that accompany the requested capability check.
112 * @type string $0 Requested capability.
113 * @type int $1 Concerned user ID.
114 * @type mixed ...$2 The quantity to update.
115 * }
116 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
117 * and boolean values represent whether the user has that capability.
118 * @return boolean
119 */
120 public function switch_sc_subscription( $user, $args, $allcaps ) {
121 if ( ! empty( $allcaps['edit_sc_subscriptions'] ) ) {
122 return true;
123 }
124
125 if ( empty( $args[2] ) ) {
126 return false;
127 }
128
129 // It's disabled on the account.
130 if ( empty( \SureCart::account()->portal_protocol->subscription_updates_enabled ) ) {
131 return false;
132 }
133
134 return $this->belongsToUser( Subscription::class, $args[2], $user );
135 }
136
137 /**
138 * Can user read.
139 *
140 * @param \SureCart\Models\User $user User model.
141 * @param array $args {
142 * Arguments that accompany the requested capability check.
143 * @type string $0 Requested capability.
144 * @type int $1 Concerned user ID.
145 * @type mixed ...$2 Optional second and further parameters, typically object ID.
146 * }
147 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
148 * and boolean values represent whether the user has that capability.
149 *
150 * @return boolean Does user have permission.
151 */
152 public function read_sc_subscription( $user, $args, $allcaps ) {
153 if ( ! empty( $allcaps['read_sc_subscriptions'] ) ) {
154 return true;
155 }
156 return $this->belongsToUser( Subscription::class, $args[2], $user );
157 }
158
159 /**
160 * Can user list.
161 *
162 * @param \SureCart\Models\User $user User model.
163 * @param array $args {
164 * Arguments that accompany the requested capability check.
165 * @type string $0 Requested capability.
166 * @type int $1 Concerned user ID.
167 * @type string[] ...$2 The ids to list.
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 *
172 * @return boolean Does user have permission.
173 */
174 public function read_sc_subscriptions( $user, $args, $allcaps ) {
175 if ( ! empty( $allcaps['read_sc_subscriptions'] ) ) {
176 return true;
177 }
178 return $this->isListingOwnCustomerIds( $user, $args[2]['customer_ids'] ?? array() );
179 }
180
181 /**
182 * Can user edit.
183 *
184 * @param \SureCart\Models\User $user User model.
185 * @param array $args {
186 * Arguments that accompany the requested capability check.
187 * @type string $0 Requested capability.
188 * @type int $1 Concerned user ID.
189 * @type string $2 The id of the subscription.
190 * @type array ...$4 The data that is being requested to update.
191 * }
192 * @param bool[] $allcaps Array of key/value pairs where keys represent a capability name
193 * and boolean values represent whether the user has that capability.
194 * @return boolean Does user have permission.
195 */
196 public function edit_sc_subscription( $user, $args, $allcaps ) {
197 // user has full access.
198 if ( ! empty( $allcaps['edit_sc_subscriptions'] ) ) {
199 return true;
200 }
201
202 // no user to check.
203 if ( empty( $user->ID ) ) {
204 return false;
205 }
206
207 // user is not a customer.
208 if ( ! $user->isCustomer() ) {
209 return false;
210 }
211
212 // no data provided to update. Make sure to at least pass an empty array.
213 if ( is_null( $args[3] ?? null ) ) {
214 return false;
215 }
216
217 $params = $args[3];
218
219 // request has blacklisted keys.
220 if ( ! $this->requestOnlyHasKeys( $params, array( 'cancel_at_period_end', 'quantity', 'price', 'purge_pending_update', 'payment_method', 'manual_payment_method', 'manual_payment', 'cancellation_act', 'ad_hoc_amount', 'variant', 'discount' ) ) ) {
221 return false;
222 }
223
224 // check if they can modify price.
225 if ( ! empty( $params['price'] ) && ! $this->switch_sc_subscription( $user, $args, $allcaps ) ) {
226 return false;
227 }
228
229 if ( ! empty( $params['variant'] ) && ! $this->switch_sc_subscription( $user, $args, $allcaps ) ) {
230 return false;
231 }
232
233 // check if user can modify quantity.
234 if ( ! empty( $params['quantity'] ) && $params['quantity'] > 1 && ! $this->update_sc_subscription_quantity( $user, $args, $allcaps ) ) {
235 return false;
236 }
237
238 return $this->belongsToUser( Subscription::class, $args[2], $user );
239 }
240 }
241