!C99Shell v. 2.1 [PHP 8 Update] [02.02.2022]!

Software: Apache/2.4.53 (Unix) OpenSSL/1.1.1o PHP/7.4.29 mod_perl/2.0.12 Perl/v5.34.1. PHP/7.4.29 

uname -a: Linux vps-2738122-x 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64 

uid=1(daemon) gid=1(daemon) grupos=1(daemon) 

Safe-mode: OFF (not secure)

/opt/apex_led/proyectos/toba_editor/php/configuracion/catalogo/   drwxrwxr-x
Free 13.44 GB of 61.93 GB (21.7%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     catalogo_tablas.php (10.64 KB)      -rwxrwxr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
class catalogo_tablas
{
    protected 
$_proyecto;
    protected 
$_fuente;
    protected 
$_datos_tabla = array();
    protected 
$_tablas = array();
    protected 
$_dt_bloqueados = array();
    protected 
$_tablas_actualizables = array();
    protected 
$_tablas_nuevas = array();
    protected 
$_tabla_x_schema = array();
    protected 
$_schemas_disp;

    function 
__construct($proyecto=null$fuente=null)
    {
        
$this->_proyecto $proyecto;
        
$this->_fuente $fuente;
    }

    function 
cargar()
    {
        
//Aca tengo que obtener los schemas de los datos de la fuente.
        
$this->_schemas_disp $this->buscar_schemas_fuente();
        
$this->buscar_lista_tablas();                                //Obtengo todas las tablas
        
$this->buscar_dt_lockeados();                            //Obtengo aquellos no actualizables
        
$this->_tablas_nuevas $this->_tablas;
        
//Ahora tengo que sacar los actualizados
        
foreach ($this->_tablas as $clave => $tabla) {
            
$columnas_dt $this->get_columnas_dt($tabla['tabla']);
            if (! empty(
$columnas_dt)) {                                                                            //Si existe un DT
                
$columnas_base $this->get_columnas_base($tabla['tabla']);
                
$modificaciones $this->cambios_a_realizar($columnas_dt$columnas_base);
                unset(
$this->_tablas_nuevas[$clave]);                                                    //La quito de entre las tablas nuevas
                
if (! empty($modificaciones)) {
                    
$this->_tablas_actualizables[$tabla['tabla']] = $modificaciones;
                }
            }
        }
    }

    function 
get_tablas_nuevas()
    {
        return 
$this->_tablas_nuevas;
    }

    function 
get_tablas_actualizables()
    {
        return 
$this->_tablas_actualizables;
    }

    function 
get_tablas_no_activas()
    {
        return 
$this->_dt_bloqueados;
    }

    function 
get_tablas_preseleccionadas()
    {
        return 
$this->quitar_desactivados();
    }
    
    function 
resetear()
    {
        
toba_admin_fuentes::instancia()->get_fuente($this->_fuente)->resetear_mapeo_tablas();            //Fuerzo la relectura de los metadatos de datos_tabla
        
$this->_tablas = array();
        
$this->_tablas_nuevas = array();
        
$this->_tablas_actualizables = array();
        
$this->_dt_bloqueados = array();
        
$this->_tabla_x_schema = array();
    }

    
///-----------------------------------------------------------------------------------------------------------------
    
function buscar_dt_lockeados()
    {
        
$this->_dt_bloqueados $this->get_dt_bloqueados();
    }

    function 
quitar_desactivados()
    {
        
//Aca hago el diff entre las tablas
        
return array_diff($this->_tablas$this->_dt_bloqueados);
    }

    
//-------------------------------------------------------------------------------------------------------------------
    
function buscar_schemas_fuente()
    {
        
$datos = array();
        
$disponibles toba_proyecto_db::get_info_fuente_schemas($this->_proyecto$this->_fuente);
        if (empty(
$disponibles)) {            //Obtengo el schema directamente desde la conexion
            
$datos[] = toba::db($this->_fuente$this->_proyecto)->get_schema();            
        } else {
            foreach (
$disponibles as $esquema) {
                
$datos[] = $esquema['nombre'];
            }
        }
        return 
$datos;
    }
    
    function 
buscar_lista_tablas()
    {
        
$this->_tablas = array();        
        
$lista_inicial toba::db($this->_fuente$this->_proyecto)->get_lista_tablas_bd(false$this->_schemas_disp);
        foreach (
$lista_inicial as $tabla) {
            
$this->_tablas[] = array('tabla' => $tabla['nombre']);
            
$this->_tabla_x_schema[$tabla['nombre']] = $tabla['esquema'];
        }        
    }
    
    function 
get_dt_bloqueados()
    {
        if (! 
is_null($this->_proyecto)) {
            
$proyecto $this->_proyecto;
        } else {
            
$proyecto toba_contexto_info::get_proyecto();
        }
        
        
$sql '
            SELECT
                dt.tabla
            FROM
                apex_objeto_db_registros as dt,
                apex_objeto as comp
            WHERE
                    dt.objeto_proyecto = '
toba_contexto_info::get_db()->quote($proyecto) .
                
'AND dt.objeto = comp.objeto
                AND dt.objeto_proyecto = comp.proyecto
                AND dt.permite_actualizacion_automatica = 0
            ORDER BY tabla;'
;
        
toba::logger()->debug('DT bloqueados: '$sql);
        return 
toba_contexto_info::get_db()->consultar($sql);
    }

    function 
get_columnas_base($tabla)
    {
        
$resultado = array();
        try {
            
$resultado toba::db($this->_fuente$this->_proyecto)->get_definicion_columnas($tabla);
        }catch (
toba_error_db $e) {
            
toba::logger()->error("Búsqueda Propiedades tabla ' $tabla': " $e->getMessage());
        }
        return 
$resultado;
    }
    
    function 
get_columnas_dt($tabla)
    {
        
$resultado = array();
        try {
            
//Obtengo el id del datos_tabla para la tabla X
            
$componente toba_admin_fuentes::instancia()->get_fuente($this->_fuente)->get_id_datos_tabla($tabla);
            
$db toba_contexto_info::get_db();                                //Obtengo la base del contexto para usar la instancia de toba
            
toba_datos_tabla_def::set_db($db);
            
            
//Busco la definicion de columnas del datos_tabla en cuestion
            
$proyecto toba_contexto_info::get_proyecto();
            
$dt_info toba_datos_tabla_def::get_vista_extendida($proyecto$componente);
            
$rs $db->consultar($dt_info['_info_columnas']['sql']);        
            
//Convierto el arreglo devuelto a un formato indexado por nombre de columna
            
for ($a 0$a count($rs); $a++) { 
                
$resultado[$rs[$a]['columna']] =& $rs[$a];
            }    
        } catch(
toba_error $e) {
            
toba::logger()->error(" Búsqueda DT '$tabla': " .$e->getMessage());
        }
        return 
$resultado;
    }

    
//----------------------------------------------------------------------------------------------------------------------
    
function cambios_a_realizar($cols_dt$cols_base)
    {        
        
$cambios = array();
        
//Genero 2 arreglos base para realizar la comparacion normalizando la estructura
        
$aux_base = array();
        foreach (
$cols_base as $col) {
            
$temp = array('columna' => $col['nombre'], 'tipo' => $col['tipo']);
            if (
$col['tipo'] == 'C') {$temp['largo'] = $col['longitud'];}
            if (isset(
$col['not_null'])) {$temp['no_nulo_db'] = (int) $col['not_null'];}
            if (isset(
$col['pk'])) {$temp['pk'] = (int) $col['pk'];}
            if (isset(
$col['secuencia']) && trim($col['secuencia']) != '') { $temp['secuencia'] = $col['secuencia'];}
            
$aux_base[$col['nombre']] = $temp;
        }

        
$aux_dt = array();
        foreach (
$cols_dt as $clave => $valor) {
            if (
$valor['externa'] != '1') {
                
$aux_dt[$clave] = array('columna' => $valor['columna'], 'tipo' => $valor['tipo']);
                if (
$valor['tipo'] == 'C') {$aux_dt[$clave]['largo'] = $valor['largo'];}
                
$aux_dt[$clave]['no_nulo_db'] = (int) $valor['no_nulo_db'];
                
$aux_dt[$clave]['pk'] = (int) $valor['pk'];
                if (isset(
$valor['secuencia']) && trim($valor['secuencia']) != '') { $aux_dt[$clave]['secuencia'] = $valor['secuencia'];}
            }
        }

        
//Veo si hay diferencias entre la cantidad de columnas
        
$cols_nuevas array_diff_key($aux_base$aux_dt);        // ! empty  ===> Base mas columnas
        
if (! empty($cols_nuevas)) {$cambios['A'] = $cols_nuevas;}

        
$cols_faltantes array_diff_key($aux_dt$aux_base);        // ! empty ===> Base menos columnas
        
if (! empty($cols_faltantes)) {$cambios['B'] = $cols_faltantes;}

        
//Veo si hay diferencias entre las propiedades de las columnas
        
foreach ($aux_base as $klave => $col) {
            if (isset(
$aux_dt[$klave])) {                                        //Si existe la columna en el DT
                
$resultado_base array_diff_assoc($col$aux_dt[$klave]);            //Calculo la diferencia entre los arreglos de propiedades
                
if (! empty($resultado_base)) {                                    //Si hay resultado distinto de vacio ==> hay diferencia entre las columnas
                    
$cambios['M'][$klave] = $resultado_base;
                }
            }
        }
        return 
$cambios;
    }

    
//----------------------------------------------------------------------------------------------------------------------
    
function desactivar_no_procesadas($procesadas=array())
    {
        
$total_tablas array_keys($this->_tablas_actualizables);
        foreach (
$this->_tablas_nuevas as $tabla) {
            
$total_tablas[] = $tabla['tabla'];
        }
        
$resultado array_diff($total_tablas$procesadas);
        foreach (
$resultado as $tb) {
            
$id $this->get_id_objeto($tb);
            if (! 
is_null($id)) {
                
$sql 'UPDATE apex_objeto_db_registros SET permite_actualizacion_automatica = 0
                            WHERE    objeto_proyecto  = ' 
quote($this->_proyecto) . ' AND objeto = ' quote($id);
                
toba::db()->ejecutar($sql);
            }
        }
    }

    
//----------------------------------------------------------------------------------------------------------------------
    
function confirmar_acciones($tabla_nombre)
    {
        
//Creo el datos relacion para editar la tabla.
        
$id toba_info_editores::get_dr_de_clase('toba_datos_tabla');
        
$componente = array('proyecto' => $id[0], 'componente' => $id[1]);
        
$dr_sincro toba_constructor::get_runtime($componente);
        
$dr_sincro->inicializar();
        
        
//Veo donde esta la tabla
        
if (isset($this->_tablas_actualizables[$tabla_nombre])) {        //Tengo que actualizar el DT
             
$id_dt $this->get_id_objeto($tabla_nombre);
             
$dr_sincro->cargar(array('proyecto' => $this->_proyecto'objeto' => $id_dt));
             
$dr_sincro->actualizar_campos();
             
$dr_sincro->tabla('prop_basicas')->set_fila_columna_valor(0'esquema'$this->_tabla_x_schema[$tabla_nombre]);
             
//Aca aun falta quitar las columnas
            
if (isset($this->_tablas_actualizables[$tabla_nombre]['B'])) {
                foreach (
array_keys($this->_tablas_actualizables[$tabla_nombre]['B']) as $borrable) {
                    
$id_interno $dr_sincro->tabla('columnas')->get_id_fila_condicion(array('columna' => $borrable));
                    
$dr_sincro->tabla('columnas')->eliminar_fila(current($id_interno));
                }
            }
        } else {        
//Es un DT nuevo            
            
            
$pms_proyecto toba_info_editores::get_pms(toba_editor::get_proyecto_cargado());        
            
$pm_default current($pms_proyecto);
            
$datos = array('nombre' => $tabla_nombre'proyecto' => $this->_proyecto
                                        
'clase_proyecto' => 'toba''clase' => 'toba_datos_tabla',
                                        
'fuente_datos_proyecto' => $this->_proyecto'fuente_datos' => $this->_fuente,
                                        
'punto_montaje' => $pm_default['id']);
            
            
$dr_sincro->tabla('base')->set($datos);
            
$dr_sincro->tabla('prop_basicas')->set(array('ap'=>1'permite_actualizacion_automatica' => '1''punto_montaje' => $pm_default['id']));    
            
$dr_sincro->tabla('prop_basicas')->set_fila_columna_valor(0'tabla'$tabla_nombre);
            
$dr_sincro->tabla('prop_basicas')->set_fila_columna_valor(0'esquema'$this->_tabla_x_schema[$tabla_nombre]);

            
$columnas $this->get_columnas_base($tabla_nombre);
            foreach (
$columnas as $col) {
                
$datos_col = array();
                
$datos_col['columna'] = $col['nombre'];
                
$datos_col['no_nulo_db'] = (int) $col['not_null'];
                
$datos_col['pk'] = (int) $col['pk'];
                
$datos_col['tipo'] = $col['tipo'];
                if (
$col['secuencia'] != '') {
                    
$datos_col['secuencia'] = $col['secuencia'];
                }
                if (
$col['tipo'] == 'C' && $col['longitud'] > 0) {
                    
$datos_col['largo'] = $col['longitud'];
                }
                
$dr_sincro->tabla('columnas')->nueva_fila($datos_col);
            }
        }
        
        
$dr_sincro->sincronizar();
        unset(
$dr_sincro);
    }

    function 
get_id_objeto($tabla)
    {
        try {
             
$id toba_admin_fuentes::instancia()->get_fuente($this->_fuente$this->_proyecto)->get_id_datos_tabla($tabla);
        } catch (
toba_error $e) {
            
$id  null;
        }
        return 
$id;
    }


}
?>


:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.1 [PHP 8 Update] [02.02.2022] maintained byC99Shell Github | Generation time: 0.4776 ]--