You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.2 KiB
109 lines
2.2 KiB
<?php
|
|
namespace ImageOptimization;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
/**
|
|
* Class Plugin
|
|
* Main Plugin class
|
|
*/
|
|
class Plugin {
|
|
/**
|
|
* Instance
|
|
*
|
|
* @access public
|
|
* @static
|
|
*
|
|
* @var Plugin The single instance of the class.
|
|
*/
|
|
public static $instance = null;
|
|
|
|
/**
|
|
* Modules Manager
|
|
* @var null|Manager
|
|
*/
|
|
public $modules_manager = null;
|
|
|
|
/**
|
|
* class aliases
|
|
* @access private
|
|
* @var array
|
|
*/
|
|
private $classes_aliases = [];
|
|
|
|
/**
|
|
* Instance
|
|
*
|
|
* Ensures only one instance of the class is loaded or can be loaded.
|
|
*
|
|
* @access public
|
|
*
|
|
* @return Plugin An instance of the class.
|
|
*/
|
|
public static function instance() {
|
|
if ( is_null( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
public function autoload( $class ) {
|
|
if ( 0 !== strpos( $class, __NAMESPACE__ ) ) {
|
|
return;
|
|
}
|
|
|
|
$has_class_alias = isset( $this->classes_aliases[ $class ] );
|
|
|
|
// Backward Compatibility: Save old class name for set an alias after the new class is loaded
|
|
if ( $has_class_alias ) {
|
|
$class_alias_name = $this->classes_aliases[ $class ];
|
|
$class_to_load = $class_alias_name;
|
|
} else {
|
|
$class_to_load = $class;
|
|
}
|
|
|
|
if ( ! class_exists( $class_to_load ) ) {
|
|
$filename = strtolower(
|
|
preg_replace(
|
|
[ '/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/' ],
|
|
[ '', '$1-$2', '-', DIRECTORY_SEPARATOR ],
|
|
$class_to_load
|
|
)
|
|
);
|
|
$filename = IMAGE_OPTIMIZATION_PATH . $filename . '.php';
|
|
|
|
if ( is_readable( $filename ) ) {
|
|
include $filename;
|
|
}
|
|
}
|
|
|
|
if ( $has_class_alias ) {
|
|
class_alias( $class_alias_name, $class );
|
|
}
|
|
}
|
|
|
|
private function includes() {
|
|
require_once IMAGE_OPTIMIZATION_PATH . 'includes/modules-manager.php';
|
|
$this->modules_manager = new Manager();
|
|
}
|
|
|
|
/**
|
|
* Plugin class constructor
|
|
*
|
|
* Register plugin action hooks and filters
|
|
*
|
|
* @access public
|
|
*/
|
|
public function __construct() {
|
|
static $autoloader_registered = false;
|
|
if ( ! $autoloader_registered ) {
|
|
$autoloader_registered = spl_autoload_register( [ $this, 'autoload' ] );
|
|
}
|
|
$this->includes();
|
|
}
|
|
}
|
|
// Instantiate Plugin Class
|
|
Plugin::instance();
|
|
|