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 / get-orders-by-email.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 1 week ago create-variable-product.php 1 week 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
get-orders-by-email.php
309 lines
1 <?php
2 /**
3 * GetOrdersByEmail.
4 * php version 5.6
5 *
6 * @category GetOrdersByEmail
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_Order;
19 use Exception;
20
21 /**
22 * GetOrdersByEmail
23 *
24 * @category GetOrdersByEmail
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 GetOrdersByEmail 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_get_orders_by_email';
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' => __( 'Get Orders by Email', 'suretriggers' ),
58 'action' => 'wc_get_orders_by_email',
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 if ( ! function_exists( 'WC' ) || ! function_exists( 'wc_get_orders' ) ) {
76 return [
77 'status' => 'error',
78 'message' => __( 'WooCommerce not available', 'suretriggers' ),
79 ];
80 }
81
82 // Validate required fields.
83 foreach ( $fields as $field ) {
84 if ( array_key_exists( 'validationProps', $field ) && empty( $selected_options[ $field['name'] ] ) ) {
85 return [
86 'status' => 'error',
87 'message' => __( 'Required field is missing: ', 'suretriggers' ) . $field['name'],
88 ];
89 }
90 }
91
92 // Get parameters.
93 $customer_email = ! empty( $selected_options['customer_email'] ) ? sanitize_email( $selected_options['customer_email'] ) : '';
94 $limit = ! empty( $selected_options['limit'] ) ? intval( $selected_options['limit'] ) : 50; // Default limit.
95 $status = ! empty( $selected_options['status'] ) ? sanitize_text_field( $selected_options['status'] ) : '';
96 $date_from = ! empty( $selected_options['date_from'] ) ? sanitize_text_field( $selected_options['date_from'] ) : '';
97 $date_to = ! empty( $selected_options['date_to'] ) ? sanitize_text_field( $selected_options['date_to'] ) : '';
98
99 if ( empty( $customer_email ) || ! is_email( $customer_email ) ) {
100 return [
101 'status' => 'error',
102 'message' => __( 'Valid customer email is required', 'suretriggers' ),
103 ];
104 }
105
106 // Ensure limit is reasonable.
107 if ( $limit > 100 ) {
108 $limit = 100; // Max 100 orders per request.
109 }
110
111 try {
112 // Build query arguments.
113 $args = [
114 'customer' => $customer_email,
115 'limit' => $limit,
116 'orderby' => 'date',
117 'order' => 'DESC',
118 ];
119
120 // Add status filter if provided.
121 if ( ! empty( $status ) ) {
122 $args['status'] = $status;
123 }
124
125 // Add date range if provided.
126 if ( ! empty( $date_from ) ) {
127 $args['date_created'] = '>=' . $date_from;
128 }
129 if ( ! empty( $date_to ) ) {
130 if ( ! empty( $date_from ) ) {
131 $args['date_created'] = $date_from . '...' . $date_to;
132 } else {
133 $args['date_created'] = '<=' . $date_to;
134 }
135 }
136
137 // Get orders.
138 $orders = wc_get_orders( $args );
139
140 if ( empty( $orders ) ) {
141 return [
142 'status' => 'success',
143 'message' => __( 'No orders found for this email', 'suretriggers' ),
144 'orders' => [],
145 'orders_count' => 0,
146 'search_email' => $customer_email,
147 'search_params' => [
148 'limit' => $limit,
149 'status' => $status,
150 'date_from' => $date_from,
151 'date_to' => $date_to,
152 ],
153 ];
154 }
155
156 $orders_data = [];
157 $total_value = 0;
158
159 if ( is_array( $orders ) ) {
160 foreach ( $orders as $order ) {
161 if ( ! $order instanceof WC_Order ) {
162 continue;
163 }
164
165 // Get order items.
166 $items = [];
167 $order_items = $order->get_items();
168 foreach ( $order_items as $item ) {
169 if ( $item instanceof \WC_Order_Item_Product ) {
170 $product = $item->get_product();
171 $product_sku = '';
172 if ( $product && $product instanceof \WC_Product ) {
173 $product_sku = $product->get_sku();
174 }
175 $items[] = [
176 'id' => $item->get_id(),
177 'name' => $item->get_name(),
178 'product_id' => $item->get_product_id(),
179 'variation_id' => $item->get_variation_id(),
180 'quantity' => $item->get_quantity(),
181 'total' => $item->get_total(),
182 'sku' => $product_sku,
183 ];
184 }
185 }
186
187 // Get coupons used.
188 $coupons = [];
189 foreach ( $order->get_coupon_codes() as $coupon_code ) {
190 $coupon_discount = 0;
191
192 // Get discount amount from coupon items.
193 $used_coupons = $order->get_items( 'coupon' );
194 foreach ( $used_coupons as $coupon_item ) {
195 if ( $coupon_item instanceof \WC_Order_Item_Coupon && $coupon_item->get_name() === $coupon_code ) {
196 $coupon_discount = abs( floatval( $coupon_item->get_discount() ) );
197 break;
198 }
199 }
200
201 $coupons[] = [
202 'code' => $coupon_code,
203 'amount' => $coupon_discount,
204 ];
205 }
206
207 // Get order meta.
208 $order_meta = [];
209 $meta_data = $order->get_meta_data();
210 if ( is_array( $meta_data ) ) {
211 foreach ( $meta_data as $meta ) {
212 $meta_array = $meta->get_data();
213 if ( is_array( $meta_array ) && isset( $meta_array['key'] ) && is_string( $meta_array['key'] ) && ! str_starts_with( $meta_array['key'], '_' ) ) { // Skip private meta.
214 $order_meta[ $meta_array['key'] ] = $meta_array['value'];
215 }
216 }
217 }
218
219 $order_data = [
220 'id' => $order->get_id(),
221 'order_number' => $order->get_order_number(),
222 'status' => $order->get_status(),
223 'currency' => $order->get_currency(),
224 'total' => $order->get_total(),
225 'subtotal' => $order->get_subtotal(),
226 'tax_total' => $order->get_total_tax(),
227 'shipping_total' => $order->get_shipping_total(),
228 'discount_total' => $order->get_discount_total(),
229 'payment_method' => $order->get_payment_method(),
230 'payment_method_title' => $order->get_payment_method_title(),
231 'transaction_id' => $order->get_transaction_id(),
232 'date_created' => $order->get_date_created() ? $order->get_date_created()->getTimestamp() : null,
233 'date_modified' => $order->get_date_modified() ? $order->get_date_modified()->getTimestamp() : null,
234 'date_completed' => $order->get_date_completed() ? $order->get_date_completed()->getTimestamp() : null,
235 'customer_note' => $order->get_customer_note(),
236 'billing_address' => [
237 'first_name' => $order->get_billing_first_name(),
238 'last_name' => $order->get_billing_last_name(),
239 'company' => $order->get_billing_company(),
240 'address_1' => $order->get_billing_address_1(),
241 'address_2' => $order->get_billing_address_2(),
242 'city' => $order->get_billing_city(),
243 'state' => $order->get_billing_state(),
244 'postcode' => $order->get_billing_postcode(),
245 'country' => $order->get_billing_country(),
246 'email' => $order->get_billing_email(),
247 'phone' => $order->get_billing_phone(),
248 ],
249 'shipping_address' => [
250 'first_name' => $order->get_shipping_first_name(),
251 'last_name' => $order->get_shipping_last_name(),
252 'company' => $order->get_shipping_company(),
253 'address_1' => $order->get_shipping_address_1(),
254 'address_2' => $order->get_shipping_address_2(),
255 'city' => $order->get_shipping_city(),
256 'state' => $order->get_shipping_state(),
257 'postcode' => $order->get_shipping_postcode(),
258 'country' => $order->get_shipping_country(),
259 ],
260 'items' => $items,
261 'items_count' => count( $items ),
262 'coupons' => $coupons,
263 'order_meta' => $order_meta,
264 ];
265
266 $orders_data[] = $order_data;
267 $total_value += floatval( $order->get_total() );
268 }
269 }
270
271 // Calculate summary statistics.
272 $statuses = array_count_values( array_column( $orders_data, 'status' ) );
273 $order_count = count( $orders_data );
274
275 return [
276 'status' => 'success',
277 'message' => sprintf( __( 'Found %d orders for this email', 'suretriggers' ), $order_count ),
278 'orders' => $orders_data,
279 'orders_count' => $order_count,
280 'total_value' => wc_format_decimal( $total_value, 2 ),
281 'search_email' => $customer_email,
282 'search_params' => [
283 'limit' => $limit,
284 'status' => $status,
285 'date_from' => $date_from,
286 'date_to' => $date_to,
287 ],
288 'summary' => [
289 'total_orders' => $order_count,
290 'total_value' => wc_format_decimal( $total_value, 2 ),
291 'statuses' => $statuses,
292 'date_range' => [
293 'from' => $date_from,
294 'to' => $date_to,
295 ],
296 ],
297 ];
298
299 } catch ( Exception $e ) {
300 return [
301 'status' => 'error',
302 'message' => __( 'Error retrieving orders: ', 'suretriggers' ) . $e->getMessage(),
303 ];
304 }
305 }
306 }
307
308 GetOrdersByEmail::get_instance();
309