function error($texto) { toba_logger::instancia()->error($texto); $lineas = toba_texto::separar_texto_lineas($texto, self::$display_ancho); foreach ($lineas as $linea) { $this->_log .= self::display_prefijo_linea . $linea . "\n"; } }
function get_contenido_tabla_datos($tabla, $where_extra = null) { $definicion = toba_db_tablas_proyecto::$tabla(); //Genero el SQL if (isset($definicion['dump_where']) && trim($definicion['dump_where']) != '') { $w = stripslashes($definicion['dump_where']); $where = str_replace("%%", $this->proyecto->get_id(), $w); } else { $where = " ( proyecto = '" . $this->proyecto->get_id() . "')"; } if (isset($where_extra)) { $where = $where . ' AND (' . $where_extra . ')'; } $sql = 'SELECT ' . implode(', ', $definicion['columnas']) . " FROM {$tabla} " . " WHERE {$where} " . " ORDER BY {$definicion['dump_order_by']} ;\n"; $datos = $this->db->consultar($sql); $reorganizado = $this->reorganizar_tabla($datos, $definicion['clave_elemento']); $regs = count($datos); // if ( $regs > 1 ) { // $columnas_orden = array_map('trim', explode(',',$definicion['dump_order_by']) ); // $datos = rs_ordenar_por_columnas( $datos, $columnas_orden ); // } toba_logger::instancia()->debug("TABLA {$tabla} ({$regs} reg.)"); return $reorganizado; }
function proyecto__ef_normalizacion_parametros() { $cant = 0; $correlacion = array('estado' => 'estado_defecto', 'predeterminado' => 'estado_defecto', 'solo_lectura' => 'solo_lectura', 'dao' => 'carga_metodo', 'clase' => 'carga_clase', 'include' => 'carga_include', 'clave' => 'carga_col_clave', 'sql' => 'carga_sql', 'fuente' => 'carga_fuente', 'lista' => 'carga_lista', 'dependencias' => 'carga_maestros', 'cascada_relajada' => 'carga_cascada_relaj', 'no_seteado' => 'carga_no_seteado', 'tamano' => 'edit_tamano', 'cifras' => 'edit_tamano', 'maximo' => 'edit_maximo', 'mascara' => 'edit_mascara', 'unidad' => 'edit_unidad', 'rango' => 'edit_rango', 'filas' => 'edit_filas', 'columnas' => 'edit_columnas', 'wrap' => 'edit_wrap', 'resaltar' => 'edit_resaltar', 'ajustable' => 'edit_ajustable', 'ventana' => 'popup_ventana', 'editable' => 'popup_editable', 'valor_no_seteado' => 'check_valor_no', 'valor_info' => 'check_desc_si', 'valor_info_no_seteado' => 'check_desc_no', 'sin_datos' => 'fijo_sin_estado', 'ancho' => 'editor_ancho', 'alto' => 'editor_alto', 'botonera' => 'editor_botonera', 'cant_minima' => 'selec_cant_minima', 'cant_maxima' => 'selec_cant_maxima', 'mostrar_utilidades' => 'selec_utilidades', 'tamanio' => 'selec_tamano', 'extensiones_validas' => 'upload_extensiones'); $sql = "\n\t\t\tSELECT \n\t\t\t\tobjeto_ei_formulario_proyecto,\n\t\t\t\tobjeto_ei_formulario,\n\t\t\t\tobjeto_ei_formulario_fila,\n\t\t\t\telemento_formulario,\n\t\t\t\tidentificador,\n\t\t\t\tinicializacion\n\t\t\tFROM\n\t\t\t\tapex_objeto_ei_formulario_ef\n\t\t\tWHERE \n\t\t\t\tobjeto_ei_formulario_proyecto='{$this->elemento->get_id()}'\n\t\t"; $rs = $this->elemento->get_db()->consultar($sql); foreach ($rs as $ef) { $param = parsear_propiedades($ef['inicializacion'], '_'); $nuevos = array(); foreach ($param as $clave => $valor) { if (isset($correlacion[$clave])) { $nuevos[$correlacion[$clave]] = $valor; } elseif ($clave == 'tipo') { if (!is_numeric($valor)) { $valor = $valor == 'i' ? 0 : 1; } $nuevos['fieldset_fin'] = $valor; } elseif ($clave == 'valor') { if ($ef['elemento_formulario'] == 'ef_checkbox') { $nuevos['check_valor_si'] = $valor; } else { $nuevos['carga_col_desc'] = $valor; } } elseif ($clave == 'item_destino') { $partes = explode(',', $valor); $p_item = $partes[0]; if (count($partes) == 2) { $p_proyecto = $partes[1]; } else { $p_proyecto = $this->elemento->get_id(); } $nuevos['popup_item'] = $p_item; $nuevos['popup_proyecto'] = $p_proyecto; } else { $msg = "El parametro '{$clave}' de los EF no tiene correlacion en la migracion."; $extendido = "Se decarta el valor '{$valor}' del parámetro '{$clave}' en el ef '{$ef['identificador']}' del formulario" . " '{$ef['objeto_ei_formulario']}'"; toba_logger::instancia()->warning($extendido); $this->manejador_interface->mensaje("{$msg} (Ver log para más detalles)\n"); } } if (!empty($nuevos)) { $sql = "\n\t\t\t\t\tUPDATE apex_objeto_ei_formulario_ef \n\t\t\t\t\tSET \n\t\t\t\t\t\tinicializacion = NULL,\n\t\t\t\t"; foreach ($nuevos as $id => $valor) { $valor = addslashes($valor); $sql .= "{$id} = '{$valor}', "; } $sql = substr($sql, 0, -2); $sql .= "\tWHERE\n\t\t\t\t\t\t\tobjeto_ei_formulario_proyecto = '{$ef['objeto_ei_formulario_proyecto']}' \n\t\t\t\t\t\tAND\tobjeto_ei_formulario = '{$ef['objeto_ei_formulario']}' \n\t\t\t\t\t\tAND objeto_ei_formulario_fila = '{$ef['objeto_ei_formulario_fila']}'\n\t\t\t\t\t"; //echo $sql."\n"; $rs = $this->elemento->get_db()->ejecutar($sql); $cant++; } } //--- Pone las inicializaciones en NULL para no volver a migrarlas sin querer $sql = "UPDATE apex_objeto_ei_formulario_ef SET inicializacion = NULL\n\t\t\t\t\tWHERE objeto_ei_formulario_proyecto='{$this->elemento->get_id()}'"; $this->elemento->get_db()->ejecutar($sql); return $cant; }
function grabar_logs() { $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'); }
function liberar_savepoint($nombre) { $sql = "RELEASE SAVEPOINT {$nombre};"; $this->ejecutar($sql); toba_logger::instancia()->debug("************ liberar savepoint {$nombre} ({$this->base}@{$this->profile}) ****************", 'toba'); }
function proyecto__migrar_datos_para_mysql() { /* Hacer que el ID de los items sea numerico */ $sql = "SELECT item FROM apex_item WHERE proyecto = '{$this->elemento->get_id()}'"; $datos = $this->elemento->get_db()->consultar($sql); $renombrar = array(); $sqls_items = array(); foreach ($datos as $dato) { if ((string) (int) $dato['item'] != $dato['item']) { //-- Cambio en ID del item en la base -- $id_viejo = $dato['item']; $id_nuevo = $this->elemento->get_db()->recuperar_nuevo_valor_secuencia('apex_item_seq'); $id_nuevo++; $sql = "UPDATE apex_item SET item = '{$id_nuevo}' WHERE item = '{$id_viejo}' AND proyecto='{$this->elemento->get_id()}';"; $sqls_items[] = $sql; $this->elemento->get_db()->ejecutar($sql); //-- Cambio el ID del item en el codigo $renombrar[$id_viejo] = $id_nuevo; } } //Renombrar los .php que consumieron estos ids $editor = new toba_editor_archivos(); foreach ($renombrar as $viejo => $nuevo) { $msg = "El id del item '{$viejo}' pasa a ser '{$nuevo}'."; toba_logger::instancia()->warning($msg); $this->manejador_interface->mensaje($msg); $viejo = str_replace('/', '\\/', $viejo); $editor->agregar_sustitucion("/\\'{$viejo}\\'/", $nuevo); $editor->agregar_sustitucion("/\\\"{$viejo}\\\"/", $nuevo); } $archivos = toba_manejador_archivos::get_archivos_directorio($this->elemento->get_dir(), '/.php$/', true); $editor->procesar_archivos($archivos); //-- Generar un .sql para poder migrar las instalaciones $migracion = "BEGIN;\n"; $migracion .= "SET CONSTRAINTS ALL DEFERRED;\n"; $migracion .= "\n\n--------- Se crean las constraints con UPDATE CASCADE\n"; $migracion .= implode("\n", $this->sql_migracion); $migracion .= "\n\n--------- Se migran los ids de los items\n"; $migracion .= implode("\n", $sqls_items); $migracion .= "\n\nCOMMIT;\n"; file_put_contents($this->elemento->get_dir() . '/migracion_instalaciones_1.2.0.sql', $migracion); /* Renumerar las que poseen 0 * completar las que no tienen registros con un registro fantasma o hacer que las secuencias comiencen si o si desde 1... */ /*foreach( toba_db_secuencias::get_lista() as $secuencia => $tabla) { $sql = "SELECT '$secuencia' as seq, min({$tabla['campo']}) as minimo FROM {$tabla['tabla']}\n"; //echo $sql; $datos = $this->elemento->get_db()->consultar_fila($sql); if($datos['minimo'] === 0){ echo "TABLA: {$tabla['tabla']} CAMPO {$tabla['campo']}\n"; } }*/ //throw new toba_error('no'); }
/** * Ejecuta un COMMIT en la conexión */ function cerrar_transaccion() { $this->conexion->commit(); toba_logger::instancia()->debug("************ CERRAR transaccion ({$this->base}@{$this->profile}) ****************", 'toba'); }
function __construct($proyecto) { $this->log = toba_logger::instancia($proyecto); }
/** * Se deserializan los campos de la sumatoria del corte de control y se generan registros nuevos */ function proyecto__normalizar_suma_cortes_cuadro() { $sql = "SELECT col.objeto_cuadro_proyecto, col.objeto_cuadro, col.objeto_cuadro_col, col.total_cc\n\t\t\t\t\t FROM apex_objeto_ei_cuadro_columna col\n\t\t\t\t\tWHERE\n\t\t\t\t\t\t\tcol.total_cc IS NOT NULL AND\n\t\t\t\t\t\t\tcol.total_cc <> '' AND\n\t\t\t\t\t\t\tcol.objeto_cuadro_proyecto = '{$this->elemento->get_id()}'; "; $datos = $this->elemento->get_db()->consultar($sql); toba_logger::instancia()->debug('Sql ejecutada: ' . $sql . "\n datos devueltos:"); toba_logger::instancia()->var_dump($datos); $sql = array(); foreach ($datos as $corte) { $cols_involucradas = explode(',', $corte['total_cc']); $cols_involucradas = array_map('trim', $cols_involucradas); foreach ($cols_involucradas as $columna) { $sql[] = "INSERT INTO apex_objeto_cuadro_col_cc(objeto_cuadro_cc, objeto_cuadro_proyecto, objeto_cuadro, objeto_cuadro_col, total) \n\t\t\t\t\t\t\t\t(SELECT objeto_cuadro_cc, '{$corte['objeto_cuadro_proyecto']}',\n\t\t\t\t\t\t\t\t\t\t\t\t '{$corte['objeto_cuadro']}', '{$corte['objeto_cuadro_col']}', '1'\n\t\t\t\t\t\t\t\t FROM\tapex_objeto_cuadro_cc\n\t\t\t\t\t\t\t\t WHERE\n\t\t\t\t\t\t\t\t\tobjeto_cuadro_proyecto = '{$corte['objeto_cuadro_proyecto']}' AND\n\t\t\t\t\t\t\t\t\tobjeto_cuadro = '{$corte['objeto_cuadro']}' AND\n\t\t\t\t\t\t\t\t\tidentificador = '{$columna}'\n\t\t\t\t\t\t\t\t);"; } } $this->elemento->get_db()->ejecutar($sql); }
function purgar_auditoria($tiempo = 0, $tablas = array(), $prefijo_tablas = null, $con_transaccion = true) { $this->manejador_interface->mensaje('Limpiando las tablas de auditoria', true); $fuentes = $this->proyecto->get_indice_fuentes(); toba_logger::instancia()->var_dump($fuentes, 'fuentes activas'); if (empty($fuentes)) { return; } $schemas = array(); foreach ($fuentes as $fuente) { $schemas[$fuente] = aplanar_matriz(toba_info_editores::get_schemas_fuente($this->proyecto->get_id(), $fuente), 'schema'); } toba_logger::instancia()->var_dump($schemas, 'schemas de fuentes'); foreach ($fuentes as $fuente) { try { $base = $this->proyecto->get_db_negocio($fuente); $this->procesar_schemas_fuente($base, $schemas[$fuente], $con_transaccion, $tablas, $prefijo_tablas, 'purgar', $tiempo); unset($base); } catch (toba_error_db $e) { if (isset($base)) { $base->abortar_transaccion(); //Si hay algun error hace revert y anula el objeto de la bd unset($base); } } } }
/** * Retorna el logger de mensajes internos * @return toba_logger */ static function logger() { return toba_logger::instancia(); }
function sincro_fs() { $obs = array(); foreach ($this->archivos_eliminados as $archivo) { unlink($archivo); toba_logger::instancia()->info("Sincronizacion: Eliminando archivo {$archivo}"); $obs[] = "SINCRO: eliminar '{$archivo}'"; } return $obs; }
/* 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!"; }
function get_logger() { return toba_logger::instancia($this->s__opciones['proyecto']); }
private static function actualizar_version($version) { $numero = $version->__toString(); file_put_contents(self::dir_base() . "/VERSION", $numero); toba_logger::instancia()->debug("Actualizada instalación a versión {$numero}"); }
function set_checksum_proyecto($proyecto, $checksum) { $proy_qtd = $this->get_db()->quote($proyecto); $cks_qtd = $this->get_db()->quote($checksum); $sql = "UPDATE apex_checksum_proyectos SET checksum = {$cks_qtd} WHERE proyecto = {$proy_qtd};"; $modificados = $this->get_db()->sentencia($sql); if ($modificados == '0') { $sql = "INSERT INTO apex_checksum_proyectos (proyecto, checksum) VALUES ({$proy_qtd}, {$cks_qtd});"; $modificados = $this->get_db()->sentencia($sql); } toba_logger::instancia()->debug("Actualizado el checksum del proyecto {$proyecto}"); }
function eliminar_permisos_editables() { $this->manejador_interface->mensaje("Eliminando perfiles editables", false); toba_logger::instancia()->debug("Eliminando perfiles editables '{$this->identificador}'"); $proyecto = $this->db->quote($this->identificador); $where = "proyecto = {$proyecto} AND usuario_grupo_acc IN (SELECT gc.usuario_grupo_acc FROM apex_usuario_grupo_acc AS gc WHERE gc.proyecto = {$proyecto} AND gc.permite_edicion = 1)"; foreach (array_reverse($this->get_lista_tablas_perfil_funcional()) as $tabla) { $sql = "DELETE FROM {$tabla} WHERE {$where}"; $cant = $this->db->ejecutar($sql); toba_logger::instancia()->debug("{$tabla} ({$cant})"); $this->manejador_interface->progreso_avanzar(); } toba_logger::instancia()->debug("Eliminando restricciones editables '{$this->identificador}'"); $where = "proyecto = {$proyecto} AND restriccion_funcional IN (SELECT res.restriccion_funcional FROM apex_restriccion_funcional AS res WHERE res.proyecto = {$proyecto} AND res.permite_edicion = 1)"; foreach (array_reverse($this->get_lista_tablas_restricciones()) as $tabla) { $sql = "DELETE FROM {$tabla} WHERE {$where}"; $this->db->ejecutar($sql); $cant = $this->db->ejecutar($sql); toba_logger::instancia()->debug("{$tabla} ({$cant})"); $this->manejador_interface->progreso_avanzar(); } $this->manejador_interface->progreso_fin(); }
function ejecutar_migracion($prefijo, $elemento, $metodo_part = null, $interface = null) { $nombre_clase = "toba_migracion_" . $this->partes[0] . '_' . $this->partes[1] . '_' . $this->partes[2]; $archivo = $this->path_migraciones() . "/{$nombre_clase}.php"; require_once $archivo; $migracion = new $nombre_clase($elemento); $clase = new ReflectionClass($nombre_clase); foreach ($clase->getMethods() as $metodo) { $nombre_metodo = $metodo->getName(); $es_metodo = $nombre_metodo == $metodo_part || !isset($metodo_part) && strpos($nombre_metodo, $prefijo . "__") === 0; if ($es_metodo) { $cant = $metodo->invoke($migracion); if (isset($cant)) { toba_logger::instancia()->info("Migración {$nombre_metodo}: {$cant} registros."); } if (isset($interface)) { $interface->progreso_avanzar(); } } } $interface->progreso_fin(); }
/** * Muestra los LOGS del proyecto * @consola_parametros Opcional: [-n 'numero'] Muestra un log específico. Por defecto se muestra el último */ function opcion__ver_log() { $param = $this->get_parametros(); $proyecto = isset($param["-p"]) ? $param["-p"] : $this->get_id_proyecto_actual(true); $instancia = isset($param["-i"]) ? $param["-i"] : $this->get_id_instancia_actual(true); toba_nucleo::instancia()->iniciar_contexto_desde_consola($instancia, $proyecto); $logger = toba_logger::instancia($proyecto); $archivo = $logger->directorio_logs() . "/sistema.log"; $analizador = new toba_analizador_logger_fs($archivo); $analizador->procesar_entidades_html(false); //Identifico el ID de log a cargar $param = $this->get_parametros(); if (isset($param['-n'])) { $pedido = $param['-n']; if ($pedido < 1 || $pedido > $analizador->get_cantidad_pedidos()) { $this->consola->mensaje("El log específico solicitado no existe."); return; } } else { $pedido = $analizador->get_cantidad_pedidos(); } //Muestro el log $res = $analizador->get_pedido($pedido); echo $res; }
protected function restaurar_schema_trabajo() { $schema_o = $this->get_schema_original(); $schema_logs_o = $schema_o . '_logs'; $schema_t = $this->get_schema_personalizacion(); $schema_logs_t = $schema_t . '_logs'; $this->get_db()->abrir_transaccion(); try { //Elimino los schemas con los metadatos originales $this->kill_schemas($schema_o); //Renombro los schemas de metadatos personalizados para que pueda seguir trabajando $this->get_db()->renombrar_schema($schema_logs_t, $schema_logs_o); $this->get_db()->renombrar_schema($schema_t, $schema_o); $this->get_db()->cerrar_transaccion(); } catch (toba_error_db $e) { $this->get_db()->abortar_transaccion(); toba_logger::instancia()->error($e->getMessage()); throw new toba_error_usuario('Hubo un inconveniente al intentar restaurar la instancia de trabajo, revise el log'); } }
/** * Registra un error en la apl., este nivel es que el se usa en las excepciones */ function error($mensaje) { $this->logger->error($mensaje); }