PluginProbe
Subscriptions for WooCommerce with Stripe Recurring Payments / 2.0.0
Subscriptions for WooCommerce with Stripe Recurring Payments v2.0.0
2.0.0 1.11.2 1.11.1 1.11.0 1.10.9 1.10.8 1.10.7 1.10.6 1.10.5 1.10.4 1.10.3 1.10.2 1.10.1 1.10.0 1.9.6 1.9.5 trunk 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 All 61 releases
subscription / includes / Frontend / ActionController.php

ActionController.php in Subscriptions for WooCommerce with Stripe Recurring Payments 2.0.0, at includes/Frontend/ActionController.php

150 lines 5.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3
4 namespace SpringDevs\Subscription\Frontend;
5
6 use SpringDevs\Subscription\Illuminate\Action;
7 use SpringDevs\Subscription\Illuminate\Helper;
8 use SpringDevs\Subscription\Illuminate\Subscription\Subscription;
9
10 /**
11 * Class ActionController
12 *
13 * @package SpringDevs\Subscription\Frontend
14 */
15 class ActionController {
16
17 /**
18 * Initialize the class
19 */
20 public function __construct() {
21 add_action( 'before_single_subscrpt_content', array( $this, 'control_action_subscrpt' ) );
22 }
23
24 /**
25 * Take Subscription Action.
26 */
27 public function control_action_subscrpt() {
28 if ( ! ( isset( $_GET['subscrpt_id'] ) && isset( $_GET['action'] ) && isset( $_GET['wpnonce'] ) ) ) {
29 return;
30 }
31
32 $subscrpt_id = sanitize_text_field( wp_unslash( $_GET['subscrpt_id'] ) );
33 $action = sanitize_text_field( wp_unslash( $_GET['action'] ) );
34 $wpnonce = sanitize_text_field( wp_unslash( $_GET['wpnonce'] ) );
35
36 // Nonce check
37 if ( ! wp_verify_nonce( $wpnonce, 'subscrpt_nonce' ) ) {
38 $error_notice = __( "You don't have permission to modify this subscription. If you believe this is an error, please contact support.", 'subscription' );
39 wc_add_notice( $error_notice, 'error' );
40
41 $view_subscription_endpoint = Subscription::get_user_endpoint( 'view_subs' );
42 $redirect_url = wc_get_endpoint_url( $view_subscription_endpoint, $subscrpt_id, wc_get_page_permalink( 'myaccount' ) );
43 return wp_safe_redirect( $redirect_url );
44 }
45
46 // User check
47 $subs_post = get_post( $subscrpt_id );
48 $author_id = $subs_post ? (int) $subs_post->post_author : 0;
49 $current_user_id = get_current_user_id();
50 $user_is_admin = current_user_can( 'manage_options' );
51
52 if ( ! $user_is_admin && (int) $author_id !== (int) $current_user_id ) {
53 $error_notice = __( "You don't have permission to modify this subscription. If you believe this is an error, please contact support.", 'subscription' );
54 wc_add_notice( $error_notice, 'error' );
55
56 $view_subscription_endpoint = Subscription::get_user_endpoint( 'view_subs' );
57 $redirect_url = wc_get_endpoint_url( $view_subscription_endpoint, $subscrpt_id, wc_get_page_permalink( 'myaccount' ) );
58 return wp_safe_redirect( $redirect_url );
59 }
60
61 // Get view subscription endpoint slug.
62 $view_subs_endpoint = Subscription::get_user_endpoint( 'view_subs' );
63
64 // Check maximum payment limit for renewal-related actions (including early renewal)
65 $renewal_actions = apply_filters( 'subscrpt_renewal_actions', array( 'renew', 'renew-on', 'early-renew' ) );
66 if ( in_array( $action, $renewal_actions, true ) && subscrpt_is_max_payments_reached( $subscrpt_id ) ) {
67 wc_add_notice( __( 'This subscription has reached its maximum payment limit and cannot be renewed further.', 'subscription' ), 'error' );
68 wp_safe_redirect( wc_get_endpoint_url( $view_subs_endpoint, $subscrpt_id, wc_get_page_permalink( 'myaccount' ) ) );
69 exit;
70 }
71
72 if ( 'renew' === $action && ! subscrpt_is_auto_renew_enabled() ) {
73 $this->manual_renew_product( $subscrpt_id );
74 } elseif ( 'cancelled' === $action ) {
75 $status = get_post_status( $subscrpt_id );
76 $user_cancel = get_post_meta( $subscrpt_id, '_subscrpt_user_cancel', true );
77 if ( 'no' === $user_cancel ) {
78 return;
79 } elseif ( 'active' === $status ) {
80 Action::status( 'pe_cancelled', $subscrpt_id );
81 } else {
82 Action::status( $action, $subscrpt_id );
83 }
84 } elseif ( 'reactivate' === $action ) {
85 Action::status( 'active', $subscrpt_id );
86 } elseif ( 'renew-on' === $action ) {
87 update_post_meta( $subscrpt_id, '_subscrpt_auto_renew', 1 );
88 } elseif ( 'renew-off' === $action ) {
89 update_post_meta( $subscrpt_id, '_subscrpt_auto_renew', 0 );
90 } elseif ( 'renew' === $action && subscrpt_is_auto_renew_enabled() ) {
91 Helper::create_renewal_order( $subscrpt_id );
92 } else {
93 // Safety check: If this is any kind of renewal action and limit is reached, block it
94 if ( subscrpt_is_max_payments_reached( $subscrpt_id ) &&
95 ( strpos( $action, 'renew' ) !== false || strpos( $action, 'renewal' ) !== false ) ) {
96 wc_add_notice( __( 'This subscription has reached its maximum payment limit and cannot be renewed further.', 'subscription' ), 'error' );
97 wp_safe_redirect( wc_get_endpoint_url( $view_subs_endpoint, $subscrpt_id, wc_get_page_permalink( 'myaccount' ) ) );
98 exit;
99 }
100
101 do_action( 'subscrpt_execute_actions', $subscrpt_id, $action );
102 }
103 wp_safe_redirect( wc_get_endpoint_url( $view_subs_endpoint, $subscrpt_id, wc_get_page_permalink( 'myaccount' ) ) );
104 exit;
105 }
106
107 /**
108 * Manually Renew Subscription.
109 *
110 * @param Int $subscrpt_id Subscription ID.
111 */
112 public function manual_renew_product( $subscrpt_id ) {
113 $product_id = get_post_meta( $subscrpt_id, '_subscrpt_product_id', true );
114 $subscription_variation_id = get_post_meta( $subscrpt_id, '_subscrpt_variation_id', true );
115
116 $variation_id = 0;
117 if ( isset( $variation_id ) ) {
118 $variation_id = $variation_id;
119 }
120
121 WC()->cart->empty_cart();
122
123 WC()->cart->add_to_cart(
124 $product_id,
125 1,
126 $variation_id,
127 array(),
128 array( 'renew_subscrpt' => true )
129 );
130
131 // Empty unless the store set one, and wc_add_notice( '' ) renders an empty
132 // green box rather than nothing, so only add it when there is a message.
133 $cart_notice = subscrpt_get_manual_renew_cart_notice();
134 if ( '' !== $cart_notice ) {
135 wc_add_notice( $cart_notice, 'success' );
136 }
137 $this->redirect( wc_get_cart_url() );
138 }
139
140 /**
141 * Redirect on URL.
142 *
143 * @param String $url URL.
144 */
145 public function redirect( $url ) {
146 wp_safe_redirect( esc_url( $url ) );
147 exit;
148 }
149 }
150