!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.72 GB of 61.93 GB (23.77%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


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

class toba_datos_tabla_info extends toba_componente_info
{
    static function 
get_tipo_abreviado()
    {
        return 
"Tabla";        
    }
    
    function 
get_nombre_instancia_abreviado()
    {
        return 
"dt";    
    }        

    
/**
    *    Retorna la metaclase correspondiente al AP del datos tabla
    */
    
function get_metaclase_subcomponente($subcomponente)
    {
        
$datos $this->datos['_info_estructura'];
        
$datos['objeto'] = $this->datos['_info']['objeto'];
        
$datos['proyecto'] = $this->datos['_info']['proyecto'];
        return new 
toba_ap_tabla_db_info($datos);
    }
    
    
/**
     * Duplica un objeto y sus dependencias recursivamente.
     * En el caso del datos tabla, si el proyecto/fuente no difiere no se clona, se reusa
     *
     * @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)
    {
        
$distinto false;
        
//-- Si difiere en el proyecto
        
if (isset($nuevos_datos['fuente_datos_proyecto']) && $nuevos_datos['fuente_datos_proyecto'] != $this->datos['_info']['fuente_proyecto']) {
            
$distinto true;
        }
        
//-- Si difiere en la fuente
        
if (isset($nuevos_datos['fuente_datos']) && $nuevos_datos['fuente_datos'] != $this->datos['_info']['fuente']) {
            
$distinto true;
        }
        
//Cambiar el punto de montaje no implica clonar, se tiene que hacer una personalizacion que cambie la subclase.
        
        
if ($distinto) {
            return 
parent::clonar($nuevos_datos$dir_subclases$con_transaccion);
        } else {
            
//Se retorna a si mismo, se reusa
            
$clave = array();
            
$clave['componente'] = $this->datos['_info']['objeto'];
            
$clave['proyecto'] = $this->datos['_info']['proyecto'];
            return 
$clave;            
        }
    }
    
    
//---------------------------------------------------------------------    
    //-- Recorrible como ARBOL
    //---------------------------------------------------------------------
    
    
function get_utilerias()
    {
        
//--- Mejora para el caso de que la query sea una unica
        
if (isset($this->datos['_info']['ap_punto_montaje'])) {
            
$this->datos['_info_estructura']['ap_punto_montaje'] = $this->datos['_info']['ap_punto_montaje'];
        }
        if (isset(
$this->datos['_info']['ap_clase'])) {
            
$this->datos['_info_estructura']['ap_clase'] = $this->datos['_info']['ap_clase'];
        }
        if (isset(
$this->datos['_info']['ap_archivo'])) {
            
$this->datos['_info_estructura']['ap_sub_clase_archivo'] = $this->datos['_info']['ap_archivo'];
        }        
        
        
$iconos = array();
        if (isset(
$this->datos['_info_estructura']['ap_sub_clase_archivo'])) {            
            if (
admin_util::existe_archivo_subclase($this->datos['_info_estructura']['ap_sub_clase_archivo'], $this->datos['_info_estructura']['ap_punto_montaje'])) {
                
$iconos[] = toba_componente_info::get_utileria_editor_abrir_php(array('proyecto'=>$this->proyecto'componente' =>$this->id ),
                                                                    
'ap',
                                                                    
'reflexion/abrir_ap.gif' );                
                
$iconos[] = toba_componente_info::get_utileria_editor_ver_php(array('proyecto'=>$this->proyecto'componente' =>$this->id ),
                                                                    
'ap',
                                                                    
'nucleo/php_ap.gif' );
            } else {
                
$iconos[] = toba_componente_info::get_utileria_editor_ver_php(array('proyecto'=>$this->proyecto'componente' =>$this->id ),
                                                                    
'ap',
                                                                    
'nucleo/php_ap_inexistente.gif',
                                                                    
false );
            }
        }
        return 
array_merge($iconosparent::get_utilerias());    
    }    

    
/**
     * La clonacion del DT puede implicar clonar su AP
     */
    
protected function clonar_subclase($dr$dir_subclases$proyecto_dest)
    {
        
parent::clonar_subclase($dr$dir_subclases$proyecto_dest);
        if (isset(
$this->datos['_info_estructura']['ap_sub_clase_archivo'])) {
            
$archivo $this->datos['_info_estructura']['ap_sub_clase_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('prop_basicas')->set_fila_columna_valor(0'ap_archivo'$nuevo_archivo);
             
$dr->tabla('prop_basicas')->set_fila_columna_valor(0'punto_montaje'$id_pm_destino);
             
            
//--- 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);
            }
        }
    }        
    
    
//---------------------------------------------------------------------    
    //-- Generacion de METADATOS para otros componentes
    //---------------------------------------------------------------------

    
private function is_col_fk($col) {
        foreach (
$this->datos['_info_fks'] as $fk) {
            if (
$fk['columna_ext'] == $col) {
                return 
true;
            }
        }
        return 
false;
    }

    
/**
    *    Exporta la definicion de una manera entendible para el datos_tabla de la tabla 
    *        donde se guardan los EFs del ei_formulario
    */
    
function exportar_datos_efs($incluir_pk=false)
    {
        
$datos = array();
        
$a=0;
        foreach(
$this->datos['_info_columnas'] as $columna){
            
// HACK: Evitamos que se carguen las columnas de las tablas extendidas
            // que son foreign keys para evitar repetición de columnas
            
if ($this->is_col_fk($columna['columna'])) {
                continue;
            }

            if( (!
$columna['pk']) || $incluir_pk) {
                
$datos[$a]['identificador'] = $columna['columna'];
                
$datos[$a]['columnas'] = $columna['columna'];
                
$datos[$a]['etiqueta'] = ucfirst(  str_replace("_"," ",$columna['columna']) );
                if(isset(
$columna['secuencia']) && $columna['secuencia'] != ''){
                    
$datos[$a]['elemento_formulario'] = 'ef_fijo';
                }else{
                    if(
$columna['no_nulo_db']) $datos[$a]['obligatorio'] = 1;
                    switch(
$columna['tipo']){
                        case 
'E':
                            
$datos[$a]['elemento_formulario'] = 'ef_editable_numero';
                            break;
                        case 
'N':
                            
$datos[$a]['elemento_formulario'] = 'ef_editable_numero';
                            break;
                        case 
'L':
                            
$datos[$a]['elemento_formulario'] = 'ef_checkbox';
                            break;
                        case 
'F':
                            
$datos[$a]['elemento_formulario'] = 'ef_editable_fecha';
                            break;
                        case 
'B':
                            
$datos[$a]['elemento_formulario'] = 'ef_upload';
                            break;
                        case 
'X':
                            
$datos[$a]['elemento_formulario'] = 'ef_editable_textarea';
                            break;                            
                        default:
                            
$datos[$a]['elemento_formulario'] = 'ef_editable';
                    }
                }
                
// Si es editable, pongo el tamaño de campos
                
if( $datos[$a]['elemento_formulario'] == 'ef_editable' ) {
                    if(
$columna['largo'] > 0) {
                        
$datos[$a]['edit_maximo'] = $columna['largo'];
                        if(
$columna['largo'] < 80) {
                            
$datos[$a]['edit_tamano'] = $columna['largo'];
                        }else{
                            
$datos[$a]['edit_tamano'] = 80;
                        }
                    }
                }
                
$datos[$a]['orden'] = $a+100;
                
$a++;            
            }
        }
        return 
$datos;
    }

    
/**
    *    Exporta la definicion de una manera entendible para el datos_tabla de la tabla 
    *        donde se guardan las columnas del ei_cuadro
    */
    
function exportar_datos_columnas($incluir_pk=false)
    {
        
$datos = array();
        
$a=0;
        foreach(
$this->datos['_info_columnas'] as $columna){
            if( ((!
$columna['pk']) || $incluir_pk) && $columna['secuencia'] == '' ){
                
$datos[$a]['clave'] = $columna['columna'];
                
$datos[$a]['titulo'] = ucfirst(  str_replace("_"," ",$columna['columna']) );
                switch(
$columna['tipo']){
                    case 
'E':
                        
$datos[$a]['estilo'] = '0';//numero-1
                        
break;
                    case 
'N':
                        
$datos[$a]['estilo'] = '0';
                        break;
                    default:
                        
$datos[$a]['estilo'] = '4';    //texto-1
                
}
                
$datos[$a]['orden'] = $a;
                
$a++;            
            }
        }
        return 
$datos;
    }

    
/**
     *  Obtiene la informacion de metadatos de las columnas del dt, puede filtrar por
     * condiciones particulares
     * @param array $id Arreglo asociativo de condiciones ('nombre' => 'valor')
     * @return array
     */
    
function get_info_columnas($id = array())
    {
        
$resultado $this->datos['_info_columnas'];
        if (! empty(
$id)){
            
$cond array_keys($id);
            foreach(
$resultado as $klave => $columna){
                
$valido true;
                foreach(
$cond as $col){
                    
$valido $valido && ($columna[$col] == $id[$col]);
                }
                if (! 
$valido){
                    unset(
$resultado[$klave]);
                }
            }
//fe
        
}
        return 
$resultado;
    }


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

    
function get_molde_subclase()
    {
        
$molde $this->get_molde_vacio();

        
//-- Validar Ingreso
        
$doc "Ventana de validacion que se invoca cuando se crea o modifica una fila en memoria. Lanzar una excepcion en caso de error";
        
$comentarios = array(
            
$doc,
            
'@param array $fila Datos de la fila',
            
'@param mixed $id Id. interno de la fila, si tiene (en el caso modificacion de la fila)'            
        
);
        
$metodo = new toba_codigo_metodo_php('evt__validar_ingreso', array('$fila','$id=null'), $comentarios);
        
$metodo->set_doc($doc);
        
$molde->agregar($metodo);
        
        
//-- Validar Foña
        
$doc "Ventana de validacion que se invoca antes de sincronizar una fila con la base";
        
$comentarios = array(
            
$doc,
            
"El proceso puede ser abortado con un toba_error, el mensaje se muestra al usuario",
            
'@param array $fila Asociativo clave-valor de la fila a validar'
        
);
        
$metodo = new toba_codigo_metodo_php('evt__validar_fila', array('$fila'), $comentarios);
        
$metodo->set_doc($doc);
        
$molde->agregar($metodo);        
        
        return 
$molde;
    }
}
?>

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