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 / actions / apply-coupon.php
suretriggers / src / Integrations / woocommerce / actions Last commit date
add-attribute-terms.php 8 months ago add-customer.php 9 months ago add-emails-to-coupon.php 8 months ago add-order-note.php 10 months ago add-product-attributes.php 8 months ago add-product-to-cart.php 8 months ago add-update-order-custom-fields.php 10 months ago apply-coupon.php 8 months ago check-cart-status.php 8 months ago check-if-order-is-renewal.php 4 months ago create-attribute.php 8 months ago create-bundle-product-order.php 6 months ago create-coupon-code.php 10 months ago create-multi-product-order.php 7 months ago create-new-order.php 10 months ago create-product-variation.php 1 year ago create-product.php 1 year ago create-variable-product.php 8 months ago delete-coupon.php 1 year ago delete-customer.php 8 months ago fetch-coupon-details.php 10 months ago find-orders-by-user-id.php 10 months ago get-all-customers.php 8 months ago get-all-products.php 8 months ago get-customer-by-email.php 8 months ago get-customer-by-id.php 8 months ago get-order-details-by-order-id.php 10 months ago get-order-type-by-order-id.php 4 months ago get-orders-by-email.php 8 months ago get-product-by-id.php 1 year ago list-all-order-notes.php 8 months ago list-all-orders.php 8 months ago remove-product-from-cart.php 8 months ago retrieve-coupons-totals.php 10 months ago retrieve-customers-totals.php 10 months ago retrieve-orders-totals.php 10 months ago retrieve-products-totals.php 10 months ago retrieve-refunds-list.php 10 months ago retrieve-reviews-totals.php 10 months ago retrieve-sales-report.php 10 months ago retrieve-top-sellers-report.php 10 months ago update-product-price.php 8 months ago update-product-stock-quantity.php 8 months ago update-status-of-order.php 10 months ago
apply-coupon.php
188 lines
1 <?php
2 /**
3 * ApplyCoupon.
4 * php version 5.6
5 *
6 * @category ApplyCoupon
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\Woocommerce\Actions;
15
16 use SureTriggers\Integrations\AutomateAction;
17 use SureTriggers\Traits\SingletonLoader;
18 use WC_Coupon;
19
20 /**
21 * ApplyCoupon
22 *
23 * @category ApplyCoupon
24 * @package SureTriggers
25 * @author BSF <username@example.com>
26 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
27 * @link https://www.brainstormforce.com/
28 * @since 1.0.0
29 */
30 class ApplyCoupon extends AutomateAction {
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'WooCommerce';
38
39 /**
40 * Action name.
41 *
42 * @var string
43 */
44 public $action = 'wc_apply_coupon';
45
46 use SingletonLoader;
47
48 /**
49 * Register a action.
50 *
51 * @param array $actions actions.
52 * @return array
53 */
54 public function register( $actions ) {
55 $actions[ $this->integration ][ $this->action ] = [
56 'label' => __( 'Apply Coupon to Cart', 'suretriggers' ),
57 'action' => 'wc_apply_coupon',
58 'function' => [ $this, 'action_listener' ],
59 ];
60 return $actions;
61 }
62
63 /**
64 * Action listener.
65 *
66 * @param int $user_id user_id.
67 * @param int $automation_id automation_id.
68 * @param array $fields fields.
69 * @param array $selected_options selectedOptions.
70 *
71 * @return void|array|bool
72 */
73 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
74 // Handle user identification from selected options.
75 if ( ! empty( $selected_options['user_id'] ) ) {
76 $user_id = intval( $selected_options['user_id'] );
77 } elseif ( ! empty( $selected_options['customer_email'] ) ) {
78 $user = get_user_by( 'email', sanitize_email( $selected_options['customer_email'] ) );
79 if ( $user ) {
80 $user_id = $user->ID;
81 }
82 }
83
84 if ( ! function_exists( 'WC' ) ) {
85 return [
86 'status' => 'error',
87 'message' => __( 'WooCommerce not available', 'suretriggers' ),
88 ];
89 }
90
91 // Set the current user context for cart operations.
92 wp_set_current_user( $user_id );
93
94 // Initialize WooCommerce components properly.
95 if ( ! WC()->session ) {
96 WC()->session = new \WC_Session_Handler();
97 WC()->session->init();
98 }
99
100 // Initialize customer.
101 if ( ! WC()->customer ) {
102 WC()->customer = new \WC_Customer( $user_id, true );
103 }
104
105 // Initialize cart for the user.
106 if ( ! WC()->cart ) {
107 WC()->cart = new \WC_Cart();
108 }
109
110 // Ensure cart is properly initialized.
111 WC()->cart->get_cart();
112
113 foreach ( $fields as $field ) {
114 if ( array_key_exists( 'validationProps', $field ) && empty( $selected_options[ $field['name'] ] ) ) {
115 return [
116 'status' => 'error',
117 'message' => __( 'Required field is missing: ', 'suretriggers' ) . $field['name'],
118 ];
119 }
120 }
121
122 $coupon_code = sanitize_text_field( $selected_options['coupon_code'] );
123
124 if ( empty( $coupon_code ) ) {
125 return [
126 'status' => 'error',
127 'message' => __( 'Coupon code is required', 'suretriggers' ),
128 ];
129 }
130
131 // Check if coupon exists and is valid.
132 $coupon = new WC_Coupon( $coupon_code );
133 if ( ! $coupon->is_valid() ) {
134 return [
135 'status' => 'error',
136 'message' => __( 'Invalid coupon code', 'suretriggers' ),
137 ];
138 }
139
140 // Check if coupon is already applied.
141 $applied_coupons = WC()->cart->get_applied_coupons();
142 if ( in_array( $coupon_code, $applied_coupons, true ) ) {
143 return [
144 'status' => 'error',
145 'message' => __( 'Coupon is already applied to cart', 'suretriggers' ),
146 ];
147 }
148
149 // Apply the coupon to cart.
150 $result = WC()->cart->apply_coupon( $coupon_code );
151
152 if ( $result ) {
153 // Get cart totals after applying coupon.
154 WC()->cart->calculate_totals();
155
156 $cart_total = WC()->cart->get_total();
157 $cart_subtotal = WC()->cart->get_subtotal();
158 $discount_amount = WC()->cart->get_coupon_discount_amount( $coupon_code );
159
160 return [
161 'status' => 'success',
162 'message' => __( 'Coupon applied successfully', 'suretriggers' ),
163 'coupon_code' => $coupon_code,
164 'coupon_id' => $coupon->get_id(),
165 'discount_amount' => $discount_amount,
166 'cart_total' => $cart_total,
167 'cart_subtotal' => $cart_subtotal,
168 'applied_coupons' => WC()->cart->get_applied_coupons(),
169 'user_id' => $user_id,
170 ];
171 } else {
172 // Get WooCommerce notices for error details.
173 $notices = wc_get_notices( 'error' );
174 $error_message = ! empty( $notices ) ? $notices[0]['notice'] : __( 'Failed to apply coupon', 'suretriggers' );
175
176 // Clear notices to prevent them showing elsewhere.
177 wc_clear_notices();
178
179 return [
180 'status' => 'error',
181 'message' => $error_message,
182 ];
183 }
184 }
185 }
186
187 ApplyCoupon::get_instance();
188