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();