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


Viewing file:     toba_solicitud_web.php (18.45 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
 * Solicitud pensada para contener el ciclo request-response http
 * La etapa de request se la denomina de 'eventos' 
 * La etapa de response se la denomina de 'servicios'
 * 
 * @package Centrales
 * 
 * @todo Al servicio pdf le falta pedir por parametro que metodo llamar para construirlo
 */
class toba_solicitud_web extends toba_solicitud
{
    protected 
$zona;            //Objeto que representa una zona que vincula varios items
    
protected $cis;
    protected 
$cn;
    protected 
$tipo_pagina;
    protected 
$autocomplete true;
    
    function 
__construct($info)
    {
        
$this->info $info;
        if (
toba_editor::activado()) {
            
toba_editor::set_item_solicitado(toba::memoria()->get_item_solicitado());
        }
        
parent::__construct(toba::memoria()->get_item_solicitado(), toba::usuario()->get_id());
    }

    
/**
     * Crea la zona, carga los componentes, procesa los eventos y los servicios
     */
    
function procesar()
    {        
        
$en_mantenimiento = (toba::proyecto()->get_parametro('proyecto''modo_mantenimiento'false) == 1) ;
        if (
$en_mantenimiento) {
            
$this->pre_proceso_servicio();    //Saca css y no queda alert pelado
            
$msg toba::proyecto()->get_parametro('proyecto''mantenimiento_mensaje');
            
toba::notificacion()->info($msg);
            
toba::notificacion()->mostrar();
        } else {
            try {
                
$this->crear_zona();
                
$retrasar_headers = ($this->info['basica']['retrasar_headers']);
                
//Chequeo si necesito enviar la clase para google analytics (necesito ponerlo aca para que salga como basico)
                //La otra forma es agregarlo a la generacion de consumos globales al medio de la generacion de HTML
                
if ($this->hacer_seguimiento() && ! $this->es_item_login()) {
                    
toba_js::agregar_consumos_basicos(array('basicos/google_analytics'));
                }
                
                
// Si la pagina retrasa el envio de headers, no mando los pre_servicios ahora
                
if (! $retrasar_headers) {
                    
$this->pre_proceso_servicio();
                }
                
$this->cargar_objetos();
                
toba::cronometro()->marcar('Procesando Eventos');
                
$this->procesar_eventos();
                if (
$retrasar_headers) {
                    
$this->pre_proceso_servicio();
                }
                
toba::cronometro()->marcar('Procesando Servicio');
                
$this->procesar_servicios();
            }catch(
toba_error $e) {
                
toba::logger()->error($e'toba');
                
$mensaje_debug null;
                if (
toba::logger()->modo_debug()) {
                    
$mensaje_debug $e->get_mensaje_log();
                }                
                
toba::notificacion()->error($e->get_mensaje(), $mensaje_debug);
                
toba::notificacion()->mostrar();
            }
        }
    }
    
    
/**
     * Permite que el servicio produzca alguna salida antes de los eventos, para optimizaciones
     */
    
protected function pre_proceso_servicio()
    {
        
$servicio toba::memoria()->get_servicio_solicitado();
        
$callback "servicio_pre__$servicio";
        if (
method_exists($this$callback)) {
            
$this->$callback();
        }
    }
    
    
/**
     * Instancia los cis/cns de primer nivel asignados al item y los relaciona
     */
    
protected function cargar_objetos()
    {
        
        
toba::logger()->seccion("Iniciando componentes..."'toba');
        
$this->cis = array();        
        if (
count($this->info['objetos']) > 0) {
            if (
toba::proyecto()->get_parametro('navegacion_ajax')) {
                
toba_ci::set_navegacion_ajax(true);
            }
            
$i 0;
            
//Construye los objetos ci y el cn
            
foreach ($this->info['objetos'] as $objeto) {
                if (
$objeto['clase'] != 'toba_cn') {
                    
$this->cis[] = $this->cargar_objeto($objeto['clase'],$i); 
                    
$i++;
                } else {
                    
$this->cn $this->cargar_objeto($objeto['clase'],0); 
                    
$this->objetos[$this->cn]->inicializar();
                }
            }
            
//Asigna el cn a los cis            
            
if (isset($this->cn)) {            
                foreach (
$this->cis as $ci) {
                    
$this->objetos[$ci]->asignar_controlador_negocio$this->objetos[$this->cn] );
                } 
            }
        } else { 
            if (
$this->info['basica']['item_act_accion_script'] == '') {
                throw new 
toba_error_def("Necesita asociar un objeto CI al ítem.");
            }
        }
    }

    
/**
     * Inicializa los componentes y dispara la atención de eventos en forma recursiva
     */
    
protected function procesar_eventos()
    {
        
//--Antes de procesar los eventos toda entrada UTF-8 debe ser pasada a ISO88591
        
if (isset($_SERVER['CONTENT_TYPE']) && strpos($_SERVER['CONTENT_TYPE'], 'UTF-8') !== false) {
            
$_POST array_a_latin1($_POST);
        }
        
//-- Se procesan los eventos generados en el pedido anterior
        
foreach ($this->cis as $ci) {
            
$this->objetos[$ci]->inicializar();
            try {
                
toba::logger()->seccion("Procesando eventos..."'toba');
                
$this->objetos[$ci]->disparar_eventos();
            } catch (
toba_error $e) {
                
toba::logger()->error($e'toba');
                
$mensaje_debug null;
                if (
toba::logger()->modo_debug()) {
                    
$mensaje_debug $e->get_mensaje_log();
                }                
                
toba::notificacion()->error($e->get_mensaje(), $mensaje_debug);
                
toba::notificacion()->set_titulo($e->get_titulo_ventana());
            }
        }
    }
    
    
/**
     * Se configuran los componentes y se atiende el servicio en forma recursiva
     */
    
protected function procesar_servicios()
    {
        
toba::logger()->seccion("Configurando dependencias para responder al servicio..."'toba');
        
//Se fuerza a que los Cis carguen sus dependencias (por si alguna no se cargo para atender ls eventos) y se configuren
        
foreach ($this->cis as $ci) {
            
$this->objetos[$ci]->pre_configurar();
            
//--- Lugar para poner algun callback a nivel operacion?
            
$this->objetos[$ci]->post_configurar();
        }
        
//--- Si existe la zona se brinda la posibilidad de configurarla
        
if ($this->hay_zona() && toba::zona()->cargada()) {
                
toba::zona()->conf();
        }        
        
//--- Se determina el destino del servicio
        
$objetos_destino toba::memoria()->get_id_objetos_destino();
        if (!isset(
$objetos_destino)) {
            
//En caso que el servicio no especifique destino, se asume que son todos los cis asociados al item
            
$destino = array();
            foreach (
$this->cis as $ci) {
                
$destino[] = $this->objetos[$ci];    
            }
        } else {
            
//Se especifico un destino, se buscan los objetos referenciados
            
$destino = array();
            foreach (
$objetos_destino as $obj) {
                
$destino[] = toba_constructor::buscar_runtime(array('proyecto' => $obj[0],
                                                                
'componente' => $obj[1]));
            }
        }

        
$servicio toba::memoria()->get_servicio_solicitado();
        
$callback "servicio__$servicio";
        
toba::logger()->seccion("Respondiendo al $callback..."'toba');        
        if (
method_exists($this$callback)) {
            
$this->$callback($destino);
        } elseif (
count($destino) == && method_exists(current($destino), $callback)) {
            
//-- Se pide un servicio desconocido para la solicitud, pero conocido para el objeto destino
            
$obj current($destino);
            
$obj->$callback();
        } else {
            throw new 
toba_error_seguridad("El servicio $servicio no está soportado");            
        }
    }

    
//---------------------------------------------------------------
    //-------------------------- SERVICIOS --------------------------
    //---------------------------------------------------------------

    /**
     * Optimización del servicio de generar html para enviar algun contenido al browser
     */
    
protected function servicio_pre__generar_html()
    {
        
$this->tipo_pagina()->encabezado();
    }
    
    
    protected function 
generar_html_botonera_sup($objetos)
    {
        
//--- Se incluyen botones en la botonera de la operacion
        
foreach ($objetos as $obj) {    
            if (
is_a($obj'toba_ci')) {
                if (
$obj->es_botonera_en_barra_item()) {
                    
$obj->pantalla()->generar_botones('enc-botonera');                    
                }
            }
            
$this->generar_html_botonera_sup($obj->get_dependencias());
        }        
    }
    
    
/**
     * Servicio común de generación html
     */
    
protected function servicio__generar_html($objetos)
    {
        
//--- Parte superior de la zona
        
if (toba::solicitud()->hay_zona() && toba::zona()->cargada()) {
            
toba::zona()->generar_html_barra_superior();
        }
        
//--- Se incluyen botones en la botonera de la operacion
        
$this->generar_html_botonera_sup($objetos);
        echo 
"</div>";//---- Se finaliza aqui el div de la barra superior
        
echo '<div style="clear:both;"></div>';
        echo 
"</div>"//-- Se finaliza aqui el div del encabezado, por la optimizacion del pre-servicio..
        
$this->tipo_pagina()->pre_contenido();
        
        
//--- Abre el formulario
        
$accion $this->info['basica']['item_act_accion_script'];
        if (
$accion == '') {
            
$extra "onsubmit='return false;'";
            if (! 
$this->autocomplete) {
                
$extra .= " autocomplete='off'";
            }
            echo 
toba_form::abrir("formulario_toba"toba::vinculador()->get_url(), $extra);
            
            
//HTML
            
foreach ($objetos as $obj) {
                
//-- Librerias JS necesarias
                
toba_js::cargar_consumos_globales($obj->get_consumo_javascript());
                
//-- HTML propio del objeto
                
$obj->generar_html();
            }
            
            
//Javascript
            
echo toba_js::abrir();
            try {
                
toba_js::cargar_definiciones_runtime();
                foreach (
$objetos as $obj) {
                    
$objeto_js $obj->generar_js();
                    echo 
"\n$objeto_js.iniciar();\n";
                }
            } catch (
toba_error $e) {
                
toba::logger()->error($e'toba');
                
$mensaje_debug null;
                if (
toba::logger()->modo_debug()) {
                    
$mensaje_debug $e->get_mensaje_log();
                }                        
                
toba::notificacion()->error($e->get_mensaje(), $mensaje_debug);
            }
            echo 
toba_js::cerrar();        
                
            
//--- Fin del form y parte inferior del tipo de página
            
echo toba_form::cerrar();
        } else {
            echo 
toba_js::abrir();
            
toba_js::cargar_definiciones_runtime();
            echo 
toba_js::cerrar();
            include(
$accion);    
        }

        
$this->tipo_pagina()->post_contenido();
        
// Carga de componentes JS genericos
        
echo toba_js::abrir();
        
toba::vinculador()->generar_js();
        
toba::notificacion()->mostrar(false);
        
toba::acciones_js()->generar_js();
        
$this->generar_analizador_estadistico();
        echo 
toba_js::cerrar();
        
        
//--- Parte inferior de la zona
        
if ($this->hay_zona() &&  $this->zona->cargada()) {
            
$this->zona->generar_html_barra_inferior();
        }
           
$this->tipo_pagina()->pie();
    }
    
    
/**
     * Genera una salida en formato pdf
     */
    
    
protected function servicio__vista_pdf$objetos )
    {
        
$salida = new toba_vista_pdf();
        
$salida->asignar_objetos$objetos );
        
$salida->generar_salida();
        
$salida->enviar_archivo();
    }
    
    protected function 
servicio__vista_xml$objetos )
    {
        
$salida = new toba_vista_xml();
        
$salida->asignar_objetos$objetos );
        
$salida->generar_salida();
        
$salida->enviar_archivo();
    }

    protected function 
servicio__vista_xslfo$objetos )
    {
        
$salida = new toba_vista_xslfo();
        
$salida->asignar_objetos$objetos );
        
$salida->generar_salida();
        
$salida->enviar_archivo();
    }
    
    protected function 
servicio__vista_jasperreports$objetos )
    {
        
$salida = new toba_vista_jasperreports();        
        
$salida->asignar_objetos($objetos);
        
$salida->generar_salida();
        
$salida->enviar_archivo();
    }    
    
    protected function 
servicio__vista_excel($objetos)
    {
        
$salida = new toba_vista_excel();
        
$salida->asignar_objetos$objetos );
        
$salida->generar_salida();
        
$salida->enviar_archivo();
    }
    

    
/**
     * Genera una salida html pensada para impresión
     */
    
protected function servicio__vista_toba_impr_html$objetos )
    {
        
$pm toba::proyecto()->get_parametro('pm_impresion');
        
$clase toba::proyecto()->get_parametro('salida_impr_html_c');
        
$archivo toba::proyecto()->get_parametro('salida_impr_html_a');
        if ( 
$clase && $archivo ) {
            
//El proyecto posee un objeto de impresion HTML personalizado
            
$punto toba::puntos_montaje()->get_por_id($pm);
            
$path  $punto->get_path_absoluto().'/'.$archivo;
            require_once(
$path);
            
$salida = new $clase();
        } else {
            
$salida = new toba_impr_html();
        }
        
$salida->asignar_objetos$objetos );
        
$salida->generar_salida();
    }

    
/**
     * Retorna el html y js localizado de un componente y sus dependencias.
     * Pensado como respuesta a una solicitud AJAX
     */
    
protected function servicio__html_parcial($objetos)
    {
        echo 
"[--toba--]";        
        
//-- Se reenvia el encabezado
        
$this->tipo_pagina()->barra_superior();
        echo 
"</div>";

        
//--- Parte superior de la zona
        
if (toba::solicitud()->hay_zona() && toba::zona()->cargada()) {
            
toba::zona()->generar_html_barra_superior();
        }
        
//--- Se incluyen botones en la botonera de la operacion
        
$this->generar_html_botonera_sup($objetos);        
        echo 
"[--toba--]";
        
$ok true;
        try {
            
//--- Se envia el HTML
            
foreach ($objetos as $objeto) {
                
$objeto->generar_html();
            }    
        } catch(
toba_error $e) {
            
$ok false;
            
toba::logger()->error($e'toba');
            
$mensaje $e->get_mensaje();
            
$mensaje_debug null;
            if (
toba::logger()->modo_debug()) {
                
$mensaje_debug $e->get_mensaje_log();
            }
            
toba::notificacion()->error($mensaje$mensaje_debug);
        }

        
        echo 
"[--toba--]";
        
        
//-- Se envia info de debug
        
if ( toba_editor::modo_prueba() ) {
            
$item toba::solicitud()->get_datos_item('item');
            
$accion toba::solicitud()->get_datos_item('item_act_accion_script');
            
toba_editor::generar_zona_vinculos_item($item$accionfalse);
        }        
        echo 
"[--toba--]";

        
//--- Se envian los consumos js        
        
$consumos = array();
        foreach (
$objetos as $objeto) {
            
$consumos array_merge($consumos$objeto->get_consumo_javascript());
        }
        echo 
"toba.incluir(".toba_js::arreglo($consumosfalse).");\n"
        echo 
"[--toba--]";
                
        
//--- Se envia el javascript
        //Se actualiza el vinculo del form
        
$autovinculo toba::vinculador()->get_url();
        echo 
"document.formulario_toba.action='$autovinculo'\n";
        
toba::vinculador()->generar_js();
        
toba_js::cargar_definiciones_runtime();
        if (
$ok) {
            try {
                foreach (
$objetos as $objeto) {
                    
//$objeto->servicio__html_parcial();
                    
$objeto_js $objeto->generar_js();
                    echo 
"\nwindow.$objeto_js.iniciar();\n";
                }
            } catch (
toba_error $e) {
                
toba::logger()->error($e'toba');
                
$mensaje_debug null;
                if (
toba::logger()->modo_debug()) {
                    
$mensaje_debug $e->get_mensaje_log();
                }                
                
toba::notificacion()->error($e->get_mensaje(), $mensaje_debug);
            }
        }
        
toba::notificacion()->mostrar(false);
        
toba::acciones_js()->generar_js();
        
$this->generar_analizador_estadistico();
    }
    
    
/**
     * Responde los valores en cascadas de un formulario específico
     */
    
protected function servicio__cascadas_efs($objetos)
    {
        
toba::memoria()->desactivar_reciclado();
        try {
            if (
count($objetos) != 1) {
                
$actual count($objetos);
                throw new 
toba_error_def("Las cascadas sólo admiten un objeto destino (actualmente: $actual)");
            }
            
$objetos[0]->servicio__cascadas_efs();
        } catch(
toba_error $e) {
            
toba::logger()->error($e'toba');
            
$mensaje_debug null;
            if (
toba::logger()->modo_debug()) {
                
$mensaje_debug $e->get_mensaje_log();
            }                
            
toba::notificacion()->error($e->get_mensaje(), $mensaje_debug);
        }
    }
        
    
/**
     * Servicio genérico de acceso a objetos a través de parámetros
     */
    
protected function servicio__ejecutar($objetos)
    {
        foreach (
$objetos as $objeto) {
            
$objeto->servicio__ejecutar();
        }
    }
    
    
    protected function 
servicio__ajax($objetos)
    {
        
toba::memoria()->desactivar_reciclado();
        try {
            if (
count($objetos) != 1) {
                
$actual count($objetos);
                throw new 
toba_error_def("La invocacion AJAX sólo admite un objeto destino (actualmente: $actual)");
            }
            
$objetos[0]->servicio__ajax();
        } catch(
toba_error $e) {
            
toba::logger()->error($e'toba');
            
$mensaje_debug null;
            if (
toba::logger()->modo_debug()) {
                
$mensaje_debug $e->get_mensaje_log();
            }                
            
toba::notificacion()->error($e->get_mensaje(), $mensaje_debug);
        }
    }
    

    function 
registrar()
    {
        
parent::registrar();
        
$id_sesion toba::manejador_sesiones()->get_id_sesion();        
        if(
$this->registrar_db && isset($id_sesion)){
            
toba::instancia()->registrar_solicitud_browser(    $this->info['basica']['item_proyecto'], 
                                                            
$this->id
                                                            
toba::proyecto()->get_id(),
                                                            
toba::manejador_sesiones()->get_id_sesion(),
                                                            
$_SERVER['REMOTE_ADDR']);
        }
     }
     
     
     
/**
      * Indica si la operacion actual permite auto 
      */
     
function set_autocomplete($set)
     {
         
$this->autocomplete $set;
     }

    
/**
     *@private
     */
    
function hacer_seguimiento()
    {
        
$cod_ga toba::proyecto()->get_parametro('codigo_ga_tracker');
        
$hacer_seguimiento =  (isset($cod_ga) && trim($cod_ga) != '') ;
        return 
$hacer_seguimiento;
    }

    
/**
     *@private
     * @return <type>
     */
    
function es_item_login()
    {
        
$es_login = (toba::proyecto()->get_parametro('item_pre_sesion') == $this->item[1]);
        return 
$es_login;
    }
    
    
/**
     * @private
     */
    
function generar_analizador_estadistico()
    {
        
$cod_ga toba::proyecto()->get_parametro('codigo_ga_tracker');
        if (isset(
$cod_ga) && trim($cod_ga) != '') {        //No llamo a la funcion xq ya tengo el valor aca
            
if (! $this->es_item_login()) {
                echo 
"estadista.set_codigo('$cod_ga'); \n";        
                echo 
"estadista.iniciar(); \n";
                echo 
"estadista.add_operacion('{$this->item[1]}'); \n";
                echo 
"estadista.add_titulo('"$this->get_datos_item('item_nombre')."'); \n";
                
$ventana toba::proyecto()->get_parametro('sesion_tiempo_no_interac_min');
                if (
$ventana != 0) {
                    
$ventana *= 60//$ventana esta en minutos y necesito segundos
                    
echo "estadistica.set_timeout('$ventana'); \n";
                }
                echo 
"estadista.trace()";
            } else { 
//Es item de login
                //Tengo que cerrar el tag js que viene abierto de antes
                
echo "</script><script type=\"text/javascript\">"            
                
."var gaJsHost = ((\"https:\" == document.location.protocol) ? \"https://ssl.\" : \"http://www.\");"
                
."document.write(unescape(\"%3Cscript src='\" + gaJsHost + \"google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E\"));"
                
."</script>"
                
."<script type=\"text/javascript\">"
                
."try {"
                
."var pageTracker = _gat._getTracker(\"$cod_ga\");"
                
."pageTracker._trackPageview();"
                
."} catch(err) {}</script><script type=\"text/javascript\">";
            }
        }
    }

    
//----------------------------------------------------------
    //---------------------- TIPO de PAGINA --------------------
    //----------------------------------------------------------

    /**
     * @return toba_tp_normal
     */
    
function tipo_pagina()
    {
        if (! isset(
$this->tipo_pagina)) {
            
//Carga el TP a demanda
            
if (!class_exists($this->info['basica']['tipo_pagina_clase'])){
                if (
$this->info['basica']['tipo_pagina_archivo']) {
                    
$punto toba::puntos_montaje()->get_por_id($this->info['basica']['punto_montaje']);
                    
$path  $punto->get_path_absoluto().'/'.$this->info['basica']['tipo_pagina_archivo'];
                    require_once(
$path);
                }
            }
            
$this->tipo_pagina = new $this->info['basica']['tipo_pagina_clase']();
        }
        return 
$this->tipo_pagina;
    }
    
    
//----------------------------------------------------------------
    //-- Consumo de solicitudes desde los casos de testeo
    //----------------------------------------------------------------
    
    
function inicializacion_pasiva()
    {
        
$this->crear_zona();            
        
$this->cargar_objetos();
    }

    function 
cn()
    {
        return 
$this->objetos[$this->cn];    
    }
    
    function 
ci()
    {
        return 
$this->objetos[$this->cis[0]];
    }

}
?>

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