Esempio n. 1
0
 function conf__cuadro(toba_ei_cuadro $cuadro)
 {
     $archivos = toba::memoria()->get_dato_instancia('previsualizacion_archivos');
     if (!isset($archivos)) {
         throw new toba_error('No se encontraron los archivos a mostrar');
     }
     $path_proyecto = toba_manejador_archivos::path_a_unix(toba::instancia()->get_path_proyecto(toba_editor::get_proyecto_cargado()));
     $path_php = $path_proyecto . '/php/';
     $cuadro->set_formateo_columna('tamano', 'tamano', 'formateo_tamano');
     $datos = array();
     foreach ($archivos as $i => $archivo) {
         $datos[$i]['path'] = substr($archivo, strlen($path_proyecto) + 1);
         $datos[$i]['tamano'] = filesize($archivo);
     }
     $cuadro->set_datos($datos);
 }
Esempio n. 2
0
 /**
  * @ignore 
  */
 function disparar_eventos()
 {
     if (isset($_POST[$this->_submit]) && $_POST[$this->_submit] != "") {
         $evento = $_POST[$this->_submit];
         //El evento estaba entre los ofrecidos?
         if (isset($this->_memoria['eventos'][$evento])) {
             $parametros = $_POST[$this->_submit . "__seleccion"];
             switch ($evento) {
                 case 'ir_a_carpeta':
                     if ($parametros == '..') {
                         //volver una carpeta
                         $seleccion = dirname($this->_dir_actual) . "/";
                     } else {
                         $seleccion = $this->_dir_actual . "/{$parametros}";
                     }
                     //--- Chequeo de seguridad
                     if (isset($this->_path_absoluto)) {
                         if (strpos(realpath($seleccion), realpath($this->_path_absoluto)) !== 0) {
                             throw new toba_error_seguridad("El path es invalido");
                         }
                     }
                     $this->_dir_actual = toba_manejador_archivos::path_a_unix(realpath($seleccion));
                     $this->reportar_evento($evento, $seleccion);
                     break;
                 case 'crear_carpeta':
                     $this->validar_nombre_carpeta($parametros);
                     $seleccion = $this->_dir_actual . "/{$parametros}";
                     toba_manejador_archivos::crear_arbol_directorios($seleccion);
                     break;
                 case 'crear_archivo':
                     $this->validar_nombre_archivo($parametros);
                     $seleccion = $this->_dir_actual . "/{$parametros}";
                     toba_manejador_archivos::crear_archivo_con_datos($seleccion, "");
                     break;
                 default:
                     $this->reportar_evento($evento, $seleccion);
             }
         }
     }
     $this->borrar_memoria_eventos_atendidos();
 }
Esempio n. 3
0
 protected static function get_archivos_incluidos()
 {
     $todos = get_included_files();
     $path_relativo = toba_manejador_archivos::path_a_unix(toba::proyecto()->get_path());
     $archivos = array();
     foreach ($todos as $archivo) {
         $archivo = toba_manejador_archivos::path_a_unix($archivo);
         if (strpos($archivo, $path_relativo) !== false) {
             $archivos[] = $archivo;
         }
     }
     return $archivos;
 }
Esempio n. 4
0
 /**
  * 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 toba'] [--no-interactive].
  * @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();
     $this->consola->titulo("Instalacion Toba " . toba_modelo_instalacion::get_version_actual()->__toString());
     //--- Verificar instalacion
     /*
     		if (get_magic_quotes_gpc()) {
     			$this->consola->mensaje("------------------------------------");
     			throw new toba_error("ERROR: Necesita desactivar las 'magic_quotes_gpc' en el archivo php.ini (ver http://www.php.net/manual/es/security.magicquotes.disabling.php)");	
     		}*/
     if (!extension_loaded('pdo')) {
         $this->consola->mensaje("------------------------------------");
         throw new toba_error("ERROR: Necesita activar la extension 'pdo' en el archivo php.ini");
     }
     if (!extension_loaded('pdo_pgsql')) {
         $this->consola->mensaje("------------------------------------");
         throw new toba_error("ERROR: Necesita activar la extension 'pdo_pgsql' en el archivo php.ini");
     }
     $version_php = shell_exec('php -v');
     if ($version_php == '') {
         $this->consola->mensaje("------------------------------------");
         throw new toba_error("ERROR: El comando 'php' no se encuentra en el path actual del sistema");
     }
     $param = $this->get_parametros();
     $interactive = !isset($param['--no-interactive']);
     if (isset($param['help'])) {
         $this->mostrar_ayuda_desatendida();
         return;
     }
     //--- Borra la instalacion anterior??
     if (toba_modelo_instalacion::existe_info_basica()) {
         toba_modelo_instalacion::borrar_directorio();
     }
     //--- Crea la INSTALACION
     $id_desarrollo = isset($param['-d']) ? $param['-d'] : $this->definir_id_grupo_desarrollo();
     $tipo_instalacion = isset($param['-t']) ? $param['-t'] : $this->definir_tipo_instalacion_produccion();
     $nombre = isset($param['-n']) ? $param['-n'] : $this->definir_nombre_instalacion();
     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;
     $puerto = '5432';
     //Asumo el puerto por defecto del servidor;
     if (!$this->get_instalacion()->existe_base_datos_definida($base)) {
         do {
             $profile = $this->recuperar_parametro($param, '-h', 'PostgreSQL - Ubicación (ENTER utilizará localhost)');
             if (trim($profile) == '') {
                 $profile = 'localhost';
             }
             $puerto_tmp = $this->recuperar_parametro($param, '-p', "PostgreSQL - Puerto (ENTER utilizará: {$puerto})");
             if (trim($puerto_tmp) != '') {
                 $puerto = $puerto_tmp;
             }
             $usuario = $this->recuperar_parametro($param, '-u', 'PostgreSQL - Usuario (ENTER utilizará postgres)');
             if (trim($usuario) == '') {
                 $usuario = 'postgres';
             }
             if (!isset($param['-c'])) {
                 $clave = $this->consola->dialogo_ingresar_texto('PostgreSQL - Clave  (ENTER para usar sin clave)', false);
             } else {
                 $clave = $this->recuperar_contenido_archivo($param['-c']);
             }
             $base_temp = $this->recuperar_parametro($param, '-b', "PostgreSQL - Base de datos (ENTER utilizará {$base})");
             if (trim($base_temp) != '') {
                 $base = $base_temp;
             }
             $datos = array('motor' => 'postgres7', 'profile' => $profile, 'usuario' => $usuario, 'clave' => $clave, 'base' => $base, 'puerto' => $puerto, 'encoding' => 'LATIN1', 'schema' => $id_instancia);
             $this->get_instalacion()->agregar_db($base, $datos);
             $puede_conectar = true;
             if ($interactive) {
                 //--- Intenta conectar al servidor
                 $puede_conectar = $this->get_instalacion()->existe_base_datos($base, array('base' => 'template1'), true);
                 if ($puede_conectar !== true) {
                     $this->consola->mensaje("\nNo es posible conectar con el servidor, por favor reeingrese la información de conexión. Mensaje:");
                     $this->consola->mensaje($puede_conectar . "\n");
                     sleep(1);
                 }
             }
         } while ($puede_conectar !== true);
     }
     //--- Pido el password para el usuario por defecto
     if (!isset($param['-k'])) {
         $pwd = $this->definir_clave_usuario_admin();
     } else {
         $pwd = $this->recuperar_contenido_archivo($param['-k']);
     }
     //--- Si la base existe, pregunta por un nombre alternativo, por si no quiere pisarla
     if ($interactive && $this->get_instalacion()->existe_base_datos($base, array(), false, $id_instancia)) {
         $nueva_base = $this->consola->dialogo_ingresar_texto("La base '{$base}' ya contiene un schema '{$id_instancia}', puede ingresar un nombre " . "de base distinto sino quiere sobrescribir los datos actuales: (ENTER sobrescribe la actual)", false);
         if ($nueva_base != '') {
             $datos['base'] = $nueva_base;
             $this->get_instalacion()->agregar_db($base, $datos);
         }
     }
     //--- Crea la instancia
     $proyectos = toba_modelo_proyecto::get_lista();
     if (isset($proyectos['toba_testing'])) {
         //--- Elimina el proyecto toba_testing
         unset($proyectos['toba_testing']);
     }
     if (isset($proyectos['curso_intro'])) {
         //--- Elimina el proyecto curso_intro
         unset($proyectos['curso_intro']);
     }
     toba_modelo_instancia::crear_instancia($id_instancia, $base, $proyectos);
     //-- Carga la instancia
     $instancia = $this->get_instancia($id_instancia);
     $instancia->cargar(true, !$interactive);
     //Si no es interactivo, crea siempre la BD
     //--- Vincula un usuario a todos los proyectos y se instala el proyecto
     $instancia->agregar_usuario('toba', 'Usuario Toba', $pwd);
     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', array($grupo_acceso));
     }
     //--- Crea el login y exporta el proyecto
     /*if (isset($nuevo_proyecto)) {
     			$nuevo_proyecto->actualizar_login();					//WTH??
     			$nuevo_proyecto->exportar();	
     		}*/
     $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();
     }
     //--- Mensajes finales
     if ($interactive) {
         $this->consola->titulo("Configuraciones Finales");
         $toba_conf = toba_modelo_instalacion::dir_base() . "/toba.conf";
         if (toba_manejador_archivos::es_windows()) {
             $toba_conf = toba_manejador_archivos::path_a_unix($toba_conf);
             $this->consola->mensaje("1) Agregar al archivo '\\Apache2\\conf\\httpd.conf' la siguiente directiva: ");
             $this->consola->mensaje("");
             $this->consola->mensaje("     Include \"{$toba_conf}\"");
         } else {
             $this->consola->mensaje("1) Ejecutar el siguiente comando como superusuario: ");
             $this->consola->mensaje("");
             $this->consola->mensaje("     ln -s {$toba_conf} /etc/apache2/sites-enabled/{$nombre_toba}.conf");
         }
         $this->consola->mensaje("");
         $url = $instancia->get_proyecto('toba_editor')->get_url();
         $this->consola->mensaje("Reiniciar el servicio apache e ingresar al framework navegando hacia ");
         $this->consola->mensaje("");
         $this->consola->mensaje("     http://localhost{$url}");
         $this->consola->mensaje("");
         $this->consola->mensaje("");
     }
     $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);
         if ($interactive) {
             $this->consola->mensaje("2) Se genero el siguiente .bat:");
             $this->consola->mensaje("");
             $this->consola->mensaje("   {$path}");
             $this->consola->mensaje("");
             $this->consola->mensaje("Para usar los comandos toba ejecute el .bat desde una sesión de consola (cmd.exe)");
         }
     } 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);
         if ($interactive) {
             $this->consola->mensaje("2) Se genero el siguiente archivo:");
             $this->consola->mensaje("");
             $this->consola->mensaje("   {$path}");
             $this->consola->mensaje("");
             $sh = basename($path);
             $this->consola->mensaje("Para usar los comandos toba ejecute antes el .env precedido por un punto y espacio");
         }
     }
     if ($interactive) {
         $this->consola->mensaje("");
         $this->consola->mensaje("3) Entre otras cosas puede crear un nuevo proyecto ejecutando el comando");
         $this->consola->mensaje("");
         $this->consola->mensaje("   toba proyecto crear");
     }
 }
Esempio n. 5
0
 /**
  * Genera el xml del componente
  * @param boolean $inicial Si el elemento es el primero llamado desde vista_xml
  * @param string $xmlns Namespace para el componente
  * @return string XML del componente
  */
 function vista_xml($inicial = false, $xmlns = null)
 {
     if ($xmlns) {
         $this->xml_set_ns($xmlns);
     }
     if (isset($this->_memoria['parametros'])) {
         $contenido = $this->_memoria['parametros']['contenido'];
         $formato = $this->_memoria['parametros']['formato'];
         $es_dirigido = $this->_memoria['parametros']['es_dirigido'];
         $archivo = self::generar_archivo($contenido, 'svg', $es_dirigido);
         $dir_temp = toba::instalacion()->get_path_temp();
         $xml = '<' . $this->xml_ns . 'img type ="svg"' . $this->xml_ns_url;
         if (isset($this->xml_caption)) {
             $xml .= ' caption="' . $this->xml_caption . '"';
         }
         $xml .= $this->xml_get_att_comunes();
         $xml .= ' src="' . toba_manejador_archivos::path_a_unix($dir_temp . "/" . $archivo) . '">';
         $xml .= $this->xml_get_elem_comunes();
         $svg = file_get_contents(toba_manejador_archivos::path_a_unix($dir_temp . "/" . $archivo));
         $svg = substr($svg, stripos($svg, '<svg'));
         $svg = substr($svg, 0, strripos($svg, '</svg>') + 6);
         $enc = mb_detect_encoding($svg);
         if (strtolower(substr($enc, 0, 8)) != 'iso-8859') {
             $svg = iconv($enc, 'iso-8859-1', $svg);
         }
         $xml .= $svg . '</' . $this->xml_ns . 'img>';
         return $xml;
     }
 }
Esempio n. 6
0
 /**
  * Utiliza una llamada al sist. operativo para que abra el archivo en un edtiro del sist. de ventanas del servidor
  */
 function abrir()
 {
     $cmd = toba::instalacion()->get_editor_php();
     if (strlen($cmd) == 0) {
         throw new toba_error_def("No se encuentra definido el editor por defecto a utilizar en la instalación");
     }
     if (toba_manejador_archivos::es_windows()) {
         $archivo = toba_manejador_archivos::path_a_windows($this->nombre);
         $com = "{$cmd} {$archivo}";
         toba::logger()->debug("Intentando abrir archivo con comando: '{$com}'");
         exec($com);
     } else {
         $archivo = toba_manejador_archivos::path_a_unix($this->nombre);
         $archivo = str_replace(" ", "\\ ", $archivo);
         $com = "{$cmd} {$archivo}";
         toba::logger()->debug("Intentando abrir archivo con comando: '{$com}'");
         $fp = popen($com . ' 2>&1', 'r');
         stream_set_blocking($fp, 0);
         sleep(1);
         $salida = fgets($fp, 2096);
         pclose($fp);
         if ($salida != '') {
             throw new toba_error("Intentando abrir archivo con comando: '{$com}'<br><br>Mensaje de error:<br>" . $salida);
         }
     }
 }
Esempio n. 7
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;
     }
 }
Esempio n. 8
0
 /**
  * Utiliza el objeto mapscript para generar el archivo con la imagen que representa el mapa
  * @return string
  * @ignore
  */
 protected function generar_archivo()
 {
     $formato = $this->_mapa->outputformat;
     $nombre_archivo = mt_rand() . '.' . $formato->getOption('name');
     $dir_temp = toba::instalacion()->get_path_temp();
     $salida = toba_manejador_archivos::path_a_unix($dir_temp . "/" . $nombre_archivo);
     //Aca le digo cuales son los layers activos
     $this->mapa_setear_estado_layers();
     //Aca le digo cual es el extent activo
     $this->mapa_setear_extent_activo();
     //Dibujo el mapa y envio la salida a archivo.
     $this->generar_salida($salida);
     return $nombre_archivo;
 }
Esempio n. 9
0
 /**
  * Agrega al archivo toba.conf la definicion del proyecto
  */
 static function agregar_alias_apache($alias, $dir, $instancia, $id_proyecto, $pers = false)
 {
     $archivo = self::get_archivo_alias_apache();
     //--- Se agrega el proyecto al archivo
     if ($pers) {
         $template = file_get_contents(toba_dir() . '/php/modelo/var/proyecto_pers.conf');
     } else {
         $template = file_get_contents(toba_dir() . '/php/modelo/var/proyecto.conf');
     }
     $editor = new toba_editor_texto();
     $editor->agregar_sustitucion('|__toba_dir__|', toba_manejador_archivos::path_a_unix(toba_dir()));
     $editor->agregar_sustitucion('|__proyecto_dir__|', toba_manejador_archivos::path_a_unix($dir));
     $editor->agregar_sustitucion('|__proyecto_alias__|', $alias);
     $editor->agregar_sustitucion('|__proyecto_id__|', $id_proyecto);
     $editor->agregar_sustitucion('|__instancia__|', $instancia);
     $editor->agregar_sustitucion('|__instalacion_dir__|', toba_manejador_archivos::path_a_unix(self::dir_base()));
     $salida = $editor->procesar($template);
     file_put_contents($archivo, $salida, FILE_APPEND);
 }