Esempio n. 1
0
 /**
  * Extiende las clases de componentes de toba o de las componentes extendidas del
  * proyecto.
  *
  * @param toba_modelo_proyecto $proyecto
  * @param string $path
  * @param string $tipo valores posibles: 'toba' | 'proyecto'
  */
 static function extender_componentes(toba_modelo_proyecto $proyecto, $path, $tipo = 'toba')
 {
     $id_proyecto = $proyecto->get_id();
     if (is_dir($path)) {
         toba_manejador_archivos::eliminar_directorio($path);
     }
     toba_manejador_archivos::crear_arbol_directorios($path);
     $componentes = self::get_componentes_toba($proyecto);
     if ($tipo == 'toba') {
         $prefijo = '';
         $clase_a_extender = 'toba_%comp%';
     } else {
         $prefijo = 'pers_';
         $clase_a_extender = $id_proyecto . '_%comp%';
     }
     foreach ($componentes as $componente) {
         $nombre_clase = $id_proyecto . '_' . $prefijo . $componente;
         $clase = new toba_codigo_clase($nombre_clase, str_replace('%comp%', $componente, $clase_a_extender));
         $clase->guardar($path . '/' . $nombre_clase . '.php');
     }
 }
Esempio n. 2
0
 /**
  * Extrae los attachments PDFs de un documento. Requiere tener instalado en el path el ejecutable 'pdftk'. Si falla lanza una excepcion toba_error
  * @param string $archivo_pdf Path completo al archivo PDF de entrada que contiene attachments 
  * @param string $patron Patrón a extraer (formato preg_match), se asumen todas 
  * @return array Paths completo a archivos extraidos. Es responsabilidad del que llama borrar la carpeta contenedora posterior a su uso
  */
 static function pdf_get_attachments($archivo_pdf, $patron = null)
 {
     $carpeta_temp = toba::proyecto()->get_path_temp() . '/' . md5(uniqid(time()));
     if (!file_exists($carpeta_temp)) {
         if (!mkdir($carpeta_temp)) {
             throw new toba_error("No fue posible extraer los XML del pdf", "Error al intentar crear carpeta temporal {$carpeta_temp} . Verifique permisos");
         }
     }
     $stdout = null;
     $stderr = null;
     $comando = "pdftk {$archivo_pdf} unpack_files output {$carpeta_temp}";
     if (toba_manejador_archivos::ejecutar($comando, $stdout, $stderr) !== 0) {
         throw new toba_error("No fue posible extraer los XML del pdf", "Error al ejecutar comando '{$comando}': {$stdout}\n" . $stderr);
     }
     $archivos = toba_manejador_archivos::get_archivos_directorio($carpeta_temp, $patron);
     if (empty($archivos)) {
         toba_manejador_archivos::eliminar_directorio($carpeta_temp);
     }
     return $archivos;
 }
Esempio n. 3
0
 /**
  * Elimina los archivos de configuracion y datos propios de la instancia
  */
 function eliminar_archivos()
 {
     toba_manejador_archivos::eliminar_directorio($this->dir);
 }
Esempio n. 4
0
 /**
  * Crea un proyecto NUEVO.
  * @consola_parametros Opcional: [-x] Si se utiliza esta opción el proyecto creado será personalizable
  * @gtk_icono nucleo/agregar.gif 
  * @gtk_no_mostrar 1
  */
 function opcion__crear()
 {
     $id_instancia = $this->get_id_instancia_actual();
     $id_proyecto = $this->get_id_proyecto_actual();
     $instancia = $this->get_instancia($id_instancia);
     $params = $this->get_parametros();
     // --  Creo el proyecto
     $this->consola->mensaje("Creando el proyecto '{$id_proyecto}' en la instancia '{$id_instancia}'...", false);
     $usuarios = $this->seleccionar_usuarios($instancia);
     toba_modelo_proyecto::crear($instancia, $id_proyecto, $usuarios);
     $this->consola->progreso_fin();
     // Extendemos las clases de toba a clases del proyecto
     $proyecto = $this->get_proyecto($id_proyecto);
     $pms = $proyecto->get_pms();
     util_modelo_proyecto::extender_clases($proyecto, $this->consola, 'toba');
     $pms->crear_pm_proyecto();
     // -- Modifica el proyecto para que sea apto para personalizaciones
     if (isset($params['-x'])) {
         $this->hacer_personalizable(false);
     }
     $proyecto->generar_autoload($this->consola);
     // -- Asigno un nuevo item de login
     $proyecto->actualizar_login();
     // -- Exporto el proyecto creado
     $proyecto->exportar();
     if (isset($params['-d'])) {
         //Como necesita si o si, ser creado en el dir proyectos.. luego de creado lo muevo
         $origen = $proyecto->get_dir();
         // lo revinculo con el directorio nuevo y re-instancio el proyecto para que arme bien el alias
         $path = $params['-d'];
         $instancia->vincular_proyecto($id_proyecto, $path);
         toba_manejador_archivos::copiar_directorio($origen, $path);
         toba_manejador_archivos::eliminar_directorio($origen);
         $proyecto = $this->get_proyecto($id_proyecto);
     }
     $instancia->exportar_local();
     if (!$proyecto->esta_publicado()) {
         $this->consola->separador();
         $agregar = $this->consola->dialogo_simple("El proyecto ha sido creado. ¿Desea agregar el alias de apache al archivo toba.conf?", true);
         if ($agregar) {
             $proyecto->publicar();
             $this->consola->mensaje('OK. Debe reiniciar el servidor web para que los cambios tengan efecto');
         }
     }
 }
Esempio n. 5
0
 /**
  * Arma los .tar.gz y .zip de todas las versiones lanzadas
  */
 function opcion__comprimir_versiones()
 {
     $error = null;
     $salida = null;
     $url_svn = 'http://localhost/svn/toba';
     $dir_temp = '/tmp';
     $destino = '/var/www/downloads/toba';
     $rama_branch = 'trunk_versiones';
     $rama_versiones = 'versiones';
     //-- Averiguo cual es el siguiente numero
     $versiones = explode("\n", trim(`svn ls {$url_svn}/{$rama_versiones}`));
     foreach ($versiones as $numero) {
         $siguiente = new toba_version(str_replace('/', '', $numero));
         $this->consola->mensaje("Comprimiendo version " . $siguiente->__toString(), false);
         //-- Hago el export a una carpeta
         $this->consola->mensaje("Export a carpeta temporal.", false);
         $export_dir = $dir_temp . "/toba_{$siguiente}";
         if (file_exists($export_dir)) {
             toba_manejador_archivos::eliminar_directorio($export_dir);
         }
         $cmd = "svn export {$url_svn}/{$rama_versiones}/{$siguiente} {$export_dir}";
         exec($cmd, $salida, $error);
         if ($error) {
             toba_manejador_archivos::eliminar_directorio($export_dir);
             throw new toba_error("No fue posible hacer el export. Comando:\n{$cmd}");
         }
         $this->consola->progreso_fin();
         //-- Armo el .zip
         $this->consola->mensaje("Creando ZIP.", false);
         if (file_exists("{$destino}/toba_{$siguiente}.zip")) {
             unlink("{$destino}/toba_{$siguiente}.zip");
         }
         $cmd = "cd {$dir_temp}; zip -r {$destino}/toba_{$siguiente}.zip toba_{$siguiente}";
         exec($cmd, $salida, $error);
         if ($error) {
             toba_manejador_archivos::eliminar_directorio($export_dir);
             throw new toba_error("Error armando el .zip. Comando:\n{$cmd}");
         }
         $this->consola->progreso_fin();
         //-- Armo el .tar.gz
         $this->consola->mensaje("Creando TAR.GZ.", false);
         if (file_exists("{$destino}/toba_{$siguiente}.tar.gz")) {
             unlink("{$destino}/toba_{$siguiente}.tar.gz");
         }
         $cmd = "cd {$dir_temp}; tar -czvf {$destino}/toba_{$siguiente}.tar.gz toba_{$siguiente}";
         exec($cmd, $salida, $error);
         if ($error) {
             toba_manejador_archivos::eliminar_directorio($export_dir);
             throw new toba_error("Error armando el .tar.gz. Comando:\n{$cmd}");
         }
         $this->consola->progreso_fin();
         //-- Borro temporales
         $this->consola->mensaje("Borrando archivos temporales.", false);
         toba_manejador_archivos::eliminar_directorio($export_dir);
         $this->consola->progreso_fin();
     }
 }
Esempio n. 6
0
 function validar_xmls()
 {
     $attachments = toba_firma_digital::pdf_get_attachments($this->s__pdf['path']);
     $ok = count($attachments) == 2;
     $carpeta = null;
     if ($ok && file_get_contents($attachments[0]) != file_get_contents(toba::proyecto()->get_path_temp() . '/entrada_deportes.xml')) {
         $ok = false;
         toba::notificacion()->agregar("XML deportes modificado", "error");
     }
     if ($ok && file_get_contents($attachments[1]) != file_get_contents(toba::proyecto()->get_path_temp() . '/entrada_juegos.xml')) {
         toba::notificacion()->agregar("XML juegos modificado", "error");
         $ok = false;
     }
     foreach ($attachments as $xml) {
         $carpeta = dirname($xml);
     }
     if (isset($carpeta)) {
         toba_manejador_archivos::eliminar_directorio($carpeta);
     }
     return $ok;
 }
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
 /**
  * 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;
     }
 }