Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 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
 *             or
17
 *                  include '...path/bootstrap.php';
18
 *
19
 *                  $smarty = new Smarty();
20
 */
21
class Smarty_Autoloader
22
{
23
    /**
24
     * Filepath to Smarty root
25
     *
26
     * @var string
27
     */
28
    public static $SMARTY_DIR = null;
29
 
30
    /**
31
     * Filepath to Smarty internal plugins
32
     *
33
     * @var string
34
     */
35
    public static $SMARTY_SYSPLUGINS_DIR = null;
36
 
37
    /**
38
     * Array with Smarty core classes and their filename
39
     *
40
     * @var array
41
     */
42
    public static $rootClasses = array('smarty' => 'Smarty.class.php', 'smartybc' => 'SmartyBC.class.php',);
43
 
44
    /**
45
     * Registers Smarty_Autoloader backward compatible to older installations.
46
     *
47
     * @param bool $prepend Whether to prepend the autoloader or not.
48
     */
49
    public static function registerBC($prepend = false)
50
    {
51
        /**
52
         * register the class autoloader
53
         */
54
        if (!defined('SMARTY_SPL_AUTOLOAD')) {
55
            define('SMARTY_SPL_AUTOLOAD', 0);
56
        }
57
        if (SMARTY_SPL_AUTOLOAD
58
            && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false
59
        ) {
60
            $registeredAutoLoadFunctions = spl_autoload_functions();
61
            if (!isset($registeredAutoLoadFunctions[ 'spl_autoload' ])) {
62
                spl_autoload_register();
63
            }
64
        } else {
65
            self::register($prepend);
66
        }
67
    }
68
 
69
    /**
70
     * Registers Smarty_Autoloader as an SPL autoloader.
71
     *
72
     * @param bool $prepend Whether to prepend the autoloader or not.
73
     */
74
    public static function register($prepend = false)
75
    {
76
        self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR;
77
        self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR :
78
            self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR;
79
        if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
80
            spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
81
        } else {
82
            spl_autoload_register(array(__CLASS__, 'autoload'));
83
        }
84
    }
85
 
86
    /**
87
     * Handles auto loading of classes.
88
     *
89
     * @param string $class A class name.
90
     */
91
    public static function autoload($class)
92
    {
93
        if ($class[ 0 ] !== 'S' || strpos($class, 'Smarty') !== 0) {
94
            return;
95
        }
96
        $_class = strtolower($class);
97
        if (isset(self::$rootClasses[ $_class ])) {
98
            $file = self::$SMARTY_DIR . self::$rootClasses[ $_class ];
99
            if (is_file($file)) {
100
                include $file;
101
            }
102
        } else {
103
            $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php';
104
            if (is_file($file)) {
105
                include $file;
106
            }
107
        }
108
        return;
109
    }
110
}