/**
  * Toma como motor predefinido el mismo que el de la instalacion de toba
  */
 function get_servidor_defecto()
 {
     $parametros = $this->instancia->get_parametros_db();
     if (isset($parametros['base'])) {
         unset($parametros['base']);
     }
     return $parametros;
 }
Beispiel #2
0
 /**
  * Muestra información de la instalación.
  * @gtk_icono info_chico.gif
  * @gtk_no_mostrar 1
  * @gtk_separador 1 
  */
 function opcion__info()
 {
     if (toba_modelo_instalacion::existe_info_basica()) {
         $this->consola->enter();
         //VERSION
         $this->consola->lista(array(toba_modelo_instalacion::get_version_actual()->__toString()), "VERSION");
         // INSTANCIAS
         $instancias = toba_modelo_instancia::get_lista();
         if ($instancias) {
             $this->consola->lista($instancias, 'INSTANCIAS');
         } else {
             $this->consola->enter();
             $this->consola->mensaje('ATENCION: No existen INSTANCIAS definidas.');
         }
         // BASES
         $this->mostrar_bases_definidas();
         // ID de grupo de DESARROLLO
         $grupo = $this->get_instalacion()->get_id_grupo_desarrollo();
         if (isset($grupo)) {
             $this->consola->lista(array($grupo), 'ID grupo desarrollo');
         } else {
             $this->consola->enter();
             $this->consola->mensaje('ATENCION: No esta definido el ID del GRUPO de DESARROLLO.');
         }
         // PROYECTOS
         $proyectos = toba_modelo_proyecto::get_lista();
         if ($proyectos) {
             $lista_proyectos = array();
             foreach ($proyectos as $dir => $id) {
                 $lista_proyectos[] = "{$id} ({$dir})";
             }
             $this->consola->lista($lista_proyectos, 'PROYECTOS (sólo en la carpeta por defecto)');
         } else {
             $this->consola->enter();
             $this->consola->mensaje('ATENCION: No existen PROYECTOS definidos.');
         }
     } else {
         $this->consola->enter();
         $this->consola->mensaje('La INSTALACION no ha sido inicializada.');
     }
 }
Beispiel #3
0
 /**
  *	Interface de seleccion de N usuarios
  */
 protected function seleccionar_usuarios(toba_modelo_instancia $instancia)
 {
     // Decido que usuarios voy a vincular
     /*
     $this->consola->subtitulo( "Asociar USUARIOS" );
     $opcion[0] = "Asociar el usuario 'toba'";
     $opcion[1] = "Asociar TODOS los usuarios de la instancia";
     $opcion[2] = "Mostrar una lista de usuario y SELECCIONAR";
     $ok = $this->consola->dialogo_lista_opciones( $opcion, 'Asociar USUARIOS al proyecto. Seleccione una FORMA de CARGA', false );
     */
     $usuarios = array();
     $ok = 1;
     if ($instancia->get_instalacion()->es_produccion()) {
         $datos = $instancia->get_usuarios_administradores($this->id_proyecto_actual);
     } else {
         $datos = $instancia->get_lista_usuarios();
     }
     switch ($ok) {
         case 0:
             // Usuario toba (pero..existe?)
             break;
         case 1:
             // Todos
             foreach ($datos as $dato) {
                 $usuarios[] = $dato['usuario'];
             }
             break;
         case 2:
             // Seleccionar usuarios de una lista
             break;
     }
     return $usuarios;
 }
 /**
  * Ejecuta una instalacion completa del framework para desarrollar un nuevo proyecto
  * @consola_parametros Opcionales: [-d 'iddesarrollo'] [-t 0| 1] [-n 'nombre inst'] [-h 'ubicacion bd'] [-p 'puerto'] [-u 'usuario bd'] [-b nombre bd] [-c 'archivo clave bd'] [-k 'archivo clave usuario admin']  [--usuario-admin 'usuario admin']
  * @gtk_icono instalacion.png
  */
 function opcion__instalar()
 {
     $nombre_toba = 'toba_' . toba_modelo_instalacion::get_version_actual()->get_release('_');
     $alias = '/' . 'toba_' . toba_modelo_instalacion::get_version_actual()->get_release();
     //--- Verificar instalacion
     $param = $this->get_parametros();
     //--- Borra la instalacion anterior??
     if (toba_modelo_instalacion::existe_info_basica()) {
         toba_modelo_instalacion::borrar_directorio();
     }
     //--- Crea la INSTALACION
     $id_desarrollo = $this->definir_id_grupo_desarrollo($param);
     $tipo_instalacion = $this->definir_tipo_instalacion_produccion($param);
     $nombre = $this->definir_nombre_instalacion($param);
     toba_modelo_instalacion::crear($id_desarrollo, $alias, $nombre, $tipo_instalacion);
     $id_instancia = $tipo_instalacion == '1' ? 'produccion' : $this->get_entorno_id_instancia(true);
     //--- Crea la definicion de bases
     $base = $nombre_toba;
     if (!$this->get_instalacion()->existe_base_datos_definida($base)) {
         $datos = array('motor' => 'postgres7', 'profile' => $this->definir_profile_motor($param), 'usuario' => $this->definir_usuario_motor($param), 'clave' => $this->definir_clave_motor($param), 'base' => $this->definir_base_motor($param), 'puerto' => $this->definir_puerto_motor($param), 'encoding' => 'LATIN1', 'schema' => $id_instancia);
         $this->get_instalacion()->agregar_db($base, $datos);
     }
     //--- Crea la instancia
     $proyectos = array();
     toba_modelo_instancia::crear_instancia($id_instancia, $base, $proyectos);
     //-- Carga la instancia
     $instancia = $this->get_instancia($id_instancia);
     $instancia->cargar(true);
     //Si no es interactivo, crea siempre la BD
     //--- Pido el password para el usuario por defecto
     $pwd = $this->definir_clave_usuario_admin($param);
     $usr = $this->definir_usuario_admin($param);
     //--- Vincula un usuario a todos los proyectos y se instala el proyecto
     $instancia->agregar_usuario($usr, 'Usuario Administrador', $pwd);
     $instancia->exportar_local();
     //--- Crea los nuevos alias
     $instancia->crear_alias_proyectos();
     $release = toba_modelo_instalacion::get_version_actual()->get_release();
     $instal_dir = toba_modelo_instalacion::dir_base();
     if (toba_manejador_archivos::es_windows()) {
         if (isset($_SERVER['USERPROFILE'])) {
             $path = $_SERVER['USERPROFILE'];
         } else {
             $path = $instal_dir;
         }
         $path .= "\\entorno_toba_{$release}.bat";
         $bat = "@echo off\n";
         $bat .= "set TOBA_DIR=" . toba_dir() . "\n";
         $bat .= "set TOBA_INSTANCIA={$id_instancia}\n";
         $bat .= "set TOBA_INSTALACION_DIR={$instal_dir}\n";
         $bat .= "set PATH=%PATH%;%TOBA_DIR%/bin\n";
         $bat .= "echo Entorno cargado.\n";
         $bat .= "echo Ejecute 'toba' para ver la lista de comandos disponibles.\n";
         file_put_contents($path, $bat);
     } else {
         $path = $instal_dir;
         $path .= "/entorno_toba.env";
         $bat = "export TOBA_DIR=" . toba_dir() . "\n";
         $bat .= "export TOBA_INSTANCIA={$id_instancia}\n";
         $bat .= "export TOBA_INSTALACION_DIR={$instal_dir}\n";
         $bat .= 'export PATH="$TOBA_DIR/bin:$PATH"' . "\n";
         $bat .= "echo \"Entorno cargado.\"\n";
         $bat .= "echo \"Ejecute 'toba' para ver la lista de comandos disponibles.\"\n";
         file_put_contents($path, $bat);
         chmod($path, 0755);
     }
 }
Beispiel #5
0
 function crear_instancia($nombre_instancia, $datos_motor)
 {
     $nombre_toba = 'toba_' . toba_modelo_instalacion::get_version_actual()->get_string_partes();
     //--- Agrega la fuente de datos de la instancia
     $datos_motor['base'] = $nombre_toba . '_' . $nombre_instancia;
     $confirmado = false;
     do {
         $this->get_instalacion()->agregar_db($nombre_instancia, $datos_motor);
         //--- Si la base existe, pregunta por un nombre alternativo, por si no quiere pisarla
         if ($this->get_instalacion()->existe_base_datos($nombre_instancia)) {
             $mensaje = "La base <b>{$datos_motor['base']}</b> ya está siendo utiliza en este servidor.";
             $confirmado = inst_fact::gtk()->confirmar_pisar_base($mensaje);
             if ($confirmado !== true) {
                 $datos_motor['base'] = $confirmado;
                 $confirmado = false;
             }
         } else {
             $confirmado = true;
         }
     } while ($confirmado === false);
     //--- Crea la instancia
     $proyectos = toba_modelo_proyecto::get_lista();
     if (isset($proyectos['toba_testing'])) {
         //--- Elimina el proyecto toba_testing
         unset($proyectos['toba_testing']);
     }
     toba_modelo_instancia::crear_instancia($nombre_instancia, $nombre_instancia, $proyectos);
     $instancia = $this->get_instancia($nombre_instancia);
     $instancia->cargar(true);
     //--- Vincula un usuario a todos los proyectos
     $instancia->agregar_usuario('toba', 'Usuario Toba', 'toba');
     foreach ($instancia->get_lista_proyectos_vinculados() as $id_proyecto) {
         $proyecto = $instancia->get_proyecto($id_proyecto);
         $grupo_acceso = $proyecto->get_grupo_acceso_admin();
         $proyecto->vincular_usuario('toba', $grupo_acceso);
     }
     $instancia->exportar_local();
     //--- Crea los nuevos alias
     $instancia->crear_alias_proyectos();
     //--- Ejecuta instalaciones particulares de cada proyecto
     foreach ($instancia->get_lista_proyectos_vinculados() as $id_proyecto) {
         $instancia->get_proyecto($id_proyecto)->instalar();
     }
 }
Beispiel #6
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;
     }
 }
Beispiel #7
0
 function get_lista_instancias()
 {
     $instancias = toba_modelo_instancia::get_lista();
     $datos = array();
     $a = 0;
     foreach ($instancias as $x) {
         $datos[$a]['id'] = $x;
         $datos[$a]['desc'] = $x;
         $a++;
     }
     return $datos;
 }
 function existe_instancia($id)
 {
     return toba_modelo_instancia::existe_carpeta_instancia($id);
 }
Beispiel #9
0
 /**
  * La definición del archivo instancias.php se mueve hacia archivos y directorios
  * en el directorio instalacion dentro de $toba_dir
  */
 function instalacion__construir_inis()
 {
     // Estos defines se necesitan aca porque no se incluye el archivo de funciones planas db.php
     define("apex_db_motor", 0);
     define("apex_db_profile", 1);
     // host-dsn
     define("apex_db_usuario", 2);
     define("apex_db_clave", 3);
     define("apex_db_base", 4);
     define("apex_db_con", 5);
     define("apex_db_link", 6);
     define("apex_db", 7);
     define("apex_db_link_id", 8);
     if (!is_file(toba_dir() . '/php/instancias.php')) {
         throw new toba_error("No existe el archivo 'instancias.php'. No es posible realizar la conversion.");
     }
     require_once 'instancias.php';
     //*** 0) Creo la carpeta INSTALACION
     toba_modelo_instalacion::crear_directorio();
     //*** 1) BASES
     $bases_registradas = array();
     $this->manejador_interface->mensaje("Migrar la definicion de BASES. (php/instancias.php)");
     if (!toba_modelo_instalacion::existe_info_bases()) {
         foreach ($instancia as $i => $datos) {
             $base['motor'] = $datos[apex_db_motor];
             $base['profile'] = $datos[apex_db_profile];
             $base['usuario'] = $datos[apex_db_usuario];
             $base['clave'] = $datos[apex_db_clave];
             $base['base'] = $datos[apex_db_base];
             $bases_registradas[] = $i;
             $bases[$i] = $base;
         }
         toba_modelo_instalacion::crear_info_bases($bases);
         $this->manejador_interface->mensaje("la definicion de BASES se encuentra ahora en '" . toba_modelo_instalacion::archivo_info_bases() . "'");
     } else {
         $this->manejador_interface->mensaje("ya existe una archivo '" . toba_modelo_instalacion::archivo_info_bases() . "'");
     }
     // *** 2) CLAVES
     $this->manejador_interface->mensaje("Migrar la definicion de CLAVES. (php/instancias.php)");
     if (!toba_modelo_instalacion::existe_info_basica()) {
         $this->manejador_interface->enter();
         $id_grupo_desarrollo = self::definir_id_grupo_desarrollo();
         toba_modelo_instalacion::crear_info_basica(apex_clave_get, apex_clave_db, $id_grupo_desarrollo);
     } else {
         $this->manejador_interface->mensaje("ya existe una archivo '" . toba_modelo_instalacion::archivo_info_basica() . "'");
     }
     // *** 3) INSTANCIAS
     $this->manejador_interface->enter();
     $this->manejador_interface->subtitulo("Migrar INSTANCIAS toba");
     $this->manejador_interface->mensaje("Indique que BASES son INSTANCIAS toba");
     //Busco la lista de proyectos de la instalacion
     $proyectos = toba_modelo_proyecto::get_lista();
     if (!in_array('toba', $proyectos)) {
         $proyectos[] = 'toba';
     }
     //Creo las instancias, preguntando en cada caso
     //Existe la opcion de conectarse a la base y preguntar si existe la tabla 'apex_objeto',
     //pero puede ser que por algun motivo la base no este online y sea una instancia
     foreach ($instancia as $i => $datos) {
         if ($datos[apex_db_motor] == 'postgres7') {
             $this->manejador_interface->separador("BASE: {$i}");
             $this->manejador_interface->lista($datos, 'Parametros CONEXION');
             $this->manejador_interface->enter();
             if ($this->manejador_interface->dialogo_simple("La base '{$i}' corresponde a una INSTANCIA TOBA?")) {
                 if (toba_modelo_instancia::existe_carpeta_instancia($i)) {
                     $this->manejador_interface->error("No es posible crearla instancia '{$i}'");
                     $this->manejador_interface->mensaje("Ya exite una instancia: {$i}");
                 } else {
                     toba_modelo_instancia::crear_instancia($i, $i, $proyectos);
                 }
             }
         }
     }
     $this->manejador_interface->mensaje("Ya es posible borrar el archivo 'toba_dir/php/instancias.php'");
     $this->manejador_interface->separador("");
 }
Beispiel #10
0
 function parsear_editores(toba_modelo_instancia $instancia)
 {
     toba_contexto_info::set_db($instancia->get_db());
     //--- Se busca el CI asociado a cada clase
     $sql = "SELECT\n\t\t\t\t\tc.clase,\n\t\t\t\t \to.proyecto,\n\t\t\t\t\to.objeto\n\t\t\t\tFROM\n\t\t\t\t\tapex_clase c,\n\t\t\t\t\tapex_item_objeto io,\n\t\t\t\t\tapex_objeto o\n\t\t\t\tWHERE\n\t\t\t\t\tc.clase IN ('" . implode("','", toba_info_editores::get_lista_tipo_componentes()) . "')\tAND\n\t\t\t\t\tc.proyecto = 'toba' AND\n\t\t\t\t\tc.editor_item = io.item AND\t\t\t\t-- Se busca el item editor\n\t\t\t\t\tc.editor_proyecto = io.proyecto AND\n\t\t\t\t\tio.objeto = o.objeto AND\t\t\t\t-- Se busca el CI del item\n\t\t\t\t\tio.proyecto = o.proyecto AND\n\t\t\t\t\to.clase = 'toba_ci'";
     $rs = $instancia->get_db()->consultar($sql);
     $clase_php = new toba_clase_datos("toba_datos_editores");
     foreach ($rs as $datos) {
         //--- Se buscan las pantallas asociadas a un CI especifico
         $this->manejador_interface->mensaje("Procesando " . $datos['clase'] . "...");
         $proyecto = $instancia->get_db()->quote($datos['proyecto']);
         $objeto = $instancia->get_db()->quote($datos['objeto']);
         $sql = "\n\t\t\t\tSELECT\n\t\t\t\t\tpant.identificador,\n\t\t\t\t\tpant.etiqueta,\n\t\t\t\t\tpant.imagen,\n\t\t\t\t\tpant.imagen_recurso_origen\n\t\t\t\tFROM\n\t\t\t\t\tapex_objeto_ci_pantalla pant\n\t\t\t\tWHERE\n\t\t\t\t\t\tpant.objeto_ci_proyecto = {$proyecto}\n\t\t\t\t\tAND pant.objeto_ci = {$objeto}\n\t\t\t\tORDER BY pant.orden\n\t\t\t";
         $pantallas = $instancia->get_db()->consultar($sql);
         $clase_php->agregar_metodo_datos('get_pantallas_' . $datos['clase'], $pantallas);
     }
     $dir = toba_dir() . "/php/modelo/info";
     $clase_php->guardar($dir . '/toba_datos_editores.php');
 }
Beispiel #11
0
 /**
  * Crea una instancia NUEVA. 
  * 
  * @gtk_icono nucleo/agregar.gif 
  * @gtk_no_mostrar 1
  */
 function opcion__crear($datos = null)
 {
     if (isset($datos)) {
         list($id_instancia, $tipo, $base, $proyectos, $usuario) = $datos;
     } else {
         $id_instancia = $this->get_id_instancia_actual();
         $tipo = $this->get_tipo_instancia();
         $usuario = null;
     }
     $instalacion = $this->get_instalacion();
     if (toba_modelo_instancia::existe_carpeta_instancia($id_instancia)) {
         throw new toba_error("Ya existe una INSTANCIA con el nombre '{$id_instancia}'");
     }
     if (!$instalacion->hay_bases()) {
         throw new toba_error("Para crear una INSTANCIA, es necesario definir al menos una BASE. Utilice el comando 'toba base registrar'");
     }
     $this->consola->titulo("Creando la INSTANCIA: {$id_instancia} TIPO: {$tipo}");
     //---- A: Creo la definicion de la instancia
     $this->consola->enter();
     if (!isset($base)) {
         $base = $this->seleccionar_base();
     }
     if (!isset($proyectos)) {
         $proyectos = $this->seleccionar_proyectos();
     }
     toba_modelo_instancia::crear_instancia($id_instancia, $base, $proyectos, $tipo);
     //---- B: Cargo la INSTANCIA en la BASE
     $instancia = $this->get_instancia($id_instancia);
     $metodo_carga = 'cargar';
     /*if($tipo == 'mini') {
     			$metodo_carga = 'cargar_tablas_minimas';
     		} else {
     			$metodo_carga = 'cargar';
     		}*/
     try {
         $instancia->{$metodo_carga}();
     } catch (toba_error_modelo_preexiste $e) {
         $this->consola->error('ATENCION: Ya existe una instancia en la base de datos seleccionada');
         $this->consola->lista($instancia->get_parametros_db(), 'BASE');
         if ($this->consola->dialogo_simple('Desea ELIMINAR la instancia y luego CARGARLA (La informacion local previa se perdera!)?')) {
             $instancia->{$metodo_carga}(true);
         } else {
             return;
         }
     } catch (toba_error $e) {
         $this->consola->error('Ha ocurrido un error durante la importacion de la instancia.');
         $this->consola->error($e->getMessage());
     }
     //---- C: Actualizo la versión, Creo un USUARIO y lo asigno a los proyectos
     $instancia->set_version(toba_modelo_instalacion::get_version_actual());
     $this->opcion__crear_usuario($usuario, false, $id_instancia);
     if ($tipo != 'mini') {
         //---- D: Exporto la informacion LOCAL
         $instancia->exportar_local();
         //-- Agregar los alias
         $this->consola->enter();
         $crear_alias = $this->consola->dialogo_simple("Desea crear automáticamente los alias de apache en el archivo toba.conf?", true);
         if ($crear_alias) {
             $instancia->crear_alias_proyectos();
         }
     }
     //Creo el esquema basico de logs de Toba.
     //$instancia->crear_modelo_logs_toba();
 }