public function dbStatusAction()
 {
     $yupp = new Yupp();
     $appNames = $yupp->getAppNames();
     $appModelClasses = array();
     // [appName][class][tablename,creada o no]
     // Incluye todas las clases del modelo de todas las apps
     YuppLoader::loadModel();
     // Para saber si se crearon las tablas para todas las
     // clases del modelo de todas las aplicaciones.
     $allTablesCreated = true;
     $fn = new FileNames();
     // http://code.google.com/p/yupp/issues/detail?id=123
     $createDatabaseForApps = array();
     // Aplicaciones a las que se sugiere que se cree su base de datos
     foreach ($appNames as $appName) {
         $app = new App($appName);
         $modelClassFileNames = $app->getModel();
         // no incluye las clases, solo obtiene los nombres
         //print_r($modelClassFileNames);
         // Necesito que sea plano el array, si no, tengo que hacer recorrida recursiva.
         // Esto no seria necesario si modifico la recorrida en la vista, para mostrar
         // la estructura interna de paquetes del modelo de la aplicacion.
         $modelClassFileNames = $this->array_flatten($modelClassFileNames);
         //print_r($modelClassFileNames);
         // Toda la informacion de las clases y tablas creadas para esta app
         $appModelClasses[$appName] = array();
         // http://code.google.com/p/yupp/issues/detail?id=123
         try {
             $dal = new DAL($appName);
             // Falla sino existe la base para la app $appName
         } catch (Exception $e) {
             if ($e->getCode() == 666) {
                 $createDatabaseForApps[] = $appName;
             }
             continue;
             // Para el for appNames
         }
         foreach ($modelClassFileNames as $classFileName) {
             $fileInfo = $fn->getFileNameInfo($classFileName);
             $className = $fileInfo['name'];
             // Para incluir las clases (por si no estan incluidas)
             // Ticket: http://code.google.com/p/yupp/issues/detail?id=71
             YuppLoader::load($fileInfo['package'], $className);
             $tableName = YuppConventions::tableName($className);
             if ($dal->tableExists($tableName)) {
                 $appModelClasses[$appName][$className] = array('tableName' => $tableName, 'created' => "CREADA");
             } else {
                 $appModelClasses[$appName][$className] = array('tableName' => $tableName, 'created' => "NO CREADA");
                 $allTablesCreated = false;
             }
         }
     }
     $this->params['allTablesCreated'] = $allTablesCreated;
     $this->params['appModelClasses'] = $appModelClasses;
     $this->params['createDatabaseForApps'] = $createDatabaseForApps;
     return $this->render("dbStatus");
 }
 /**
  * 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;
 }
Beispiel #3
0
 /**
  * Genera una TestSuite con los TestCase definidos para esta aplicacion.
  */
 public function loadTests()
 {
     $dir = dir($this->path . '/tests');
     $testCases = array();
     // Recorre directorio de la aplicacion
     while (false !== ($test = $dir->read())) {
         //echo $test.'<br/>';
         // Se queda solo con los nombres de los directorios
         if (is_file($this->path . '/tests/' . $test) && String::endsWith($test, 'class.php')) {
             $testCases[] = $test;
         }
     }
     // Crea instancias de las clases testcase
     $suite = new TestSuite();
     foreach ($testCases as $testCaseFile) {
         $fi = FileNames::getFilenameInfo($testCaseFile);
         $clazz = $fi['name'];
         //print_r($fi);
         YuppLoader::load($fi['package'], $clazz);
         $suite->addTestCase(new $clazz($suite));
     }
     return $suite;
 }
Beispiel #4
0
 public static function isLoadedClass($package, $clazz)
 {
     $cl = YuppLoader::getInstance();
     $filename = FileNames::getClassFilename($package, $clazz);
     $path = ".";
     if (PackageNames::isModelPackage($package)) {
         $path = YuppConventions::getModelPath($package);
     } else {
         $path = strtr($package, ".", "/");
     }
     $incPath = $path . "/" . $filename;
     return array_key_exists($incPath, self::getLoadedClasses());
 }