!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/php/nucleo/componentes/interface/efs/   drwxrwxr-x
Free 13.77 GB of 61.93 GB (22.23%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     toba_ef_multi_seleccion.php (18.01 KB)      -rwxrwxr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/**
 * Elemento que permite la selección de varios valores. Clase base abstracta
 * @package Componentes
 * @subpackage Efs
 * @jsdoc ef_multi_seleccion ef_multi_seleccion
 */
abstract class toba_ef_multi_seleccion extends toba_ef
{
    protected 
$opciones = array();
    protected 
$tamanio;
    protected 
$ancho;
    protected 
$estado_nulo = array();
    protected 
$serializar false;    
    protected 
$mostrar_utilidades;
        
    
//parametros validación
    
protected $cant_maxima;
    protected 
$cant_minima;
        
    static function 
get_lista_parametros()
    {
        
$param[] = 'selec_cant_minima';
        
$param[] = 'selec_cant_maxima';
        
$param[] = 'selec_utilidades';
        
$param[] = 'selec_serializar';
        return 
$param;        
    }

    static function 
get_lista_parametros_carga()
    {
        return 
toba_ef::get_lista_parametros_carga_basico();    
    }
    
    function 
__construct($padre,$nombre_formulario$id,$etiqueta,$descripcion,$dato,$obligatorio,$parametros)
    {
        
parent::__construct($padre,$nombre_formulario$id,$etiqueta,$descripcion,$dato,$obligatorio,$parametros);        
        if (isset(
$parametros['selec_utilidades'])) {
            
$this->mostrar_utilidades $parametros['selec_utilidades'];
        } else { 
            
$this->mostrar_utilidades false;
        }        
        if(isset(
$parametros['selec_tamano'])) {
            
$this->tamanio $parametros['selec_tamano'];
            unset(
$parametros['selec_tamano']);
        }
        if(isset(
$parametros["selec_cant_maxima"])) {
            
$this->cant_maxima $parametros['selec_cant_maxima'];
            unset(
$parametros['selec_cant_maxima']);
        }
        if(isset(
$parametros['selec_cant_minima'])) {
            
$this->cant_minima $parametros['selec_cant_minima'];
            unset(
$parametros['selec_cant_minima']);
        }
        if(isset(
$parametros['selec_ancho'])) {
            
$this->ancho $parametros['selec_ancho'];
            unset(
$parametros['selec_ancho']);
        }        
        if(isset(
$parametros["selec_serializar"]) && $parametros["selec_serializar"] != 0) {
            
$this->serializar ',';
        }                
        
        
//---------------------- Manejo de Estado por defecto  ------------------        
        
if (isset($parametros['estado_defecto']) && $parametros['estado_defecto']!="") {
            
$estados explode(','$parametros['estado_defecto']);
            
$estados array_map('trim'$estados);
            if (
is_array($this->dato)) {
                
$this->estado_defecto = array();
                
$actual 0;
                foreach (
$estados as $estado) {
                    
$param explode('/'$parametros['estado_defecto']);
                    
$parm array_map('trim'$param);
                    for (
$i=0$i count($this->dato); $i++) {
                        
$this->estado_defecto[$actual][$this->dato[$i]] = trim($param[$i]);
                    }
                    
$actual++;
                }
            } else {
                
$this->estado_defecto $estados;    
            }
        }        
        
        
$this->estado_nulo = array();
        if (! isset(
$this->estado_defecto)) {
            
$this->estado_defecto $this->estado_nulo;
        }    
        
$this->set_estado($this->estado_defecto);
    }
    
    function 
tiene_estado()
    {
        return isset(
$this->estado) && !$this->es_estado_nulo($this->estado);
    }    
    
    function 
set_opciones($datos$maestros_cargados=true$tiene_maestros=false)
    {
        
$this->opciones_cargadas true;        
        if (!isset(
$datos)) {
            
$datos = array();    
        }
        
$this->opciones $datos;
        
        
//--Guarda en sesion las opciones disponibles
        
$sesion = isset($this->opciones) ? array_keys($this->opciones) : null;
        
//Se guarda multiplexado si lo está el ef, y además tiene maestros, sino es una sola carga de opciones para todas las filas
        
$fila_actual $this->get_fila_actual();
        
$this->guardar_dato_sesion($sesion$tiene_maestros && isset($fila_actual));
    }
    
    protected function 
es_estado_individual_nulo($estado)
    {
        if (
is_array($this->dato)) {
            if (
$estado === null) {
                return 
true;    
            }
            
//Si el estado es nulo tengo que manejarlo de una forma especial
            
$valores "";
            foreach (
$estado as $valor) {
                
$valores .= $valor;
            }        
            return 
trim($valores) === '';
        } else {
            return 
$estado === null;    
        }
    }
    
    protected function 
es_estado_nulo($estado)
    {
        if (!isset(
$estado)) {
            return 
true;    
        }
        if (
is_array($estado) && empty($estado)) {
            return 
true;    
        }
        return 
false;
    }

    protected function 
validar_estado_particular($estado)
    {
        if (
is_array($this->dato)) {
            
//Maneja multiples datos
            //El estado tiene el formato adecuado?
            
$cant_datos count($this->dato);
            if (
count($estado) <> $cant_datos) {
                throw new 
toba_error_def("Ha intentado cargar el ef '{$this->id}' con un array que posee un formato inadecuado " .
                                
" se esperaban {$cant_datos} claves, pero se utilizaron: "count($estado) . ".");
            }
        }                                
    }
    
    function 
set_estado($estado)
    {
        if (
$this->serializar !== false && is_scalar($estado)) {
            
$estado explode($this->serializar$estado);
            
$estado array_map('trim'$estado);
        }
        if (
$this->es_estado_nulo($estado)) {
            
$this->estado $this->estado_nulo;
        } else {
            foreach (
$estado as $elem) {
                
$this->validar_estado_particular($elem);
            }
            
$this->estado $estado;
        }
    }
    
    function 
cargar_estado_post()
    {
        if (! isset(
$_POST[$this->id_form])) {
            
$this->estado $this->estado_nulo;
            return 
false;
        }
        
$estado $_POST[$this->id_form];
        if (! 
is_array($estado)) {
            throw new 
toba_error_seguridad("Se esperaba un arreglo, se recibio ".var_export($estadotrue));
        }
        
        
//-- Chequeo de seguridad que lo que viene es parte de lo que se ofrecio
        
$globales toba::memoria()->get_dato_operacion($this->clave_memoria(false));
        
$por_fila toba::memoria()->get_dato_operacion($this->clave_memoria(true));
        foreach (
$estado as $valor) {
            
//toba::logger()->info("Cotejando $valor en ".$this->clave_memoria(false)." contra ".var_export($globales, true));
            
if (!isset($globales) || ! in_array($valor$globales)) {
                
//Busca los valores disponibles en la fila actual
                
if (!isset($por_fila) || ! in_array($valor$por_fila)) {
                    
//toba::logger()->info("Fallback Cotejando $valor en ".$this->clave_memoria(true)." contra ".var_export($por_fila, true));                
                    
throw new toba_error_seguridad("El ef '{$this->id}' no posee a la opción '$valor' entre las enviadas");
                }
            }
        }
                
        if (! 
is_array($this->dato)) {
            
$this->estado $estado;
        } else {
            
$cant_datos count($this->dato);
            
$this->estado = array();
            foreach (
$estado as $seleccion) {
                
$valores explode(apex_qs_separador$seleccion);
                if (
count($valores) <> $cant_datos) {
                    throw new 
toba_error_def("Ha intentado cargar el ef '{$this->id}' con un array que posee un formato inadecuado " .
                                    
" se esperaban {$cant_datos} claves, pero se utilizaron: "count($valores) . ".");
                }
                
$nuevo = array();
                for (
$i=0$i count($this->dato); $i++) {
                       
$nuevo[$this->dato[$i]] = $valores[$i];
                }
                
$this->estado[] = $nuevo;
            }
        }
        return 
true;
    }

    
/**
     * La validación verifica si se cumple con la cantidad mínima y máxima
     */
    
function validar_estado()
    {
        
$padre parent::validar_estado();
        if (
$padre !== true) {
            return 
$padre;    
        }
        if (
$this->confirma_excepcion_validacion()) {
            return 
true;
        }
        if (isset(
$this->cant_minima)) { 
            if (
count($this->estado) < $this->cant_minima){
                
$elemento = ($this->cant_minima == 1) ? "un elemento" "{$this->cant_minima} elementos";
                return 
"Seleccione al menos $elemento.";
            }
        }
        if (isset(
$this->cant_maxima)){ 
            if (
count($this->estado) > $this->cant_maxima){
                
$elemento = ($this->cant_maxima == 1) ? "un elemento" "{$this->cant_maxima} elementos";                
                return 
"No puede seleccionar más de $elemento.";
            }
        }
        return 
true;
    }
    
    protected function 
parametros_js()
    {
        
$limites = array();
        
$limites[0] = isset($this->cant_minima) ? $this->cant_minima null;
        
$limites[1] = isset($this->cant_maxima) ? $this->cant_maxima null;
        return 
parent::parametros_js().','.toba_js::arreglo($limitesfalse);
    }
    
    function 
es_seleccionable()
    {
        return 
true;    
    }

    function 
permite_seleccion_multiple()
    {
        return 
true;
    }
    
    function 
es_estado_unico() 
    {
        return 
false;    
    }    
    
    function 
get_consumo_javascript()
    {
        
$consumos = array('efs/ef''efs/ef_multi_seleccion');
        return 
$consumos;
    }
        
    function 
get_descripcion_estado($tipo_salida)
    {
        switch (
$tipo_salida) {
            case 
'html':
            case 
'impresion_html':
                
$desc "<ul class='{$this->clase_css}'>\n";
                foreach (
$this->get_estado_para_input() as $estado) {
                    
$desc .= "<li>{$this->opciones[$estado]}</li>\n";
                }
                
$desc .= "</ul>\n";
                return 
$desc;    
            break;
            case 
'pdf':
                
$desc = array();
                foreach (
$this->get_estado_para_input() as $estado) {
                    
$desc[] = $this->opciones[$estado];
                }
                return 
implode("\n"$desc);
            case 
'excel';
                
$desc = array();
                foreach (
$this->get_estado_para_input() as $estado) {
                    
$desc[] = $this->opciones[$estado];
                }
                return array(
implode(", "$desc), null);                    
            break;
        }
    }
    
    
/**
     * Puede retornar el estado serializado (un unico string) o en un arreglo dependiendo de su definición en el editor
     */
    
function get_estado()
    {
        if (
$this->tiene_estado()) {
            if (
$this->serializar !== false) {
                return 
implode($this->estado$this->serializar);    
            } else {
                return 
$this->estado;
            }
        } else {
            if (
$this->serializar !== false) {
                return 
null;    
            } else {
                return array();
            }
        }        
    }
    
    protected function 
get_estado_para_input()
    {
        if (
$this->es_estado_nulo($this->estado))    {
            return 
$this->estado_nulo;    
        }
        if (! 
is_array($this->dato)) {
            return 
$this->estado;    
        } else {
            
$salida = array();
            foreach (
$this->estado as $registro) {
                
$salida[] = implode(apex_qs_separador$registro);
            }    
            return 
$salida;
        }
    }
    

    
}

//########################################################################################################
//########################################################################################################

/**
 * Permite la selección de varios valores a partir de una lista. Equivale al tag <select multiple> en HTML
 * @package Componentes
 * @subpackage Efs
 * @jsdoc ef_multi_seleccion_lista ef_multi_seleccion_lista
 */
class toba_ef_multi_seleccion_lista extends toba_ef_multi_seleccion
{
    protected 
$clase_css 'ef-multi-sel-lista';
    
    static function 
get_lista_parametros()
    {
        
$param parent::get_lista_parametros();
        
$param[] = 'selec_tamano';
        
$param[] = 'selec_ancho';
        return 
$param;        
    }    
    
    function 
__construct($padre,$nombre_formulario$id,$etiqueta,$descripcion,$dato,$obligatorio,$parametros)
    {
        
parent::__construct($padre,$nombre_formulario$id,$etiqueta,$descripcion,$dato,$obligatorio,$parametros);        
    }

    function 
get_input()
    {
        
$estado $this->get_estado_para_input();
        
$html "";
        if (!
$this->es_solo_lectura() && $this->mostrar_utilidades)    {
            
$html .= "
                <div class='ef-multi-sel-todos' id='
{$this->id_form}_utilerias'>
                    <a href=\"javascript:
{$this->objeto_js()}.seleccionar_todo(true)\">Todos</a> / 
                    <a href=\"javascript:
{$this->objeto_js()}.seleccionar_todo(false)\">Ninguno</a></div>
            "
;
        }
        
$tamanio = isset($this->tamanio) ? $this->tamaniocount($this->opciones);
        
$tab $this->padre->get_tab_index();
        
$extra " tabindex='$tab'";
        
$extra .= ($this->es_solo_lectura()) ? "disabled" "";
        if (isset(
$this->ancho)) {
            
$extra .= " style='width: {$this->ancho}'";
        }
        
$html .= toba_form::multi_select($this->id_form$estado$this->opciones$tamanio$this->clase_css$extra);
        
$html .= $this->get_html_iconos_utilerias();
        return 
$html;
    }
    
    function 
crear_objeto_js()
    {
        return 
"new ef_multi_seleccion_lista({$this->parametros_js()})";
    }    
    
}
//########################################################################################################
//########################################################################################################

/**
 * Permite la selección de varios valores a partir de un conjunto de checkboxes
 * @package Componentes
 * @subpackage Efs
 * @jsdoc ef_multi_seleccion_check ef_multi_seleccion_check
 */
class toba_ef_multi_seleccion_check extends toba_ef_multi_seleccion
{
    protected 
$clase_css 'ef-multi-sel-check';
    protected 
$cantidad_columnas 1;    
    
    static function 
get_lista_parametros()
    {
        
$param toba_ef_multi_seleccion::get_lista_parametros();
        
$param[] = 'selec_cant_columnas';
        return 
$param;        
    }    
    
    function 
__construct($padre,$nombre_formulario$id,$etiqueta,$descripcion,$dato,$obligatorio,$parametros)
    {
        
parent::__construct($padre,$nombre_formulario$id,$etiqueta,$descripcion,$dato,$obligatorio,$parametros);
        if (isset(
$parametros['selec_cant_columnas'])) {
            
$this->cantidad_columnas $parametros['selec_cant_columnas'];
        }
    }
    
    function 
crear_objeto_js()
    {
        return 
"new ef_multi_seleccion_check({$this->parametros_js()}$this->cantidad_columnas)";
    }    
    
    function 
set_cantidad_columnas($cantidad)
    {
        
$this->cantidad_columnas $cantidad;
    }    
    
    function 
es_multicolumna()
    {
        return (
$this->cantidad_columnas 1);
    }
    
    function 
get_input()
    {
        
$estado $this->get_estado_para_input();
        
$html "";
        
$i 0;
        
$tab $this->padre->get_tab_index();
        
$input_extra " tabindex='$tab'";
        
        if (
$this->mostrar_utilidades && !$this->es_solo_lectura())    {
            
$html .= "
                <div id='
{$this->id_form}_utilerias' class='ef-multi-sel-todos'>
                    <a href=\"javascript:
{$this->objeto_js()}.seleccionar_todo(true)\">Todos</a> / 
                    <a href=\"javascript:
{$this->objeto_js()}.seleccionar_todo(false)\">Ninguno</a></div>
            "
;
        }
        
$html .= "<div id='{$this->id_form}_opciones' class='{$this->clase_css}'><table>\n";
        foreach (
$this->opciones as $clave => $descripcion) {
            if (
$i $this->cantidad_columnas == 0) {
                    
$html .= "<tr>\n";    
            }
            
$id $this->id_form.$i;            
            
$html .= "\t<td><label class='ef-multi-check' for='$id'>";
            
$ok in_array($clave$estado);
            if (! 
$this->permitir_html) {
                
$clave texto_plano($clave);
            }
            if (! 
$this->es_solo_lectura()) {
                
$checkeado =  $ok "checked" "";
                
$html .= "<input name='{$this->id_form}[]' id='$id' type='checkbox' value='$clave$checkeado class='ef-checkbox' $input_extra>";
                
$input_extra '';
            } else {
                
//---Caso solo-lectura    
                
$img $ok 'efcheck_on.gif' 'efcheck_off.gif';
                
$html .= toba_recurso::imagen_toba('nucleo/'.$img,true,16,16);
                if (
$ok) {
                    
$html .= "<input name='{$this->id_form}[]' id='$id' type='hidden' value='$clave'>";
                }
            }
            if (! 
$this->permitir_html) {
                
$descripcion texto_plano($descripcion);
            }
            
$html .= "$descripcion</label></td>\n";        
            
$i++;
            if (
$i $this->cantidad_columnas == 0) {
                
$html .= "</tr>\n";    
            }  
        }
        
$sobran $i $this->cantidad_columnas;
        if (
$sobran 0) {
            
$html .= str_repeat("\t<td></td>\n"$sobran);
            
$html .= "</tr>\n";    
        }        
        
$html .= "</table>";
        
$html .= "</div>\n";
        
$html .= $this->get_html_iconos_utilerias();
        return 
$html;
    }    
    
}

//########################################################################################################
//########################################################################################################

/**
 * Permite la selección de varios valores a partir de una lista doble, pasando los elementos de un lado hacia el otro
 * @package Componentes
 * @subpackage Efs
 * @jsdoc ef_multi_seleccion_doble ef_multi_seleccion_doble
 */
class toba_ef_multi_seleccion_doble extends toba_ef_multi_seleccion
{
    protected 
$clase_css 'ef-multi-sel-check';    
    
    static function 
get_lista_parametros()
    {
        
$param parent::get_lista_parametros();
        
$param[] = 'selec_tamano';
        
$param[] = 'selec_ancho';
        return 
$param;        
    }    
        
    protected function 
parametros_js()
    {
        
$imgs = array();
        
$imgs[] = toba_recurso::imagen_toba('nucleo/paginacion/no_siguiente.gif'false);
        
$imgs[] = toba_recurso::imagen_toba('nucleo/paginacion/si_siguiente.gif'false);
        
$imgs[] = toba_recurso::imagen_toba('nucleo/paginacion/no_anterior.gif'false);
        
$imgs[] = toba_recurso::imagen_toba('nucleo/paginacion/si_anterior.gif'false);
        
$claves = array();
        foreach (
array_keys($this->opciones) as $clave) {
            
$claves[] = texto_plano($clave);
        }
        
$orden_opciones toba_js::arreglo($claves);
        return 
parent::parametros_js().",".toba_js::arreglo($imgsfalse).', '.$orden_opciones;
    }
    
    function 
crear_objeto_js()
    {
        return 
"new ef_multi_seleccion_doble({$this->parametros_js()})";
    }    
        
    function 
get_input()
    {
        
$tab $this->padre->get_tab_index();
        
$extra " tabindex='$tab'";
        if (isset(
$this->ancho)) {
            
$extra .= " style='width: {$this->ancho}'";
        }        
        
$html '';
        if (!
$this->es_solo_lectura() && $this->mostrar_utilidades)    {
            
$html .= "
                <div class='ef-multi-sel-todos' id='
{$this->id_form}_utilerias'>
                    <a href=\"javascript:
{$this->objeto_js()}.seleccionar_todo(true)\">Todos</a> /
                    <a href=\"javascript:
{$this->objeto_js()}.seleccionar_todo(false)\">Ninguno</a>
                </div>
            "
;
        }
        
$tamanio = isset($this->tamanio) ? $this->tamaniocount($this->opciones);
        
$estado $this->get_estado_para_input();
        
$izq = array();
        
$der = array();
        foreach (
$this->opciones as $clave => $valor) {
            if (
in_array($clave$estado)) {
                
$der[$clave] = $valor;    
            } else {
                
$izq[$clave] = $valor;    
            }
        }    
        
$etiq_izq "Disponibles";
        
$etiq_der "Seleccionados";
        
$ef_js $this->objeto_js();
        
$img_der toba_recurso::imagen_toba('nucleo/paginacion/no_siguiente.gif'false);
        
$boton_der "<img src='$img_der' id='{$this->id_form}_img_izq' onclick=\"$ef_js.pasar_a_derecha()\" class='ef-multi-doble-boton'>";
        
$img_izq toba_recurso::imagen_toba('nucleo/paginacion/no_anterior.gif'false);
        
$boton_izq "<img src='$img_izq' id='{$this->id_form}_img_der' onclick=\"$ef_js.pasar_a_izquierda()\" class='ef-multi-doble-boton'>";
        
        
$disabled = ($this->es_solo_lectura()) ? "disabled" "";
        
$html .= "<table class='{$this->clase_css}'>";
        
$html .= "<tr><td>$etiq_izq</td><td></td><td>$etiq_der</td></tr>";
        
$html .= "<tr><td>";

        
$html .= toba_form::multi_select($this->id_form."_izq", array(), $izq$tamanio'ef-combo form-control'"$extra $disabled ondblclick=\"$ef_js.pasar_a_derecha();\" onchange=\"$ef_js.refrescar_iconos('izq');\"");
        
$html .= "</td><td>$boton_der<br /><br />$boton_izq</td><td>";
        
$html .= toba_form::multi_select($this->id_form, array(), $der$tamanio'ef-combo form-control'"$extra $disabled ondblclick=\"$ef_js.pasar_a_izquierda();\" onchange=\"$ef_js.refrescar_iconos('der');\"");
        
$html .= $this->get_html_iconos_utilerias();
        
$html .= "</td></tr>";
        
$html .= "</table>";
        return 
$html;
    }

}

?>

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