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 / packages / blocks / Controllers / SubscriptionController.php
surecart / packages / blocks / Controllers Last commit date
Middleware 2 years ago BaseController.php 2 years ago ChargeController.php 3 years ago CustomerController.php 2 years ago DownloadController.php 2 years ago InvoiceController.php 1 year ago LicenseController.php 2 years ago OrderController.php 2 years ago PaymentMethodController.php 2 years ago SubscriptionController.php 2 years ago UserController.php 3 years ago
SubscriptionController.php
706 lines
1 <?php
2 namespace SureCartBlocks\Controllers;
3
4 use SureCart\Models\Component;
5 use SureCart\Models\Price;
6 use SureCart\Models\Product;
7 use SureCart\Models\Subscription;
8 use SureCart\Models\SubscriptionProtocol;
9 use SureCart\Models\User;
10 use SureCartBlocks\Controllers\Middleware\MissingPaymentMethodMiddleware;
11 use SureCartBlocks\Controllers\Middleware\UpdateSubscriptionMiddleware;
12 use SureCartBlocks\Controllers\Middleware\SubscriptionPermissionsControllerMiddleware;
13 use SureCartBlocks\Controllers\Middleware\SubscriptionNonceVerificationMiddleware;
14 /**
15 * The subscription controller.
16 */
17 class SubscriptionController extends BaseController {
18 /**
19 * The middleware for this controller.
20 *
21 * @var array
22 */
23 protected $middleware = [
24 'confirm' => [
25 SubscriptionPermissionsControllerMiddleware::class,
26 UpdateSubscriptionMiddleware::class,
27 MissingPaymentMethodMiddleware::class,
28 ],
29 'confirm_amount' => [
30 SubscriptionPermissionsControllerMiddleware::class,
31 UpdateSubscriptionMiddleware::class,
32 MissingPaymentMethodMiddleware::class,
33 ],
34 'confirm_variation' => [
35 SubscriptionPermissionsControllerMiddleware::class,
36 UpdateSubscriptionMiddleware::class,
37 MissingPaymentMethodMiddleware::class,
38 ],
39 'update_payment_method' => [
40 SubscriptionNonceVerificationMiddleware::class,
41 SubscriptionPermissionsControllerMiddleware::class,
42 UpdateSubscriptionMiddleware::class,
43 MissingPaymentMethodMiddleware::class,
44 ],
45 ];
46
47 /**
48 * Render the block
49 *
50 * @param array $attributes Block attributes.
51 * @return function
52 */
53 public function preview( $attributes = [] ) {
54 return wp_kses_post(
55 Component::tag( 'sc-subscriptions-list' )
56 ->id( 'customer-subscriptions-preview' )
57 ->with(
58 [
59 'heading' => $attributes['title'] ?? null,
60 'isCustomer' => User::current()->isCustomer(),
61 'allLink' => add_query_arg(
62 [
63 'tab' => $this->getTab(),
64 'model' => 'subscription',
65 'action' => 'index',
66 ],
67 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
68 ),
69 'query' => apply_filters(
70 'surecart/dashboard/subscription_list/query',
71 [
72 'customer_ids' => array_values( User::current()->customerIds() ),
73 'status' => [ 'active', 'trialing', 'past_due', 'canceled' ],
74 'page' => 1,
75 'per_page' => 5,
76 ]
77 ),
78 ]
79 )->render( $attributes['title'] ? "<span slot='heading'>" . $attributes['title'] . '</span>' : '' )
80 );
81 }
82
83 /**
84 * Render the block
85 *
86 * @return function
87 */
88 public function index() {
89 \SureCart::assets()->addComponentData(
90 'sc-subscriptions-list',
91 '#customer-subscriptions-index',
92 [
93 'heading' => $attributes['title'] ?? __( 'Plans', 'surecart' ),
94 'isCustomer' => User::current()->isCustomer(),
95 'query' => apply_filters(
96 'surecart/dashboard/subscription_list/query',
97 [
98 'customer_ids' => array_values( User::current()->customerIds() ),
99 'status' => [ 'active', 'trialing', 'canceled' ],
100 'page' => 1,
101 'per_page' => 20,
102 ]
103 ),
104 ]
105 );
106 ob_start();
107 ?>
108 <sc-spacing style="--spacing: var(--sc-spacing-large)">
109 <sc-breadcrumbs>
110 <sc-breadcrumb href="<?php echo esc_url( add_query_arg( [ 'tab' => $this->getTab() ], remove_query_arg( array_keys( $_GET ) ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>">
111 <?php esc_html_e( 'Dashboard', 'surecart' ); ?>
112 </sc-breadcrumb>
113 <sc-breadcrumb>
114 <?php esc_html_e( 'Plans', 'surecart' ); ?>
115 </sc-breadcrumb>
116 </sc-breadcrumbs>
117 <sc-subscriptions-list id="customer-subscriptions-index"></sc-subscriptions-list>
118 </sc-spacing>
119 <?php
120 return ob_get_clean();
121 }
122
123 /**
124 * Show and individual checkout session.
125 *
126 * @return function
127 */
128 public function edit() {
129 $id = $this->getId();
130
131 if ( ! $id ) {
132 return $this->notFound();
133 }
134
135 // fetch subscription.
136 $subscription = Subscription::with(
137 [
138 'price',
139 'price.product',
140 'product.product_group',
141 'current_period',
142 'period.checkout',
143 'purchase',
144 'discount',
145 'discount.coupon',
146 'purchase.license',
147 'license.activations',
148 ]
149 )->find( $id );
150
151 $should_delay_cancellation = $subscription->shouldDelayCancellation();
152 ob_start();
153 ?>
154
155 <sc-spacing style="--spacing: var(--sc-spacing-large)">
156 <sc-breadcrumbs>
157 <sc-breadcrumb href="<?php echo esc_url( add_query_arg( [ 'tab' => $this->getTab() ], remove_query_arg( array_keys( $_GET ) ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>">
158 <?php esc_html_e( 'Dashboard', 'surecart' ); ?>
159 </sc-breadcrumb>
160 <sc-breadcrumb href="
161 <?php
162 echo esc_url(
163 add_query_arg(
164 [
165 'tab' => $this->getTab(),
166 'action' => 'index',
167 'model' => 'subscription',
168 ],
169 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
170 )
171 );
172 ?>
173 ">
174 <?php esc_html_e( 'Plans', 'surecart' ); ?>
175 </sc-breadcrumb>
176 <sc-breadcrumb>
177 <?php esc_html_e( 'Plan', 'surecart' ); ?>
178 </sc-breadcrumb>
179 </sc-breadcrumbs>
180
181 <?php
182 echo wp_kses_post(
183 Component::tag( 'sc-subscription' )
184 ->id( 'customer-subscription-edit' )
185 ->with(
186 [
187 'heading' => __( 'Current Plan', 'surecart' ),
188 'showCancel' => \SureCart::account()->portal_protocol->subscription_cancellations_enabled && ! $subscription->remaining_period_count && ! $should_delay_cancellation,
189 'protocol' => SubscriptionProtocol::with( [ 'preservation_coupon' ] )->find(), // \SureCart::account()->subscription_protocol,
190 'subscription' => $subscription,
191 'updatePaymentMethodUrl' => esc_url_raw(
192 home_url(
193 add_query_arg(
194 [
195 'tab' => $this->getTab(),
196 'action' => 'update_payment_method',
197 'nonce' => wp_create_nonce( 'subscription-switch' ),
198 ]
199 )
200 )
201 ),
202 ]
203 )->render()
204 );
205 ?>
206
207 <?php
208 // show switch if we can change it.
209 if ( $subscription->canBeSwitched() ) :
210 echo wp_kses_post(
211 Component::tag( 'sc-subscription-switch' )
212 ->id( 'customer-subscription-switch' )
213 ->with(
214 [
215 'heading' => __( 'Update Plan', 'surecart' ),
216 'productId' => $subscription->price->product->id,
217 'productGroupId' => ( $subscription->price->product->product_group
218 ? ( $subscription->price->product->product_group->archived
219 ? null
220 : $subscription->price->product->product_group->id )
221 : null ),
222 'subscription' => $subscription,
223 'successUrl' => home_url(
224 add_query_arg(
225 [
226 'tab' => $this->getTab(),
227 'nonce' => wp_create_nonce( 'subscription-switch' ),
228 ]
229 )
230 ),
231 ]
232 )->render()
233 );
234 endif;
235 ?>
236
237 </sc-spacing>
238
239 <?php
240 return ob_get_clean();
241 }
242
243 /**
244 * Update the subscription payment method
245 *
246 * @return string
247 */
248 public function update_payment_method() {
249 $id = $this->getId();
250
251 if ( ! $id ) {
252 return $this->notFound();
253 }
254
255 // fetch subscription.
256 $subscription = Subscription::with(
257 [
258 'price',
259 'price.product',
260 'current_period',
261 'period.checkout',
262 'discount',
263 'discount.coupon',
264 ]
265 )->find( $id );
266
267 ob_start();
268 ?>
269
270 <sc-spacing style="--spacing: var(--sc-spacing-large)">
271 <sc-breadcrumbs>
272 <sc-breadcrumb href="<?php echo esc_url( add_query_arg( [ 'tab' => $this->getTab() ], remove_query_arg( array_keys( $_GET ) ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>">
273 <?php esc_html_e( 'Dashboard', 'surecart' ); ?>
274 </sc-breadcrumb>
275 <sc-breadcrumb href="
276 <?php
277 echo esc_url(
278 add_query_arg(
279 [
280 'tab' => $this->getTab(),
281 'action' => 'index',
282 'model' => 'subscription',
283 ],
284 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
285 )
286 );
287 ?>
288 ">
289 <?php esc_html_e( 'Plans', 'surecart' ); ?>
290 </sc-breadcrumb>
291 <sc-breadcrumb href="
292 <?php
293 echo esc_url(
294 add_query_arg(
295 [
296 'tab' => $this->getTab(),
297 'action' => 'edit',
298 'model' => 'subscription',
299 'id' => $this->getId(),
300 ],
301 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
302 )
303 );
304 ?>
305 ">
306 <?php esc_html_e( 'Plan', 'surecart' ); ?>
307 </sc-breadcrumb>
308 <sc-breadcrumb>
309 <?php esc_html_e( 'Update Payment Method', 'surecart' ); ?>
310 </sc-breadcrumb>
311 </sc-breadcrumbs>
312
313 <?php
314 echo wp_kses_post(
315 Component::tag( 'sc-subscription' )
316 ->id( 'customer-subscription-edit' )
317 ->with(
318 [
319 'heading' => __( 'Current Plan', 'surecart' ),
320 'showCancel' => false,
321 'subscription' => $subscription,
322 ]
323 )->render()
324 );
325 ?>
326
327 <?php
328 echo wp_kses_post(
329 Component::tag( 'sc-subscription-payment-method' )
330 ->id( 'customer-subscription-payment-method' )
331 ->with(
332 [
333 'heading' => __( 'Change Payment Method', 'surecart' ),
334 'subscription' => $subscription,
335 ]
336 )->render()
337 );
338 ?>
339
340 </sc-spacing>
341
342 <?php
343 return ob_get_clean();
344 }
345
346
347 /**
348 * Get the terms text.
349 */
350 public function getTermsText() {
351 $account = \SureCart::account();
352 $privacy_url = $account->portal_protocol->privacy_url ?? \get_privacy_policy_url();
353 $terms_url = $account->portal_protocol->terms_url ?? '';
354
355 if ( ! empty( $privacy_url ) && ! empty( $terms_url ) ) {
356 return sprintf( __( 'By updating or canceling your plan, you agree to the <a href="%1$1s" target="_blank">%2$2s</a> and <a href="%3$3s" target="_blank">%4$4s</a>', 'surecart' ), esc_url( $terms_url ), __( 'Terms', 'surecart' ), esc_url( $privacy_url ), __( 'Privacy Policy', 'surecart' ) );
357 }
358
359 if ( ! empty( $privacy_url ) ) {
360 return sprintf( __( 'By updating or canceling your plan, you agree to the <a href="%1$1s" target="_blank">%2$2s</a>', 'surecart' ), esc_url( $privacy_url ), __( 'Privacy Policy', 'surecart' ) );
361 }
362
363 if ( ! empty( $terms_url ) ) {
364 return sprintf( __( 'By updating or canceling your plan, you agree to the <a href="%1$1s" target="_blank">%2$2s</a>', 'surecart' ), esc_url( $terms_url ), __( 'Terms', 'surecart' ) );
365 }
366
367 return '';
368 }
369
370 /**
371 * Confirm the ad_hoc amount.
372 *
373 * @return void
374 */
375 public function confirm_amount() {
376 $price = Price::find( $this->getParam( 'price_id' ) );
377 ob_start();
378 ?>
379
380 <sc-spacing style="--spacing: var(--sc-spacing-xx-large)">
381 <sc-breadcrumbs>
382 <sc-breadcrumb href="<?php echo esc_url( add_query_arg( [ 'tab' => $this->getTab() ], remove_query_arg( array_keys( $_GET ) ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>">
383 <?php esc_html_e( 'Dashboard', 'surecart' ); ?>
384 </sc-breadcrumb>
385 <sc-breadcrumb href="
386 <?php
387 echo esc_url(
388 add_query_arg(
389 [
390 'tab' => $this->getTab(),
391 'action' => 'edit',
392 'model' => 'subscription',
393 'id' => $this->getId(),
394 ],
395 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
396 )
397 );
398 ?>
399 ">
400 <?php esc_html_e( 'Plan', 'surecart' ); ?>
401 </sc-breadcrumb>
402 <sc-breadcrumb>
403 <?php esc_html_e( 'Enter Amount', 'surecart' ); ?>
404 </sc-breadcrumb>
405 </sc-breadcrumbs>
406
407 <?php
408
409 echo wp_kses_post(
410 Component::tag( 'sc-subscription-ad-hoc-confirm' )
411 ->id( 'subscription-ad-hoc-confirm' )
412 ->with(
413 [
414 'heading' => __( 'Enter An Amount', 'surecart' ),
415 'price' => $price,
416 'variant' => $this->getParam( 'variant' ),
417 ]
418 )->render()
419 );
420 ?>
421
422 </sc-spacing>
423
424 <?php
425 return ob_get_clean();
426 }
427
428 /**
429 * Confirm the product variation.
430 *
431 * @return void
432 */
433 public function confirm_variation() {
434 $price = Price::find( $this->getParam( 'price_id' ) );
435 $id = $this->getId();
436
437 if ( ! $id ) {
438 return $this->notFound();
439 }
440
441 // fetch subscription.
442 $subscription = Subscription::with(
443 [
444 'price',
445 'price.product',
446 ]
447 )->find( $id );
448
449 if ( ! $subscription ) {
450 return $this->notFound();
451 }
452
453 // fetch subscription product.
454 $product = Product::with(
455 [
456 'variants',
457 'variant_options',
458 'prices',
459 ]
460 )->find( $price->product );
461
462 ob_start();
463 ?>
464
465 <sc-spacing style="--spacing: var(--sc-spacing-xx-large)">
466 <sc-breadcrumbs>
467 <sc-breadcrumb href="<?php echo esc_url( add_query_arg( [ 'tab' => $this->getTab() ], remove_query_arg( array_keys( $_GET ) ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>">
468 <?php esc_html_e( 'Dashboard', 'surecart' ); ?>
469 </sc-breadcrumb>
470 <sc-breadcrumb href="
471 <?php
472 echo esc_url(
473 add_query_arg(
474 [
475 'tab' => $this->getTab(),
476 'action' => 'edit',
477 'model' => 'subscription',
478 'id' => $this->getId(),
479 ],
480 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
481 )
482 );
483 ?>
484 ">
485 <?php esc_html_e( 'Plan', 'surecart' ); ?>
486 </sc-breadcrumb>
487 <sc-breadcrumb>
488 <?php esc_html_e( 'Choose Variation', 'surecart' ); ?>
489 </sc-breadcrumb>
490 </sc-breadcrumbs>
491
492 <?php
493
494 echo wp_kses_post(
495 Component::tag( 'sc-subscription-variation-confirm' )
496 ->id( 'subscription-ad-hoc-confirm' )
497 ->with(
498 [
499 'heading' => __( 'Choose a Variation', 'surecart' ),
500 'product' => $product,
501 'subscription' => $subscription,
502 'price' => $price,
503 ]
504 )->render()
505 );
506 ?>
507
508 </sc-spacing>
509
510 <?php
511 return ob_get_clean();
512 }
513
514 /**
515 * Confirm changing subscription
516 *
517 * @return function
518 */
519 public function confirm() {
520 $back = add_query_arg( [ 'tab' => $this->getTab() ], remove_query_arg( array_keys( $_GET ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
521 ob_start();
522 ?>
523
524 <sc-spacing style="--spacing: var(--sc-spacing-xx-large)">
525 <sc-breadcrumbs>
526 <sc-breadcrumb href="<?php echo esc_url( add_query_arg( [ 'tab' => $this->getTab() ], remove_query_arg( array_keys( $_GET ) ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>">
527 <?php esc_html_e( 'Dashboard', 'surecart' ); ?>
528 </sc-breadcrumb>
529 <sc-breadcrumb href="
530 <?php
531 echo esc_url(
532 add_query_arg(
533 [
534 'tab' => $this->getTab(),
535 'action' => 'edit',
536 'model' => 'subscription',
537 'id' => $this->getId(),
538 ],
539 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
540 )
541 );
542 ?>
543 ">
544 <?php esc_html_e( 'Plan', 'surecart' ); ?>
545 </sc-breadcrumb>
546 <sc-breadcrumb>
547 <?php esc_html_e( 'Confirm', 'surecart' ); ?>
548 </sc-breadcrumb>
549 </sc-breadcrumbs>
550
551 <?php
552 $terms = $this->getTermsText();
553 $quantity_enabled = (bool) \SureCart::account()->portal_protocol->subscription_quantity_updates_enabled;
554 if ( $this->getParam( 'ad_hoc_amount' ) ) {
555 $quantity_enabled = false;
556 }
557
558 echo wp_kses_post(
559 Component::tag( 'sc-upcoming-invoice' )
560 ->id( 'customer-upcoming-invoice' )
561 ->with(
562 [
563 'heading' => __( 'New Plan', 'surecart' ),
564 'subscriptionId' => $this->getId(),
565 'priceId' => $this->getParam( 'price_id' ),
566 'variantId' => $this->getParam( 'variant' ),
567 'adHocAmount' => $this->getParam( 'ad_hoc_amount' ),
568 'successUrl' => esc_url_raw( $back ),
569 'quantityUpdatesEnabled' => (bool) $quantity_enabled,
570 'quantity' => 1,
571 ]
572 )->render( $terms ? '<span slot="terms">' . wp_kses_post( $terms ) . '</span>' : '' )
573 );
574 ?>
575
576
577 </sc-spacing>
578
579 <?php
580 return ob_get_clean();
581
582 }
583
584 /**
585 * Confirm cancel subscription
586 *
587 * @return function
588 */
589 public function cancel() {
590 $back_url = add_query_arg( [ 'tab' => $this->getTab() ], remove_query_arg( array_keys( $_GET ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
591 $edit_subscription_url = add_query_arg(
592 [
593 'tab' => $this->getTab(),
594 'action' => 'edit',
595 'model' => 'subscription',
596 'id' => $this->getId(),
597 ],
598 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
599 );
600 ob_start();
601 ?>
602 <sc-spacing style="--spacing: var(--sc-spacing-xx-large)">
603 <sc-breadcrumbs>
604 <sc-breadcrumb href="<?php echo esc_url( $back_url ); ?>">
605 <?php esc_html_e( 'Dashboard', 'surecart' ); ?>
606 </sc-breadcrumb>
607 <sc-breadcrumb href="<?php echo esc_url( $edit_subscription_url ); ?>" >
608 <?php esc_html_e( 'Plan', 'surecart' ); ?>
609 </sc-breadcrumb>
610 <sc-breadcrumb>
611 <?php esc_html_e( 'Cancel', 'surecart' ); ?>
612 </sc-breadcrumb>
613 </sc-breadcrumbs>
614
615 <?php
616 echo wp_kses_post(
617 Component::tag( 'sc-subscription-cancel' )
618 ->id( 'customer-subscription-cancel' )
619 ->with(
620 [
621 'subscriptionId' => $this->getId(),
622 'backUrl' => esc_url_raw( $edit_subscription_url ),
623 'successUrl' => esc_url_raw( $back_url ),
624 ]
625 )->render()
626 );
627 ?>
628
629 </sc-spacing>
630 <?php
631 return ob_get_clean();
632 }
633
634 /**
635 * Update payment
636 *
637 * @return function
638 */
639 public function payment() {
640 $back_url = add_query_arg( [ 'tab' => $this->getTab() ], remove_query_arg( array_keys( $_GET ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
641
642 $edit_subscription_url = add_query_arg(
643 [
644 'tab' => $this->getTab(),
645 'action' => 'edit',
646 'model' => 'subscription',
647 'id' => $this->getId(),
648 ],
649 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
650 );
651
652 $confirm_subscription_url = add_query_arg(
653 [
654 'tab' => $this->getTab(),
655 'action' => 'confirm',
656 'model' => 'subscription',
657 'ad_hoc_amount' => $this->getParam( 'ad_hoc_amount' ),
658 'id' => $this->getId(),
659 'price_id' => $this->getParam( 'price_id' ),
660 'nonce' => wp_create_nonce( 'subscription-switch' ),
661 ],
662 remove_query_arg( array_keys( $_GET ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
663 );
664
665 $subscription = Subscription::find( $this->getId() );
666 ob_start();
667 ?>
668
669 <sc-spacing style="--spacing: var(--sc-spacing-xx-large)">
670 <sc-breadcrumbs>
671 <sc-breadcrumb href="<?php echo esc_url( $back_url ); ?>">
672 <?php esc_html_e( 'Dashboard', 'surecart' ); ?>
673 </sc-breadcrumb>
674 <sc-breadcrumb href="<?php echo esc_url( $edit_subscription_url ); ?>">
675 <?php esc_html_e( 'Plan', 'surecart' ); ?>
676 </sc-breadcrumb>
677 <sc-breadcrumb href="<?php echo esc_url( $confirm_subscription_url ); ?>">
678 <?php esc_html_e( 'Confirm', 'surecart' ); ?>
679 </sc-breadcrumb>
680 <sc-breadcrumb>
681 <?php esc_html_e( 'Payment Method', 'surecart' ); ?>
682 </sc-breadcrumb>
683 </sc-breadcrumbs>
684
685 <?php
686 echo wp_kses_post(
687 Component::tag( 'sc-subscription-payment' )
688 ->id( 'customer-subscription-payment' )
689 ->with(
690 [
691 'customerIds' => $this->customerIds(),
692 'subscription' => $subscription,
693 'backUrl' => esc_url_raw( $confirm_subscription_url ),
694 'successUrl' => esc_url_raw( $confirm_subscription_url ),
695 'quantity' => 1,
696 ]
697 )->render()
698 );
699 ?>
700 </sc-spacing>
701
702 <?php
703 return ob_get_clean();
704 }
705 }
706