HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: /var/www/html/ielts-store/wp-content/plugins/automatewoo/includes/Order_Helper.php
<?php
// phpcs:ignoreFile

namespace AutomateWoo;

/**
 * @class Order_Helper
 */
class Order_Helper {


	function __construct() {
		if ( AUTOMATEWOO_DISABLE_ASYNC_ORDER_STATUS_CHANGED ) {
			// if not using async status change hook refresh customer totals before triggers fire
			add_action( 'woocommerce_order_status_changed', [ $this, 'maybe_refresh_customer_totals' ], 5, 3 );
		}

		add_action( 'woocommerce_delete_shop_order_transients', [ $this, 'delete_shop_order_transients' ] );
	}


	/**
	 * @deprecated not needed post wc 3.0
	 *
	 * @param int $order_item_id
	 * @param array|\WC_Order_Item_Product $order_item
	 * @return array|bool|\WC_Order_Item_Product
	 */
	function prepare_order_item( $order_item_id, $order_item ) {

		if ( ! $order_item ) {
			return false;
		}

		// add id key for WC < 3.0
		if ( is_array( $order_item ) ) {
			$order_item['id'] = $order_item_id;
		}

		return $order_item;
	}


	/**
	 * In WC_Abstract_Order::update_status() customer totals refresh after change status hooks have fired.
	 * We need access to these for order triggers so manually refresh early.
	 * In the future order triggers could fire async which should solve this issue
	 *
	 * @param $order_id
	 * @param $old_status
	 * @param $new_status
	 */
	function maybe_refresh_customer_totals( $order_id, $old_status, $new_status ) {

		if ( ! in_array( $new_status, [ 'completed', 'processing', 'on-hold', 'cancelled' ] ) )
			return;

		if ( ! $order = wc_get_order( $order_id ) )
			return;

		$customer = Customer_Factory::get_by_order( $order );

		if ( $customer ) {
			$customer->delete_meta( 'order_count' );
			$customer->delete_meta( 'total_spent' );
		}

		$user_id = $order->get_user_id();

		if ( $user_id ) {
			delete_user_meta( $user_id, '_money_spent' );
			delete_user_meta( $user_id, '_order_count' );
			delete_user_meta( $user_id, '_aw_order_count' );
			delete_user_meta( $user_id, '_aw_order_ids' );
		}
	}


	/**
	 * @param $order_id
	 */
	function delete_shop_order_transients( $order_id ) {

		if ( ! $order = wc_get_order( $order_id ) )
			return;

		$customer = Customer_Factory::get_by_order( $order );

		if ( $customer ) {
			$customer->delete_meta( 'order_count' );
			$customer->delete_meta( 'total_spent' );
		}

		$user_id = $order->get_user_id();

		if ( $user_id ) {
			delete_user_meta( $user_id, '_aw_order_count' );
			delete_user_meta( $user_id, '_aw_order_ids' );
		}
	}


	/**
	 * LEGACY - use Customer object instead of this function
	 *
	 * @deprecated
	 *
	 * @param \WC_Order $order
	 * @return Order_Guest|\WP_User|false
	 */
	function prepare_user_data_item( $order ) {

		if ( ! $order ) {
			return false;
		}

		$user = $order->get_user();

		if ( $user ) {
			// ensure first and last name are set
			if ( ! $user->first_name ) $user->first_name = Compat\Order::get_billing_first_name( $order );
			if ( ! $user->last_name ) $user->last_name = Compat\Order::get_billing_last_name( $order );
			if ( ! $user->billing_phone ) $user->billing_phone = Compat\Order::get_billing_phone( $order );
		}
		else {
			// order placed by a guest
			$user = new Order_Guest( $order );
		}

		return $user;
	}

}