| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 | <?php/** * * Cube Framework $Id$ QSBif5jV3jDYkGZIgmOH1DJBH/FYrfa6x0gbADiBLmM= * * @link        http://codecu.be/framework * @copyright   Copyright (c) 2017 CodeCube SRL * @license     http://codecu.be/framework/license Commercial License * * @version     1.9 [rev.1.9.01] *//** * autoloader class */namespace Cube\Loader;class Autoloader{    /**     *     * location of the framework and application libraries     */    const LIBRARIES_PATH = 'library';    /**     *     * we will allow mods to override classes     */    const MODS_PATH = 'mods';    /**     *     * holds the array of autoloader paths     *     * @var array     */    private $_paths = array();    /**     *     * the extension for the files to be autoloaded     *     * @var string     */    private $_fileExtension = '.php';    /**     *     * mods path variable     *     * @var string     */    private $_modsPath = self::MODS_PATH;    /**     *     * holds an instance of the object     *     * @var \Cube\Loader\Autoloader     */    private static $_instance;    /**     * class constructor     *     * set the folder path for the default library     */    protected function __construct()    {        $this->addPaths(array(            self::LIBRARIES_PATH,        ));    }    /**     *     * returns an instance of the object and creates it if it wasnt instantiated yet     *     * @return \Cube\Loader\Autoloader     */    public static function getInstance()    {        if (!self::$_instance instanceof self) {            self::$_instance = new self();        }        return self::$_instance;    }    /**     *     * get mods path variable     *     * @return string     */    public function getModsPath()    {        return $this->_modsPath;    }    /**     *     * set a custom mods path variable     *     * @param string $modsPath     *     * @return $this     */    public function setModsPath($modsPath)    {        $this->_modsPath = $modsPath;        return $this;    }    /**     *     * get autoloader paths     *     * @return array     */    public function getPaths()    {        return $this->_paths;    }    /**     *     * add multiple autoloader paths     *     * @param array $paths     *     * @return $this     */    public function addPaths($paths = array())    {        if (empty($this->_paths)) {            $this->_paths = (array)$paths;        }        else if (!empty($paths)) {            foreach ($paths as $path) {                $this->addPath($path);            }        }        return $this;    }    /**     *     * add single autoloader path     *     * @param string $path     *     * @return $this     */    public function addPath($path)    {        if (!in_array($path, $this->_paths)) {            array_push($this->_paths, $path);        }        return $this;    }    /**     *     * the method will parse the data from the 'modules' key in the configuration array, and auto load all classes from the     * folders defined, plus the classes from the include path (in the include path we have included the     * folder where the framework is located     *     * @return $this     */    public function register()    {        spl_autoload_register(array($this, 'load'));        return $this;    }    /**     *     * autoloader method     *     * @param string $class     */    public function load($class)    {        $pathInfo = pathinfo(            str_replace('\\', DIRECTORY_SEPARATOR, $class));        $included = false;        foreach ((array)$this->_paths as $path) {            if ($included === false) {                $classFile = __DIR__ . '/../../../'                    . $path . DIRECTORY_SEPARATOR                    . $pathInfo['dirname'] . DIRECTORY_SEPARATOR                    . $pathInfo['filename'] . $this->_fileExtension;                $extendedClassFile = __DIR__ . '/../../../'                    . $this->getModsPath() . DIRECTORY_SEPARATOR                    . $path . DIRECTORY_SEPARATOR                    . $pathInfo['dirname'] . DIRECTORY_SEPARATOR                    . $pathInfo['filename'] . $this->_fileExtension;                if (file_exists($extendedClassFile)) {                    require_once $extendedClassFile;                    $included = true;                }                else if (file_exists($classFile)) {                    require_once $classFile;                    $included = true;                }            }        }    }}
 |