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


Viewing file:     toba_componente_info.php (17.73 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

abstract class toba_componente_info implements toba_nodo_arboltoba_meta_clase
{
    protected 
$datos;
    protected 
$consumidor null;                //elemento_toba que consume el elemento
    
protected $datos_consumidor null;            //Rol que cumple elemento en el consumidor
    
protected $subelementos = array();
    protected 
$proyecto;
    protected 
$id;
    protected 
$carga_profundidad;
    protected 
$info_extra "";
    protected 
$datos_resumidos;
    
    function 
__construct$datos$carga_profundidad=true$datos_resumidos=false)
    {
        
$this->carga_profundidad $carga_profundidad;
        
$this->datos $datos;
        
$this->datos_resumidos $datos_resumidos;
        
$this->id $this->datos['_info']['objeto'];
        
$this->proyecto $this->datos['_info']['proyecto'];
        if (
$this->carga_profundidad) {
            
$this->cargar_dependencias();
        }
    }

    function 
cargar_dependencias()
    {
        
//Si hay objetos asociados...
        
if(    isset($this->datos['_info_dependencias']) && 
            
count($this->datos['_info_dependencias']) > )    {
            for ( 
$a=0$a<count($this->datos['_info_dependencias']); $a++) {
                
$clave['proyecto'] = $this->datos['_info_dependencias'][$a]['proyecto'];
                
$clave['componente'] = $this->datos['_info_dependencias'][$a]['objeto'];
                
$tipo $this->datos['_info_dependencias'][$a]['clase'];
                
$this->subelementos[$a]= toba_constructor::get_info$clave$tipo$this->carga_profundidadnulltrue$this->datos_resumidos);
                
$this->subelementos[$a]->set_consumidor($this$this->datos['_info_dependencias'][$a] );
            }
        }
    }

    function 
set_consumidor($consumidor$datos_consumidor)
    {
        
$this->consumidor $consumidor;
        
$this->datos_consumidor $datos_consumidor;
    }

    function 
tiene_consumidor()
    {
        return isset(
$this->datos_consumidor['identificador']);
    }
    
    function 
rol_en_consumidor()
    {
        return 
$this->datos_consumidor['identificador'];
    }
    
    function 
get_metadatos_subcomponente()
    {
        return array();
    }

    function 
acceso_zona($parametros = array())
    {
        
$parametros[apex_hilo_qs_zona] = $this->proyecto apex_qs_separador $this->id;
        return 
$parametros;
    }

    function 
vinculo_editor($parametros = array())
    {
        
$editor_item $this->datos['_info']['clase_editor_item'];
        
$editor_proyecto $this->datos['_info']['clase_editor_proyecto'];
        return 
toba::vinculador()->get_url$editor_proyecto$editor_item$this->acceso_zona($parametros),
                                        array(    
'menu' => true,
                                        
'celda_memoria' => 'central')
                            );
    }

    function 
get_fuente_datos()
    {
        return 
$this->datos['_info']['fuente'];
    }
    
    
/**
     * Duplica un objeto y sus dependencias recursivamente
     *
     * @param array $nuevos_datos Datos a modificar en la base del objeto. Para anexar algo al nombre se utiliza el campo 'anexo_nombre'
     * @param boolean/string $dir_subclases Si el componente tiene subclases clona los archivos, en caso afirmativo indicar la ruta destino (relativa)
     * @param boolean $con_transaccion    Indica si la clonación se debe incluír en una transaccion
     * @return array Clave del objeto que resulta del clonado
     */
    
function clonar($nuevos_datos$dir_subclases=false$con_transaccion true)
    {
        
//Se busca el id del datos_relacion de la clase
        
$id_dr toba_info_editores::get_dr_de_clase($this->datos['_info']['clase']);
        
        
//Se construye el objeto datos_relacion
        
$componente = array('proyecto' => $id_dr[0], 'componente' => $id_dr[1]);
        
$dr toba_constructor::get_runtime($componente);
        
$dr->inicializar();
        
        
//Se carga con el id_origen
        
$dr->cargar(array('proyecto' => $this->proyecto'objeto' => $this->id));
        foreach (
$nuevos_datos as $campo => $valor) {
            if (
$campo == 'anexo_nombre') {
                
$campo 'nombre';
                
$valor $valor $dr->tabla('base')->get_fila_columna(0$campo);
            }
            
$dr->tabla('base')->set_fila_columna_valor(0$campo$valor);
        }

        
//Se le fuerza una inserción a los datos_tabla
        //Como la clave de los objetos son secuencias, esto garantiza claves nuevas
        
$dr->forzar_insercion();
        if (!
$con_transaccion) {
            
$dr->persistidor()->desactivar_transaccion();    
        }
        
        
//--- Si tiene subclase, se copia el archivo y se cambia
        
if ($dir_subclases !== false) {
            
$proyecto_dest = isset($nuevos_datos['proyecto']) ? $nuevos_datos['proyecto'] : null;
            
$this->clonar_subclase($dr$dir_subclases$proyecto_dest);
        }
        
        
//--- Se reemplazan los datos y se clonan los hijos
        
foreach ($this->subelementos as $hijo) {
            
//-- Si se especifico un proyecto, se propaga
            
$datos_objeto = array();
            if (isset(
$nuevos_datos['proyecto'])) {
                
$datos_objeto['proyecto'] = $nuevos_datos['proyecto'];    
            }
            
//-- Si se especifica un anexo de nombre, se propaga
            
if (isset($nuevos_datos['anexo_nombre'])) {
                
$datos_objeto['anexo_nombre'] = $nuevos_datos['anexo_nombre'];
            }
            
//-- La fuente tambien se propaga
            
if (isset($nuevos_datos['fuente_datos_proyecto'])) {
                
$datos_objeto['fuente_datos_proyecto'] = $nuevos_datos['fuente_datos_proyecto'];
            }
            if (isset(
$nuevos_datos['fuente_datos'])) {
                
$datos_objeto['fuente_datos'] = $nuevos_datos['fuente_datos'];
            }
            
//-- Punto de montaje tambien se propaga
            
if (isset($nuevos_datos['punto_montaje'])) {
                
$datos_objeto['punto_montaje'] = $nuevos_datos['punto_montaje'];
            }    
    
            
//-- SE CLONA
            
$id_clon $hijo->clonar($datos_objeto$dir_subclases$con_transaccion);
            
//--- En el componente actual se reemplaza la dependencia por el clon
            
$id_fila $dr->tabla('dependencias')->get_id_fila_condicion(
                                array(
'identificador' => $hijo->rol_en_consumidor()));
            
$dr->tabla('dependencias')->modificar_fila(current($id_fila), 
                                array(
'objeto_proveedor' => $id_clon['componente']));
        }
        
//Se intenta acceder a las pantallas/db_registros para pasarle el nuevo punto de montaje
        
if (isset($nuevos_datos['punto_montaje'])) {
            
//Trato de setear el punto de montaje para las pantallas
            
try {
                
$dr->tabla('pantallas')->set_columna_valor('punto_montaje'$nuevos_datos['punto_montaje']);
            } catch (
Exception $e) {
                
            }
            
//Trato de setear el punto de montaje para las propiedades basicas
            
try {
                
$dr->tabla('prop_basicas')->set_columna_valor('punto_montaje'$nuevos_datos['punto_montaje']);
            } catch (
Exception $e) {
                
            }
            
//Trato de setear el punto de montaje para los efs
            
try {
                
$dr->tabla('efs')->set_columna_valor('punto_montaje'$nuevos_datos['punto_montaje']);
            } catch (
Exception $e) {
                
            }
            
//Trato de setear el punto de montaje para las columnas del filtro
            
try {
                
$dr->tabla('cols')->set_columna_valor('punto_montaje'$nuevos_datos['punto_montaje']);
            } catch (
Exception $e) {
                
            }
            
//Trato de setear el punto de montaje para las columnas externas del datos tabla
            
try {
                
$dr->tabla('externas')->set_columna_valor('punto_montaje'$nuevos_datos['punto_montaje']);
            } catch (
Exception $e) {
                
            }
        }
        
$dr->sincronizar();
        
        
//Se busca la clave del nuevo objeto
        
$clave $dr->tabla('base')->get_clave_valor(0);
        
$clave['componente'] = $clave['objeto'];
        return 
$clave;
    }
    
    protected function 
clonar_subclase($dr$dir_subclases$proyecto_dest)
    {
        if (isset(
$this->datos['_info']['subclase_archivo'])) {
            
$archivo $this->datos['_info']['subclase_archivo'];
            
$nuevo_archivo $dir_subclases."/".basename($archivo);
            
            
$id_pm_origen $this->get_punto_montaje();                        
            
$id_pm_destino $dr->tabla('base')->get_fila_columna(0'punto_montaje');                            
            
            
//Busco los directorios de copia utilizando los puntos de montaje
            
$path_origen $this->get_path_clonacion($id_pm_origen,$this->proyecto);
            
$path_destino $this->get_path_clonacion($id_pm_destino$proyecto_dest$path_origen);
        
            
$dr->tabla('base')->set_fila_columna_valor(0'subclase_archivo'$nuevo_archivo);
            
//--- Si el dir. destino no existe, se lo crea
            
if (!file_exists($path_destino.$dir_subclases)) {
                
toba_manejador_archivos::crear_arbol_directorios($path_destino.$dir_subclases);
            }
            if (! 
copy($path_origen.$archivo$path_destino.$nuevo_archivo)) {
                throw new 
toba_error('No es posible copiar el archivo desde '.$path_origen.$archivo.' hacia '.$path_destino.$nuevo_archivo);
            }                
        }
    }

    protected function 
get_path_clonacion($id_punto$proyecto$path_default='')
    {
        
$path_final $path_default;
        
$pm toba_pms::instancia()->get_instancia_pm_proyecto($proyecto$id_punto);        //Instancio el pm para el proyecto
        
if (! is_null($pm)) {
            
$path_final $pm->get_path_absoluto(). '/';                                //Si existe recupero el path al punto, sino uso el generico del proyecto
        
} elseif (isset($proyecto)) {
            
$path_final toba::instancia()->get_path_proyecto($proyecto).'/php/';    
        }        
        return 
$path_final;        
    }
    
    
//---------------------------------------------------------------------    
    //-- Recorrible como ARBOL
    //---------------------------------------------------------------------

    
function get_id()
    {
        return 
$this->id;    
    }
    
    function 
get_hijos()
    {
        return 
$this->subelementos;
    }
    
    function 
get_padre()
    {
        return 
null;
    }
    
    function 
es_hoja()
    {
        return 
$this->datos['_info']['cant_dependencias'] == 0;
    }
    
    function 
tiene_propiedades()
    {
        return 
false;
    }
    
    function 
get_nombre_corto()
    {
        
$nombre_objeto $this->datos['_info']['nombre'];
        if (
$this->tiene_consumidor())
            
$nombre $this->rol_en_consumidor();
        else
            
$nombre $nombre_objeto
        return 
$nombre;
    }
    
    function 
get_nombre_largo()
    {
        
$nombre_objeto $this->datos['_info']['nombre'];
        if (
$this->tiene_consumidor())
            
$nombre "$nombre_objeto<br>Rol: ".$this->rol_en_consumidor();
        else
            
$nombre $nombre_objeto
        return 
$nombre;
    }
    
    function 
get_nombre()
    {
        return 
$this->datos['_info']['nombre'];    
    }
    
    function 
get_iconos()
    {
        
$clase_corto substr($this->datos['_info']['clase'], 5);
        
$iconos = array();
        
$iconos[] = array(
                
'imagen' => toba_recurso::imagen_toba($this->datos['_info']['clase_icono'], false),
                
'ayuda' => "Componente [wiki:Referencia/Objetos/$clase_corto $clase_corto]"
            
);    
        return 
$iconos;
    }
    
    function 
get_utilerias()
    {
        
$iconos = array();
        if (isset(
$this->datos['_info']['subclase_archivo'])) {
            
// Administracion de la Subclase PHP}
            
if (admin_util::existe_archivo_subclase($this->datos['_info']['subclase_archivo'], $this->datos['_info']['punto_montaje'])) {
                
$iconos[] = $this->get_utileria_editor_abrir_php(array('proyecto'=>$this->proyecto'componente' =>$this->id ));
                
$iconos[] = $this->get_utileria_editor_ver_php(array('proyecto'=>$this->proyecto'componente' =>$this->id ));
            } else {
                
$iconos[] = $this->get_utileria_editor_ver_php(array('proyecto'=>$this->proyecto'componente' =>$this->id ), null'nucleo/php_inexistente.gif'false);
            }
        }
        
/*
        // Instanciador
        if ( $this instanceof toba_ei_formulario_info || $this instanceof toba_ei_cuadro_info ) {
            $iconos[] = array(
                'imagen' => toba_recurso::imagen_toba("objetos/instanciar.gif", false),
                'ayuda' => 'Previsualizar el componente',
                'vinculo' => toba::vinculador()->generar_solicitud( toba_editor::get_id(), 3316, $this->acceso_zona(),
                                                                        false, false, null, true, 'central')
            );
        }
        */
        //Editor
        
if (isset($this->datos['_info']['clase_editor_proyecto'])) {
            
$ayuda null;
            if (
in_array($this->datos['_info']['clase'], toba_info_editores::get_lista_tipo_componentes())) {
                
$metodo "get_pantallas_".$this->datos['_info']['clase'];
                
$pantallas call_user_func(array("toba_datos_editores"$metodo));
                
//-- Se incluye un vinculo a cada pantalla encontrada
                
$ayuda "<div class='editor-lista-vinculos'>";
                foreach (
$pantallas as $pantalla) {
                    
$img = ($pantalla['imagen'] != '') ? $pantalla['imagen'] : "objetos/fantasma.gif";
                    
$origen = ($pantalla['imagen'] != '') ? $pantalla['imagen_recurso_origen'] : 'apex';
                    
$vinculo $this->vinculo_editor(array('etapa' => $pantalla['identificador']));
                    
$tag_img = ($origen == 'apex') ? toba_recurso::imagen_toba($imgtrue) : toba_recurso::imagen_proyecto($imgtrue);
                    
$ayuda .= '<a href='.$vinculo.' target='.apex_frame_centro.
                                
" title='".$pantalla['etiqueta']."'>".
                                
$tag_img.
                                
'</a> ';
                }
                
$ayuda .= "</div>";
                
$ayuda str_replace("'""\\'"$ayuda);
            }
            
$iconos[] = array(
                
'imagen' => toba_recurso::imagen_toba("objetos/editar.gif"false),
                
'ayuda' => $ayuda,
                
'vinculo' => $this->vinculo_editor()
            );
        }
        return 
$iconos;    
    }

    function 
get_info_extra()
    {
        return 
$this->info_extra;    
    }
    
    function 
set_info_extra($info)
    {
        
$this->info_extra .= $info;    
    }
    
    function 
tiene_hijos_cargados()
    {
        return !
$this->es_hoja() && count($this->subelementos) != 0;
    }
    
    function 
contiene_objeto($id)
    {
        if (
$id == $this->get_id()) {
            return 
true;    
        }
        foreach (
$this->subelementos as $elem) {
            if (
$elem->contiene_objeto($id)) {
                return 
true;
            }
        }
    }
    
    
//---------------------------------------------------------------------
    // ACCESO al EDITOR PHP
    //---------------------------------------------------------------------

    
static function get_utileria_editor_parametros($id_componente$subcomponente=null)
    {
        
$parametros[apex_hilo_qs_zona] = $id_componente['proyecto'] . apex_qs_separador $id_componente['componente'];
        if(
$subcomponente) {
            
$parametros['subcomponente'] = $subcomponente;
        }
        return 
$parametros;        
    }
    
    static function 
get_utileria_editor_abrir_php($id_componente$subcomponente=null$icono='reflexion/abrir.gif')
    {
        
$parametros self::get_utileria_editor_parametros($id_componente$subcomponente);
        
$opciones = array('servicio' => 'ejecutar''zona' => true'celda_memoria' => 'ajax''menu' => true);
        
$vinculo toba::vinculador()->get_url(toba_editor::get_id(),"3463"$parametros$opciones);
        
$js "toba.comunicar_vinculo('$vinculo')";
        return array(
            
'imagen' => toba_recurso::imagen_proyecto($iconofalse),
            
'ayuda' => 'Abrir la [wiki:Referencia/Objetos/Extension extensión PHP] en el editor del escritorio.' .
                       
'<br>Ver [wiki:Referencia/AbrirPhp Configuración]',
            
'vinculo' => "javascript: $js;",
            
'js' => $js,
            
'target' => '',
            
'plegado' => false
        
);
    }

    static function 
get_utileria_editor_ver_php($id_componente$subcomponente=null$icono 'nucleo/php.gif'$plegado true)
    {
        
$parametros self::get_utileria_editor_parametros($id_componente$subcomponente);
        
$opciones = array('zona' => true'celda_memoria' => 'central''menu' => true);//validar' => false,
        
$vinculo toba::vinculador()->get_url(toba_editor::get_id(),"3463"$parametros$opciones);
        return array( 
'imagen' => toba_recurso::imagen_toba($iconofalse),
                
'ayuda' => 'Ver o editar la [wiki:Referencia/Objetos/Extension extensión PHP]',
                
'vinculo' => $vinculo,
                
'plegado' => $plegado
        
);        
    }

    
//---------------------------------------------------------------------    
    //-- METACLASE
    //---------------------------------------------------------------------

    /**
     * Retorna el nombre de la clase o la subclase asociada al componente
     */
    
function get_clase_nombre_final()
    {
        
$nombre $this->get_subclase_nombre();
        if (
$nombre == '') {
            
$nombre $this->get_clase_extendida_nombre();
        }
        return 
$nombre;
    }
    
    function 
get_clase_nombre()
    {
        return  
str_replace('objeto_''toba_'$this->datos['_info']['clase']);    // Se deja esta línea para que conserve el mismo comportamiento
    
}
    
    function 
get_clase_extendida_nombre()
    {
        
$id_proyecto toba_contexto_info::get_proyecto();
        
$id_instancia toba::instancia()->get_id();
        
$proyecto toba_modelo_catalogo::instanciacion()->get_proyecto($id_instancia$id_proyecto);
        
        if (
$proyecto->tiene_clases_proyecto_extendidas()) {
            
$replacement $id_proyecto.'_pers_';
        } elseif (
$proyecto->tiene_clases_toba_extendidas()) {
            
$replacement $id_proyecto.'_';
        } else {
            
$replacement 'toba_';
        }
        
$aux str_replace('objeto_''toba_'$this->datos['_info']['clase']);    // Se deja esta línea para que conserve el mismo comportamiento
        
return str_replace('toba_'$replacement$aux);        
    }

    function 
get_clase_archivo()
    {
        return 
$this->datos['_info']['clase_archivo'];    
    }
    
    function 
get_subclase_nombre()
    {
        return 
$this->datos['_info']['subclase'];
    }

    function 
get_subclase_archivo()
    {
        return 
$this->datos['_info']['subclase_archivo'];    
    }

    function 
get_punto_montaje()
    {
        return 
$this->datos['_info']['punto_montaje'];
    }

    function 
get_molde_vacio()
    {
        
$molde = new toba_codigo_clase$this->get_subclase_nombre(), $this->get_clase_extendida_nombre() );
        
//-- Ini 
        
$doc 'Se ejecuta al inicio de todos los request en donde participa el componente';
        
$metodo = new toba_codigo_metodo_php('ini', array(), array($doc));
        
$metodo->set_doc($doc);
        
$molde->agregar($metodo);        
        return 
$molde;
    }

    function 
get_nombre_instancia_abreviado()
    {
        return 
"componente";    
    }    
    
    function 
set_subclase($nombre$archivo$pm)
    {
        
$db toba_contexto_info::get_db();
        
$nombre $db->quote($nombre);
        
$archivo $db->quote($archivo);
        
$pm $db->quote($pm);
        
$id $db->quote($this->id);
        
$sql "
            UPDATE apex_objeto
            SET 
                subclase = 
$nombre,
                subclase_archivo = 
$archivo,
                punto_montaje = 
$pm
            WHERE
                    proyecto = '
{$this->proyecto}'
                AND    objeto = 
$id
        "
;
        
toba::logger()->debug($sql);
        
$db->ejecutar($sql);
    }
    
    
//---------------------------------------------------------------------    
    //-- Preguntas sobre EVENTOS
    //---------------------------------------------------------------------

    
function eventos_predefinidos()
    {
        return array();
    }    

    static function 
get_eventos_internos(toba_datos_relacion $dr)
    {
        
$eventos = array();
        return 
$eventos;
    }
}
?>

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