function get_molde_subclase() { $molde = $this->get_molde_vacio(); $molde->agregar_bloque($this->get_molde_eventos_js()); $molde->agregar_bloque($this->get_molde_eventos_sobre_fila()); // Cortes de control $molde->agregar(new toba_codigo_separador_php('Configuracion de cortes de control', 'Pantallas')); $datos_cortes = rs_ordenar_por_columna($this->datos['_info_cuadro_cortes'], 'orden'); foreach ($datos_cortes as $corte) { //-- Sumarizar cc $comentario_param = 'Reemplazar esta línea para cambiar el titulo de la sumarizacion!'; $comentario = 'Ventana que dado un conjunto de filas de un corte de control permite sumarizarlas de forma personalizada'; $extra = 'Reemplazar "propia" con algún otro identificador, para distinguir la sumarizacion y poder realizar una por método '; $parametros = '@param $filas Arreglo de filas tipo recordset'; $metodo = new toba_codigo_metodo_php('sumarizar_cc__' . $corte['identificador'] . '__propia', array('$filas'), array($comentario_param, $comentario, $extra, $parametros)); $metodo->set_doc($comentario); $molde->agregar($metodo); $molde->ultimo_elemento()->set_contenido('return 0;'); //-- Cabecera de corte $comentario = 'Ventana que permite determinar el titulo cabecera de un corte de control'; $metodo = new toba_codigo_metodo_php('html_cabecera_cc_contenido__' . $corte['identificador'], array('&$nodo'), array($comentario)); $metodo->set_doc($comentario); $molde->agregar($metodo); $molde->ultimo_elemento()->set_contenido('echo \'descripcion\';'); $molde->agregar(new toba_codigo_metodo_php('html_pie_cc_contenido__' . $corte['identificador'], array('&$nodo'))); $molde->ultimo_elemento()->set_contenido('echo \'descripcion\';'); $molde->agregar(new toba_codigo_metodo_php('html_pie_cc_cabecera__' . $corte['identificador'], array('&$nodo'))); $molde->ultimo_elemento()->set_contenido('return \'descripcion\';'); } return $molde; }
function get_molde_subclase() { $molde = new toba_codigo_clase($this->get_subclase_nombre(), $this->get_clase_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); //-- Pre Sinc $doc = "Ventana para incluír validaciones (disparar una excepcion) o disparar procesos previo a sincronizar"; $comentarios = array($doc, "La transacción con la bd ya fue iniciada (si es que hay)"); $metodo = new toba_codigo_metodo_php('evt__pre_sincronizacion', array(), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //-- Post Sinc $doc = "Ventana para incluír validaciones (disparar una excepcion) o disparar procesos posteriores a la sincronización"; $comentarios = array($doc, "La transacción con la bd aún no fue terminada (si es que hay)"); $metodo = new toba_codigo_metodo_php('evt__post_sincronizacion', array(), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //-- Pre Elim $doc = "Ventana para incluír validaciones (disparar una excepcion) o disparar procesos previo a la eliminación"; $comentarios = array($doc, "La transacción con la bd ya fue iniciada (si es que hay)"); $metodo = new toba_codigo_metodo_php('evt__pre_eliminacion', array(), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //-- Post Elim $doc = "Ventana para incluír validaciones (disparar una excepcion) o disparar procesos posteriores a la eliminación"; $comentarios = array($doc, "La transacción con la bd ya fue iniciada (si es que hay)"); $metodo = new toba_codigo_metodo_php('evt__post_eliminacion', array(), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); return $molde; }
function get_molde_subclase() { $molde = new toba_codigo_clase($this->get_subclase_nombre(), $this->get_clase_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); //-- Pre Sinc $doc = "Ventana para incluír validaciones (disparar una excepcion) o disparar procesos previo a sincronizar"; $comentarios = array($doc, "La transacción con la bd ya fue iniciada (si es que hay)"); $metodo = new toba_codigo_metodo_php('evt__pre_sincronizacion', array(), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //-- Post Sinc $doc = "Ventana para incluír validaciones (disparar una excepcion) o disparar procesos posteriores a la sincronización"; $comentarios = array($doc, "La transacción con la bd aún no fue terminada (si es que hay)"); $metodo = new toba_codigo_metodo_php('evt__post_sincronizacion', array(), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //------------------------------------- $doc = "Ventana de extensión previo a la inserción de un registro durante una sincronización con la base"; $comentarios = array($doc, '@param mixed $id_registro Clave interna en la estructura $this->datos'); $metodo = new toba_codigo_metodo_php('evt__pre_insert', array('$id_registro'), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //------------------------------------- $doc = "Ventana de extensión posterior a la inserción de un registro durante una sincronización con la base"; $comentarios = array($doc, '@param mixed $id_registro Clave interna en la estructura $this->datos'); $metodo = new toba_codigo_metodo_php('evt__post_insert', array('$id_registro'), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //------------------------------------- $doc = "Ventana de extensión previo a la actualización de un registro durante una sincronización con la base"; $comentarios = array($doc, '@param mixed $id_registro Clave interna en la estructura $this->datos'); $metodo = new toba_codigo_metodo_php('evt__pre_update', array('$id_registro'), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //------------------------------------- $doc = "Ventana de extensión posterior a la actualización de un registro durante una sincronización con la base"; $comentarios = array($doc, '@param mixed $id_registro Clave interna en la estructura $this->datos'); $metodo = new toba_codigo_metodo_php('evt__post_update', array('$id_registro'), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //------------------------------------- $doc = "Ventana de extensión previa al borrado de un registro durante una sincronización con la base"; $comentarios = array($doc, '@param mixed $id_registro Clave interna en la estructura $this->datos'); $metodo = new toba_codigo_metodo_php('evt__pre_delete', array('$id_registro'), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); //------------------------------------- $doc = "Ventana de extensión posterior al borrado de un registro durante una sincronización con la base"; $comentarios = array($doc, '@param mixed $id_registro Clave interna en la estructura $this->datos'); $metodo = new toba_codigo_metodo_php('evt__post_delete', array('$id_registro'), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); return $molde; }
function get_molde_subclase() { $molde = $this->get_molde_vacio(); //-- Validacion $doc = "Ventana para validaciones de toda la relación, se ejecuta justo antes de la sincronización"; $comentarios = array($doc, "El proceso puede ser abortado con un toba_error, el mensaje se muestra al usuario"); $metodo = new toba_codigo_metodo_php('evt__validar', array(), $comentarios); $metodo->set_doc($doc); $molde->agregar($metodo); return $molde; }
function get_molde_subclase($multilinea = false) { $molde = $this->get_molde_vacio(); // Redefinicion del LAYOUT $ayuda = "Permite modificar la forma en que se grafica el formulario, por defecto un ef sobre el otro"; $doc = array($ayuda); $metodo = new toba_codigo_metodo_php('generar_layout', array(), $doc); $metodo->set_doc($ayuda); $molde->agregar($metodo); $php = array(); foreach ($this->datos['_info_filtro_col'] as $ef => $info) { $php[] = '$this->generar_html_ef(\'' . $info['nombre'] . '\');'; } $molde->ultimo_elemento()->set_contenido($php); //--Javascript $molde->agregar_bloque($this->get_molde_eventos_js()); $molde->agregar(new toba_codigo_separador_js('Validacion general')); //Validar datos $doc = array("Validación general del formulario", "Retornar true/false para controlar la validación", "Usar notificacion.agregar() para mostrar mensajes al usuario"); $metodo = new toba_codigo_metodo_js('evt__validar_datos', array(), $doc); $metodo->set_doc("Validación general del formulario"); $molde->agregar($metodo); if (count($this->datos['_info_filtro_col'])) { //-- Procesamiento de EFs $doc = array("Método que se invoca al cambiar el valor del ef en el cliente", "Se dispara inicialmente al graficar la pantalla, enviando en true el primer parámetro"); $molde->agregar(new toba_codigo_separador_js('Procesamiento de EFs')); foreach ($this->datos['_info_filtro_col'] as $ef => $info) { $parametros = array('es_inicial'); if ($multilinea) { $parametros[] = 'fila'; } $metodo = new toba_codigo_metodo_js('evt__' . $info['nombre'] . '__procesar', $parametros, $doc); $metodo->set_doc("Método que se invoca al cambiar el valor del ef en el cliente"); $molde->agregar($metodo); } //-- Validacion de EFs $molde->agregar(new toba_codigo_separador_js('Validacion de EFs')); $doc = array("Validación puntual de un ef en el cliente", "Retornar true/false para controlar la validación", "Usar this.ef(id).set_error(mensaje) para mostrar un error contextual al campo"); foreach ($this->datos['_info_filtro_col'] as $ef => $info) { $parametros = $multilinea ? array('fila') : array(); $metodo = new toba_codigo_metodo_js('evt__' . $info['nombre'] . '__validar', $parametros, $doc); $metodo->set_doc("Validación puntual de un ef en el cliente"); $molde->agregar($metodo); } } return $molde; }
function get_molde_eventos_sobre_fila() { $bloque_molde[] = new toba_codigo_separador_php('Config. EVENTOS sobre fila'); foreach ($this->eventos_sobre_fila() as $evento => $info) { $ayuda = "Permite configurar el evento sobre una fila especifica para modificarlo o anularlo"; $doc = array($ayuda, "@param toba_evento_usuario \$evento Evento diparado", "@param array \$fila Clave de la fila"); $metodo = new toba_codigo_metodo_php('conf_evt__' . $evento, array('$evento', '$fila')); $metodo->set_doc($ayuda); $bloque_molde[] = $metodo; } return $bloque_molde; }
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_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; }
function get_molde_subclase() { $molde = $this->get_molde_vacio(); //************** Elementos PROPIOS ************* //-- Ini operacion $doc = array(); $doc[] = "Se ejecuta por única vez cuando el componente entra en la operación."; $doc[] = "Es útil por ejemplo para inicializar un conjunto de variables de sesion y evitar el chequeo continuo de las mismas"; $doc[] = "Hay situaciones en las que su ejecución no coincide con el instante inicial de operación:"; $doc[] = " - Si el componente es un ci dentro de otro ci, recién se ejecuta cuando entra a la operacion que no necesariamente es al inicio, si por ejemplo se encuentra en la 3er pantalla del ci principal."; $doc[] = " - Si se ejecuta una limpieza de memoria (comportamiento por defecto del evt__cancelar)"; $metodo = new toba_codigo_metodo_php('ini__operacion', array(), $doc); $metodo->set_doc('[api:Componentes/Eis/toba_ci#ini__operacion Ver doc]'); $molde->agregar($metodo); //-- Final $doc = "Ventana de extensión previa a la destrucción del componente, al final de la atención de los servicios"; $metodo = new toba_codigo_metodo_php('fin', array(), array($doc)); $metodo->set_doc($doc); $molde->agregar($metodo); $molde->agregar(new toba_codigo_separador_php('Configuraciones', 'Configuracion', 'grande')); //-- Conf $doc = array(); $doc[] = "Ventana que se ejecuta al inicio de la etapa de configuración. Antes de la configuración de la pantalla y sus componentes"; $doc[] = "Se utiliza por ejemplo para determinar qué pantalla mostrar, eliminar tabs, etc."; $metodo = new toba_codigo_metodo_php('conf', array(), $doc); $metodo->set_doc('[api:Componentes/Eis/toba_ci#conf Ver doc]'); $molde->agregar($metodo); //-- Configuracion de pantallas ----------- $datos_pantallas = rs_ordenar_por_columna($this->datos['_info_ci_me_pantalla'], 'orden'); foreach ($datos_pantallas as $pantalla) { $doc = array(); $doc[] = 'Ventana de extensión para configurar la pantalla. Se ejecuta previo a la configuración de los componentes pertenecientes a la pantalla '; $doc[] = 'por lo que es ideal por ejemplo para ocultarlos en base a una condición dinámica, ej. $pant->eliminar_dep("tal") '; $doc[] = '@param toba_ei_pantalla $pantalla'; $metodo = new toba_codigo_metodo_php('conf__' . $pantalla['identificador'], array('toba_ei_pantalla $pantalla'), $doc); $metodo->set_doc(implode("\n", $doc)); $molde->agregar($metodo); //Aca incluyo los metodos de entrada y salida de pantallas. $doc = array(); $doc[] = 'Ventana de extension para ejecutar controles antes de entrar a la pagina.'; $doc[] = 'Se ejecuta luego de lanzar los eventos del ci.'; $doc[] = 'Si se lanza una excepcion se evita el cambio de pantalla.'; $doc[] = '[wiki:Referencia/Objetos/ci#Controlandolaentradaylasalida Ver más]'; $nombre_metodo_entrada = 'evt__' . $pantalla['identificador'] . '__entrada'; $metodo = new toba_codigo_metodo_php($nombre_metodo_entrada, array(), $doc); $metodo->set_doc(implode("\n", $doc)); $molde->agregar($metodo); $doc = array(); $doc[] = 'Ventana de extension para ejecutar controles antes de salir de la pagina.'; $doc[] = 'Se ejecuta luego de lanzar los eventos del ci.'; $doc[] = 'Si se lanza una excepcion se evita el cambio de pantalla.'; $doc[] = '[wiki:Referencia/Objetos/ci#Controlandolaentradaylasalida Ver más]'; $nombre_metodo_salida = 'evt__' . $pantalla['identificador'] . '__salida'; $metodo = new toba_codigo_metodo_php($nombre_metodo_salida, array(), $doc); $metodo->set_doc(implode("\n", $doc)); $molde->agregar($metodo); } //-- Post Configurar $doc = "Ventana para insertar lógica de la configuración del ci y sus dependencias"; $metodo = new toba_codigo_metodo_php('post_configurar', array(), array($doc)); $metodo->set_doc($doc); $molde->agregar($metodo); //-- Eventos propios ---------------------- if (count($this->eventos_predefinidos()) > 0) { $molde->agregar(new toba_codigo_separador_php('Eventos', null, 'grande')); foreach ($this->eventos_predefinidos() as $evento => $info) { if ($info['info']['accion'] != 'V') { //No es Vinculo if ($evento == 'cancelar') { $doc = array("Originalmente este método limpia las variables y definiciones del componente, y en caso de exisitr un CN asociado ejecuta su cancelar. Para mantener este comportamiento llamar a parent::evt__cancelar"); } elseif ($evento == 'procesar') { $doc = array("Originalmente este método si existe un CN asociado ejecuta su procesar. Para mantener este comportamiento llamar a parent::evt__procesar"); } else { $doc = array("Atrapa la interacción del usuario a través del botón asociado. El método no recibe parámetros"); } $metodo = new toba_codigo_metodo_php('evt__' . $evento, array(), $doc); $metodo->set_doc(implode("\n", $doc)); $molde->agregar($metodo); } } } //-- Post Eventos $doc = "Ventana que se ejecuta una vez que todos los eventos se han disparado para este objeto"; $metodo = new toba_codigo_metodo_php('post_eventos', array(), array($doc)); $metodo->set_doc($doc); $molde->agregar($metodo); //**************** DEPENDENCIAS *************** if (count($this->subelementos) > 0) { foreach ($this->subelementos as $id => $elemento) { $es_ei = $elemento instanceof toba_ei_info && !$elemento instanceof toba_ci_info; $rol = $elemento->rol_en_consumidor(); if ($es_ei) { $molde->agregar(new toba_codigo_separador_php($rol, null, 'grande')); //Metodo de CONFIGURACION $tipo = $elemento->get_clase_nombre_final(); $nombre_instancia = $elemento->get_nombre_instancia_abreviado(); $metodo = new toba_codigo_metodo_php('conf__' . $rol, array($tipo . ' $' . $nombre_instancia), $elemento->get_comentario_carga()); $metodo->set_grupo($rol); $ei = get_class($elemento); $ei = substr($ei, 5, strlen($ei) - 10); $metodo->set_doc("Ventana para configurar al componente. Por lo general se le brindan datos a través del método <pre>set_datos(\$datos)</pre>. \n\t\t\t\t\t\t\t\t\t\t[wiki:Referencia/Objetos/{$ei}#Configuraci%C3%B3n Ver más]"); $molde->agregar($metodo); //Eventos predefinidos del elemento if (count($elemento->eventos_predefinidos()) > 0) { foreach ($elemento->eventos_predefinidos() as $evento => $info) { $metodo = new toba_codigo_metodo_php('evt__' . $rol . '__' . $evento, $info['parametros'], $info['comentarios']); $metodo->set_grupo($rol); $metodo->set_doc('Atrapa la interacción del usuario con el botón asociado a la dependencia. Recibe por parámetro los datos que acarrea el evento, por ejemplo si es un formulario los datos del mismo. [wiki:Referencia/Eventos#Listeners Ver más]'); $molde->agregar($metodo); //Si es evento sobre fila brindo la oportunidad de configurarlo (caso ML y Cuadro) if (isset($info['info']['sobre_fila']) && $info['info']['sobre_fila'] == 1) { $nombre = 'conf_evt__' . $rol . '__' . $evento; $parametros = array('toba_evento_usuario $evento', '$fila'); $doc = array(); $doc[] = 'Permite configurar el evento por fila.'; $doc[] = 'Útil para decidir si el evento debe estar disponible o no de acuerdo a los datos de la fila'; $doc[] = "[wiki:Referencia/Objetos/{$ei}#Filtradodeeventosporfila Ver más]"; //Agrego el metodo correspondiente para la configuracion del evento $metodo = new toba_codigo_metodo_php($nombre, $parametros, $doc); $metodo->set_doc(implode("\n", $doc)); $metodo->set_grupo($rol); $molde->agregar($metodo); } } } } } } //***************** JAVASCRIPT ***************** $molde->agregar_bloque($this->get_molde_eventos_js()); return $molde; }
function get_molde_subclase() { $molde = new toba_codigo_clase($this->get_subclase_nombre(), $this->get_clase_nombre()); $ayuda = "Permite modificar la forma en que se grafica la pantalla, por defecto un componente sobre el otro"; $comentarios = array($ayuda); $metodo = new toba_codigo_metodo_php('generar_layout', array(), $comentarios); $metodo->set_doc($ayuda); $molde->agregar($metodo); $php = array(); $existe_previo = 0; foreach ($this->get_lista_dependencias_asociadas() as $dep) { if ($existe_previo) { $php[] = "echo '<hr />';"; } $php[] = '$this->dep(\'' . $dep . '\')->generar_html();'; $existe_previo = 1; } $molde->ultimo_elemento()->set_contenido($php); return $molde; }