mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-10-29 03:11:36 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			159 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Smarty Autoloader
 | |
|  *
 | |
|  * @package    Smarty
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Smarty Autoloader
 | |
|  *
 | |
|  * @package    Smarty
 | |
|  * @author     Uwe Tews
 | |
|  *             Usage:
 | |
|  *             require_once '...path/Autoloader.php';
 | |
|  *             Smarty_Autoloader::register();
 | |
|  *             $smarty = new Smarty();
 | |
|  *             Note:       This autoloader is not needed if you use Composer.
 | |
|  *             Composer will automatically add the classes of the Smarty package to it common autoloader.
 | |
|  */
 | |
| class Smarty_Autoloader
 | |
| {
 | |
|     /**
 | |
|      * Filepath to Smarty root
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     public static $SMARTY_DIR = '';
 | |
|     /**
 | |
|      * Filepath to Smarty internal plugins
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     public static $SMARTY_SYSPLUGINS_DIR = '';
 | |
|     /**
 | |
|      * Array of not existing classes to avoid is_file calls for  already tested classes
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     public static $unknown = array();
 | |
|     /**
 | |
|      * Array with Smarty core classes and their filename
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     public static $rootClasses = array('Smarty'   => 'Smarty.class.php',
 | |
|                                        'SmartyBC' => 'SmartyBC.class.php',
 | |
|     );
 | |
| 
 | |
|     private static $syspluginsClasses = array(
 | |
|         'smarty_config_source'                  => true,
 | |
|         'smarty_security'                       => true,
 | |
|         'smarty_cacheresource'                  => true,
 | |
|         'smarty_compiledresource'               => true,
 | |
|         'smarty_cacheresource_custom'           => true,
 | |
|         'smarty_cacheresource_keyvaluestore'    => true,
 | |
|         'smarty_resource'                       => true,
 | |
|         'smarty_resource_custom'                => true,
 | |
|         'smarty_resource_uncompiled'            => true,
 | |
|         'smarty_resource_recompiled'            => true,
 | |
|         'smarty_template_source'                => true,
 | |
|         'smarty_template_compiled'              => true,
 | |
|         'smarty_template_cached'                => true,
 | |
|         'smarty_template_config'                => true,
 | |
|         'smarty_data'                           => true,
 | |
|         'smarty_variable'                       => true,
 | |
|         'smarty_undefined_variable'             => true,
 | |
|         'smartyexception'                       => true,
 | |
|         'smartycompilerexception'               => true,
 | |
|         'smarty_internal_data'                  => true,
 | |
|         'smarty_internal_template'              => true,
 | |
|         'smarty_internal_templatebase'          => true,
 | |
|         'smarty_internal_resource_file'         => true,
 | |
|         'smarty_internal_resource_extends'      => true,
 | |
|         'smarty_internal_resource_eval'         => true,
 | |
|         'smarty_internal_resource_string'       => true,
 | |
|         'smarty_internal_resource_registered'   => true,
 | |
|         'smarty_internal_extension_codeframe'   => true,
 | |
|         'smarty_internal_extension_config'      => true,
 | |
|         'smarty_internal_filter_handler'        => true,
 | |
|         'smarty_internal_function_call_handler' => true,
 | |
|         'smarty_internal_cacheresource_file'    => true,
 | |
|         'smarty_internal_write_file'    => true,
 | |
|     );
 | |
| 
 | |
|     /**
 | |
|      * Registers Smarty_Autoloader backward compatible to older installations.
 | |
|      *
 | |
|      * @param bool $prepend Whether to prepend the autoloader or not.
 | |
|      */
 | |
|     public static function registerBC($prepend = false)
 | |
|     {
 | |
|         /**
 | |
|          * register the class autoloader
 | |
|          */
 | |
|         if (!defined('SMARTY_SPL_AUTOLOAD')) {
 | |
|             define('SMARTY_SPL_AUTOLOAD', 0);
 | |
|         }
 | |
|         if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false) {
 | |
|             $registeredAutoLoadFunctions = spl_autoload_functions();
 | |
|             if (!isset($registeredAutoLoadFunctions['spl_autoload'])) {
 | |
|                 spl_autoload_register();
 | |
|             }
 | |
|         } else {
 | |
|             self::register($prepend);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Registers Smarty_Autoloader as an SPL autoloader.
 | |
|      *
 | |
|      * @param bool $prepend Whether to prepend the autoloader or not.
 | |
|      */
 | |
|     public static function register($prepend = false)
 | |
|     {
 | |
|         self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . '/';
 | |
|         self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR : self::$SMARTY_DIR . 'sysplugins/';
 | |
|         if (version_compare(phpversion(), '5.3.0', '>=')) {
 | |
|             spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
 | |
|         } else {
 | |
|             spl_autoload_register(array(__CLASS__, 'autoload'));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Handles autoloading of classes.
 | |
|      *
 | |
|      * @param string $class A class name.
 | |
|      */
 | |
|     public static function autoload($class)
 | |
|     {
 | |
|         // Request for Smarty or already unknown class
 | |
|         if (isset(self::$unknown[$class])) {
 | |
|             return;
 | |
|         }
 | |
|         $_class = strtolower($class);
 | |
|         if (isset(self::$syspluginsClasses[$_class])) {
 | |
|             $_class = (self::$syspluginsClasses[$_class] === true) ? $_class : self::$syspluginsClasses[$_class];
 | |
|             $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php';
 | |
|             require_once $file;
 | |
|             return;
 | |
|         } elseif (0 !== strpos($_class, 'smarty_internal_')) {
 | |
|             if (isset(self::$rootClasses[$class])) {
 | |
|                 $file = self::$SMARTY_DIR . self::$rootClasses[$class];
 | |
|                 require_once $file;
 | |
|                 return;
 | |
|             }
 | |
|             self::$unknown[$class] = true;
 | |
|             return;
 | |
|         }
 | |
|         $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php';
 | |
|         if (is_file($file)) {
 | |
|             require_once $file;
 | |
|             return;
 | |
|         }
 | |
|         self::$unknown[$class] = true;
 | |
|         return;
 | |
|     }
 | |
| }
 |