protected function cargar_jasper() { if (!defined("JAVA_HOSTS")) { define("JAVA_HOSTS", "127.0.0.1:8081"); } //Incluimos la libreria JavaBridge require_once "3ros/JavaBridge/java/Java.inc"; //Creamos una variable que va a contener todas las librerías java presentes $path_libs = toba_dir() . '/php/3ros/JasperReports'; $classpath = ''; try { $archivos = toba_manejador_archivos::get_archivos_directorio($path_libs, '|.*\\.jar$|', true); foreach ($archivos as $archivo) { $classpath .= "file:{$archivo};"; } } catch (toba_error $et) { toba::logger()->error($et->getMessage()); //No se encontro el directorio, asi que no agrega nada al path y sigue el comportamiento que tenia con opendir } try { //Añadimos las librerías java_require($classpath); //Creamos el objeto JasperReport que permite obtener el reporte $this->jasper = new JavaClass("net.sf.jasperreports.engine.JasperFillManager"); } catch (JavaException $ex) { $trace = new Java("java.io.ByteArrayOutputStream"); $ex->printStackTrace(new Java("java.io.PrintStream", $trace)); print "java stack trace: {$trace}\n"; } catch (java_ConnectException $e) { toba::logger()->error($e->getMessage()); throw new toba_error_usuario('No es posible generar el reporte, el servlet Jasper no se encuentra corriendo'); } }
/** * Cambia los extends de las clases que extienden de las componentes de $de * a extends de las componentes de $a. * Combinaciones válidas: * $de = toba | $a = proyecto * $de = toba | $a = personalizacion * $de = proyecto | $a = personalizacion * @param toba_modelo_proyecto $proyecto * @param string $de valores posibles: toba | proyecto * @param string $a valores posibles: proyecto | personalizacion */ static function revincular_componentes(toba_modelo_proyecto $proyecto, $de = 'toba', $a = 'proyecto') { if (!self::chequear_combinaciones($de, $a)) { throw new toba_error("No se puede revincular de {$de} a {$a}"); } if ($de == 'toba' && $a == 'personalizacion') { self::revincular_componentes($proyecto, $de, 'proyecto'); self::revincular_componentes($proyecto, 'proyecto', $a); return; } $id_proyecto = $proyecto->get_id(); $clases_de = array(); $clases_a = array(); self::get_clases($proyecto, $de, $a, $clases_de, $clases_a); $editor = new toba_editor_archivos(); foreach ($clases_de as $key => $clase) { $clase_nueva = $clases_a[$key]; $texto_buscado = "|(?:[\t\r\n ]+extends[\t\r\n ]+{$clase})|i"; $texto_reemplazo = " extends {$clase_nueva}"; $editor->agregar_sustitucion($texto_buscado, $texto_reemplazo); } $path = $proyecto->get_dir() . '/php'; $dirs_excluidos = array($path . '/extension_toba/componentes'); $archivos = toba_manejador_archivos::get_archivos_directorio($path, '|.php|', true, $dirs_excluidos); $editor->procesar_archivos($archivos); }
function conf__cuadro(toba_ei_cuadro $cuadro) { $path = toba::proyecto()->get_path() . '/exportaciones/jasper'; $archivos = toba_manejador_archivos::get_archivos_directorio($path, '/.jasper$/', true); $datos = array(); $i = 0; foreach ($archivos as $archivo) { $this->s__paths[$i] = $archivo; $datos[$i]['path'] = $i; $datos[$i]['reporte'] = ucwords(str_replace('_', ' ', basename($archivo, '.jasper'))); $i++; } $cuadro->set_datos($datos); }
static function generar_html_listado() { toba::memoria()->desactivar_reciclado(); $src = toba::memoria()->get_parametro('imagen'); $recursivo = toba::memoria()->get_parametro('recursivo'); $origen = toba::memoria()->get_parametro('imagen_recurso_origen'); $url = admin_util::url_imagen_de_origen('', $origen); $dir = admin_util::dir_imagen_de_origen('', $origen); echo "<div id='editor_imagen_opciones'>"; echo "Filtro: <input id='editor_imagen_filtro' onkeyup='filtrar_imagenes(this.value)' type='text' /> "; $checkeado = $recursivo ? 'checked' : ''; echo "<label><input type='checkbox' onclick='recargar(this.checked ? 1 : 0)' {$checkeado} /> Recursivo</label>"; echo '</div><hr />'; echo "<div id='editor_imagen_listado'>"; echo '<table>'; $temp = toba_manejador_archivos::get_archivos_directorio($dir, '/(.)png|(.)gif|(.)jpg|(.)jpeg/', $recursivo); $archivos = array(); foreach ($temp as $archivo) { if (strpos($archivo, '/tabs/') === false) { $archivos[] = $archivo; } } sort($archivos); $columnas = 3; $cant = 1; $total = count($archivos); foreach ($archivos as $archivo) { if ($cant % $columnas == 1) { echo '<tr>'; } $relativo = substr($archivo, strlen($dir) + 1); $archivo = basename($relativo); echo "<td title='Seleccionar imagen' imagen='{$relativo}' onclick='seleccionar_imagen(this.getAttribute(\"imagen\"))'>\n\t\t\t\t\t<img nohack='1' src='" . $url . '/' . $relativo . "' />\n\t\t\t\t\t<div>{$archivo}</div>\n\t\t\t\t</td>\n"; if ($cant % $columnas == 0) { echo "</tr>\n"; } $cant++; } if ($cant % $columnas != 0) { echo "</tr>\n"; } echo '</table></div>'; }
function conf__cuadro(toba_ei_cuadro $cuadro) { if (!isset($this->s__datos) || $this->filtrar) { $carpeta = toba::instancia()->get_path_proyecto(toba_editor::get_proyecto_cargado()) . '/php'; $carpeta = toba_manejador_archivos::path_a_plataforma($carpeta); $extra = ''; if (isset($this->s__filtro['nombre'])) { $extra = "{$this->s__filtro['nombre']}.*"; } $archivos = toba_manejador_archivos::get_archivos_directorio($carpeta, "/{$extra}\\.php\$/", true); $modelo = toba_editor::get_modelo_proyecto(); $estandar = $modelo->get_estandar_convenciones(); $datos = array(); foreach ($archivos as $archivo) { $path_relativo = substr($archivo, strlen($carpeta) + 1); $nombre = basename($archivo); if (strlen($nombre) > 30) { $nombre = substr($nombre, 0, 30) . '...'; } $info = array('archivo' => $nombre, 'path' => $path_relativo); if (isset($this->s__filtro['convenciones']) && $this->s__filtro['convenciones']) { $errores = $estandar->validar(array($archivo)); $info['errores'] = $errores['totals']['errors']; $info['warnings'] = $errores['totals']['warnings']; } $datos[] = $info; } $this->s__datos = rs_ordenar_por_columna($datos, 'archivo'); } if (isset($this->s__filtro['convenciones']) && $this->s__filtro['convenciones']) { $columnas = array(); $columnas[0]['clave'] = 'errores'; $columnas[0]['titulo'] = toba_recurso::imagen_toba('error.gif', true); $columnas[0]['estilo'] = 'col-num-p1'; $columnas[1]['clave'] = 'warnings'; $columnas[1]['titulo'] = toba_recurso::imagen_toba('warning.gif', true); $columnas[1]['estilo'] = 'col-num-p1'; $cuadro->agregar_columnas($columnas); } $cuadro->desactivar_modo_clave_segura(); $cuadro->set_datos($this->s__datos); }
/** * 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; }
function proyecto__cambio_memoria_por_hilo() { $editor = new toba_editor_archivos(); $editor->agregar_sustitucion('/toba::hilo/', 'toba::memoria'); $archivos = toba_manejador_archivos::get_archivos_directorio($this->elemento->get_dir(), '/.php$/', true); $editor->procesar_archivos($archivos); }
protected function convertir_codificacion_dir($destino, $desde = "UTF-8", $hasta = "ISO-8859-1") { //Se buscan los archivos .html del arbol de directorios $archivos = toba_manejador_archivos::get_archivos_directorio($destino, "/\\.html/", true); $cant = count($archivos); $this->consola->mensaje("Convirtiendo {$cant} archivos de codificacion {$desde} a {$hasta}:"); foreach ($archivos as $archivo) { $this->convertir_codificacion($archivo, $desde, $hasta); } $this->consola->mensaje("Fin conversión"); }
/** * Retorna todas las migraciones disponibles desde la actual hasta la versión parametro * * @param toba_version $hasta * @param string $path_migraciones Path opcional de donde se ubican las migraciones (solo para tests) */ function get_secuencia_migraciones($hasta, $path_migraciones = null) { if (!isset($path_migraciones)) { $dir = $this->path_migraciones(); } else { $dir = $path_migraciones; } $exp = "/migracion_(.+)\\.php/"; $archivos = toba_manejador_archivos::get_archivos_directorio($dir, $exp, false); $versiones = array(); foreach ($archivos as $archivo) { $partes = array(); preg_match($exp, $archivo, $partes); $numero = str_replace('_', '.', $partes[1]); $version = new toba_version($numero); if ($this->es_menor($version) && $hasta->es_mayor_igual($version)) { $versiones[] = $version; } } usort($versiones, array('toba_version', 'comparar_versiones')); return $versiones; }
function instancia__migracion_variables_entorno() { //Busco los archivos ya sean PHP o de lotes $dir_base = toba_dir() . '/bin'; $archivos_php = toba_manejador_archivos::get_archivos_directorio($dir_base, '|.php|', true); $archivos_sh = toba_manejador_archivos::get_archivos_directorio($dir_base, '|.sh|', true); $archivos_bat = toba_manejador_archivos::get_archivos_directorio($dir_base, '|.bat|', true); //Proceso los cambios de asignacion de variables $editor = new toba_editor_archivos(); $editor->agregar_sustitucion('|\\stoba_instancia\\s*=|', ' TOBA_INSTANCIA='); $editor->agregar_sustitucion('|\\stoba_proyecto\\s*=|', ' TOBA_PROYECTO='); $editor->agregar_sustitucion('|\\stoba_dir\\s*=|', ' TOBA_DIR='); $editor->agregar_sustitucion('|\\$toba_dir|', '$TOBA_DIR'); $editor->procesar_archivos($archivos_php); $editor->procesar_archivos($archivos_sh); $editor->procesar_archivos($archivos_bat); //Proceso las lecturas de variables en $_SERVER $editor2 = new toba_editor_archivos(); $editor2->agregar_sustitucion('|$_SERVER[\'toba_proyecto\']|', '$_SERVER[\'TOBA_PROYECTO\']'); $editor2->agregar_sustitucion('|$_SERVER[\'toba_instancia\']|', '$_SERVER[\'TOBA_INSTANCIA\']'); $editor2->procesar_archivos($archivos_php); }
function get_archivos_js_propios($patron_incl = null, $patron_excl = null) { $dir_js = toba_dir() . '/www/js'; $archivos = array(); if (!isset($patron_incl)) { //--- Algunos archivos se ponen por adelantado porque requieren un orden de inclusión $archivos[] = $dir_js . "/basicos/basico.js"; $archivos[] = $dir_js . "/basicos/toba.js"; $archivos[] = $dir_js . "/componentes/ei.js"; $archivos[] = $dir_js . "/componentes/ei_formulario.js"; $archivos[] = $dir_js . "/componentes/ei_formulario_ml.js"; $archivos[] = $dir_js . "/efs/ef.js"; $patron = '/.\\.js/'; } $dirs = array($dir_js . '/basicos', $dir_js . '/componentes', $dir_js . '/efs'); foreach ($dirs as $directorio) { $nuevos = toba_manejador_archivos::get_archivos_directorio($directorio, $patron_incl); $archivos = array_merge($archivos, $nuevos); } if (isset($patron_excl)) { $nuevos = array(); foreach ($archivos as $archivo) { if (!preg_match($patron_excl, $archivo)) { $nuevos[] = $archivo; } } $archivos = $nuevos; } $archivos = array_unique($archivos); return $archivos; }
private function cargar_archivos_originales() { $this->archivos_originales = toba_manejador_archivos::get_archivos_directorio($this->dir, $this->patron_archivos, true); }
function proyecto__namespace_toba() { $editor = new toba_editor_archivos(); $editor->agregar_sustitucion('/separar_texto_lineas\\(/', 'toba_texto::separar_texto_lineas('); $archivos = toba_manejador_archivos::get_archivos_directorio($this->elemento->get_dir(), '/.php$/', true); $editor->procesar_archivos($archivos); }
/** * Borra físicamente todos los archivos de log del proyecto actual */ function borrar_archivos_logs() { $patron = "/sistema.log/"; $archivos = toba_manejador_archivos::get_archivos_directorio($this->directorio_logs(), $patron); foreach ($archivos as $archivo) { unlink($archivo); } }
/** * Importa la información perteneciente a la instancia desde otra instalacion/instancia * */ function importar_informacion_instancia($instancia_origen, $path_origen, $reemplazar_actuales) { if (!isset($path_origen)) { $path_origen = toba_dir(); } $nombres_carp = array(); try { $path = $path_origen . '/instalacion/' . self::dir_prefijo . $instancia_origen; if (!file_exists($path)) { throw new toba_error("No existe la carpeta {$path}"); } $subdirs = toba_manejador_archivos::get_subdirectorios($path); $proyectos = $this->get_lista_proyectos_vinculados(); foreach ($proyectos as $proy) { $nombres_carp[] = self::prefijo_dir_proyecto . $proy; } $this->get_db()->abrir_transaccion(); $this->get_db()->retrazar_constraints(); if ($reemplazar_actuales) { $this->eliminar_informacion_instancia(); } //De la carpeta global unicamente obtengo los usuarios, no el resto de los archivos que pueden traer inconvenientes con las tablas apex_revision y apex_instancia. $archivo = $path . '/global/usuarios.sql'; if (file_exists($archivo)) { $cant = $this->get_db()->ejecutar_archivo($archivo); toba_logger::instancia()->debug($archivo . ". ({$cant})"); $this->manejador_interface->progreso_avanzar(); } //Sigo con los directorios de los proyectos foreach ($nombres_carp as $carp) { $dir = $path . "/" . $carp; if (file_exists($dir)) { $archivos = toba_manejador_archivos::get_archivos_directorio($dir, '|.*\\.sql|'); foreach ($archivos as $archivo) { if (stripos($archivo, 'logs_') === FALSE) { //Evito los archivos de logs, van en un schema aparte. $cant = $this->get_db()->ejecutar_archivo($archivo); toba_logger::instancia()->debug($archivo . ". ({$cant})"); $this->manejador_interface->progreso_avanzar(); } } } } $this->manejador_interface->progreso_avanzar(); $this->get_db()->cerrar_transaccion(); $this->manejador_interface->progreso_fin(); } catch (toba_error_db $error) { $this->get_db()->abortar_transaccion(); throw $error; } }
protected function obtener_archivos($path, $excluidos = array()) { $excluidos = $this->preparar_excluidos($path, $excluidos); $archivos = toba_manejador_archivos::get_archivos_directorio($path, '/.*\\.php$/', true, $excluidos); sort($archivos, SORT_STRING); return $archivos; }
/** * Se cambia: * evt__limpieza_memoria por limpiar_memoria */ function proyecto__cambio_api_cn() { $editor = new toba_editor_archivos(); $editor->agregar_sustitucion("|evt__limpieza_memoria|", "limpiar_memoria"); $archivos = toba_manejador_archivos::get_archivos_directorio($this->elemento->get_dir(), '|.php|', true); $editor->procesar_archivos($archivos); }
/** * Compilacion de GRUPOS de ACCESO */ function compilar_metadatos_generales_grupos_acceso($limpiar_existentes = false) { toba_proyecto_db::set_db($this->db); if ($limpiar_existentes) { $archivos = toba_manejador_archivos::get_archivos_directorio($this->get_dir_generales_compilados(), '/toba_mc_gene__grupo/'); foreach ($archivos as $archivo) { unlink($archivo); } } $this->manejador_interface->mensaje('Perfiles funcionales', false); foreach ($this->get_indice_grupos_acceso() as $grupo_acceso) { $nombre_clase = 'toba_mc_gene__grupo_' . $grupo_acceso; $archivo = $this->get_dir_generales_compilados() . '/' . $nombre_clase . '.php'; $clase = new toba_clase_datos($nombre_clase); //-- Menu ------------------------------- $datos = toba_proyecto_db::get_items_menu($this->get_id(), array($grupo_acceso)); $temp = array(); foreach ($datos as $dato) { $temp[$dato['proyecto'] . '-' . $dato['item']] = $dato; } $clase->agregar_metodo_datos('get_items_menu', $temp); //-- Control acceso --------------------- $datos = toba_proyecto_db::get_items_accesibles($this->get_id(), array($grupo_acceso)); $temp = array(); foreach ($datos as $dato) { $temp[$dato['proyecto'] . '-' . $dato['item']] = $dato; } $clase->agregar_metodo_datos('get_items_accesibles', $temp); //-- Permisos --------------------------- $datos = toba_proyecto_db::get_lista_permisos($this->get_id(), array($grupo_acceso)); $temp = array(); foreach ($datos as $dato) { $temp[$dato['nombre'] . '-'] = $dato; //Se concatena un string porque asi el merge unifica si o si aunque el nombre sea un numero } $clase->agregar_metodo_datos('get_lista_permisos', $temp); //-- Acceso items zonas ----------------- foreach ($this->get_indice_zonas() as $zona) { $datos = toba_proyecto_db::get_items_zona($this->get_id(), array($grupo_acceso), $zona); $temp = array(); foreach ($datos as $dato) { $temp[$dato['item_proyecto'] . '-' . $dato['item']] = $dato; } $clase->agregar_metodo_datos('get_items_zona__' . $zona, $temp); } //-- Membresía ------------------- $miembros = toba_proyecto_db::get_perfiles_funcionales_asociados($this->get_id(), $grupo_acceso); $clase->agregar_metodo_datos('get_membresia', $miembros); //Guardo el archivo $clase->guardar($archivo); $this->manejador_interface->progreso_avanzar(); } //-- Agrego los items publicos en un archivo aparte, para que el usuario no autentificado pueda navegarlos $nombre_clase = 'toba_mc_gene__items_publicos'; $archivo = $this->get_dir_generales_compilados() . '/' . $nombre_clase . '.php'; $clase = new toba_clase_datos($nombre_clase); $datos = toba_proyecto_db::get_items_accesibles($this->get_id(), array()); $temp = array(); foreach ($datos as $dato) { $temp[$dato['proyecto'] . '-' . $dato['item']] = $dato; } $clase->agregar_metodo_datos('get_items_accesibles', $temp); $clase->guardar($archivo); $this->manejador_interface->progreso_avanzar(); $this->manejador_interface->progreso_fin(); }
/** * El ei_filtro pasa a ser un formulario con un par de campos seteados */ function proyecto__migrar_filtro_viejo() { //-- Todos los actuales filtros, se les pone un par de flags en el form. $sql = "\n\t\t\tUPDATE apex_objeto_ut_formulario SET no_imprimir_efs_sin_estado = 1, resaltar_efs_con_estado = 1\n\t\t\tFROM apex_objeto\n\t\t\tWHERE \n\t\t\t\t\tapex_objeto_ut_formulario.objeto_ut_formulario\t\t\t= apex_objeto.objeto\n\t\t\t\tAND apex_objeto_ut_formulario.objeto_ut_formulario_proyecto = apex_objeto.proyecto\n\t\t\t\tAND apex_objeto.clase='toba_ei_filtro' \n\t\t\t\tAND apex_objeto_ut_formulario.objeto_ut_formulario_proyecto = '{$this->elemento->get_id()}'\n\t\t"; $cant = $this->elemento->get_db()->ejecutar($sql); //-- Se cambia la clase $sql = "UPDATE apex_objeto SET clase='toba_ei_formulario' WHERE clase='toba_ei_filtro' AND proyecto = '{$this->elemento->get_id()}'"; $cant += $this->elemento->get_db()->ejecutar($sql); //-- Se cambian las extensiones de código y los hint de tipos $editor = new toba_editor_archivos(); $editor->agregar_sustitucion("|toba_ei_filtro|", "toba_ei_formulario"); $archivos = toba_manejador_archivos::get_archivos_directorio($this->elemento->get_dir(), '|.php|', true); $editor->procesar_archivos($archivos); return $cant; }