* @copyright 2021 DIGITAL RETAIL TECHNOLOGIES SL * @license https://opensource.org/licenses/MIT The MIT License * * Don't forget to prefix your containers with your own identifier * to avoid any conflicts with others containers. */ /** * Simple Recursive Autoloader * * A simple autoloader that loads class files recursively starting in the directory * where this class resides. Additional options can be provided to control the naming * convention of the class files. */ class RetailcrmAutoloader { /** * File extension as a string. Defaults to ".php". */ protected static $fileExt = '.php'; /** * The top level directory where recursion will begin. */ protected static $pathTop; /** * The top level directory where recursion for custom classes will begin. */ protected static $pathTopCustom; /** * Autoload function for registration with spl_autoload_register * * Looks recursively through project directory and loads class files based on * filename match. * * @param string $className */ public static function loader($className) { if (file_exists(self::$pathTopCustom) && is_dir(self::$pathTopCustom)) { $directory = new RecursiveDirectoryIterator(self::$pathTopCustom); $fileIterator = new RecursiveIteratorIterator($directory); $filename = $className . self::$fileExt; foreach ($fileIterator as $file) { if (Tools::strtolower($file->getFilename()) === Tools::strtolower($filename) && $file->isReadable() && !class_exists($className) ) { include_once $file->getPathname(); return; } } } $directory = new RecursiveDirectoryIterator(self::$pathTop); $fileIterator = new RecursiveIteratorIterator($directory); $filename = $className . self::$fileExt; foreach ($fileIterator as $file) { if (Tools::strtolower($file->getFilename()) === Tools::strtolower($filename) && $file->isReadable() && !class_exists($className) ) { include_once $file->getPathname(); return; } } } /** * Sets the $fileExt property * * @param string $fileExt The file extension used for class files. Default is "php". */ public static function setFileExt($fileExt) { self::$fileExt = $fileExt; } /** * Sets the $path property * * @param string $path The path representing the top level where recursion should * begin. Defaults to the current directory. */ public static function setPath($path) { self::$pathTop = $path; } /** * Sets the $pathTopCustom property * * @param string $path The path representing the top level where recursion for custom * classes should begin. Defaults to 'modules/retailcrm_custom/classes'. */ public static function setPathCustom($path) { self::$pathTopCustom = $path; } } RetailcrmAutoloader::setPath(realpath(dirname(__FILE__))); RetailcrmAutoloader::setPathCustom(realpath(_PS_MODULE_DIR_ . '/retailcrm/custom')); RetailcrmAutoloader::setFileExt('.php'); spl_autoload_register('RetailcrmAutoloader::loader');