PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.36
OttoKit: All-in-One Automation Platform v1.1.36
1.1.37 1.1.36 1.1.35 1.1.34 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 / remove-product-from-cart.php
suretriggers / src / Integrations / woocommerce / actions Last commit date
add-attribute-terms.php 9 months ago add-customer.php 10 months ago add-emails-to-coupon.php 9 months ago add-order-note.php 11 months ago add-product-attributes.php 9 months ago add-product-to-cart.php 9 months ago add-update-order-custom-fields.php 11 months ago apply-coupon.php 9 months ago check-cart-status.php 9 months ago check-if-order-is-renewal.php 5 months ago create-attribute.php 9 months ago create-bundle-product-order.php 7 months ago create-coupon-code.php 11 months ago create-multi-product-order.php 8 months ago create-new-order.php 11 months ago create-product-variation.php 1 year ago create-product.php 2 weeks ago create-variable-product.php 2 weeks ago delete-coupon.php 1 year ago delete-customer.php 9 months ago fetch-coupon-details.php 11 months ago find-orders-by-user-id.php 11 months ago get-all-customers.php 9 months ago get-all-products.php 9 months ago get-customer-by-email.php 9 months ago get-customer-by-id.php 9 months ago get-order-details-by-order-id.php 11 months ago get-order-type-by-order-id.php 5 months ago get-orders-by-email.php 9 months ago get-product-by-id.php 1 year ago list-all-order-notes.php 9 months ago list-all-orders.php 9 months ago remove-product-from-cart.php 9 months ago retrieve-coupons-totals.php 11 months ago retrieve-customers-totals.php 11 months ago retrieve-orders-totals.php 11 months ago retrieve-products-totals.php 11 months ago retrieve-refunds-list.php 11 months ago retrieve-reviews-totals.php 11 months ago retrieve-sales-report.php 11 months ago retrieve-top-sellers-report.php 11 months ago update-product-price.php 9 months ago update-product-stock-quantity.php 9 months ago update-status-of-order.php 11 months ago
remove-product-from-cart.php
242 lines
1 <?php
2 /**
3 * RemoveProductFromCart.
4 * php version 5.6
5 *
6 * @category RemoveProductFromCart
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_Product;
19 use Exception;
20
21 /**
22 * RemoveProductFromCart
23 *
24 * @category RemoveProductFromCart
25 * @package SureTriggers
26 * @author BSF <username@example.com>
27 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
28 * @link https://www.brainstormforce.com/
29 * @since 1.0.0
30 */
31 class RemoveProductFromCart extends AutomateAction {
32
33 /**
34 * Integration type.
35 *
36 * @var string
37 */
38 public $integration = 'WooCommerce';
39
40 /**
41 * Action name.
42 *
43 * @var string
44 */
45 public $action = 'wc_remove_product_from_cart';
46
47 use SingletonLoader;
48
49 /**
50 * Register a action.
51 *
52 * @param array $actions actions.
53 * @return array
54 */
55 public function register( $actions ) {
56 $actions[ $this->integration ][ $this->action ] = [
57 'label' => __( 'Remove Product from Cart', 'suretriggers' ),
58 'action' => 'wc_remove_product_from_cart',
59 'function' => [ $this, 'action_listener' ],
60 ];
61 return $actions;
62 }
63
64 /**
65 * Action listener.
66 *
67 * @param int $user_id user_id.
68 * @param int $automation_id automation_id.
69 * @param array $fields fields.
70 * @param array $selected_options selectedOptions.
71 *
72 * @return void|array|bool
73 */
74 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
75 // Handle user identification from selected options.
76 if ( ! empty( $selected_options['user_id'] ) ) {
77 $user_id = intval( $selected_options['user_id'] );
78 } elseif ( ! empty( $selected_options['customer_email'] ) ) {
79 $user = get_user_by( 'email', sanitize_email( $selected_options['customer_email'] ) );
80 if ( $user ) {
81 $user_id = $user->ID;
82 }
83 }
84
85 // Check if WooCommerce is active.
86 if ( ! function_exists( 'WC' ) ) {
87 return [
88 'status' => 'error',
89 'message' => __( 'WooCommerce not available', 'suretriggers' ),
90 ];
91 }
92
93 // Set the current user context for cart operations.
94 wp_set_current_user( $user_id );
95
96 // Initialize WooCommerce components properly.
97 if ( ! WC()->session ) {
98 WC()->session = new \WC_Session_Handler();
99 WC()->session->init();
100 }
101
102 // Initialize customer.
103 if ( ! WC()->customer ) {
104 WC()->customer = new \WC_Customer( $user_id, true );
105 }
106
107 // Initialize cart for the user.
108 if ( ! WC()->cart ) {
109 WC()->cart = new \WC_Cart();
110 }
111
112 // Ensure cart is properly initialized.
113 WC()->cart->get_cart();
114
115 // Validate required fields.
116 foreach ( $fields as $field ) {
117 if ( array_key_exists( 'validationProps', $field ) && empty( $selected_options[ $field['name'] ] ) ) {
118 return [
119 'status' => 'error',
120 'message' => __( 'Required field is missing: ', 'suretriggers' ) . $field['name'],
121 ];
122 }
123 }
124
125 // Get removal parameters.
126 $product_id = ! empty( $selected_options['product_id'] ) ? intval( $selected_options['product_id'] ) : 0;
127 $cart_item_key = ! empty( $selected_options['cart_item_key'] ) ? sanitize_text_field( $selected_options['cart_item_key'] ) : '';
128 $variation_id = ! empty( $selected_options['variation_id'] ) ? intval( $selected_options['variation_id'] ) : 0;
129 $remove_all = ! empty( $selected_options['remove_all'] ) ? (bool) $selected_options['remove_all'] : false;
130
131 // Check if cart is empty.
132 if ( WC()->cart->is_empty() ) {
133 return [
134 'status' => 'error',
135 'message' => __( 'Cart is empty', 'suretriggers' ),
136 ];
137 }
138
139 $removed_items = [];
140 $cart_contents = WC()->cart->get_cart();
141
142 try {
143 // If cart_item_key is provided, remove that specific item.
144 if ( ! empty( $cart_item_key ) ) {
145 if ( isset( $cart_contents[ $cart_item_key ] ) ) {
146 $cart_item = $cart_contents[ $cart_item_key ];
147 $removed_items[] = [
148 'cart_item_key' => $cart_item_key,
149 'product_id' => $cart_item['product_id'],
150 'variation_id' => $cart_item['variation_id'],
151 'quantity' => $cart_item['quantity'],
152 'product_name' => $cart_item['data']->get_name(),
153 ];
154
155 WC()->cart->remove_cart_item( $cart_item_key );
156 } else {
157 return [
158 'status' => 'error',
159 'message' => __( 'Cart item not found', 'suretriggers' ),
160 ];
161 }
162 } else {
163 // Remove by product ID (and optionally variation ID).
164 if ( empty( $product_id ) ) {
165 return [
166 'status' => 'error',
167 'message' => __( 'Product ID or Cart Item Key is required', 'suretriggers' ),
168 ];
169 }
170
171 // Find matching cart items.
172 foreach ( $cart_contents as $key => $cart_item ) {
173 $matches = false;
174
175 // Check if product matches.
176 if ( $cart_item['product_id'] == $product_id ) {
177 // If variation_id is specified, it must match too.
178 if ( $variation_id > 0 ) {
179 $matches = ( $cart_item['variation_id'] == $variation_id );
180 } else {
181 $matches = true;
182 }
183 }
184
185 if ( $matches ) {
186 $removed_items[] = [
187 'cart_item_key' => $key,
188 'product_id' => $cart_item['product_id'],
189 'variation_id' => $cart_item['variation_id'],
190 'quantity' => $cart_item['quantity'],
191 'product_name' => $cart_item['data']->get_name(),
192 ];
193
194 WC()->cart->remove_cart_item( $key );
195
196 // If not removing all matches, break after first match.
197 if ( ! $remove_all ) {
198 break;
199 }
200 }
201 }
202 }
203
204 // Check if any items were removed.
205 if ( empty( $removed_items ) ) {
206 return [
207 'status' => 'error',
208 'message' => __( 'No matching products found in cart', 'suretriggers' ),
209 ];
210 }
211
212 // Calculate cart totals after removal.
213 WC()->cart->calculate_totals();
214
215 // Safely get cart totals.
216 $cart_total = method_exists( WC()->cart, 'get_total' ) ? WC()->cart->get_total() : '0';
217 $cart_subtotal = method_exists( WC()->cart, 'get_subtotal' ) ? WC()->cart->get_subtotal() : '0';
218 $cart_items_count = method_exists( WC()->cart, 'get_cart_contents_count' ) ? WC()->cart->get_cart_contents_count() : 0;
219
220 return [
221 'status' => 'success',
222 'message' => __( 'Product(s) removed from cart successfully', 'suretriggers' ),
223 'removed_items' => $removed_items,
224 'removed_count' => count( $removed_items ),
225 'cart_total' => $cart_total,
226 'cart_subtotal' => $cart_subtotal,
227 'cart_items_count' => $cart_items_count,
228 'cart_is_empty' => WC()->cart->is_empty(),
229 'user_id' => $user_id,
230 ];
231
232 } catch ( Exception $e ) {
233 return [
234 'status' => 'error',
235 'message' => __( 'Error removing product from cart: ', 'suretriggers' ) . $e->getMessage(),
236 ];
237 }
238 }
239 }
240
241 RemoveProductFromCart::get_instance();
242