!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_tdfonline/proyectos/toba_editor/php/objetos_toba/db_tablas/   drwxr-xr-x
Free 14.77 GB of 61.93 GB (23.84%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     ci_relaciones.php (8.68 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
require_once(toba_dir().'/php/3ros/Graph/Graph.php');    //Necesario para el calculo de orden topologico de las tablas

class ci_relaciones extends toba_ci
{
    protected 
$s__seleccion_relacion;
    protected 
$s__seleccion_relacion_anterior;
    private 
$id_intermedio_relaciones;
    private 
$rel_activa_padre;
    private 
$rel_activa_hijo;

    function 
get_entidad()
    {
        return 
$this->controlador->get_entidad();
    }

    function 
mostrar_detalle_relacion()
    {
        if (isset(
$this->s__seleccion_relacion)) {
            return 
true;
        }
        return 
false;
    }

    function 
limpiar_seleccion()
    {
        unset(
$this->s__seleccion_relacion);
        unset(
$this->s__seleccion_relacion_anterior);
    }

    function 
evt__cancelar()
    {
        
$this->limpiar_seleccion();
    }
    
//-----------------------------------------------------------------------------------
    //---- Configuraciones --------------------------------------------------------------
    //-----------------------------------------------------------------------------------

    
function conf()
    {
        if (
$this->mostrar_detalle_relacion()) {
            
$this->get_datos_relacion_activa();
            
$this->pantalla()->eliminar_dep('relaciones_esquema');
            
$this->dependencia('relaciones_lista')->set_fila_protegida($this->s__seleccion_relacion);
            
$this->dependencia('relaciones_lista')->seleccionar($this->s__seleccion_relacion);
        } else {
            
$this->pantalla()->eliminar_dep('relaciones_columnas');
        }    
    }

    
//-----------------------------------------------------------------------------------
    //---- relaciones_columnas ----------------------------------------------------------
    //-----------------------------------------------------------------------------------

    
function conf__relaciones_columnas(toba_ei_formulario_ml $form_ml)
    {
        
$this->s__seleccion_relacion_anterior $this->s__seleccion_relacion;
        
$this->get_entidad()->tabla('relaciones')->set_cursor($this->s__seleccion_relacion);
        
$datos $this->get_entidad()->tabla('columnas_relacion')->get_filas();
        foreach (
$datos as $klave => $valor) {
            
$datos[$klave]['columna_padre'] = $valor['padre_clave'];
            
$datos[$klave]['columna_hija'] = $valor['hijo_clave'];
        }
        
$form_ml->set_datos($datos);
        
$this->get_entidad()->tabla('relaciones')->resetear_cursor();
    }

    function 
evt__relaciones_columnas__modificacion($datos)
    {
        
// Primero borro las relaciones existentes para poder dar lugar a las nuevas relaciones.
        
$busqueda $this->get_entidad()->tabla('columnas_relacion')->nueva_busqueda();
        
$busqueda->set_padre('relaciones'$this->s__seleccion_relacion_anterior);
        
$ids $busqueda->buscar_ids();
        foreach (
$ids as $id) {
            
$this->get_entidad()->tabla('columnas_relacion')->eliminar_fila($id);
        }

        
//Ahora tengo que dar de alta las relaciones nuevas
        
$this->get_entidad()->tabla('relaciones')->set_cursor($this->s__seleccion_relacion_anterior);
        foreach (
$datos as $klave => $valor) {
            
$datos[$klave]['padre_clave'] = $valor['columna_padre'];
            
$datos[$klave]['hijo_clave'] = $valor['columna_hija'];
            unset(
$datos[$klave]['columna_padre']);
            unset(
$datos[$klave]['columna_hija']);
            
$this->get_entidad()->tabla('columnas_relacion')->nueva_fila($datos[$klave]);
        }
        
$this->get_entidad()->tabla('relaciones')->resetear_cursor();
    }

    function 
evt__relaciones_columnas__aceptar($datos)
    {
        
$this->evt__relaciones_columnas__modificacion($datos);
        
$this->evt__relaciones_columnas__cancelar();
    }

    function 
evt__relaciones_columnas__cancelar()
    {
        
$this->limpiar_seleccion();
    }
    
//-----------------------------------------------------------------------------------
    //---- relaciones_esquema -----------------------------------------------------------
    //-----------------------------------------------------------------------------------

    
function conf__relaciones_esquema(toba_ei_esquema $esquema)
    {
        
$tablas $this->get_entidad()->tabla('dependencias')->get_filas();
        
$relaciones $this->get_entidad()->tabla('relaciones')->get_filas();
        
$grafo toba_datos_relacion::grafo_relaciones($tablas$relaciones);
        
$diagrama "digraph G { \n";
        
$diagrama .= "size=\"7,7\";\n";
        
$diagrama .= "node [shape=record];\n";
        foreach (
$grafo->getNodes() as $nodo) {
            
$datos $nodo->getData();
            
$diagrama .= $datos['identificador']."\n";
            foreach (
$nodo->getNeighbours() as $nodo_vecino) {
                
$datos_vecino $nodo_vecino->getData();
                
$diagrama .= $datos['identificador'] . ' -> ' $datos_vecino['identificador'] . "\n";
            }
        }
        
$diagrama .= '}';
        
$esquema->set_datos($diagrama);
    }
    
//-----------------------------------------------------------------------------------
    //---- relaciones_lista -------------------------------------------------------------
    //-----------------------------------------------------------------------------------

    
function conf__relaciones_lista(eiform_abm_detalle $form_ml)
    {
        
$datos = array();
        
$relaciones $this->get_entidad()->tabla('relaciones')->get_filas();
        foreach (
$relaciones as $key => $valor) {
            
$datos[$key] = $this->conversion_fila_a_form($valor);
        }
        
$form_ml->set_datos($datos);
        if (isset(
$this->s__seleccion_relacion)) {
            
$form_ml->set_solo_lectura();
        }
    }

    function 
evt__relaciones_lista__seleccion($id)
    {
        if (isset(
$this->id_intermedio_relaciones[$id])) {
            
$id $this->id_intermedio_relaciones[$id];
        }
        
$this->s__seleccion_relacion $id;
    }

    function 
evt__relaciones_lista__modificacion($registros)
    {
        
$tabla $this->get_entidad()->tabla('relaciones');
        foreach (
array_keys($registros) as $id)
        {
            
$accion $registros[$id][apex_ei_analisis_fila];
            unset(
$registros[$id][apex_ei_analisis_fila]);
            switch (
$accion) {
                case 
'A':
                    
$fila $this->conversion_form_a_fila($registros[$id]);
                    
$this->id_intermedio_relaciones[$id] = $tabla->nueva_fila($fila);
                    break;
                case 
'B':
                    
$tabla->eliminar_fila($id);
                    break;
                case 
'M':
                    
//Convierto los datos nuevos al formato del dT
                    
$fila $this->conversion_form_a_fila($registros[$id]);

                    
//Antes de modificar la fila tengo que matar las relaciones existentes entre columnas.. de otra forma van a quedar mal asociadas las columnas.
                    
if ($tabla->es_campo_modificado('padre_objeto'$id$fila) || $tabla->es_campo_modificado('hijo_objeto'$id$fila)) {
                        
$tabla->set_cursor($id);
                        
$this->get_entidad()->tabla('columnas_relacion')->eliminar_filas(true);
                        
$tabla->restaurar_cursor();
                    }

                    
//Ahora si modifico la relacion.
                    
$tabla->modificar_fila($id$fila);
                    break;
            }
        }
        
//Se buscan ciclos
        
$tablas $this->get_entidad()->tabla('dependencias')->get_filas();
        
$relaciones $this->get_entidad()->tabla('relaciones')->get_filas();
        if (
$this->hay_ciclos($tablas$relaciones)) {
            
$msg 'El esquema de relaciones actual contiene ciclos. En un esquema con ciclos el'.
            
' mecanismo de sincronización no puede encontrar automaticamente un orden sin violar'.
            
'las constraints de la BD. Se recomienda deshabilitar el chequeo de constraints hasta el'.
            
'final de la transacción.';
            
$this->informar_msg($msg'info');
        }
    }

    
//-------------------------------------------------------------------------------------------
    
function get_columnas_padre()
    {
        
$datos toba_info_editores::get_lista_dt_columnas($this->rel_activa_padre);
        return 
$datos;
    }

    function 
get_columnas_hija()
    {
        
$datos toba_info_editores::get_lista_dt_columnas($this->rel_activa_hijo);
        return 
$datos;
    }

    function 
get_datos_relacion_activa()
    {
        
$relacion_activa $this->get_entidad()->tabla('relaciones')->get_fila($this->s__seleccion_relacion);
        
$this->rel_activa_padre $relacion_activa['padre_objeto'];
        
$this->rel_activa_hijo $relacion_activa['hijo_objeto'];
    }

    function 
conversion_form_a_fila($datos)
    {        
//Adapta el contenido del form a una fila
        //-- PADRE --
        
$padre explode(','$datos['padre']);
        
$datos['padre_id'] = $padre[0];
        
$datos['padre_proyecto'] = toba_editor::get_proyecto_cargado();
        
$datos['padre_objeto'] = $padre[1];
        unset(
$datos['padre']);
        
//-- HIJO --
        
$hijo explode(','$datos['hija']);
        
$datos['hijo_id'] = $hijo[0];
        
$datos['hijo_proyecto'] = toba_editor::get_proyecto_cargado();
        
$datos['hijo_objeto'] = $hijo[1];
        unset(
$datos['hija']);
        return 
$datos;
    }

    function 
conversion_fila_a_form($fila)
    {    
//Adapta el contenido de una fila al form
        
$fila['padre'] = $fila['padre_id'] . ',' $fila['padre_objeto'];
        
$fila['hija'] = $fila['hijo_id'] . ',' $fila['hijo_objeto'];
        unset(
$fila['padre_id']);
        unset(
$fila['padre_objeto']);
        unset(
$fila['hijo_id']);
        unset(
$fila['hijo_objeto']);
        return 
$fila;
    }

    function 
get_lista_tablas()
    {
        return 
$this->controlador->get_lista_tablas();
    }

    function 
hay_ciclos($tablas$relaciones)
    {
        
$tester = new Structures_Graph_Manipulator_AcyclicTest();
        
$grafo toba_datos_relacion::grafo_relaciones($tablas$relaciones);
        return ! 
$tester->isAcyclic($grafo);
    }    
}
?>

:: 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.5974 ]--