!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_usuarios/php/perfiles/perfil_funcional/   drwxr-xr-x
Free 14.72 GB of 61.93 GB (23.77%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


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

class ci_navegacion_perfiles extends toba_ci
{
    protected 
$s__filtro;
    protected 
$s__ver_esquema;
    
    function 
ini__operacion()
    {
        
$this->s__ver_esquema false;
        if (! 
is_null(admin_instancia::get_proyecto_defecto())) {
            
$this->s__filtro = array('proyecto' => admin_instancia::get_proyecto_defecto());
        }        
    }
    
    function 
datos($tabla)
    {
        return 
$this->dep('datos')->tabla($tabla);
    }
    
    function 
conf__seleccion_perfil()
    {
        if (!isset(
$this->s__filtro)) {
            
$this->pantalla('seleccion_perfil')->eliminar_evento('agregar');
        } 
        if (! 
$this->s__ver_esquema) {
            
$this->evento('ver_grafico')->set_etiqueta('Ver Esquema');
            
$this->pantalla()->eliminar_dep('esquema');
        } else {
            
$this->evento('ver_grafico')->set_etiqueta('Ocultar Esquema');            
        }
        if (!isset(
$this->s__filtro)) {
            
$this->pantalla('seleccion_perfil')->eliminar_evento('ver_grafico');
        }         
    }
    
    function 
conf__edicion_perfil()
    {
        
//-- Si es una instalación de producción avisar que los cambios se aplicaran solo a esta instalacion y no al proyecto/personalizacion
        
admin_instancia::chequear_usar_perfiles_propios($this->dep('editor_perfiles')->get_proyecto(), $this->pantalla());
    }
    
    function 
actualizar_info_ini()
    {
        
admin_instancia::set_usar_perfiles_propios($this->dep('editor_perfiles')->get_proyecto());
    }
    
    function 
actualizar_script_roles($eliminados=array())
    {
        
$usa_permisos_por_tabla false;
        foreach (
toba_info_editores::get_fuentes_datos($this->dep('editor_perfiles')->get_proyecto()) as $fuente) {    //Miro si al menos una fuente usa permisos por tablas.
            
$usa_permisos_por_tabla $usa_permisos_por_tabla ||  ($fuente['permisos_por_tabla'] == '1');
        }
        
        if (
$usa_permisos_por_tabla) {
            
$modelo toba_modelo_catalogo::instanciacion();    
            
$modelo->set_db(toba::db());    
            
$proyecto $modelo->get_proyecto(toba::instancia()->get_id(), $this->s__filtro['proyecto']);
            
$dir $proyecto->get_dir(). '/';
            try {            
                
$proyecto->crear_script_generacion_roles_db($dir$eliminados);
                
toba::notificacion()->agregar('Se han generado los scripts de actualización de roles de base de datos.\n Los mismos se encuentran en el directorio raiz del proyecto, recuerde ejecutarlos''info');                
            } catch (
toba_error $e) {
                
toba::logger()->debug('Falló la generacion del script' $e->getMessage());
                
toba::notificacion()->agregar('No se ha podido generar los scripts de actualización de roles de base de datos, por favor utilice el comando toba proyecto roles_script''error');                
            }        
        }
    }
    
    function 
evt__guardar()
    {
        
$this->dep('datos')->persistidor()->desactivar_transaccion();
        
toba::db()->abrir_transaccion();
        
//- Sincronizar la relacion
        
if ($this->dep('datos')->esta_cargada()) {
            
$alta false;
        } else {
            
$alta true;
        }
        
$this->dep('datos')->sincronizar();

        
//- Sincroniza el arbol de items        
        
$this->dep('editor_perfiles')->guardar_arbol_items($alta);
        
$this->dep('datos')->resetear();
        
toba::db()->cerrar_transaccion();
        
        
//-- Si estamos en produccion guardamos un flag indicando que cambiaron los perfiles y ahora se encarga el proyecto de manejarlos
        
$this->actualizar_info_ini();
        
$this->actualizar_script_roles();
                        
        
$this->dep('editor_perfiles')->cortar_arbol();
        
$this->set_pantalla('seleccion_perfil');
    }
    

    
    function 
evt__volver()
    {
        
$this->dep('datos')->resetear();
        
$this->dep('editor_perfiles')->cortar_arbol();
        
$this->set_pantalla('seleccion_perfil');
    }
    
    function 
evt__ver_grafico()
    {
        
$this->s__ver_esquema = ! $this->s__ver_esquema;
    }
        
    
    function 
evt__eliminar()
    {        
        
$datos $this->datos('accesos')->get();
        if (
toba::fuente()->usa_permisos_por_tabla()) {        
            
$this->actualizar_script_roles(array($datos['usuario_grupo_acc']));    
        }
        
        
$this->dep('datos')->persistidor()->desactivar_transaccion();
        
toba::db()->abrir_transaccion();
        
$this->dep('datos')->eliminar();
        
$this->dep('datos')->resetear();
        
//- Elimino el acceso a los items
        
$sql "DELETE FROM 
                    apex_usuario_grupo_acc_item 
                WHERE 
                        usuario_grupo_acc = '
{$datos['usuario_grupo_acc']}'
                    AND proyecto = '
{$datos['proyecto']}';";
        
toba::db()->ejecutar($sql);
        
toba::db()->cerrar_transaccion();
        
        
//-- Si estamos en produccion guardamos un flag indicando que cambiaron los perfiles y ahora se encarga el proyecto de manejarlos
        
$this->actualizar_info_ini();
        if (
toba::fuente()->usa_permisos_por_tabla()) {
            
$this->actualizar_script_roles();
        }
        
        
$this->dep('editor_perfiles')->cortar_arbol();
        
$this->set_pantalla('seleccion_perfil');
    }
    
    function 
evt__agregar()
    {
        
$this->dep('editor_perfiles')->set_proyecto($this->s__filtro['proyecto']);
        
$this->set_pantalla('edicion_perfil');
    }
    
    function 
conf__cuadro_grupos_acceso($componente)
    {
        if (isset(
$this->s__filtro)) {
            
$datos consultas_instancia::get_lista_grupos_acceso_proyecto($this->s__filtro['proyecto']);
            
$componente->set_datos($datos);
        }
    }
    
    function 
evt__cuadro_grupos_acceso__seleccion($seleccion)
    {
        
$this->dep('datos')->cargar($seleccion);
        
$this->dep('editor_perfiles')->set_proyecto($seleccion['proyecto']);
        
$this->dep('editor_perfiles')->set_perfil_funcional($seleccion['usuario_grupo_acc']);
        
$this->set_pantalla('edicion_perfil');
    }
    
    function 
conf__form_datos_perfil(toba_ei_formulario $componente)
    {
        if (
toba::instalacion()->es_produccion()) {
            
$componente->desactivar_efs(array('permite_edicion'));
        }
        
        
$datos = array();
        if (
$this->datos('accesos')->hay_cursor()) {
            
$datos $this->datos('accesos')->get();
            
$componente->set_solo_lectura(array('usuario_grupo_acc'));
            
            if (
toba::instalacion()->es_produccion() && isset($datos['permite_edicion']) && !$datos['permite_edicion']) {
                
$this->pantalla()->eliminar_evento('guardar');
                
$this->pantalla()->eliminar_evento('eliminar');
            }
        } else {
            
$componente->ef('usuario_grupo_acc')->set_expreg('/^[a-z0-9_]+$/');
            
$datos['proyecto'] = $this->s__filtro['proyecto'];
        }    
        
$componente->set_datos($datos);
    }
    
    function 
evt__form_datos_perfil__modificacion($datos)
    {
        
$this->datos('accesos')->set($datos);
    }
    
    function 
evt__filtro_proyectos__filtrar($datos)
    {
        
$this->s__filtro $datos;
    }
    
    function 
evt__filtro_proyectos__cancelar()
    {
        unset(
$this->s__filtro);
    }
    
    function 
conf__filtro_proyectos($componente)
    {
        if (isset(
$this->s__filtro)) {
            
$componente->set_datos($this->s__filtro);
        }        
    }
    
    function 
conf__esquema(toba_ei_esquema $esquema
    {
        
$grafo $this->get_grafo();
        
$diagrama 'digraph G {
                        rankdir=LR;
                        fontsize=10;
                        node [fontsize=10, fillcolor=white,shape=box, style=rounded,style=filled, color=gray];
                        '
;
        foreach (
$grafo->getNodes() as $nodo) {
            
$data $nodo->getData();
            
$label $data['usuario_grupo_acc'];
            
$nombre $data['nombre'];
            
            
$diagrama .= "$label [label=\"$nombre\"];\n";
            foreach (
$nodo->getNeighbours() as $nodo_vecino) {            
                
//Incluyo la relación
                
$vecino $nodo_vecino->getData();
                
$diagrama .= $label ' -> ' $vecino['usuario_grupo_acc']. 
                            
" [label=\"miembro de\",fontsize=10,color=gray];\n";
            }
            
        }
        
$diagrama .= '}';        
        
$esquema->set_datos($diagrama);
    }

    
    function 
get_grafo()
    {
        
$grafo = new Structures_Graph(true);
        
$perfiles toba_info_permisos::get_perfiles_funcionales($this->s__filtro['proyecto']);
        
//Nodos
        
$miembros = array();
        foreach (
$perfiles as $perfil) {
            
$nodo = new Structures_Graph_Node();
            
$nodo->setData($perfil);
            
$nodos[$perfil['usuario_grupo_acc']] =& $nodo;
            
$grafo->addNode($nodo);
            unset(
$nodo);                                    //Anulo el nodo, de otra manera sobre escribe todos con los valores del ultimo setData (weird)
        
}
        
        
//Relaciones
        
foreach ($perfiles as $perfil) {
            
//Necesita pasarle la conexion porque aun no termino la transacción
            
$miembros toba_info_permisos::get_perfiles_funcionales_miembros($perfil['proyecto'], $perfil['usuario_grupo_acc'], toba::db());
            foreach (
$miembros as $miembro) {
                
$nodos[$perfil['usuario_grupo_acc']]->connectTo($nodos[$miembro['usuario_grupo_acc_pertenece']]);
            }
        }        
        return 
$grafo;        
    }
    
    function 
validar_ciclos()
    {
        
$tester = new Structures_Graph_Manipulator_AcyclicTest();
        
$grafo $this->get_grafo();
        
$aciclico $tester->isAcyclic($grafo);
        if (! 
$aciclico) {
            
$ciclo = array();
            foreach (
$tester->getCycle($grafo) as $nodo) {
                
$data $nodo->getData();
                
$ciclo[] = $data['nombre'];
            }
            
$perfiles implode(', '$ciclo);
            throw new 
toba_error_usuario("Existe un ciclo en la asignación de las membresías entre los perfiles: <b>$perfiles</b>.<br><br>Por favor quite alguna membresía.");
        }
    }
    
    function 
get_menues_existentes()
    {
        return 
consultas_instancia::get_menus_existentes($this->s__filtro['proyecto']);
    }
}

?>

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