Exemplo n.º 1
0
 /**
  * clazz es el nombre de una clase de modelo (tambien puede ser PersistentObject).
  * Devuelve una estructura multiple con los nombres de todas las clases que heredan de clazz (hijas, nietas, etc)
  */
 public static function getAllSubclassesOf($clazz)
 {
     //echo "<h1>ModelUtils.getAllSubclassesOf $clazz</h1>";
     //Logger::struct( get_declared_classes(), "Declared classes ".__FILE__." ".__LINE__ );
     // Esto en realidad se deberia hacer con getLoadedModelClasses
     // porque ModelUtils es para resolver temas de las clases del modelo.
     //$loadedClasses = YuppLoader::getLoadedClasses();
     // Como las clases cargadas dependen de la aplicacion,
     // me ancargo de cargar todas las clases de la aplicacion
     // actual para obtener correctamente las subclases.
     // Mismo codigo que getSubclassesOf.
     $ctx = YuppContext::getInstance();
     $appName = $ctx->getApp();
     if ($appName == 'core') {
         // Si no se cargaron todas las clases y no se pasa el nombre de la app, no devuelve realmente todas las subclases, solo las que estan cargadas.
         YuppLoader::loadModel();
         // Carga el modelo de todas las aplicaciones
     } else {
         // TODO: metodo para cargar todas las clases del modelo de una aplicacion.
         $classes = array();
         // FIXME: Mismo codigo que CoreController.dbStatus
         YuppLoader::load('core.app', 'App');
         // Puede no estar cargada
         $app = new App($appName);
         $modelClassFileNames = $app->getModel();
         // Logger::struct( $modelClassFileNames, "modelClassFileNames ".__FILE__." ".__LINE__ );
         $modelClassFileNames = self::array_flatten($modelClassFileNames);
         $fn = new FileNames();
         foreach ($modelClassFileNames as $classFileName) {
             $fileInfo = $fn->getFileNameInfo($classFileName);
             YuppLoader::load($fileInfo['package'], $fileInfo['name']);
         }
     }
     $loadedClasses = YuppLoader::getLoadedModelClasses();
     $res = array();
     foreach ($loadedClasses as $loadedClass) {
         if (class_exists($loadedClass) && is_subclass_of($loadedClass, $clazz)) {
             $res[] = $loadedClass;
         }
     }
     return $res;
 }