File "LOADER.php"
Full Path: /home/rubycabfbt/www/wp-content/plugins/wtec-webp/includes/ATEC/LOADER.php
File size: 3.66 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* ATEC Framework LOADER
* Loads ATEC classes from includes/ATEC/*.php
* Registers PSR-4-style autoloading for ATEC\* classes in the includes/ATEC/ directory.
* Only loads once across all plugins
* Version: 1.0.1
*/
namespace ATEC;
defined('ABSPATH') || exit;
if (!defined('ATEC_LOADER')) define('ATEC_LOADER', '1.0.1');
final class LOADER {
static $class_map = // must have classes
[
'ATEC\\DASHBOARD' => __DIR__ . '/DASHBOARD.php',
'ATEC\\FS' => __DIR__ . '/FS.php',
'ATEC\\GROUP' => __DIR__ . '/GROUP.php',
'ATEC\\INFO' => __DIR__ . '/INFO.php',
'ATEC\\INIT' => __DIR__ . '/INIT.php',
'ATEC\\LICENSE' => __DIR__ . '/LICENSE.php',
'ATEC\\SVG' => __DIR__ . '/SVG.php',
'ATEC\\TOOLS' => __DIR__ . '/TOOLS.php',
];
private static function normalize_path($path)
{
return str_replace('\\', '/', $path);
}
private static function get_plugin_base_root($path)
{
$path = self::normalize_path($path);
return dirname(preg_replace('#/includes/ATEC/.*$#', '', $path));
}
public static function autoload($class)
{
// One assignment per request: every ATEC plugin shares this LOADER/autoload; the paths are derived from
// this file’s location and are identical no matter which plugin first required LOADER.php.
if ( empty( $GLOBALS['atec_plugins_globals'] ) ) {
$GLOBALS['atec_plugins_globals'] = [
'WP_PLUGIN_URL' => self::get_plugin_base_root( plugin_dir_url( __FILE__ ) ),
'WP_PLUGIN_DIR' => self::get_plugin_base_root( plugin_dir_path( __FILE__ ) ),
];
}
$WP_PLUGIN_DIR = $GLOBALS['atec_plugins_globals']['WP_PLUGIN_DIR'];
static $loaded = [];
self::$class_map['ATEC\\WPCA'] = $WP_PLUGIN_DIR . '/atec-cache-apcu/includes/ATEC/WPCA.php';
self::$class_map['ATEC\\WPMC'] = $WP_PLUGIN_DIR . '/mega-cache/includes/ATEC/WPMC.php';
if (strpos($class, 'ATEC\\') !== 0) return; // Skip if not an ‘atec’ class
if (isset($loaded[$class])) return; // Skip if class already loaded
if (isset(self::$class_map[$class])) // Load from known map
{
require self::$class_map[$class];
$loaded[$class] = true;
return;
}
$relative_class = substr($class, 5);
//$relative_class = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 5)); //if class files in nested directories
$default_path = __DIR__ . '/'. $relative_class . '.php';
if (file_exists($default_path))
{
require $default_path;
$loaded[$class] = true;
return;
}
// Optional fallback
$ex = new \Exception();
$caller = $ex->getTrace();
$caller_path = '';
foreach($caller as $call)
{
if (isset($call['file'])) { $caller_path=$call['file']; break; }
}
if ($caller_path !== '')
{
$caller_path = self::normalize_path($caller_path);
$wp_plugin_dir = self::normalize_path($WP_PLUGIN_DIR);
preg_match('#'.preg_quote($wp_plugin_dir, '#').'/([^/]+)#', $caller_path, $match);
if (isset($match[1]))
{
$local_path = self::normalize_path($wp_plugin_dir . '/' . $match[1] . '/includes/ATEC/' . $relative_class. '.php');
if (file_exists($local_path))
{
require $local_path;
$loaded[$class] = true;
return;
}
}
}
}
}
\spl_autoload_register(['ATEC\\LOADER', 'autoload']);
if (\PHP_VERSION_ID < 80000) @require __DIR__.'/POLYFILL.php';
// Register global AJAX handler for notice dismiss
if (defined('DOING_AJAX') && DOING_AJAX && isset($_REQUEST['action']) && $_REQUEST['action'] === 'atec_admin_notice_dismiss') // phpcs:ignore
{
add_action('wp_ajax_atec_admin_notice_dismiss', ['ATEC\\INIT', 'dismiss_notice']);
}
else
{
if (\ATEC\INIT::is_real_admin()) \ATEC\INIT::admin_debug_all();
}
(function() {
$pro = __DIR__ . '/PRO.php';
if (file_exists($pro)) {
require $pro;
if (method_exists('ATEC\\PRO', 'init')) \ATEC\PRO::init();
}
})();
?>