PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.33
OttoKit: All-in-One Automation Platform v1.1.33
1.1.33 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 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.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / woocommerce-subscriptions / actions / extend-user-subscription.php
suretriggers / src / Integrations / woocommerce-subscriptions / actions Last commit date
add-subscription-coupon.php 10 months ago add-update-subscription-custom-fields.php 10 months ago change-subscription-status.php 10 months ago create-subscription-order-cost.php 7 months ago create-subscription-order-parent.php 6 months ago create-subscription-order-product.php 10 months ago extend-user-subscription.php 10 months ago find-subscription-by-id.php 4 days ago find-subscription-by-user-id.php 10 months ago remove-product-user-subscription.php 10 months ago update-subscription-end-date.php 10 months ago update-subscription-next-payment-date.php 10 months ago update-subscription-order-downloads.php 6 months ago
extend-user-subscription.php
170 lines
1 <?php
2 /**
3 * ExtendUserSubscription.
4 * php version 5.6
5 *
6 * @category ExtendUserSubscription
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\WoocommerceSubscriptions\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Traits\SingletonLoader;
19 use WC_Subscription;
20 use SureTriggers\Integrations\WordPress\WordPress;
21
22 /**
23 * ExtendUserSubscription
24 *
25 * @category ExtendUserSubscription
26 * @package SureTriggers
27 * @author BSF <username@example.com>
28 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
29 * @link https://www.brainstormforce.com/
30 * @since 1.0.0
31 */
32 class ExtendUserSubscription extends AutomateAction {
33
34 /**
35 * Integration type.
36 *
37 * @var string
38 */
39 public $integration = 'WoocommerceSubscriptions';
40
41 /**
42 * Action name.
43 *
44 * @var string
45 */
46 public $action = 'wc_extend_subscription_date';
47
48 use SingletonLoader;
49
50 /**
51 * Register a action.
52 *
53 * @param array $actions actions.
54 * @return array
55 */
56 public function register( $actions ) {
57 $actions[ $this->integration ][ $this->action ] = [
58 'label' => __( 'Extend User Subscription', 'suretriggers' ),
59 'action' => 'wc_extend_subscription_date',
60 'function' => [ $this, 'action_listener' ],
61 ];
62 return $actions;
63 }
64
65 /**
66 * Action listener.
67 *
68 * @param int $user_id user_id.
69 * @param int $automation_id automation_id.
70 * @param array $fields fields.
71 * @param array $selected_options selectedOptions.
72 *
73 * @return object|array|void
74 * @throws Exception Exception.
75 */
76 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
77 $user_id = $selected_options['user_id'];
78 $subscription_id = $selected_options['subscription_id'];
79
80 if ( ! function_exists( 'wcs_get_users_subscriptions' ) || ! function_exists( 'wcs_get_subscriptions' ) || ! function_exists( 'wcs_get_subscription' ) || ! function_exists( 'wcs_add_time' ) || ! function_exists( 'wcs_get_edit_post_link' ) ) {
81 return [
82 'status' => 'error',
83 'message' => __( 'Required functions not found.', 'suretriggers' ),
84
85 ];
86 }
87 $user = get_userdata( $user_id );
88 if ( $user ) {
89 $subscriptions = wcs_get_subscriptions(
90 [
91 'subscriptions_per_page' => -1,
92 'orderby' => 'start_date',
93 'order' => 'DESC',
94 'customer_id' => $user_id,
95 'subscription_status' => [ 'active' ],
96 'meta_query_relation' => 'AND',
97 ]
98 );
99 if ( empty( $subscriptions ) ) {
100 return [
101 'status' => 'error',
102 'message' => 'No active subscriptions were found.',
103 ];
104 }
105 if ( ! array_key_exists( $subscription_id, $subscriptions ) ) {
106 return [
107 'status' => 'error',
108 'message' => 'No active subscriptions was found with provided Subscription ID.',
109 ];
110 }
111
112 $count = 0;
113 $subscription = wcs_get_subscription( $subscription_id );
114
115 $expiry = $subscription->get_date( 'end' );
116 if ( empty( $expiry ) || intval( $expiry ) === 0 ) {
117 return [
118 'status' => 'error',
119 'message' => 'The subscription does not expire, no need to extend the date.',
120 ];
121 }
122
123 $new_extended_date = strtotime( '+' . $selected_options['extend_no'] . ' ' . $selected_options['extend_length'], $subscription->get_time( 'end' ) );
124
125 if ( is_int( $new_extended_date ) ) {
126 $dates_to_update['end'] = gmdate( 'Y-m-d H:i:s', $new_extended_date );
127 // Prepare the date to update.
128 $order_number = sprintf( _x( '#%s', 'hash before order number', 'suretriggers' ), $subscription->get_order_number() );
129 $order_link = sprintf( '<a href="%s">%s</a>', esc_url( wcs_get_edit_post_link( $subscription->get_id() ) ), $order_number );
130
131 try {
132 $subscription->update_dates( $dates_to_update );
133 wp_cache_delete( $subscription_id, 'posts' );
134 $subscription->add_order_note( sprintf( __( 'Subscription successfully extended by SureTriggers. Order %s', 'suretriggers' ), $order_link ) );
135 $count++;
136 } catch ( Exception $e ) {
137 $subscription->add_order_note( sprintf( __( 'Failed to extend subscription after customer renewed early. Order %s', 'suretriggers' ), $order_link ) );
138 }
139 if ( 0 === $count ) {
140 return [
141 'status' => 'error',
142 'message' => 'The subscription has no end date.',
143 ];
144 }
145
146 $subscription_status = $subscription->get_status();
147 $subscription_start_date = $subscription->get_date_created();
148 $subscription_next_payment_date = $subscription->get_date( 'next_payment' );
149
150 $context = WordPress::get_user_context( $user_id );
151 $context['subscription'] = [
152 'subscription_id' => $subscription_id,
153 'status' => $subscription_status,
154 'start_date' => $subscription_start_date,
155 'next_payment_date' => $subscription_next_payment_date,
156 'end_date' => $subscription->get_date( 'end' ),
157 ];
158 return $context;
159 }
160 } else {
161 return [
162 'status' => 'error',
163 'message' => 'User does not exists.',
164 ];
165 }
166 }
167 }
168
169 ExtendUserSubscription::get_instance();
170