/** * Renvoie le singleton * * @return CopixAutoloader Singleton */ public static function getInstance() { if (!self::$_instance) { self::$_instance = new CopixAutoloader(); } return self::$_instance; }
/** * Inclusion de librairies Copix * @param string $pClassName le nom de la classe que l'on souhaites inclure * @return boolean le fichier est ou non connu * @see CopixAutoloader * @todo Zone, Services, HTMLHeader, Cache, ClassesFactory, I18N, EventNotifier, Db, DBQueryParam, DAOFactory, Auth, User, Log */ public static function RequireClass($pClassName) { // Tente d'abord de déclencher un autoloading if (!class_exists($pClassName, true)) { // Essaie quand même de charger la classe // au cas où CopixAutoloader ne soit plus enregistré comme autoloader if (!CopixAutoloader::getInstance()->load($pClassName)) { throw new Exception("Class {$pClassName} not found"); } } }
/** * Réécriture du chemin des classes * */ public function processRebuildClassPath() { CopixAuth::getCurrentUser()->assertCredential('basic:admin'); CopixAutoloader::getInstance()->rebuildClassPath(); return _arRedirect(_url('admin||')); }
/** * Résouds la référence à une classe ou une instance. * * @param string $pClassName Classe de l'objet. * @param string $pFileName Nom du fichier. * @param object $pObject Instance de l'objet. * @return array L'information de référence. */ private static function _resolveReference($pClassName, $pFileName = null, $pObject = null) { if (isset(self::$_globalReferences[$pClassName])) { return self::$_globalReferences[$pClassName]; } // Classe "anonyme" ou autoloadée if (strtolower($pClassName) == 'stdclass' || CopixAutoloader::canAutoload($pClassName)) { return self::$_globalReferences[$pClassName] = false; } $class = new ReflectionClass($pClassName); // DAO ou enregistrement DAO if ((class_exists('ICopixDAORecord', false) && $class->implementsInterface('ICopixDAORecord') || class_exists('ICopixDAO', false) && $class->implementsInterface('ICopixDAO')) && ($pFileName !== null || $pObject !== null)) { return self::$_globalReferences[$pClassName] = array(self::DAO, $pFileName === null ? $pObject->getDAOId() : $pFileName, null); } // On a un nom de fichier passé par l'utilisateur if ($pFileName !== null) { // Le fichier est lisible, on ne cherche pas plus loin if (is_readable($pFileName)) { return self::$_globalReferences[$pClassName] = array(self::FILE, $pFileName); } // Si ça ressemble à un sélecteur Copix, on vérifie. if (preg_match('/^\\w+\\|\\w+$/', $pFileName)) { $selector = CopixSelectorFactory::create($pFileName); $filePath = $selector->getPath(COPIX_CLASSES_DIR . strtolower($selector->fileName) . '.class.php'); if (is_readable($filePath)) { return self::$_globalReferences[$pClassName] = array(self::MODULE_CLASS, $pFileName); } } // Ca n'a pas marché } // On a rien... essayons de deviner $type = self::FILE; $fileName = $class->getFileName(); // Vérifie si ça correpond à une classe de module if (preg_match(self::$_moduleClassRegex, $fileName, $parts)) { list(, $basePath, $moduleName, $className) = $parts; if (CopixModule::isValid($moduleName, $basePath)) { // Bingo return self::$_globalReferences[$pClassName] = array(self::MODULE_CLASS, $moduleName . '|' . $className); } } // En dernier recours, stocke un fichier return self::$_globalReferences[$pClassName] = array($type, $fileName); }