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-all-customers.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-all-customers.php
247 lines
1 <?php
2 /**
3 * GetAllCustomers.
4 * php version 5.6
5 *
6 * @category GetAllCustomers
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\Integrations\WooCommerce\WooCommerce;
18 use SureTriggers\Traits\SingletonLoader;
19
20 /**
21 * GetAllCustomers
22 *
23 * @category GetAllCustomers
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 GetAllCustomers extends AutomateAction {
31
32 use SingletonLoader;
33
34 /**
35 * Integration type.
36 *
37 * @var string
38 */
39 public $integration = 'WooCommerce';
40
41 /**
42 * Action name.
43 *
44 * @var string
45 */
46 public $action = 'wc_get_all_customers';
47
48 /**
49 * Register the action.
50 *
51 * @param array $actions Actions array.
52 * @return array
53 */
54 public function register( $actions ) {
55 $actions[ $this->integration ][ $this->action ] = [
56 'label' => __( 'Get All Customers', 'suretriggers' ),
57 'action' => $this->action,
58 'function' => [ $this, 'action_listener' ],
59 ];
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 Selected options.
71 * @return array
72 */
73 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
74 if ( ! class_exists( 'WC_Customer' ) ) {
75 return [
76 'success' => false,
77 'message' => __( 'WooCommerce Customer class not available.', 'suretriggers' ),
78 ];
79 }
80
81 // Get parameters with defaults.
82 $limit = isset( $selected_options['limit'] ) ? intval( $selected_options['limit'] ) : 10;
83 $role = isset( $selected_options['role'] ) ? $selected_options['role'] : 'customer';
84
85 // Validate limit.
86 if ( $limit <= 0 || $limit > 100 ) {
87 $limit = 10;
88 }
89
90 // Get customers using WordPress users query.
91 $args = [
92 'role' => $role,
93 'number' => $limit,
94 'orderby' => 'registered',
95 'order' => 'DESC',
96 ];
97
98 $users = get_users( $args );
99
100 if ( empty( $users ) ) {
101 return [
102 'success' => true,
103 'customers' => [],
104 'customers_count' => 0,
105 'message' => __( 'No customers found.', 'suretriggers' ),
106 ];
107 }
108
109 // Format customers data.
110 $formatted_customers = [];
111 foreach ( $users as $user ) {
112 $formatted_customers[] = $this->format_customer_data( $user );
113 }
114
115 $response_data = [
116 'success' => true,
117 'customers' => $formatted_customers,
118 'customers_count' => count( $formatted_customers ),
119 'filters_applied' => [
120 'limit' => $limit,
121 'role' => $role,
122 ],
123 'message' => sprintf( __( 'Retrieved %d customers.', 'suretriggers' ), count( $formatted_customers ) ),
124 ];
125
126 return $response_data;
127 }
128
129 /**
130 * Format customer data.
131 *
132 * @param \WP_User $user WordPress user object.
133 * @return array
134 */
135 private function format_customer_data( $user ) {
136 if ( ! is_a( $user, 'WP_User' ) ) {
137 return [];
138 }
139 $customer = new \WC_Customer( $user->ID );
140
141 // Get dates with null checks.
142 $date_created = $customer->get_date_created();
143 $date_modified = $customer->get_date_modified();
144
145 $customer_data = [
146 'id' => $customer->get_id(),
147 'username' => $customer->get_username(),
148 'email' => $customer->get_email(),
149 'first_name' => $customer->get_first_name(),
150 'last_name' => $customer->get_last_name(),
151 'display_name' => $customer->get_display_name(),
152 'role' => is_array( $user->roles ) ? implode( ', ', $user->roles ) : '',
153 'date_created' => $date_created ? $date_created->date( 'Y-m-d H:i:s' ) : '',
154 'date_modified' => $date_modified ? $date_modified->date( 'Y-m-d H:i:s' ) : '',
155 'orders_count' => $customer->get_order_count(),
156 'total_spent' => wc_format_decimal( $customer->get_total_spent(), 2 ),
157 'avatar_url' => $customer->get_avatar_url(),
158 ];
159
160 // Add billing information.
161 $customer_data['billing'] = [
162 'first_name' => $customer->get_billing_first_name(),
163 'last_name' => $customer->get_billing_last_name(),
164 'company' => $customer->get_billing_company(),
165 'address_1' => $customer->get_billing_address_1(),
166 'address_2' => $customer->get_billing_address_2(),
167 'city' => $customer->get_billing_city(),
168 'state' => $customer->get_billing_state(),
169 'postcode' => $customer->get_billing_postcode(),
170 'country' => $customer->get_billing_country(),
171 'email' => $customer->get_billing_email(),
172 'phone' => $customer->get_billing_phone(),
173 ];
174
175 // Add shipping information.
176 $customer_data['shipping'] = [
177 'first_name' => $customer->get_shipping_first_name(),
178 'last_name' => $customer->get_shipping_last_name(),
179 'company' => $customer->get_shipping_company(),
180 'address_1' => $customer->get_shipping_address_1(),
181 'address_2' => $customer->get_shipping_address_2(),
182 'city' => $customer->get_shipping_city(),
183 'state' => $customer->get_shipping_state(),
184 'postcode' => $customer->get_shipping_postcode(),
185 'country' => $customer->get_shipping_country(),
186 ];
187
188 // Get last order information.
189 $last_order = $customer->get_last_order();
190 if ( $last_order ) {
191 $order_date = $last_order->get_date_created();
192 $customer_data['last_order'] = [
193 'id' => $last_order->get_id(),
194 'order_number' => $last_order->get_order_number(),
195 'status' => $last_order->get_status(),
196 'total' => $last_order->get_total(),
197 'date_created' => $order_date ? $order_date->date( 'Y-m-d H:i:s' ) : '',
198 ];
199 } else {
200 $customer_data['last_order'] = null;
201 }
202
203 // Add formatted country names.
204 if ( ! empty( $customer_data['billing']['country'] ) ) {
205 $countries = WC()->countries->get_countries();
206 $customer_data['billing']['country_name'] = isset( $countries[ $customer_data['billing']['country'] ] )
207 ? $countries[ $customer_data['billing']['country'] ]
208 : $customer_data['billing']['country'];
209 }
210
211 if ( ! empty( $customer_data['shipping']['country'] ) ) {
212 $countries = WC()->countries->get_countries();
213 $customer_data['shipping']['country_name'] = isset( $countries[ $customer_data['shipping']['country'] ] )
214 ? $countries[ $customer_data['shipping']['country'] ]
215 : $customer_data['shipping']['country'];
216 }
217
218 // Add formatted state names.
219 if ( ! empty( $customer_data['billing']['state'] ) && ! empty( $customer_data['billing']['country'] ) ) {
220 $states = WC()->countries->get_states( $customer_data['billing']['country'] );
221 if ( ! empty( $states ) && isset( $states[ $customer_data['billing']['state'] ] ) ) {
222 $customer_data['billing']['state_name'] = $states[ $customer_data['billing']['state'] ];
223 }
224 }
225
226 if ( ! empty( $customer_data['shipping']['state'] ) && ! empty( $customer_data['shipping']['country'] ) ) {
227 $states = WC()->countries->get_states( $customer_data['shipping']['country'] );
228 if ( ! empty( $states ) && isset( $states[ $customer_data['shipping']['state'] ] ) ) {
229 $customer_data['shipping']['state_name'] = $states[ $customer_data['shipping']['state'] ];
230 }
231 }
232
233 // Calculate customer lifetime value stats.
234 $customer_data['stats'] = [
235 'orders_count' => $customer->get_order_count(),
236 'total_spent' => wc_format_decimal( $customer->get_total_spent(), 2 ),
237 'average_order_value' => $customer->get_order_count() > 0
238 ? wc_format_decimal( $customer->get_total_spent() / $customer->get_order_count(), 2 )
239 : '0.00',
240 ];
241
242 return $customer_data;
243 }
244 }
245
246 GetAllCustomers::get_instance();
247