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/Async_Events/Order_Created.php
<?php

namespace AutomateWoo\Async_Events;

use AutomateWoo\Clean;
use WP_Post;

defined( 'ABSPATH' ) || exit;

/**
 * Class Order_Created
 *
 * @since 4.8.0
 */
class Order_Created extends Abstract_Async_Event {

	use UniqueEventsForRequestHelper;

	const MAYBE_ORDER_CREATED_HOOK = 'automatewoo/async/maybe_order_created';
	const ORDER_CREATED_META_KEY   = '_automatewoo_order_created';

	/**
	 * Init the event.
	 */
	public function init() {
		add_action( 'woocommerce_new_order', [ $this, 'enqueue_maybe_order_created_async_event' ], 100 );

		if ( is_admin() ) {
			add_action( 'transition_post_status', [ $this, 'handle_transition_post_status' ], 50, 3 );
		}

		add_action( self::MAYBE_ORDER_CREATED_HOOK, [ $this, 'maybe_do_order_created_action' ] );
	}

	/**
	 * Handle post status transition.
	 *
	 * @param string  $new_status
	 * @param string  $old_status
	 * @param WP_Post $post
	 */
	public function handle_transition_post_status( string $new_status, string $old_status, WP_Post $post ) {
		if ( $post->post_type !== 'shop_order' ) {
			return;
		}

		$draft_statuses = aw_get_draft_post_statuses();

		// ensure that the old status IS a draft status and the new status IS NOT a draft status
		if ( in_array( $old_status, $draft_statuses, true ) && ! in_array( $new_status, $draft_statuses, true ) ) {
			$this->enqueue_maybe_order_created_async_event( $post->ID );
		}
	}

	/**
	 * An order was created.
	 *
	 * @param int|string $order_id
	 */
	public function enqueue_maybe_order_created_async_event( $order_id ) {
		$order_id = Clean::id( $order_id );
		if ( ! $order_id ) {
			return;
		}

		// Due to the variety of order created hooks, protect against adding multiple events for the same order_id
		if ( $this->check_item_is_unique_for_event( $order_id ) ) {
			return;
		}

		$this->record_event_added_for_item( $order_id );
		$this->action_scheduler->enqueue_async_action( self::MAYBE_ORDER_CREATED_HOOK, [ $order_id ] );
	}

	/**
	 * Handles async order created event.
	 *
	 * Prevents duplicate events from running with a meta check.
	 *
	 * @param int $order_id
	 */
	public function maybe_do_order_created_action( int $order_id ) {
		$order = wc_get_order( Clean::id( $order_id ) );
		if ( ! $order || $order->get_meta( self::ORDER_CREATED_META_KEY ) ) {
			return;
		}

		$order->update_meta_data( self::ORDER_CREATED_META_KEY, true );
		$order->save();

		// do real async order created action
		do_action( $this->get_hook_name(), $order_id );
	}

	/**
	 * @param string  $new_status
	 * @param string  $old_status
	 * @param WP_Post $post
	 *
	 * @deprecated use \AutomateWoo\Async_Events\Order_Created::handle_transition_post_status()
	 */
	public function transition_post_status( $new_status, $old_status, $post ) {
		wc_deprecated_function( __METHOD__, '5.2.0', '\AutomateWoo\Async_Events\Order_Created::handle_transition_post_status' );
		$this->handle_transition_post_status( $new_status, $old_status, $post );
	}

	/**
	 * @param int|string $order_id
	 *
	 * @deprecated use \AutomateWoo\Async_Events\Order_Created::enqueue_maybe_order_created_async_event()
	 */
	public function order_created( $order_id ) {
		wc_deprecated_function( __METHOD__, '5.2.0', '\AutomateWoo\Async_Events\Order_Created::enqueue_maybe_order_created_async_event' );
		$this->enqueue_maybe_order_created_async_event( $order_id );
	}

}