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/admin/controllers/dashboard.php
<?php
// phpcs:ignoreFile

namespace AutomateWoo\Admin\Controllers;

use AutomateWoo;
use AutomateWoo\Options;
use AutomateWoo\Time_Helper;
use AutomateWoo\Dashboard_Widget;
use AutomateWoo\Clean;
use AutomateWoo\DateTime;

if ( ! defined( 'ABSPATH' ) ) exit;

/**
 * @class Dashboard
 */
class Dashboard extends Base {

	/** @var array */
	private $widgets;

	/** @var array */
	private $logs;

	/** @var array */
	private $carts;

	/** @var array */
	private $guests;

	/** @var array */
	private $optins_count;

	/** @var array */
	private $conversions;

	/** @var int */
	private $guests_count;

	/** @var int */
	private $active_carts_count;

	/** @var int */
	private $queued_count;


	function handle() {

		wp_enqueue_script( 'automatewoo-dashboard' );

		$this->maybe_set_date_cookie();

		$widgets = $this->get_widgets();
		$date_arg = $this->get_date_arg();
		$date_range = $this->get_date_range();
		$date_tabs = [
			'90days' => __( '90 days', 'automatewoo' ),
			'30days' => __( '30 days', 'automatewoo' ),
			'14days' => __( '14 days', 'automatewoo' ),
			'7days' => __( '7 days', 'automatewoo' )
		];

		foreach ( $widgets as $i => $widget ) {
			$widget->set_date_range( $date_range['from'], $date_range['to'] );
			if ( ! $widget->display ) {
				unset( $widgets[$i] );
			}
		}

		$this->output_view( 'page-dashboard', [
			'widgets' => $widgets,
			'date_text' => $date_tabs[$date_arg],
			'date_current' => $this->get_date_arg(),
			'date_tabs' => $date_tabs
		]);
	}


	/**
	 * @return Dashboard_Widget[]
	 */
	function get_widgets() {

		if ( ! isset( $this->widgets ) ) {

			$path = AW()->path( '/admin/dashboard-widgets/' );

			$includes = [];

			$includes[] = $path . 'chart-workflows-run.php';
			$includes[] = $path . 'chart-conversions.php';
			$includes[] = $path . 'chart-email.php';

			$includes = apply_filters( 'automatewoo/dashboard/chart_widgets', $includes );

			$includes[] = $path . 'key-figures.php';
			$includes[] = $path . 'workflows.php';
			$includes[] = $path . 'logs.php';
			$includes[] = $path . 'queue.php';

			$includes = apply_filters( 'automatewoo/dashboard/widgets', $includes );

			foreach ( $includes as $include ) {
				/** @var Dashboard_Widget $class */
				$class = require_once $include;
				$class->controller = $this;
				$this->widgets[ $class->id ] = $class;
			}
		}

		return $this->widgets;
	}


	/**
	 * @return string
	 */
	function get_date_arg() {

		$cookie_name = 'automatewoo_dashboard_date';

		if ( ! aw_request( 'date' ) && isset( $_COOKIE[ $cookie_name ] ) ) {
			return Clean::string( $_COOKIE[ $cookie_name ] );
		}

		if ( aw_request( 'date' ) ) {
			$date = Clean::string( aw_request( 'date' ) );
			return $date;
		}

		return '30days';
	}


	function maybe_set_date_cookie() {
		if ( aw_request( 'date' ) ) {
			$date = Clean::string( aw_request( 'date' ) );
			if ( ! headers_sent() ) wc_setcookie( 'automatewoo_dashboard_date', $date, time() + MONTH_IN_SECONDS * 2, is_ssl() );
		}
	}


	/**
	 * @return array
	 */
	function get_date_range() {

		$range = $this->get_date_arg();

		$from = new DateTime();
		$to = new DateTime();

		switch ( $range ) {
			case '14days':
				$from->modify( "-14 days" );
				break;
			case '7days':
				$from->modify( "-7 days" );
				break;
			case '30days':
				$from->modify( "-30 days" );
				break;
			case '90days':
				$from->modify( "-90 days" );
				break;
		}

		return apply_filters( 'automatewoo/dashboard/date_range', [
			'from' => $from,
			'to' => $to
		]);
	}


	/**
	 * @return AutomateWoo\Log[]
	 */
	function get_logs() {
		if ( ! isset( $this->logs ) ) {

			$date = $this->get_date_range();

			$query = new AutomateWoo\Log_Query();
			$query->where_date_between( $date['from'], $date['to'] );

			$this->logs = $query->get_results();
		}

		return $this->logs;
	}


	/**
	 * @return int
	 */
	function get_active_carts_count() {
		if ( ! isset( $this->active_carts_count ) ) {
			$query = new AutomateWoo\Cart_Query();
			$query->where_status( 'active' );
			$this->active_carts_count = $query->get_count();
		}

		return $this->active_carts_count;
	}


	/**
	 * @return AutomateWoo\Guest[]
	 */
	function get_guests() {
		if ( ! isset( $this->guests ) ) {

			$date = $this->get_date_range();

			$query = new AutomateWoo\Guest_Query();
			$query->where( 'created', $date['from'], '>' );
			$query->where( 'created', $date['to'], '<' );

			$this->guests = $query->get_results();
		}

		return $this->guests;
	}


	/**
	 * @return int
	 */
	function get_guests_count() {
		if ( ! isset( $this->guests_count ) ) {

			$date = $this->get_date_range();

			$query = new AutomateWoo\Guest_Query();
			$query->where( 'created', $date['from'], '>' );
			$query->where( 'created', $date['to'], '<' );

			$this->guests_count = $query->get_count();
		}

		return $this->guests_count;
	}


	/**
	 * @return int
	 */
	function get_queued_count() {
		if ( ! isset( $this->queued_count ) ) {

			$date = $this->get_date_range();

			$query = new AutomateWoo\Queue_Query();
			$query->where_date_created_between( $date['from'], $date['to'] );

			$this->queued_count = $query->get_count();
		}

		return $this->queued_count;
	}


	/**
	 * Get customers who have opted IN or OUT
	 * (whichever is the opposite of the default configured setting).
	 *
	 * @return int
	 */
	public function get_optins_count() {
		if ( ! isset( $this->optins_count ) ) {

			$date = $this->get_date_range();

			$query = new AutomateWoo\Customer_Query();

			if ( Options::optin_enabled() ) {
				$query->where( 'subscribed', true );
				$query->where( 'subscribed_date', $date['from'], '>' );
				$query->where( 'subscribed_date', $date['to'], '<' );
			} else {
				$query->where( 'unsubscribed', true );
				$query->where( 'unsubscribed_date', $date['from'], '>' );
				$query->where( 'unsubscribed_date', $date['to'], '<' );
			}


			$this->optins_count = $query->get_count();
		}

		return $this->optins_count;
	}


	/**
	 * @return \WC_Order[]
	 */
	function get_conversions() {
		if ( ! isset( $this->conversions ) ) {

			$date = $this->get_date_range();

			Time_Helper::convert_from_gmt( $date['from'] );
			Time_Helper::convert_from_gmt( $date['to'] );

			$query = new \WP_Query([
				'post_type' => 'shop_order',
				'post_status' => array_map( 'aw_add_order_status_prefix', wc_get_is_paid_statuses() ),
				'posts_per_page' => -1,
				'fields' => 'ids',
				'no_found_rows' => true,
				'meta_query' => [
					[
						'key' => '_aw_conversion',
						'compare' => 'EXISTS',
					]
				],
				'date_query' => [
					[
						'column' => 'post_date',
						'after' => $date['from']->format('Y-m-d H:i:s')
					],
					[
						'column' => 'post_date',
						'before' => $date['to']->format('Y-m-d H:i:s')
					]
				]
			]);

			$this->conversions = array_map( 'wc_get_order', $query->posts );
		}

		return $this->conversions;
	}

}

return new Dashboard();