コード例 #1
0
 /**
  * Inicialización de la clase en el entorno consumidor
  * @param toba_modelo_instalacion $instalacion Representante de la instalación de toba como un todo
  * @param toba_modelo_instancia $instancia Representante de la instancia actualmente utilizada
  * @param toba_modelo_proyecto $proyecto Representante del proyecto como un proyecto toba (sin la lógica de admin. de la aplicación)
  * @param $default_schema Esquema por defecto del proyecto
  * 
  */
 function set_entorno($manejador_interface, toba_modelo_instalacion $instalacion, toba_modelo_instancia $instancia, toba_modelo_proyecto $proyecto, $default_schema = 'public')
 {
     $this->manejador_interface = $manejador_interface;
     $this->instalacion = $instalacion;
     $this->instancia = $instancia;
     $this->proyecto = $proyecto;
     $db = $instancia->get_db();
     $schema_toba = $instancia->get_id();
     if ($db->existe_schema($schema_toba)) {
         $this->schema_toba = $schema_toba;
     }
     //Si no se harcodeo el schema del proyecto, trata de averiguarlo
     if (!isset($this->schema_modelo)) {
         $encontrado = false;
         $id_def_base = $this->proyecto->construir_id_def_base($this->get_fuente_defecto());
         if ($this->instalacion->existe_base_datos_definida($id_def_base)) {
             $parametros = $this->instalacion->get_parametros_base($id_def_base);
             if (isset($parametros['schema'])) {
                 $this->schema_modelo = $parametros['schema'];
                 $encontrado = true;
             }
         }
         if (!$encontrado) {
             $this->schema_modelo = $default_schema;
         }
     }
     //Construye el schema de la auditoria
     $this->schema_auditoria = $this->schema_modelo . '_auditoria';
 }
コード例 #2
0
 /**
  *	Crea un proyecto NUEVO
  */
 static function crear(toba_modelo_instancia $instancia, $nombre, $usuarios_a_vincular)
 {
     //- 1 - Controles
     $dir_template = toba_dir() . self::template_proyecto;
     if ($nombre == 'toba') {
         throw new toba_error("INSTALACION: No es posible crear un proyecto con el nombre 'toba'");
     }
     if (self::existe($nombre)) {
         throw new toba_error("INSTALACION: Ya existe una carpeta con el nombre '{$nombre}' en la carpeta 'proyectos'");
     }
     try {
         //- 2 - Modificaciones en el sistema de archivos
         $dir_proyecto = $instancia->get_path_proyecto($nombre);
         $url_proyecto = $instancia->get_url_proyecto($nombre);
         // Creo la CARPETA del PROYECTO
         $excepciones = array();
         $excepciones[] = $dir_template . '/www/aplicacion.produccion.php';
         toba_manejador_archivos::copiar_directorio($dir_template, $dir_proyecto, $excepciones);
         // Modifico los archivos
         $editor = new toba_editor_archivos();
         $editor->agregar_sustitucion('|__proyecto__|', $nombre);
         $editor->agregar_sustitucion('|__instancia__|', $instancia->get_id());
         $editor->agregar_sustitucion('|__toba_dir__|', toba_manejador_archivos::path_a_unix(toba_dir()));
         $editor->agregar_sustitucion('|__version__|', '1.0.0');
         $editor->procesar_archivo($dir_proyecto . '/www/aplicacion.php');
         $modelo = $dir_proyecto . '/php/extension_toba/modelo.php';
         $comando = $dir_proyecto . '/php/extension_toba/comando.php';
         $editor->procesar_archivo($comando);
         $editor->procesar_archivo($modelo);
         $editor->procesar_archivo($dir_proyecto . '/www/rest.php');
         $editor->procesar_archivo($dir_proyecto . '/www/servicios.php');
         rename($modelo, str_replace('modelo.php', $nombre . '_modelo.php', $modelo));
         rename($comando, str_replace('comando.php', $nombre . '_comando.php', $comando));
         $ini = $dir_proyecto . '/proyecto.ini';
         $editor->procesar_archivo($ini);
         // Asocio el proyecto a la instancia
         $instancia->vincular_proyecto($nombre, null, $url_proyecto);
         //- 3 - Modificaciones en la BASE de datos
         $db = $instancia->get_db();
         try {
             $db->abrir_transaccion();
             $db->retrazar_constraints();
             $db->ejecutar(self::get_sql_metadatos_basicos($nombre));
             $sql_version = self::get_sql_actualizar_version(toba_modelo_instalacion::get_version_actual(), $nombre);
             $db->ejecutar($sql_version);
             foreach ($usuarios_a_vincular as $usuario) {
                 self::do_vincular_usuario($db, $nombre, $usuario, array('admin'));
             }
             $db->cerrar_transaccion();
         } catch (toba_error $e) {
             $db->abortar_transaccion();
             $txt = 'PROYECTO : Ha ocurrido un error durante la carga de METADATOS del PROYECTO. DETALLE: ' . $e->getMessage();
             throw new toba_error($txt);
         }
     } catch (toba_error $e) {
         // Borro la carpeta creada
         if (is_dir($dir_proyecto)) {
             $instancia->desvincular_proyecto($nombre);
             toba_manejador_archivos::eliminar_directorio($dir_proyecto);
         }
         throw $e;
     }
 }