/** * 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'; }
/** * 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; } }