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); }
/** * @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(); }
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; }
/** * 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"); } }
/** * 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; } }
/** * 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); } } }
/** * 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; } }
/** * 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; }
/** * 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); }