407 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			407 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Dashboard page class: Dashboard extends Abstract_Page.
 | 
						|
 *
 | 
						|
 * @since 3.8.6
 | 
						|
 * @package Smush\App\Pages
 | 
						|
 */
 | 
						|
 | 
						|
namespace Smush\App\Pages;
 | 
						|
 | 
						|
use Smush\App\Abstract_Summary_Page;
 | 
						|
use Smush\App\Interface_Page;
 | 
						|
use Smush\Core\Array_Utils;
 | 
						|
use Smush\Core\Resize\Resize_Optimization;
 | 
						|
use Smush\Core\Settings;
 | 
						|
use Smush\Core\Stats\Global_Stats;
 | 
						|
use WP_Smush;
 | 
						|
 | 
						|
if ( ! defined( 'WPINC' ) ) {
 | 
						|
	die;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Class Dashboard
 | 
						|
 */
 | 
						|
class Dashboard extends Abstract_Summary_Page implements Interface_Page {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Function triggered when the page is loaded before render any content.
 | 
						|
	 */
 | 
						|
	public function on_load() {}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Enqueue scripts.
 | 
						|
	 *
 | 
						|
	 * @since 3.9.0
 | 
						|
	 *
 | 
						|
	 * @param string $hook Hook from where the call is made.
 | 
						|
	 */
 | 
						|
	public function enqueue_scripts( $hook ) {
 | 
						|
		// Scripts for Configs.
 | 
						|
		$this->enqueue_configs_scripts();
 | 
						|
 | 
						|
		// Scripts for Tutorials.
 | 
						|
		$this->enqueue_tutorials_scripts();
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Register meta boxes.
 | 
						|
	 */
 | 
						|
	public function register_meta_boxes() {
 | 
						|
		if ( ! is_multisite() || ( is_multisite() && ! is_network_admin() ) ) {
 | 
						|
			$this->add_meta_box(
 | 
						|
				'dashboard/summary',
 | 
						|
				null,
 | 
						|
				array( $this, 'summary_meta_box' ),
 | 
						|
				null,
 | 
						|
				null,
 | 
						|
				'summary',
 | 
						|
				array(
 | 
						|
					'box_class'         => 'sui-box sui-summary sui-summary-smush-metabox',
 | 
						|
					'box_content_class' => false,
 | 
						|
				)
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Meta boxes on the left side.
 | 
						|
		 */
 | 
						|
 | 
						|
		if ( self::should_render( 'bulk' ) ) {
 | 
						|
			$this->add_meta_box(
 | 
						|
				'dashboard/bulk',
 | 
						|
				__( 'Bulk Smush', 'wp-smushit' ),
 | 
						|
				array( $this, 'bulk_compress_meta_box' ),
 | 
						|
				null,
 | 
						|
				null,
 | 
						|
				'box-dashboard-left'
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		if ( self::should_render( 'integrations' ) ) {
 | 
						|
			$this->add_meta_box(
 | 
						|
				'dashboard/integrations',
 | 
						|
				__( 'Integrations', 'wp-smushit' ),
 | 
						|
				array( $this, 'integrations_meta_box' ),
 | 
						|
				null,
 | 
						|
				null,
 | 
						|
				'box-dashboard-left'
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		if ( self::should_render( 'cdn' ) ) {
 | 
						|
			$this->add_meta_box(
 | 
						|
				'dashboard/cdn',
 | 
						|
				__( 'CDN', 'wp-smushit' ),
 | 
						|
				array( $this, 'cdn_meta_box' ),
 | 
						|
				array( $this, 'cdn_meta_box_header' ),
 | 
						|
				null,
 | 
						|
				'box-dashboard-left'
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Meta boxes on the right side.
 | 
						|
		 */
 | 
						|
		if ( ! WP_Smush::is_pro() ) {
 | 
						|
			$this->add_meta_box(
 | 
						|
				'dashboard/upsell/upsell',
 | 
						|
				__( 'Smush Pro', 'wp-smushit' ),
 | 
						|
				array( $this, 'upsell_meta_box' ),
 | 
						|
				array( $this, 'upsell_meta_box_header' ),
 | 
						|
				null,
 | 
						|
				'box-dashboard-right'
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		if ( self::should_render( 'directory' ) ) {
 | 
						|
			$this->add_meta_box(
 | 
						|
				'dashboard/directory',
 | 
						|
				__( 'Directory Smush', 'wp-smushit' ),
 | 
						|
				array( $this, 'directory_compress_meta_box' ),
 | 
						|
				null,
 | 
						|
				null,
 | 
						|
				'box-dashboard-right'
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		if ( self::should_render( 'lazy_load' ) ) {
 | 
						|
			$this->add_meta_box(
 | 
						|
				'dashboard/lazy-load',
 | 
						|
				__( 'Lazy Load', 'wp-smushit' ),
 | 
						|
				array( $this, 'lazy_load_meta_box' ),
 | 
						|
				null,
 | 
						|
				null,
 | 
						|
				'box-dashboard-right'
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		if ( self::should_render( 'webp' ) ) {
 | 
						|
			$this->add_meta_box(
 | 
						|
				'dashboard/webp',
 | 
						|
				__( 'Local WebP', 'wp-smushit' ),
 | 
						|
				array( $this, 'local_webp_meta_box' ),
 | 
						|
				array( $this, 'local_webp_meta_box_header' ),
 | 
						|
				null,
 | 
						|
				'box-dashboard-right'
 | 
						|
			);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Summary meta box.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function summary_meta_box() {
 | 
						|
		$upsell_url_cdn = add_query_arg(
 | 
						|
			array(
 | 
						|
				'utm_source'   => 'smush',
 | 
						|
				'utm_medium'   => 'plugin',
 | 
						|
				'utm_campaign' => 'summary_cdn',
 | 
						|
			),
 | 
						|
			$this->upgrade_url
 | 
						|
		);
 | 
						|
 | 
						|
		$upsell_url_webp = add_query_arg(
 | 
						|
			array(
 | 
						|
				'utm_source'   => 'smush',
 | 
						|
				'utm_medium'   => 'plugin',
 | 
						|
				'utm_campaign' => 'summary_local_webp',
 | 
						|
			),
 | 
						|
			$this->upgrade_url
 | 
						|
		);
 | 
						|
 | 
						|
		$core         = WP_Smush::get_instance()->core();
 | 
						|
		$array_utils  = new Array_Utils();
 | 
						|
		$global_stats = $core->get_global_stats();
 | 
						|
 | 
						|
		$args = array(
 | 
						|
			'human_bytes'       => $array_utils->get_array_value( $global_stats, 'human_bytes' ),
 | 
						|
			'cdn_status'        => WP_Smush::get_instance()->core()->mod->cdn->status(),
 | 
						|
			'is_cdn'            => $this->settings->get( 'cdn' ),
 | 
						|
			'is_lazy_load'      => $this->settings->get( 'lazy_load' ),
 | 
						|
			'is_local_webp'     => $this->settings->get( 'webp_mod' ),
 | 
						|
			'resize_count'      => $array_utils->get_array_value( $global_stats, 'count_resize' ),
 | 
						|
			'total_optimized'   => $array_utils->get_array_value( $global_stats, 'count_images' ),
 | 
						|
			'stats_percent'     => $array_utils->get_array_value( $global_stats, 'savings_percent' ),
 | 
						|
			'upsell_url_cdn'    => $upsell_url_cdn,
 | 
						|
			'upsell_url_webp'   => $upsell_url_webp,
 | 
						|
			'webp_configured'   => true === WP_Smush::get_instance()->core()->mod->webp->is_configured(),
 | 
						|
			'percent_grade'     => $array_utils->get_array_value( $global_stats, 'percent_grade' ),
 | 
						|
			'percent_metric'    => $array_utils->get_array_value( $global_stats, 'percent_metric' ),
 | 
						|
			'percent_optimized' => $array_utils->get_array_value( $global_stats, 'percent_optimized' ),
 | 
						|
		);
 | 
						|
 | 
						|
		$this->view( 'dashboard/summary-meta-box', $args );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Bulk compress meta box.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function bulk_compress_meta_box() {
 | 
						|
		$array_utils  = new Array_Utils();
 | 
						|
		$core         = WP_Smush::get_instance()->core();
 | 
						|
		$global_stats = $core->get_global_stats();
 | 
						|
		$upsell_url   = add_query_arg(
 | 
						|
			array(
 | 
						|
				'utm_source'   => 'smush',
 | 
						|
				'utm_medium'   => 'plugin',
 | 
						|
				'utm_campaign' => 'dashboard_bulk_smush',
 | 
						|
			),
 | 
						|
			$this->upgrade_url
 | 
						|
		);
 | 
						|
 | 
						|
		$bg_optimization               = WP_Smush::get_instance()->core()->mod->bg_optimization;
 | 
						|
		$background_processing_enabled = $bg_optimization->should_use_background();
 | 
						|
		$background_in_processing      = $background_processing_enabled && $bg_optimization->is_in_processing();
 | 
						|
 | 
						|
		$args = array(
 | 
						|
			'total_count'                     => (int) $array_utils->get_array_value( $global_stats, 'count_total' ),
 | 
						|
			'uncompressed'                    => (int) $array_utils->get_array_value( $global_stats, 'remaining_count' ),
 | 
						|
			'upsell_url'                      => $upsell_url,
 | 
						|
			'background_processing_enabled'   => $background_processing_enabled,
 | 
						|
			'background_in_processing'        => $background_in_processing,
 | 
						|
			'background_in_processing_notice' => $bg_optimization->get_in_process_notice(),
 | 
						|
		);
 | 
						|
 | 
						|
		$this->view( 'dashboard/bulk/meta-box', $args );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Integrations meta box.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function integrations_meta_box() {
 | 
						|
		$upsell_url = add_query_arg(
 | 
						|
			array(
 | 
						|
				'utm_source'   => 'smush',
 | 
						|
				'utm_medium'   => 'plugin',
 | 
						|
				'utm_campaign' => 'dashboard_integrations',
 | 
						|
			),
 | 
						|
			$this->upgrade_url
 | 
						|
		);
 | 
						|
 | 
						|
		$integration_fields = $this->settings->get_integrations_fields();
 | 
						|
 | 
						|
		$key = array_search( 'js_builder', $integration_fields, true );
 | 
						|
		if ( $key ) {
 | 
						|
			unset( $integration_fields[ $key ] );
 | 
						|
		}
 | 
						|
 | 
						|
		$args = array(
 | 
						|
			'basic_features' => Settings::$basic_features,
 | 
						|
			'fields'         => $integration_fields,
 | 
						|
			'is_pro'         => WP_Smush::is_pro(),
 | 
						|
			'settings'       => $this->settings->get(),
 | 
						|
			'upsell_url'     => $upsell_url,
 | 
						|
		);
 | 
						|
 | 
						|
		$this->view( 'dashboard/integrations-meta-box', $args );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Local WebP meta box.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function local_webp_meta_box() {
 | 
						|
		$upsell_url = add_query_arg(
 | 
						|
			array(
 | 
						|
				'utm_source'   => 'smush',
 | 
						|
				'utm_medium'   => 'plugin',
 | 
						|
				'utm_campaign' => 'smush-dashboard-local-webp-upsell',
 | 
						|
			),
 | 
						|
			$this->upgrade_url
 | 
						|
		);
 | 
						|
 | 
						|
		$webp = WP_Smush::get_instance()->core()->mod->webp;
 | 
						|
 | 
						|
		$args = array(
 | 
						|
			'is_configured'  => $webp->get_is_configured_with_error_message(),
 | 
						|
			'is_webp_active' => $this->settings->get( 'webp_mod' ),
 | 
						|
			'upsell_url'     => $upsell_url,
 | 
						|
		);
 | 
						|
 | 
						|
		$this->view( 'dashboard/webp/meta-box', $args );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Local WebP meta box footer.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function local_webp_meta_box_header() {
 | 
						|
		$title = __( 'Local WebP', 'wp-smushit' );
 | 
						|
		$this->view( 'dashboard/webp/meta-box-header', compact( 'title' ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Toole meta box.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function tools_meta_box() {
 | 
						|
		$is_resize_detection = $this->settings->get( 'detection' );
 | 
						|
		$this->view( 'dashboard/tools-meta-box', compact( 'is_resize_detection' ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Directory compress meta box.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function directory_compress_meta_box() {
 | 
						|
		$images = WP_Smush::get_instance()->core()->mod->dir->get_image_errors();
 | 
						|
 | 
						|
		$args = array(
 | 
						|
			'images' => array_slice( $images, 0, 4 ),
 | 
						|
			'errors' => WP_Smush::get_instance()->core()->mod->dir->get_image_errors_count(),
 | 
						|
		);
 | 
						|
 | 
						|
		$this->view( 'dashboard/directory-meta-box', $args );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Upsell meta box.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function upsell_meta_box() {
 | 
						|
		$upsell_url = add_query_arg(
 | 
						|
			array(
 | 
						|
				'utm_source'   => 'smush',
 | 
						|
				'utm_medium'   => 'plugin',
 | 
						|
				'utm_campaign' => 'smush-dashboard-upsell',
 | 
						|
			),
 | 
						|
			$this->upgrade_url
 | 
						|
		);
 | 
						|
 | 
						|
		$this->view( 'dashboard/upsell/meta-box', compact( 'upsell_url' ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Upsell meta box header.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function upsell_meta_box_header() {
 | 
						|
		$title = esc_html__( 'Smush Pro', 'wp-smushit' );
 | 
						|
		$this->view( 'dashboard/upsell/meta-box-header', compact( 'title' ) );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Lazy load meta box.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function lazy_load_meta_box() {
 | 
						|
		$settings = $this->settings->get_setting( 'wp-smush-lazy_load' );
 | 
						|
 | 
						|
		$args = array(
 | 
						|
			'is_lazy_load' => $this->settings->get( 'lazy_load' ),
 | 
						|
			'media_types'  => isset( $settings['format'] ) ? $settings['format'] : array(),
 | 
						|
		);
 | 
						|
 | 
						|
		$this->view( 'dashboard/lazy-load-meta-box', $args );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * CDN meta box.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function cdn_meta_box() {
 | 
						|
		$upsell_url = add_query_arg(
 | 
						|
			array(
 | 
						|
				'utm_source'   => 'smush',
 | 
						|
				'utm_medium'   => 'plugin',
 | 
						|
				'utm_campaign' => 'smush-dashboard-cdn-upsell',
 | 
						|
			),
 | 
						|
			$this->upgrade_url
 | 
						|
		);
 | 
						|
 | 
						|
		$args = array(
 | 
						|
			'cdn_status' => WP_Smush::get_instance()->core()->mod->cdn->status(),
 | 
						|
			'is_webp'    => $this->settings->get( 'webp' ),
 | 
						|
			'upsell_url' => $upsell_url,
 | 
						|
		);
 | 
						|
 | 
						|
		$this->view( 'dashboard/cdn/meta-box', $args );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * CDN meta box header.
 | 
						|
	 *
 | 
						|
	 * @since 3.8.6
 | 
						|
	 */
 | 
						|
	public function cdn_meta_box_header() {
 | 
						|
		$title = esc_html__( 'CDN', 'wp-smushit' );
 | 
						|
		$this->view( 'dashboard/cdn/meta-box-header', compact( 'title' ) );
 | 
						|
	}
 | 
						|
}
 |