!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_carga_opciones_ef.php (12.27 KB)      -rwxrwxr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/**
 * Clase encargada de coordinar la carga de opciones de los distintos efs de un formulario o filtro
 * @package Componentes
 * @subpackage Efs
 */
class toba_carga_opciones_ef
{
    protected 
$_efs;
    protected 
$_parametros_carga_efs;
    protected 
$_cascadas_maestros = array();        //Arreglo de maestros indexados por esclavo
    
protected $_cascadas_esclavos = array();        //Arreglo de esclavos indexados por maestro    
    
protected $_controlador;
    
    
/**
     * @param toba_componente $componente
     * @param array $efs Lista de objetos efs
     * @param array $parametros_carga
     */
    
function __construct($componente$efs$parametros_carga
    {
        if (! isset(
$efs)) {
            
$efs = array();
        }
        
$this->_controlador $componente;        
        
$this->_efs $efs;
        
$this->_parametros_carga_efs $parametros_carga;
    }
    
    
/**
     * Analiza los efs buscando maestros y esclavos y notificandolos entre si
     * @ignore 
     */
    
function registrar_cascadas()
    {
        
$this->_cascadas_maestros = array();
        
$this->_cascadas_esclavos = array();
        
        foreach (
array_keys($this->_efs) as $esclavo) {
            
$this->_cascadas_maestros[$esclavo] = $this->_efs[$esclavo]->get_maestros();
            foreach (
$this->_cascadas_maestros[$esclavo] as $maestro) {
                if (! isset(
$this->_efs[$maestro])) {
                    throw new 
toba_error_def("Cascadas: El ef '$maestro' no esta definido");
                }
                
$this->_cascadas_esclavos[$maestro][] = $esclavo;

                
$id_form_dep $this->_efs[$esclavo]->get_id_form();
                
$js $this->_controlador->get_objeto_js().".cascadas_cambio_maestro('$maestro')";
                
$this->_efs[$maestro]->set_cuando_cambia_valor($js);
            }
        }
    }    
    
    function 
get_cascadas_esclavos()
    {
        return 
$this->_cascadas_esclavos;
    }
    
    function 
get_cascadas_maestros()
    {
        return 
$this->_cascadas_maestros;
    }    
    
    
/**
     * Determina si todos los maestros de un ef esclavo poseen datos
     * @return boolean
     */
    
function ef_tiene_maestros_seteados($id_ef)
    {
        foreach (
$this->_cascadas_maestros[$id_ef] as $maestro) {
            if (! 
$this->_efs[$maestro]->tiene_estado()) {
                return 
false;
            }
        }
        return 
true;            
    }    

    
/**
     * Carga los efs que permiten seleccionar su valor a partir de opciones
     * @ignore 
     */
    
function cargar()
    {
        foreach (
$this->_efs as $id_ef => $ef) {
            if (
$this->ef_requiere_carga($id_ef)) {
                
$param = array();
                
//-- Tiene maestros el ef? Todos tienen estado?
                
$cargar true;
                
$tiene_maestros false;
                if (isset(
$this->_cascadas_maestros[$id_ef]) && !empty($this->_cascadas_maestros[$id_ef])) {
                    
$tiene_maestros true;
                    foreach (
$this->_cascadas_maestros[$id_ef] as $maestro) {
                        if (
$this->_efs[$maestro]->tiene_estado()) {
                            
$estado $this->_efs[$maestro]->get_estado();
                            
$param[$maestro] = $estado;
                        } else {
                            
$cargar false;
                        }
                    }
                }
                
//--- Existe la posibilidad que no tenga maestros y ya ha sido cargado anteriormente
                //--- En este caso se evita una re-carga porque se asume que no hay condiciones que puedan variar las opciones
                
$cargado false;
                if (! 
$tiene_maestros && $cargar) {
                    if (
$this->_efs[$id_ef]->tiene_opciones_cargadas()) {
                        
$cargado true;
                    }
                }
                if (! 
$cargado) {
                    
$datos null;
                    if (
$cargar) {
                        if (
$this->_efs[$id_ef]->carga_depende_de_estado()) {    
                            
//--- Caso del popup
                            
$estado $this->_efs[$id_ef]->get_estado();
                            if (isset(
$estado)) {
                                
$datos $this->ejecutar_metodo_carga_descripcion_ef($id_ef$estado);
                            }
                        } else {
                            
//--- Caso general
                            
$datos $this->ejecutar_metodo_carga_ef($id_ef$param);
                        }
                    }
                    
$this->_efs[$id_ef]->set_opciones($datos$cargar$tiene_maestros);
                }
            }
        }
    }
    
    
/**
     * @ignore 
     */
    
protected function ef_requiere_carga($id_ef)
    {
        return 
            isset(
$this->_parametros_carga_efs[$id_ef]['carga_metodo'])
            || isset(
$this->_parametros_carga_efs[$id_ef]['carga_lista'])
            || isset(
$this->_parametros_carga_efs[$id_ef]['carga_sql'])
            || isset(
$this->_parametros_carga_efs[$id_ef]['popup_carga_desc_metodo']);
    }
    
    
/**
     * @ignore 
     */
    
function ejecutar_metodo_carga_ef($id_ef$maestros = array())
    {
        
$parametros $this->_parametros_carga_efs[$id_ef];
        
$seleccionable $this->_efs[$id_ef]->es_seleccionable();
        
        
$es_posicional true;
        if (
$seleccionable) {
            
//--- Se determinan cuales son los campos claves y el campo de valor
            
$campos_clave $this->_efs[$id_ef]->get_campos_clave();
            
$campo_valor $this->_efs[$id_ef]->get_campo_valor();
            
$es_posicional $this->_efs[$id_ef]->son_campos_posicionales();
    
        }
        if (isset(
$parametros['carga_lista'])) {
            
//--- Carga a partir de una lista de valores
            
$salida $this->ef_metodo_carga_lista($id_ef$parametros$maestros);
        } elseif (isset(
$parametros['carga_sql'])) {
            
//--- Carga a partir de un SQL
            
$nuevos $this->ef_metodo_carga_sql($id_ef$parametros$maestros$es_posicional);
            if (
$seleccionable) {
                
$salida rs_convertir_asociativo($nuevos$campos_clave$campo_valor);
            } else {
                if (! empty(
$nuevos)) {
                    return 
$nuevos[0][0];                    
                }
            }
        } elseif (isset(
$parametros['carga_metodo'])) {
            if (isset(
$parametros['carga_dt'])) {
                
//--- Carga a partir de un Método datos_tabla
                
$nuevos $this->ef_metodo_carga_dt($id_ef$parametros$maestros);
            } elseif (isset(
$parametros['carga_consulta_php'])) {
                
//--- Carga a partir de una Consulta PHP                
                
$nuevos $this->ef_metodo_carga_consulta_php($id_ef$parametros$maestros);
            } else {
                
//--- Carga a partir de un PHP
                
$nuevos $this->ef_metodo_carga_php($id_ef$parametros$maestros);
            }
            if (
$seleccionable) {
                
$salida rs_convertir_asociativo($nuevos$campos_clave$campo_valor);
            } else {
                return 
$nuevos;    
            }
        } else {
            throw new 
toba_error_def('No está definido un método de carga. Parámetros: '.var_export($parametrostrue));
        }
        if (! 
$this->_efs[$id_ef]->permite_seleccion_multiple()) {
            
$salida $this->ajustar_descripciones($id_ef$salida);
        }
        if (! isset(
$parametros['carga_no_seteado_ocultar'])) {
            
$parametros['carga_no_seteado_ocultar'] = false;
        }
        
//--- Agrega el no-seteado en caso que existan elementos
        
if ($parametros['carga_permite_no_seteado'] == '1' && !isset($salida[apex_ef_no_seteado])
            && (! empty(
$salida) || !$parametros['carga_no_seteado_ocultar'])) {
            
$lista = array();
            
$lista[apex_ef_no_seteado] = (isset($parametros['carga_no_seteado']))? $parametros['carga_no_seteado']: '';
            return 
$lista $salida;
        } else {
            return 
$salida;    
        }
    }

    
/**
     * Si se seteó una longitud máxima para la descripción de un EF seleccionable,
     * se cortan los valores a ese máximo y se agrega al final '...'.
     * @ignore 
     */
    
function ajustar_descripciones($id_ef$datos)
    {
        
$maximo_descripcion $this->_efs[$id_ef]->get_maximo_descripcion();
        if (isset(
$maximo_descripcion) && is_array($datos)) {
            foreach (
$datos as $clave => $opcion) {
                if (
$opcion && strlen($opcion) > $maximo_descripcion) {
                    
$datos[$clave] = substr($opcion0$maximo_descripcion) . '...';
                }
            }
        }
        return 
$datos;
    }

    
/**
     * @ignore 
     */
    
function ejecutar_metodo_carga_descripcion_ef($id_ef$maestros = array())
    {
        
$parametros $this->_parametros_carga_efs[$id_ef];
        
$parametros['carga_metodo'] = $parametros['popup_carga_desc_metodo'];        
        
$parametros['carga_clase'] = $parametros['popup_carga_desc_clase'];
        
$parametros['carga_include'] = $parametros['popup_carga_desc_include'];
        return 
$this->ef_metodo_carga_php($id_ef$parametros, array($maestros));
    }
    

    
/**
     * @ignore 
     */
    
protected function ef_metodo_carga_lista($id_ef$parametros$maestros)
    {
        
$elementos explode(","$parametros['carga_lista']);
        
$valores = array();
        foreach (
$elementos as $elemento) {
            
$campos explode("/"$elemento);
            if (
count($campos) == 1) {
                
$valores[trim($campos[0])] = trim($campos[0]);
            } elseif (
count($campos) == 2) {
                
$valores[trim($campos[0])] = trim($campos[1]);
            } else {
                throw new 
toba_error_def("La lista de opciones del ef '$id_ef' es incorrecta.");
            }
        }        
        return 
$valores;
    }
    
    
/**
     * @ignore 
     */
    
protected function ef_metodo_carga_sql($id_ef$parametros$maestros$es_posicional)
    {
        
//Armo la sentencia que limita al proyecto
        
$sql_where "";
        if (isset(
$parametros['columna_proyecto'])) {
            
$sql_where .= $parametros["columna_proyecto"] . " = '".toba::proyecto()->get_id()."' ";
            if (isset(
$parametros["incluir_toba"]) && $parametros["incluir_toba"]) {
                
$sql_where .= " OR ".$parametros["columna_proyecto"]." = 'toba'";
            }
        }
        if (
$sql_where != '') {
            
$where[] = "(" $sql_where .")";
            
$parametros['carga_sql'] =  sql_agregar_clausulas_where($parametros['carga_sql'],$where);
        }
        foreach (
$maestros as $id_maestro => $valor_maestro) {
            if (
is_array($valor_maestro)) {
                
$valor_maestro '{'.implode(',' $valor_maestro) . '}';        //Si es un arreglo lo tomo como array
            
}
            
$parametros['carga_sql'] = str_replace(apex_ef_cascada.$id_maestro.apex_ef_cascada$valor_maestro$parametros['carga_sql']);
        }
        
$modo = ($es_posicional) ? toba_db_fetch_num toba_db_fetch_asoc;
        return 
toba::db($parametros['carga_fuente'])->consultar($parametros['carga_sql'], $modo);
    }
    
    
/**
     * @ignore 
     */
    
protected function ef_metodo_carga_php($id_ef$parametros$maestros)
    {
        
// Fix. En la descripci?n de un popup $maestros llega con el valor directamente,
        // no como un arreglo con el valor como lo espera call_user_func
        
$maestros = (! is_array($maestros)) ? array($maestros) : $maestros;
        
        if (isset(
$parametros['carga_include']) || isset($parametros['carga_clase'])) {
            if(!
class_exists($parametros['carga_clase']) && isset($parametros['carga_include']) && $parametros['carga_include'] != '') {
                
$pm toba::puntos_montaje()->get_por_id($parametros['punto_montaje']);
                
$path $pm->get_path_absoluto().'/'.$parametros['carga_include'];
                require_once(
$path);
            }
            
$instanciable = (isset($parametros['instanciable']) && $parametros['instanciable']=='1');
            if (
$instanciable) {
                
$obj = new $parametros['carga_clase']();
                
$clase $obj;
            } else {
                
$clase $parametros['carga_clase'];
            }
            if (! 
method_exists($clase$parametros['carga_metodo'])) {
                throw new 
toba_error_def("ERROR en la carga del ef $id_ef. No existe el método '{$parametros['carga_metodo']}' de la clase '{$parametros['carga_clase']}'");            
            }            
            
$metodo = array($clase$parametros['carga_metodo']);    
            return 
call_user_func_array($metodo$maestros);
        } else {
            
//--- Es un metodo del CI contenedor
            
if (! method_exists($this->_controlador->controlador(), $parametros['carga_metodo'])) {
                
$clase get_class($this->_controlador->controlador());
                throw new 
toba_error_def("ERROR en la carga del ef $id_ef. No existe el método '{$parametros['carga_metodo']}' en la clase '$clase'");            
            }
            
$dato call_user_func_array(array($this->_controlador->controlador(), $parametros['carga_metodo']), $maestros);
            return 
$dato;
        }
    }
    
    
/**
     * @ignore 
     */
    
protected function ef_metodo_carga_consulta_php($id_ef$parametros$maestros)
    {
        if (isset(
$parametros['carga_consulta_php_clase'])) {
            
$objeto toba::consulta_php($parametros['carga_consulta_php_clase']);
            
$metodo $parametros['carga_metodo'];
            if (! 
method_exists($objeto$metodo)) {
                throw new 
toba_error_def("ERROR en la carga del ef $id_ef. No existe el método '{$parametros['carga_metodo']}' de la consulta php '{$parametros['carga_consulta_php_clase']}'");
            }
            return 
call_user_func_array(array($objeto$metodo), $maestros);
        } 
    }
        
    
    
/**
     * @ignore 
     */
    
protected function ef_metodo_carga_dt($id_ef$parametros$maestros)
    {
        
$id $this->_controlador->get_id();
        
$dt toba_constructor::get_runtime(array('proyecto' => $id[0],'componente' => $parametros['carga_dt']), 'toba_datos_tabla');
        if (! 
method_exists($dt$parametros['carga_metodo'])) {
            
$clase get_class($dt);
            throw new 
toba_error_def("ERROR en la carga del ef $id_ef. No existe el método '{$parametros['carga_metodo']}' de la clase '$clase'");            
        }                
        return 
call_user_func_array(array($dt$parametros['carga_metodo']), $maestros);
    }    

    
/*
     * Quita un ef de la relacion de cascadas 
     * @ignore
     */
    
function quitar_ef($ef)
    {
        
$esclavos = (isset($this->_cascadas_esclavos[$ef])) ? $this->_cascadas_esclavos[$ef]: array();
        foreach(
$esclavos as $ef_esclavo){
            if (isset(
$this->_efs[$ef_esclavo])){
                
$this->_efs[$ef_esclavo]->quitar_maestro($ef);
            }            
        }
        unset(
$this->_efs[$ef]);
    }
}

?>

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