function desinstalar() { $id = $this->proyecto->get_id(); $this->manejador_interface->titulo("Desinstalando {$id}"); $id_def_base = $this->proyecto->construir_id_def_base($this->get_fuente_defecto()); //--- Chequea si existe la entrada de la base de negocios en el archivo de bases if ($this->instalacion->existe_base_datos_definida($id_def_base)) { //--- Chequea si existe fisicamente la base creada y la borra if ($this->instalacion->existe_base_datos($id_def_base)) { $this->manejador_interface->mensaje('Borrando base de datos', false); $this->manejador_interface->progreso_avanzar(); $this->instalacion->borrar_base_datos($id_def_base); $this->manejador_interface->progreso_fin(); } $this->instalacion->eliminar_db($id_def_base); } }
function evt__mostrar_opciones() { $objeto_cmd = $this->get_objeto_comando($this->seleccion); $this->opciones = $objeto_cmd->inspeccionar_opciones(); $this->comp['label_info']->set_markup($objeto_cmd->get_info_extra()); //------ Cambia algunas cosas de lugar if ($objeto_cmd instanceof comando_base) { $opciones_a_sacar = array('listar', 'registrar'); $hay_que_sacar = $objeto_cmd->tiene_definido_base(); foreach (array_keys($this->opciones) as $id) { $existe = in_array($id, $opciones_a_sacar); if ($existe && $hay_que_sacar) { unset($this->opciones[$id]); } if (!$existe && !$hay_que_sacar) { unset($this->opciones[$id]); } } } //----------------------------------- $i = 0; foreach ($this->opciones as $opcion => $atributos) { if (!isset($atributos['tags']['gtk_no_mostrar'])) { $nombre = ucwords(str_replace('_', ' ', $opcion)); $boton = new GtkToolButton(); $boton->set_label($nombre); if (isset($atributos['tags']['gtk_icono'])) { $archivo = $atributos['tags']['gtk_icono']; $img = GtkImage::new_from_file(toba_dir() . '/www/img/' . $archivo); $boton->set_property('icon-widget', $img); } $boton->set_tooltip($this->tooltips, $atributos['ayuda']); $boton->connect('clicked', array($this, 'evt__ejecutar'), $opcion, $atributos); $this->comp['caja_opciones']->insert($boton, $i); //--- Desactivar algunos if ($objeto_cmd instanceof comando_instalacion && ($opcion == 'instalar' || $opcion == 'crear') && toba_modelo_instalacion::existe_info_basica()) { $boton->set_sensitive(false); } //---- $i++; } if (isset($atributos['tags']['gtk_separador'])) { $boton = new GtkSeparatorToolItem(); $this->comp['caja_opciones']->insert($boton, $i); $i++; } } $this->comp['caja_opciones']->show_all(); }
/** * Cambia los permisos de los archivo para que el usuario Apache cree directorios y pueda crear y leer carpetas navegables * @consola_parametros [-u usuario apache, se asume www-data] [-g grupo de usuarios, no se asume ninguno] * @gtk_icono password.png */ function opcion__cambiar_permisos() { //Si es produccion dar permisos solo a apache, sino a usuario y grupo $subject = $this->get_instalacion()->es_produccion() ? "u" : "ug"; $param = $this->get_parametros(); $grupo = isset($param['-g']) ? $param['-g'] : null; $usuario = isset($param['-u']) ? $param['-u'] : 'www-data'; $toba_dir = toba_dir(); $this->consola->subtitulo('Cambiando permisos de archivos navegables'); $comandos = array(array("chown -R {$usuario} {$toba_dir}/www", "Archivos navegables comunes:\n"), array("chmod -R {$subject}+rw {$toba_dir}/www", ''), array("chown -R {$usuario} {$toba_dir}/instalacion", "Archivos de configuración:\n"), array("chmod -R {$subject}+rw {$toba_dir}/instalacion", ''), array("chown -R {$usuario} {$toba_dir}/temp", "Archivos temporales comunes:\n"), array("chmod {$subject}+rw {$toba_dir}/temp", '')); foreach (toba_modelo_instalacion::get_lista_proyectos() as $proyecto) { $id_proyecto = basename($proyecto); $comandos[] = array("chown -R {$usuario} {$proyecto}/www", "Archivos navegables de {$id_proyecto}:\n"); $comandos[] = array("chmod -R {$subject}+rw {$proyecto}/www", ''); $comandos[] = array("chown -R {$usuario} {$proyecto}/temp", "Archivos temporales de {$id_proyecto}:\n"); $comandos[] = array("chmod -R {$subject}+rw {$proyecto}/temp", ''); } foreach ($comandos as $comando) { $this->consola->mensaje($comando[1], false); $this->consola->mensaje(" " . $comando[0] . exec($comando[0])); } if (isset($grupo)) { $comando = "chgrp -R {$grupo} {$toba_dir}"; $this->consola->subtitulo("\nCambiando permisos globales para el grupo {$grupo}"); $this->consola->mensaje(" " . $comando . exec($comando)); $comando = "chmod -R g+rw {$toba_dir}"; $this->consola->mensaje(" " . $comando . exec($comando)); } }
} } } //ei_arbol($_SESSION, 'SESION', null, true); //--- VERSION echo "<style type='text/css'>\n\t#overlay_contenido {\n\t\twidth: 90%;\n\t}\n\t.overlay-mensaje {\n\t\tmax-height: 100%;\n\t\toverflow: visible;\n\t}\n\tli {\n\t\tpadding-top: 5px;\n\t}\n</style>"; $url_trac = get_url_desarrollos(); $url_login = $url_trac . '/trac/toba/login'; if (isset($_GET['phpinfo'])) { phpinfo(); //} elseif (isset($_POST['chequeo'])) { } else { /*echo toba_form::abrir('toba', toba::vinculador()->get_url()); echo toba_form::submit('chequeo', "Chequear compatibilidad extensiones"); echo toba_form::cerrar();*/ $version = toba_modelo_instalacion::get_version_actual(); $cambios = "{$url_trac}/trac/toba/wiki/Versiones/" . ($version->get_release('.') . '.0'); echo "<div class='logo-inicio'>"; echo toba_recurso::imagen_proyecto('logo.gif', true); echo '<br><br>Editando proyecto <strong>' . toba_editor::get_proyecto_cargado() . '</strong> en la instancia <strong>' . toba_editor::get_id_instancia_activa() . '</strong>.<br>'; $ayuda = toba_recurso::ayuda(null, 'Ver log de cambios introducidos en esta versión'); echo "<a target='wiki' style='text-decoration:none; font-size: 16px; font-weight: bold;margin-top: 25px;float:left' href='{$cambios}' {$ayuda}>Versión "; echo $version->__toString() . '</a>'; $vinc = toba::vinculador()->get_url(null, null, array('phpinfo' => 1)); echo "<a style='text-decoration:none; float:right; text-align: center; ' href='{$vinc}' title='Ver información acerca de la instalación PHP de este servidor'>"; echo toba_recurso::imagen_proyecto('php-med-trans.png', true); echo '<br>' . phpversion(); echo '</a>'; if (!toba_manejador_archivos::es_windows()) { //Por ahora este mécanismo sólo funciona en linux controlar_usuario();
function ejecutar_ventana_migracion_version($con_transaccion = true) { toba_logger::instancia()->debug('Ejecutando ventana de migracion de instancia'); $path_migracion_instancia = toba_dir() . '/php/modelo/migraciones_instancia'; //Armo la ubicacion en donde se hallan los pasos de migracion de la instancia $version_actual = new toba_version($this->get_version_actual()); //Recupero la version de la instancia existente $actual_codigo = new toba_version(toba_modelo_instalacion::get_version_actual()); //Recupero la version actual del codigo instalado $version_actual->set_path_migraciones($path_migracion_instancia); //Cambio el path a las migraciones por defecto $versiones = $version_actual->get_secuencia_migraciones($actual_codigo, $path_migracion_instancia); //Calculo cuales son los pasos a dar if (empty($versiones)) { return; } foreach (array_keys($versiones) as $version) { $versiones[$version]->set_path_migraciones($path_migracion_instancia); //Hago la migracion para cada version intermedia $this->migrar_version($versiones[$version], false, $con_transaccion); } }
protected function definir_base_motor($param) { $nombre_toba = 'toba_' . toba_modelo_instalacion::get_version_actual()->get_release('_'); $nombre_parametro = array('-b', '--base-nombre', 'toba-base-nombre'); $result = $this->recuperar_dato_y_validez($param, $nombre_parametro); if ($result['invalido']) { toba::logger()->error("Se selecciono '{$nombre_toba}' como nombre de bd, ya que uno válido no fue provisto"); return $nombre_toba; } return $result['resultado']; }
/** * Punto de entrada desde la consola al nucleo */ function acceso_consola($instancia, $proyecto, $item) { $estado_proceso = null; $this->iniciar_contexto_desde_consola($instancia, $proyecto); try { $this->solicitud = toba_constructor::get_runtime(array('proyecto' => $proyecto, 'componente' => $item), 'toba_item'); $this->solicitud->procesar(); //Se llama a la ACTIVIDAD del ITEM $this->solicitud->registrar(); $this->solicitud->finalizar_objetos(); $estado_proceso = $this->solicitud->get_estado_proceso(); } catch (toba_error $e) { toba::logger()->crit($e, 'toba'); echo $e; } $this->finalizar_contexto_ejecucion(); toba::logger()->debug('Estado Proceso: ' . $estado_proceso, 'toba'); //toba::logger()->debug('Tiempo utilizado: ' . toba::cronometro()->tiempo_acumulado() . ' seg.'); $dir_logs = toba_modelo_instalacion::dir_base() . '/logs_comandos'; toba::logger()->set_directorio_logs($dir_logs); toba::logger()->guardar_en_archivo('comandos.log'); exit($estado_proceso); }
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(); } }
/** * Migra un proyecto entre dos versiones toba. * @consola_parametros Opcionales: [-d 'desde'] [-h 'hasta'] [-R 0|1] [-m metodo puntual de migracion] * @gtk_icono convertir.png * @consola_separador 1 * @gtk_separador 1 */ function opcion__migrar_toba() { $proyecto = $this->get_proyecto(); //--- Parametros $param = $this->get_parametros(); $desde = isset($param['-d']) ? new toba_version($param['-d']) : $proyecto->get_version_actual(); $hasta = isset($param['-h']) ? new toba_version($param['-h']) : toba_modelo_instalacion::get_version_actual(); $desde_texto = $desde->__toString(); $hasta_texto = $hasta->__toString(); $this->consola->titulo("Migración el proyecto '{$proyecto->get_id()}'" . " desde la versión {$desde_texto} hacia la {$hasta_texto}."); if (!isset($param['-m'])) { $versiones = $desde->get_secuencia_migraciones($hasta); if (empty($versiones)) { $this->consola->mensaje("No es necesario ejecutar una migración entre estas versiones para el proyecto '{$proyecto->get_id()}'"); return; } $proyecto->migrar_rango_versiones($desde, $hasta, false); } else { //Se pidio un método puntual $proyecto->ejecutar_migracion_particular($hasta, trim($param['-m'])); } }
/** * 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; } }
/** * Toma un proyecto de una instancia de un toba en un versión anterior e importa el mismo a esta versión * La instancia origen se debe llamar igual que la destino * @param string $id_instancia Instancia origen/destino de la migración * @param string $id_proyecto Proyecto origen/destino de la migración * @param string $dir_toba_viejo Directorio del toba que contiene la instancia/proyecto a migrar */ function importar_migrar_proyecto($id_instancia, $id_proyecto, $dir_toba_viejo) { //$path_proyecto = toba_dir().'/proyectos/'.$id_proyecto; $excepcion = null; $url = null; try { $dir_original = $this->get_dir(); $dir_backup = $dir_original . '.' . date('YmdHms'); //--- Hacer un backup del directorio actual $this->manejador_interface->titulo("1.- Haciendo backup directorio instalacion del nuevo toba"); if (file_exists($dir_original)) { if (!toba_manejador_archivos::copiar_directorio($dir_original, $dir_backup)) { throw new toba_error("No es posible hacer una copia de seguridad de la carpeta '{$dir_original}'. Verifique los permisos de escritura del usuario actual"); } } //--- Traer configuraciones de la instancia vieja $instancia = $this->get_instancia($id_instancia); $archivo_ini_bases = $dir_toba_viejo . '/instalacion/bases.ini'; if (!file_exists($archivo_ini_bases)) { throw new toba_error("No se encuentra el archivo {$archivo_ini_bases}"); } $archivo_instancia = $dir_toba_viejo . "/instalacion/i__{$id_instancia}/instancia.ini"; if (!file_exists($archivo_instancia)) { throw new toba_error("No se encuentra el archivo {$archivo_instancia}"); } $conf_instancia = parse_ini_file($archivo_instancia, true); $id_base_instancia = $instancia->get_ini_base(); if (isset($conf_instancia['base'])) { $id_base_instancia = $conf_instancia['base']; } $bases_viejas = parse_ini_file($archivo_ini_bases, true); if (!isset($bases_viejas[$id_base_instancia])) { throw new toba_error("No se encuentra la definición de la instancia {$id_base_instancia} en el archivo {$archivo_ini_bases}"); } //--- Incluir solo el proyecto a importar en la instancia $this->manejador_interface->titulo("2.- Apuntando la instancia nueva a la de la versión anterior"); $proyectos_vinculados = $instancia->get_lista_proyectos_vinculados(); $instancia->set_proyectos_vinculados(array($id_proyecto)); $path_proyecto = $instancia->get_path_proyecto($id_proyecto); $instancia->vincular_proyecto($id_proyecto, $path_proyecto, $url); //--- Apuntar la instancia actual a la instancia externa $this->actualizar_db($instancia->get_ini_base(), $bases_viejas[$id_base_instancia]); $this->cargar_info_ini(true); //--- Migrar la instancia vieja $this->manejador_interface->titulo("3.- Migrando el proyecto de versión toba"); $instancia->get_db()->destruir(); $instancia->get_db(true); //Refresca la base $desde = $instancia->get_version_actual(); $hasta = toba_modelo_instalacion::get_version_actual(); $instancia->get_db()->abrir_transaccion(); $instancia->migrar_rango_versiones($desde, $hasta, 1, false); $instancia->get_proyecto($id_proyecto)->exportar(); $instancia->get_db()->abortar_transaccion(); //Aborta la transaccion para que no afecte la instancia vieja $instancia->get_db()->destruir(); //---Restaurar el backup if (file_exists($dir_backup)) { $this->manejador_interface->titulo("4.- Restaurando backup directorio instalacion del nuevo toba"); if (file_exists($dir_original)) { toba_manejador_archivos::eliminar_directorio($dir_original); } rename($dir_backup, $dir_original); } else { throw new toba_error('Imposible restaurar el estado previo a la migración'); } //--- Agrega el proyecto a la instancia nueva (por si no estaba) y regenera la misma $this->manejador_interface->titulo("5.- Regenerando la instancia actual para tomar los cambios"); $this->cargar_info_ini(true); $instancia->cargar_info_ini(); $instancia->get_db(true); //Refresca la base //Si existe una entrada actual en el instancias.ini viejo, replicarla en el actual $instancia->vincular_proyecto($id_proyecto, $path_proyecto, $url); $proyecto = $instancia->get_proyecto($id_proyecto); $proyecto->regenerar(); } catch (Exception $e) { $excepcion = $e; //---Restaurar el backup if (file_exists($dir_backup)) { $this->manejador_interface->titulo("Restaurando backup directorio instalacion del nuevo toba"); if (file_exists($dir_original)) { if (!toba_manejador_archivos::eliminar_directorio($dir_original)) { throw new toba_error("Imposible restaurar backup desde '{$dir_backup}' hacia '{$dir_original}', deberá hacerlo manualmente."); } } rename($dir_backup, $dir_original); } throw $excepcion; } }
/** * 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(""); }
function comprimir_js() { $archivos = $this->get_archivos_js_propios(); $total = 0; require_once toba_dir() . '/php/3ros/jscomp/JavaScriptCompressor.class.php'; require_once toba_dir() . '/php/3ros/jscomp/BaseConvert.class.php'; $comp = new JavaScriptCompressor(false); $salida = array(); $this->manejador_interface->mensaje('Comprimiendo ' . count($archivos) . ' archivo/s', false); foreach ($archivos as $archivo) { if (strpos($archivo, "www/js/toba_") !== false) { //--- Evita comprimir dos veces continue; } $atr = stat($archivo); $total += $atr['size']; $nuevo = $comp->getClean(array('code' => file_get_contents($archivo), 'name' => basename($archivo))); $salida[] = $nuevo; $this->manejador_interface->progreso_avanzar(); } $this->manejador_interface->progreso_fin(); $todo = implode("\n", $salida); $version = toba_modelo_instalacion::get_version_actual(); $version = $version->__toString(); $archivo = toba_dir() . "/www/js/toba_{$version}.js"; file_put_contents($archivo, $todo); $atr = stat($archivo); $nuevo_total = $atr['size']; $this->manejador_interface->mensaje("Antes: {$total} bytes"); $this->manejador_interface->mensaje("Despues: " . $nuevo_total . " bytes"); $this->manejador_interface->mensaje("Radio: " . number_format($nuevo_total / $total, 2)); toba_modelo_instalacion::cambiar_info_basica(array('js_comprimido' => 1)); }
/** * @return \toba_modelo_proyecto * @throws \Exception */ protected function getModeloProyecto() { return $this->instalacion->get_instancia($this->getInstanciaId())->get_proyecto($this->getProyectoId()); }
/** * Migra un instancia entre dos versiones toba. * @consola_parametros Opcionales: [-d 'desde'] [-h 'hasta'] [-R 0|1] [-m metodo puntual de migracion] * @gtk_icono convertir.png */ function opcion__migrar_toba() { $instancia = $this->get_instancia(); //--- Parametros $param = $this->get_parametros(); $desde = isset($param['-d']) ? new toba_version($param['-d']) : $instancia->get_version_actual(); $hasta = isset($param['-h']) ? new toba_version($param['-h']) : toba_modelo_instalacion::get_version_actual(); $recursivo = !isset($param['-R']) || $param['-R'] == 1; if ($recursivo) { $texto_recursivo = " y proyectos contenidos"; } $desde_texto = $desde->__toString(); $hasta_texto = $hasta->__toString(); $this->consola->titulo("Migración de la instancia '{$instancia->get_id()}'" . $texto_recursivo . " desde la versión {$desde_texto} hacia la {$hasta_texto}."); if (!isset($param['-m'])) { $versiones = $desde->get_secuencia_migraciones($hasta); if (empty($versiones)) { $this->consola->mensaje("No es necesario ejecutar una migración entre estas versiones para la instancia '{$instancia->get_id()}'"); return; } $instancia->migrar_rango_versiones($desde, $hasta, $recursivo); } else { //Se pidio un método puntual $this->consola->mensaje("Ejecutando método particular:" . trim($param['-m'])); $instancia->ejecutar_migracion_particular($hasta, trim($param['-m'])); } }
/* Este script abre una consola del SIU-TOBA */ if (!isset($_SERVER['TOBA_DIR']) && isset($_SERVER['toba_dir'])) { $_SERVER['TOBA_DIR'] = $_SERVER['toba_dir']; } if (!isset($_SERVER['TOBA_INSTANCIA']) && isset($_SERVER['toba_instancia'])) { $_SERVER['TOBA_INSTANCIA'] = $_SERVER['toba_instancia']; } if (isset($_SERVER['TOBA_DIR'])) { //---------------------------------------------- // Defino el 'include_path' //---------------------------------------------- $dir = $_SERVER['TOBA_DIR'] . "/php"; $separador = substr(PHP_OS, 0, 3) == 'WIN' ? ';.;' : ':.:'; ini_set('include_path', ini_get('include_path') . $separador . $dir); //---------------------------------------------- // Invoco la consola //---------------------------------------------- require_once 'consola/consola.php'; $directorio_comandos = $dir . "/consola/comandos"; $clase_menu = 'menu_toba'; array_shift($argv); $consola = new consola($directorio_comandos, $clase_menu); $consola->run($argv); $dir_logs = toba_modelo_instalacion::dir_base() . "/logs_comandos"; toba_logger::instancia()->set_directorio_logs($dir_logs); toba_logger::instancia()->guardar_en_archivo('comandos.log'); } else { echo " ATENCION: La variable de entorno 'toba_dir' no esta definida!"; }