fix last commit
[GitHub/Stricted/Domain-Control-Panel.git] / lib / api / smarty / Autoloader.php
1 <?php
2 /**
3 * Smarty Autoloader
4 *
5 * @package Smarty
6 */
7
8 /**
9 * Smarty Autoloader
10 *
11 * @package Smarty
12 * @author Uwe Tews
13 * Usage:
14 * require_once '...path/Autoloader.php';
15 * Smarty_Autoloader::register();
16 * $smarty = new Smarty();
17 * Note: This autoloader is not needed if you use Composer.
18 * Composer will automatically add the classes of the Smarty package to it common autoloader.
19 */
20 class Smarty_Autoloader
21 {
22 /**
23 * Filepath to Smarty root
24 *
25 * @var string
26 */
27 public static $SMARTY_DIR = '';
28 /**
29 * Filepath to Smarty internal plugins
30 *
31 * @var string
32 */
33 public static $SMARTY_SYSPLUGINS_DIR = '';
34 /**
35 * Array of not existing classes to avoid is_file calls for already tested classes
36 *
37 * @var array
38 */
39 public static $unknown = array();
40 /**
41 * Array with Smarty core classes and their filename
42 *
43 * @var array
44 */
45 public static $rootClasses = array('Smarty' => 'Smarty.class.php',
46 'SmartyBC' => 'SmartyBC.class.php',
47 );
48
49 private static $syspluginsClasses = array(
50 'smarty_config_source' => true,
51 'smarty_security' => true,
52 'smarty_cacheresource' => true,
53 'smarty_compiledresource' => true,
54 'smarty_cacheresource_custom' => true,
55 'smarty_cacheresource_keyvaluestore' => true,
56 'smarty_resource' => true,
57 'smarty_resource_custom' => true,
58 'smarty_resource_uncompiled' => true,
59 'smarty_resource_recompiled' => true,
60 'smarty_template_source' => true,
61 'smarty_template_compiled' => true,
62 'smarty_template_cached' => true,
63 'smarty_template_config' => true,
64 'smarty_data' => true,
65 'smarty_variable' => true,
66 'smarty_undefined_variable' => true,
67 'smartyexception' => true,
68 'smartycompilerexception' => true,
69 'smarty_internal_data' => true,
70 'smarty_internal_template' => true,
71 'smarty_internal_templatebase' => true,
72 'smarty_internal_resource_file' => true,
73 'smarty_internal_resource_extends' => true,
74 'smarty_internal_resource_eval' => true,
75 'smarty_internal_resource_string' => true,
76 'smarty_internal_resource_registered' => true,
77 'smarty_internal_extension_codeframe' => true,
78 'smarty_internal_extension_config' => true,
79 'smarty_internal_filter_handler' => true,
80 'smarty_internal_function_call_handler' => true,
81 'smarty_internal_cacheresource_file' => true,
82 'smarty_internal_write_file' => true,
83 );
84
85 /**
86 * Registers Smarty_Autoloader backward compatible to older installations.
87 *
88 * @param bool $prepend Whether to prepend the autoloader or not.
89 */
90 public static function registerBC($prepend = false)
91 {
92 /**
93 * register the class autoloader
94 */
95 if (!defined('SMARTY_SPL_AUTOLOAD')) {
96 define('SMARTY_SPL_AUTOLOAD', 0);
97 }
98 if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false) {
99 $registeredAutoLoadFunctions = spl_autoload_functions();
100 if (!isset($registeredAutoLoadFunctions['spl_autoload'])) {
101 spl_autoload_register();
102 }
103 } else {
104 self::register($prepend);
105 }
106 }
107
108 /**
109 * Registers Smarty_Autoloader as an SPL autoloader.
110 *
111 * @param bool $prepend Whether to prepend the autoloader or not.
112 */
113 public static function register($prepend = false)
114 {
115 self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . '/';
116 self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR : self::$SMARTY_DIR . 'sysplugins/';
117 if (version_compare(phpversion(), '5.3.0', '>=')) {
118 spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
119 } else {
120 spl_autoload_register(array(__CLASS__, 'autoload'));
121 }
122 }
123
124 /**
125 * Handles autoloading of classes.
126 *
127 * @param string $class A class name.
128 */
129 public static function autoload($class)
130 {
131 // Request for Smarty or already unknown class
132 if (isset(self::$unknown[$class])) {
133 return;
134 }
135 $_class = strtolower($class);
136 if (isset(self::$syspluginsClasses[$_class])) {
137 $_class = (self::$syspluginsClasses[$_class] === true) ? $_class : self::$syspluginsClasses[$_class];
138 $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php';
139 require_once $file;
140 return;
141 } elseif (0 !== strpos($_class, 'smarty_internal_')) {
142 if (isset(self::$rootClasses[$class])) {
143 $file = self::$SMARTY_DIR . self::$rootClasses[$class];
144 require_once $file;
145 return;
146 }
147 self::$unknown[$class] = true;
148 return;
149 }
150 $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php';
151 if (is_file($file)) {
152 require_once $file;
153 return;
154 }
155 self::$unknown[$class] = true;
156 return;
157 }
158 }