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


Viewing file:     toba_proyecto.php (23.46 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
 * Brinda servicios de información sobre el proyecto actualmente cargado en el framework:
 *  - Información del archivo de configuración proyecto.ini, cacheandolo en la memoria
 *  - Información de la definición básica en el editor (e.i. los metadatos)
 * 
 * @package Centrales
 */
class toba_proyecto
{
    static private 
$instancia;
    static private 
$id_proyecto;
    private 
$memoria;                                //Referencia al segmento de $_SESSION asignado
    
private $id;
    private 
$indice_items_accesibles;
    private 
$items_excluidos = array();
    private 
$mapeo_componentes = array();
    private 
$ini_proyecto;
    private 
$personalizacion_iniciada;
    const 
prefijo_punto_acceso 'apex_pa_';

    
/**
     * Retorna el id del proyecto actualmente cargado en el pedido de página
     */
    
static function get_id()
    {
        if (! isset(
self::$id_proyecto)) {
            
$item toba_memoria::get_item_solicitado_original();
            
//-- El proyecto viene por url
            
if (isset($item) && isset($item[0])) {
                
self::$id_proyecto $item[0];
            } else {
                
//--- Si no viene por url, se toma la constante
                
if(! defined('apex_pa_proyecto') ){
                    if (isset(
$_SERVER['TOBA_PROYECTO'])) {
                        
define('apex_pa_proyecto'$_SERVER['TOBA_PROYECTO']);
                    } else {
                        throw new 
toba_error("Es necesario definir la constante 'apex_pa_proyecto'");
                    }
                } 
                
self::$id_proyecto apex_pa_proyecto;
            }
        }
        return 
self::$id_proyecto;
    }

    
/**
     * @return toba_proyecto
     */
    
static function instancia()
    {
        if (!isset(
self::$instancia)) {
            
$id_proyecto self::get_id();            
            
//toba::logger()->debug("TOBA PROYECTO: creando instancia de '$id_proyecto'", 'toba');
            
self::$instancia = new toba_proyecto($id_proyecto);
        }
        return 
self::$instancia;
    }
    
    static function 
hay_instancia()
    {
        return isset(
self::$instancia);
    }

    static function 
eliminar_instancia()
    {
        
self::$instancia null;
    }
    
    private function 
__construct($proyecto)
    {
        if (! 
in_array($proyectotoba::instancia()->get_id_proyectos())) {        //El proyecto no existe o no esta cargado en la instancia
            
if (! toba::instalacion()->es_produccion()) {
                        throw new 
toba_error("El proyecto '".$proyecto."' no se encuentra cargado en la instancia");
            } else {
                        die;        
//En produccion no se loguea nada, se mata inmediatamente el proceso
            
}
        }
        
toba_proyecto_db::set_dbtoba::instancia()->get_db() );//Las consultas salen de la instancia actual
        
$this->id $proyecto;
        
$this->memoria =& toba::manejador_sesiones()->segmento_info_proyecto($proyecto);
        if (!
$this->memoria) {
            
$this->memoria self::cargar_info_basica();
            
//toba::logger()->debug('Inicialización de TOBA_PROYECTO: ' . $this->id,'toba');
        
}
        
$path_ini self::get_path().'/proyecto.ini';
        if (
file_exists($path_ini)) {
            
$this->ini_proyecto = new toba_ini($path_ini);
        }
        if (
defined('apex_pa_log_archivo_nivel')) {
            
toba::logger()->set_nivel(apex_pa_log_archivo_nivel);
        } else {
            
toba::logger()->set_nivel($this->memoria['log_archivo_nivel']);
        }
        if ((!
defined('apex_pa_log_archivo') && !$this->memoria['log_archivo'])
                || (
defined('apex_pa_log_archivo') && !apex_pa_log_archivo)) {
            
toba::logger()->desactivar();
        }
    }


    
/**
     * Retorna el valor de un parámetro generico del proyecto (ej. descripcion) cacheado en la memoria
     * @return toba_error si el parametro no se encuentra definido, sino el valor del parámetro
     */
    
function get_parametro($seccion$parametro=null$obligatorio=true)
    {
        
$id $seccion;
        if (isset(
$parametro)) {
            
$id $seccion.'.'.$parametro;
        }
        if( 
defined(self::prefijo_punto_acceso.$id) ){
            return 
constant(self::prefijo_punto_acceso.$id);
        } elseif (isset(
$this->memoria[$id])) {
            return 
$this->memoria[$id];
        } elseif (isset(
$this->ini_proyecto) && $this->ini_proyecto->existe_entrada($seccion$parametro)) {
            return 
$this->ini_proyecto->get($seccion$parametro);
        } else {
            if( 
array_key_exists($id$this->memoria)) {
                return 
null;
            }else{
                if (
$obligatorio) {
                    throw new 
toba_error("INFO_PROYECTO: El parametro '$id' no se encuentra definido.");
                } else {
                    return 
null;
                }
            }
        }    
    }

    
/**
     * Cachea en la memoria un par clave-valor del proyecto actual
     */
    
function set_parametro($id$valor)
    {
        
$this->memoria[$id] = $valor;
    }

    
//----------------------------------------------------------------
    // DATOS
    //----------------------------------------------------------------    

    /**
     * Retorna el número de versión propio del proyecto
     * @return toba_version
     */
    
function get_version()
    {
        if (isset(
$this->ini_proyecto) && $this->ini_proyecto->existe_entrada('proyecto''version')) {
            return new 
toba_version($this->ini_proyecto->get('proyecto''version'));
        } else {
            
//Se asume que si el proyecto no da un numero de version, se toma la del nucleo (para no mantener la de toba_referencia, usuarios, etc)
            
return toba::instalacion()->get_version();
        }
    }    
    
/**
     * Retorna la base de datos de la instancia a la que pertenece este proyecto
     * @return toba_db
     */
    
function cargar_info_basica($proyecto=null)
    {
        
$proyecto = isset($proyecto) ? $proyecto $this->id ;
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$proyecto ) ) {
            
$rs $this->recuperar_datos_compilados('toba_mc_gene__basicos','info_basica');
        } else {
            
$rs toba_proyecto_db::cargar_info_basica($proyecto);
        }
        if (!
$rs) {
            throw new 
toba_error("El proyecto '".$proyecto."' no se encuentra cargado en la instancia ".toba_instancia::get_id());    
        }
        return 
$rs;
    }

    function 
es_multiproyecto()
    {
        return 
$this->get_parametro('listar_multiproyecto');
    }

    function 
permite_cambio_perfiles()
    {
        
$permite $this->get_parametro('proyecto''permite_cambio_perfil_funcional'false);
        return (! 
is_null($permite) && $permite);
    }
    
    function 
es_personalizable()
    {
        
$rs $this->get_parametro('extension_proyecto');
        
        return 
$rs;
    }
    
    function 
personalizacion_activa()
    {
        if (! isset(
$this->personalizacion_iniciada)) {
            
$this->personalizacion_iniciada toba_personalizacion::get_personalizacion_iniciada(self::get_id());
        }
        return 
$this->personalizacion_iniciada;
    }

    function 
get_clases_extendidas()
    {
        return array(
            
$this->get_parametro('extension_toba'),
            
$this->get_parametro('extension_proyecto')
        );
    }

    
/**
     * Retorna el path base absoluto del proyecto
     */
    
static function get_path()
    {
        return 
toba::instancia()->get_path_proyecto(self::get_id());
    }

    static function 
get_path_pers()
    {
        return 
self::get_path().'/'.toba_personalizacion::dir_personalizacion;
    }
    
    
/**
     * Retorna el flag de compilacion del proyecto
     */
    
function get_directiva_compilacion()
    {
        return 
toba::instancia()->get_directiva_compilacion(self::get_id());
    }

    
/**
     * Retorna el path absoluto de la carpeta 'php' del proyecto
     */
    
static function get_path_php()
    {
        return 
self::get_path() . '/php';
    }

    
/**
     * Retorna el path absoluto de la carpeta 'php' de la personalizacion
     */
    
static function get_path_pers_php()
    {
        return 
self::get_path_pers() . '/php';
    }
        
    
/**
     * Retorna el path base absoluto del directorio temporal no-navegable del proyecto
     * (mi_proyecto/temp);
     */
    
function get_path_temp()
    {
        
$dir $this->get_path() . '/temp';
        if (!
file_exists($dir)) {
            
mkdir($dir0700);
        }
        return 
$dir;
    }    
    
    
/**
     * Retorna path y URL de la carpeta navegable del proyecto actual
     * (mi_proyecto/www);
     * @return array con claves 'path' (en el sist.arch.) y 'url' (URL navegable)
     */
    
function get_www($archivo="")
    {
        
$path_real $this->get_path() . "/www/" $archivo;
        
$path_browser toba_recurso::url_proyecto();
        if (
$archivo != "") {
             
$path_browser .= "/" $archivo;
        }
        return array(    
"path" => $path_real,
                        
"url" => $path_browser);
    }

    function 
get_www_pers($archivo="")
    {
        
$path_real $this->get_path_pers() . "/www/" $archivo;
        
$path_browser toba_recurso::url_proyecto($this->idtrue);
        if (
$archivo != "") {
             
$path_browser .= "/" $archivo;
        }
        return array(    
"path" => $path_real,
                        
"url" => $path_browser);
    }
    
    
/**
     * Retorna el path y url del directorio temporal navegable del proyecto (mi_proyecto/www/temp);
     * En caso de no existir, crea el directorio
     * Si se pasa un path relativo como parámetro retorna el path absoluto del archivo en el directorio temporal
     * @return array con claves 'path' (en el sist.arch.) y 'url' (URL navegable)
     */
    
function get_www_temp($archivo='')
    {
        if (!
file_exists($this->get_path() . "/www/temp")) {
            
mkdir($this->get_path() . "/www/temp"0700);
        }
        if (
$archivo != '') {
            return 
$this->get_www('temp/'$archivo);
        } else {
            return 
$this->get_www('temp');
        }
    }

    
//--------------  Carga dinamica de COMPONENTES --------------

    
function get_definicion_dependencia($id_componente$proyecto=null)
    {
        
$proyecto = isset($proyecto) ? $proyecto $this->id ;
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$this->id ) ) {
            
$temp toba_constructor::get_metadatos_compilados(array('proyecto'=>$proyecto'componente'=>$id_componente));
            
$rs $temp['_info'];
        } else {
            
//Busco la definicion del componente
            
$sql toba_componente_def::get_vista_extendida($proyecto$id_componente);
            
$rs toba_proyecto_db::get_db()->consultar_fila($sql['_info']['sql']);
        }
        return 
$rs;
    }

    function 
get_id_componente_por_indice($identificador$proyecto=null)
    {
        if(! 
$this->mapeo_componentes ) {
            if (! isset(
$proyecto)) $proyecto $this->id;
            if ( 
toba::nucleo()->utilizar_metadatos_compilados$proyecto ) ) {
                
$this->mapeo_componentes $this->recuperar_datos_compilados('toba_mc_gene__basicos''info_indices_componentes');
            } else {
                
$this->mapeo_componentes toba_proyecto_db::get_mapeo_componentes_indice($proyecto);
            }
        }
        if( ! isset(
$this->mapeo_componentes[$identificador]) ) {
            throw new 
toba_error("Error buscando el componente '$identificador'. El INDICE no existe");
        }
        return 
$this->mapeo_componentes[$identificador];
    }

    
//--------------------  Dimensiones  ------------------------
    
    
function get_info_dimension($dimension$proyecto=null)
    {
        if (! isset(
$proyecto)) $proyecto $this->id;
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$proyecto ) ) {
            return 
$this->recuperar_datos_compilados('toba_mc_gene__dim_'.$dimension'get_info');
        } else {
            return 
toba_proyecto_db::get_info_dimension($proyecto$dimension);
        }
    }

    function 
get_info_relacion_entre_tablas($fuente_datos$proyecto)
    {
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$proyecto ) ) {
            return 
self::recuperar_datos_compilados('toba_mc_gene__relacion_tablas_'.$fuente_datos'get_info');
        } else {
            return 
toba_proyecto_db::get_info_relacion_entre_tablas($proyecto$fuente_datos);
        }
    }

    
//--------------------  Puntos de Control  ------------------------

    
function get_info_punto_control($punto_control$proyecto=null)    
    {
        if (! isset(
$proyecto)) $proyecto $this->id;
        
$info = array();
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$proyecto ) ) {
            
$info $this->recuperar_datos_compilados('toba_mc_gene__pcontrol_'.$punto_control'get_info');
        } else {
            
$info['parametros'] = toba_proyecto_db::punto_control_parametros($proyecto$punto_control);
            
$info['controles'] = toba_proyecto_db::punto_control_controles($proyecto$punto_control);
        }
        return 
$info;    
    }

    
//------------------------  FUENTES  -------------------------

    
function get_info_fuente_datos($id_fuente$proyecto=null)
    {
        if (! isset(
$proyecto)) $proyecto $this->id;        
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$proyecto ) ) {
            
$rs $this->recuperar_datos_compilados('toba_mc_gene__basicos','info_fuente__'.$id_fuente);
        } else {
            if (! isset(
$proyecto)) $proyecto $this->id;
            
$rs toba_proyecto_db::get_info_fuente_datos($proyecto$id_fuente);
            
//-- No se carga aqui la relacion entre tabla y dt por un tema de eficiencia, se hace con un lazyload en toba_fuente_datos
        
}
        if (empty(
$rs)) {
            throw new 
toba_error("No se puede encontrar la fuente '$id_fuente' en el proyecto '$proyecto'");    
        }
        return 
$rs;
    }
    
    
//------------------------  Grupos de acceso & ITEMS  -------------------------

    /**
     * Retorna la lista de items a los que puede acceder el usuario
     *
     * @param unknown_type $solo_primer_nivel
     * @param string $proyecto Por defecto el actual
     * @param string $grupos_acceso Por defecto el del usuario actual
     * @return array RecordSet contienendo información de los items
     */
    
function get_items_menu($proyecto=null$grupos_acceso=null)
    {
        if (!isset(
$proyecto)) $proyecto $this->id;        
        if (!isset(
$grupos_acceso)) $grupos_acceso toba::manejador_sesiones()->get_perfiles_funcionales_activos();
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$proyecto ) ) {
            
$rs $this->recuperar_datos_compilados_grupo(    'toba_mc_gene__grupo_'
                                                            
$grupos_acceso
                                                            
'get_items_menu',
                                                            
true);
        } else {
            
$rs toba_proyecto_db::get_items_menu($proyecto$grupos_acceso);
        }
        
// Se quitan los items excluidos de la lista de items que puede acceder el usuario.
        
$res = array();
        foreach (
$rs as $r)
            if (!
in_array($r['item'],$this->items_excluidos))
                
$res[] = $r;
        return 
$res;
    }    

    function 
quitar_item_menu($item)
    {
        
$this->items_excluidos[] = $item;
    }

    
/**
     * Valida que un grupo de acceso tenga acceso a un item
     */
    
function puede_grupo_acceder_item($item)
    {
        
$grupos_acceso toba::manejador_sesiones()->get_perfiles_funcionales_activos();
        
//Recupero los items y los formateo en un indice consultable
        
if(!isset($this->indice_items_accesibles)) {
            
$this->indice_items_accesibles = array();
            if ( 
toba::nucleo()->utilizar_metadatos_compilados$this->id'compilados' ) ) {
                
///-- Metadatos compilados
                
if (! empty($grupos_acceso)) {
                    
//-- Busca los items accesibles por grupo
                    
$this->indice_items_accesibles $this->recuperar_datos_compilados_grupo('toba_mc_gene__grupo_'
                                                                                                
$grupos_acceso
                                                                                                
'get_items_accesibles',
                                                                                                
false);
                } else {
                    
//-- Si no tiene grupo, busca aquellos items que son públicos
                    
$this->indice_items_accesibles $this->recuperar_datos_compilados_grupo('toba_mc_gene__items_'
                                                                                                array(
'publicos'), 
                                                                                                
'get_items_accesibles',
                                                                                                
false);            
                }
            } else {
                
//-- Metadatos salen de la base
                
$rs toba_proyecto_db::get_items_accesibles($this->id$grupos_acceso);
                foreach( 
$rs as $accesible ) {
                    
$this->indice_items_accesibles[$accesible['proyecto'].'-'.$accesible['item']] = 1;
                }
            }
        }
        return isset(
$this->indice_items_accesibles[$this->id.'-'.$item]);
    }

    
/**
    *    Devuelve la lista de items de la zona a los que puede acceder el grupo actual
    */
    
function get_items_zona($zona$grupos_acceso=null)
    {
        if (!isset(
$grupos_acceso)) $grupos_acceso toba::manejador_sesiones()->get_perfiles_funcionales_activos();
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$this->id ) ) {
            
$rs $this->recuperar_datos_compilados_grupo(    'toba_mc_gene__grupo_'
                                                            
$grupos_acceso,
                                                            
'get_items_zona__'.$zona,
                                                            
true,
                                                            array(
'orden') );
        } else {
            
$rs toba_proyecto_db::get_items_zona($this->id$grupos_acceso$zona);    
        }
        return 
$rs;
    }

    function 
get_perfiles_funcionales_usuario_anonimo()
    {
        
$grupos explode(',',$this->get_parametro('usuario_anonimo_grupos_acc'));
        
$grupos array_map('trim',$grupos);
        return 
$grupos;
    }
    
    
/**
     * @deprecated Desde 1.5 usar get_perfiles_funcionales_usuario_anonimo
     */
    
function get_grupos_acceso_usuario_anonimo()
    {
        return 
$this->get_perfiles_funcionales_usuario_anonimo();
    }    
    
    
    function 
get_perfiles_funcionales_asociados($perfil)
    {
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$this->id ) ) {
            
$perfiles $this->recuperar_datos_compilados_grupo(    'toba_mc_gene__grupo_'
                                                            array(
$perfil),
                                                            
'get_membresia',
                                                            
true
                                                        
);
            foreach (
$perfiles as $perfil_miembro) {
                
$this->get_perfiles_funcionales_asociados($perfil_miembro);
            }
        } else {
            
$perfiles toba_proyecto_db::get_perfiles_funcionales_asociados($this->id$perfil);    
        }
        return 
$perfiles;        
    }

    
//------------------------  Permisos  -------------------------
    
    /**
     * Retorna la lista de permisos globales (tambien llamados derechos) de un grupo de acceso en el proyecto actual
     */
    
function get_lista_permisos($grupos_acceso=null)
    {
        
$grupos_acceso = isset($grupos_acceso) ? $grupos_acceso toba::manejador_sesiones()->get_perfiles_funcionales_activos();
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$this->id ) ) {
            
$rs $this->recuperar_datos_compilados_grupo('toba_mc_gene__grupo_'$grupos_acceso'get_lista_permisos');
        } else {
            
$rs toba_proyecto_db::get_lista_permisos($this->id$grupos_acceso);
        }
        return 
$rs;
    }
    
    
/**
     * Retorna la descripción asociada a un permiso global particular del proy. actual
     */
    
function get_descripcion_permiso($permiso)
    {
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$this->id ) ) {
            
$rs $this->recuperar_datos_compilados('toba_mc_gene__basicos''info_permiso__'.$permiso);
        } else {
            
$rs toba_proyecto_db::get_descripcion_permiso($this->id$permiso);
        }
        return 
$rs;
    }

    
//------------------------  MENSAJES  -------------------------

    
function get_mensaje_toba($indice)
    {
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$this->id ) ) {
            
$clase 'toba_mc_gene__msj_toba';
            
$metodo 'get__'.$indice;
            if ( 
$this->existe_dato_compilado($clase$metodo) ) {
                
$rs $this->recuperar_datos_compilados($clase$metodo);
            } else {
                
$rs = array();    
            }
        } else {
            
$rs toba_proyecto_db::get_mensaje_toba($indice);    
        }
        return 
$rs;
    }
    
    function 
get_mensaje_proyecto($indice)
    {
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$this->id ) ) {
            
$clase 'toba_mc_gene__msj_proyecto';
            
$metodo 'get__'.$indice;
            if ( 
$this->existe_dato_compilado($clase$metodo) ) {
                
$rs $this->recuperar_datos_compilados($clase$metodo);
            } else {
                
$rs = array();    
            }
        } else {
            
$rs toba_proyecto_db::get_mensaje_proyecto($this->id$indice);
        }
        return 
$rs;
    }

    function 
get_mensaje_objeto($objeto$indice)
    {
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$this->id ) ) {
            
$clase 'toba_mc_gene__msj_proyecto_objeto';
            
$metodo 'get__'.$objeto.'__'.$indice;
            if ( 
$this->existe_dato_compilado($clase$metodo) ) {
                
$rs $this->recuperar_datos_compilados($clase$metodo);
            } else {
                
$rs false;    //Para ser coherentes en la respuesta con el else
            
}
        } else {
            
$rs toba_proyecto_db::get_mensaje_objeto($this->id$objeto$indice);    
        }
        return 
$rs;
    }

    
//------------------------  CONSULTAS PHP  -------------------------

    
function get_info_consulta_php($clase$proyecto=null)
    {
        if (! isset(
$proyecto)) $proyecto $this->id;        
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$proyecto ) ) {
            
$rs $this->recuperar_datos_compilados('toba_mc_gene__consultas_php','info_consulta_php__'.$clase);
        } else {
            
$rs toba_proyecto_db::get_consulta_php($proyecto$clase);
        }
        if (empty(
$rs)) {
            throw new 
toba_error("No se puede encontrar la consulta PHP '$clase' en el proyecto '$proyecto'");    
        }
        return 
$rs;
    }

    
//------------------------  SERVICIOS WEB  -------------------------

    
function get_info_servicios_web_acc($id$proyecto=null)
    {
        if (! isset(
$proyecto)) $proyecto $this->id;        
        if ( 
toba::nucleo()->utilizar_metadatos_compilados$proyecto ) ) {
            
$rs $this->recuperar_datos_compilados('toba_mc_gene__servicios_web','servicio__'.$id);
        } else {
            
$rs toba_proyecto_db::get_info_servicio_web($proyecto$id);
        }
        if (empty(
$rs)) {
            throw new 
toba_error("No se puede encontrar la definición del Servicio Web '$id' en el proyecto '$proyecto'");    
        }
        return 
$rs;
    }    

    
//------------------------  PUNTOS DE MONTAJE  -------------------------

    
function get_info_pms($proyecto null)
    {
        if (
is_null($proyecto)) $proyecto $this->id;
        if (
toba::nucleo()->utilizar_metadatos_compilados($proyecto)) {
            
$rs $this->recuperar_datos_compilados('toba_mc_gene__pms''get_pms');
        } else {
            
$rs toba_proyecto_db::get_pms($proyecto);
        }
        if (empty(
$rs)) {
            throw new 
toba_error("No se pueden encontrar puntos de montaje en el proyecto '$proyecto'");
        }

        return 
$rs;
    }

    
    
//------------------------  GADGETS  -------------------------
    /**
     * Recupera los gadgets disponibles en la base de datos
     * para el usuario en un proyecto especifico
     * @param string $usuario    Id del usuario
     * @param string $proyecto    Id del proyecto
     * @return array Arreglo con objetos toba_gadget o vacio en su defecto.
     */
    
function get_gadgets_proyecto($usuario$proyecto=null)
    {
        if (
is_null($proyecto)) $proyecto $this->id;            //Si no pasan proyecto tomo el actual
        
$gadgets = array();
        
$info_gadgets toba_proyecto_db::get_gadgets_proyecto($proyecto$usuario);
        if (! empty(
$info_gadgets)){
            foreach(
$info_gadgets as $info) {
                
$gadgets[] = $this->get_objeto_gadget($info);
            }
        }
        return 
$gadgets;
    }

    
/**
     * Instancia el objeto correspondiente de acuerdo a la informacion recibida
     * ademas asigna los valores de las propiedades existentes
     * @param <type> $info
     * @ignore
     */
    
private function get_objeto_gadget($info)
    {
        switch (
$info['tipo_gadget']) {
            case 
apex_tipo_gadget_shindig:

                                
$objeto = new toba_gadget_shindig($info['gadget']);
                                
$objeto->set_gadget_url($info['gadget_url']);
                                break;
            case 
apex_tipo_gadget_interno:
                
                            if (! isset(
$info['subclase']) || ! isset($info['subclase_archivo'])) {
                                throw new 
toba_error_def('La definición de subclase para el gadget esta incompleta');
                            } else {
                                
$clase $info['subclase'];
                                require_once(
$info['subclase_archivo']);
                                
$objeto = new $clase($info['gadget']);
                                
$objeto->set_clase($clase$info['subclase_archivo']);
                            }
                            break;
            default:
                            throw new 
toba_error_def('El tipo de gadget recuperado no es válido.');
        }
        if (isset(
$info['titulo'])) {$objeto->set_titulo($info['titulo']);}
        if (isset(
$info['descripcion'])) {$objeto->set_descripcion($info['descripcion']);}
        if (isset(
$info['orden'])) {$objeto->set_orden($info['orden']);}
        if (isset(
$info['eliminable'])) {$objeto->set_eliminable($info['eliminable']);}

        return 
$objeto;
    }

    
//-- Soporte a la compilacion ----------------------
    
    
static function existe_dato_compilado($clase$metodo)
    {
        return 
in_array($metodoget_class_methods($clase));
    }
    
    static function 
recuperar_datos_compilados($clase$metodo)
    {
        return 
call_user_func(array($clase$metodo));
    }

    function 
recuperar_datos_compilados_grupo($prefijo_clase$grupos$metodo$reindexar=true$orden=null)
    {
        
$temp = array();
        foreach( 
$grupos as $grupo ) {
            
$clase $prefijo_clase $grupo;
            
$temp array_merge($tempcall_user_func(array($clase$metodo)));
        }
        if(
$reindexar) {
            
$temp array_values($temp);    
        }
        if(isset(
$orden)){
            
$temp rs_ordenar_por_columnas($temp$orden);
        }
        return 
$temp;
    }
}
?>

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