reporte_odt
), en
las ubicaciones que están disponibles para todos los
tipos de página.antes_accion
.FormFileUpload::cancelar()
.
También se agregan los métodos
FormFileUpload::fueCancelado()
y
FormFileUpload::motivoCancelado()
(upload.inc.php).Upload::rutaAbsolutaUpload()
,
FormFileUpload::tamanio()
y
FormFileUpload::tipo()
(upload.inc.php).Javascript::construirLista()
,
Javascript::construirObjeto()
y
Javascript::construirArray()
:
$claves_como_strings = false
(javascript.inc.php).Se agrega funcionalidad en el cliente, opcional, para prevenir el envío múltiple de formularios.
/aplicacion/generacion/formularios/evitar-envio-multiple
./formulario/evitar-envio-multiple
.
Tiene mayor prioridad que la opción global en
aplicacion.xml.Esta funcionalidad se puede habilitar globalmente usando
aplicacion.xml:/aplicacion/generacion/formularios/evitar-envio-multiple/@habilitar='true'
y deshabilitar en formularios individuales con
{entidad}_formulario.xml:/formulario/evitar-envio-multiple/@habilitar='false'
,
o viceversa.
Mensaje::porTipo()
,
Mensaje::error()
,
Mensaje::alerta()
,
Mensaje::notificacion()
,
Mensaje::info()
,
Mensaje::generico()
:
$registrar = true
(mensaje.inc.php), para controlar
si se debe registrar el mensaje a través del Auditor.inclusion_inicio_head
e
inclusion_fin_head
.
Permiten incluir contenido personalizado después de la apertura
y antes del cierre, respectivamente, del elemento head
en todas las páginas HTML generadas.
Advertencia de compatibilidad:
Hasta el momento, si una aplicación generada contenía
un archivo con nombre head.inc.php
en su directorio raíz, éste se incluía
antes de cerrar el elemento head
. Esta funcionalidad
(no documentada) de inclusión implícita quedó
reemplazada por la definición explícita de
inclusion_fin_head
; por lo tanto, para mantener
el comportamiento existente en las aplicaciones que estuvieran
utilizando este archivo, se deberá definir
inclusion_fin_head
con valor
'head.inc.php'
.
/listado/columnas/*/@clase-expr
;
complementa al ya existente /listado/columnas/*/@clase
.
/listado/columnas/*/@clase
,
pero sólo se estaba aplicando en columnas regulares
(columnas/columna
) de listados normales; no se tenía
en cuenta en listados de tipo seleccion
ni
seleccion_m
, ni en columnas/acciones
,
columnas/checkbox
ni columnas/combo
.
Ahora sí se aplica en todos los lugares mencionados.Para evitar posibles problemas de compatibilidad en aplicaciones existentes, el comportamiento predeterminado sigue siendo no procesar XInclude en los listados asociados; para hacerlo, es necesario habilitarlo explícitamente, usando uno de los siguientes atributos:
/aplicacion/generacion/formularios/@procesar-xinclude-documentos-relacionados = "true"
en aplicacion.xml.campo/entidad/@procesar-xinclude = "true"
en *_formulario.xml.XgapXml::loadDocumentFromFile()
(xml.inc.php).
Componentes::clasesNavegador()
(componentes.inc.php)./listado/configuracion/paginador/@filas-por-pagina
.Conexion::expresionComparacionValorEntre()
(conexion.inc.php).buscador/personalizado-simple/separador
.texto
,
calendario
, combo
y combobd
:
buscador/personalizado-simple//{texto|calendario|combo|combobd}/@etiqueta-pos
.buscador/personalizado-simple//*/@es-param-condicion-consulta
.Auditor
(auditor.inc.php):
Auditor::log()
:
$en_error
.Auditor::EN_ERROR_*
.Formateo::textoTipoErrorPhp()
,
Formateo::errorPhp()
(formateo.inc.php)./aplicacion/generacion/@copiar-paginas-predefinidas
.Request::hostYPuerto()
(request.inc.php).Mensaje::porTipo()
(mensaje.inc.php).Form::combo_bd_sin_hidden
y
Form::combo_bd
:
$agregar_opcion_vacia
(form.inc.php).configuracion/acciones/accion/condicion/@efecto
.Para que se tengan en cuenta los valores mencionados, debe estar
definida la constante PHP XGAP_COMANDO_GENERACION_PDF
(ver item previo).
XGAP_COMANDO_GENERACION_PDF
y su valor
debe ser el comando a ejecutar.
Esta nueva funcionalidad está definida en el código
de salida predeterminado, es decir que no se aplica en reportes que usan
salida personalizada (/odt/configuracion/salida
).
formato_consultas_log
.
Indica el formato en que se deben guardar las consultas a la base
de datos en el log de la aplicación. Si no se especifica o
se usa el valor 'mantener', se mantiene el comportamiento previo,
que es no aplicar ningún formato./odt/configuracion/template/xslt-adicional
./odt/configuracion/reporte/meta
.XgapODFXSLTProcessorExt
(odf-xslt-ext.inc.php).configuracion/imprimibles/imprimir/@maximo-filas-permitidas
.Componentes::controlImprimir()
:
$tip
(componentes.inc.php)./aplicacion/generacion/expresiones-embebidas/@habilitar = 'true'
):
carpeta/@nombre
,
carpeta/@roles
,
carpeta/@id
,
carpeta/@tip
,
carpeta/@clase
,
item/@nombre
,
item/@roles
,
item/@id
,
item/@url
,
item/@tip
,
item/@clase
,
separador/@roles
.item/@target
y
item/@usar-seguridad
./aplicacion/generacion/expresiones-embebidas
(aplicacion.xml).Flash::descartarActual()
y
Flash::descartarSiguiente()
(flash.inc.php).columnas/acciones/accion/@mostrar-si-deshabilitada
./formulario/configuracion/flash/mensaje-insert-ok
,
/formulario/configuracion/flash/mensaje-update-ok
,
/formulario/configuracion/flash/mensaje-delete-ok
y
/formulario/configuracion/flash/mensaje-firma-digital-ok
.'despues_inicializacion'
:
'recordset'
.campos//campo/@mostrarLinkDeshabilitado
.columnas/columna/@mostrarLinkDeshabilitado
.ComboBD
, se permite
especificar el texto a mostrar en la opción del combo que
corresponde a selección vacía, en vez del
predefinido "--".
Form::combo_bd()
y
Form::combo_bd_sin_hidden()
:
$texto_opcion_vacia
.@tipo="ComboBD"
:
campo/opcion-combobd-seleccion-vacia/@texto
.Json::codificar()
:
$es_utf8 = false
.despues_accion
.Conexion::existeFila()
,
Conexion::existeFilaCond()
,
Conexion::metaDatos()
,
Conexion::ajustarMetacolumnas()
,
Conexion::getTablas()
y
Conexion::getVistas()
:
$excepcion = false
./formulario/campos/@considerar-request-inicializacion-valores-modificacion
.Conexion
: se incluyen registros
de operaciones sobre transacciones en el log de la aplicación.
Nuevo parámetro en los métodos
StartTrans()
, CompleteTrans()
y
FailTrans()
: $log = true
,
para indicar si se debe registrar o no.
Mensaje
y de instancias de la clase ObjetoMensaje
, y los errores
producidos al procesar formularios.
tipos_mensaje_incluir_log
.ObjetoMensaje::nuevo()
y
ObjetoMensaje::nuevoErrorPredefinido()
:
$guardar_backtrace
.ObjetoMensaje::backtrace()
.AplicacionXgap::realFullAppDir()
./listado/consulta/condiciones_de_parametros//param/@ignorar-en-determinacion-filtro-vacio
./listado/configuracion/master
.
Complementa al ya existente /listado/configuracion/form
.'despues_insert'
, 'despues_update'
y
'despues_delete'
:
'realizar_redireccion'
.BuscadorPersonalizadoSimple::VALOR_ACCION_LIMPIAR_BUSCADOR_PERS
.Si en el mismo directorio que xgap.php existe un archivo con nombre xgap.local.php, se usan las definiciones de constantes de configuración que haya en este último, en vez de las correspondientes del primero.
Esto permite mantener xgap.php intacto, simplificando el proceso de actualización de la versión instalada de XGAP, ya que no se pierde la configuración si se sobreescribe este archivo con la nueva versión.
Conexion_oci8
: se implementa
el método referenciasEntrantes()
, que antes
retornaba siempre un valor vacío.Conexion::referenciasEntrantes()
.
Anteriormente no se podía retornar más de una
referencia por cada tabla referenciante; la nueva estructura
sí lo permite.Conexion_postgres8
: se implementan
los métodos comentarioTabla()
y
comentariosColumnas()
, que antes
retornaban siempre un valor vacío.Conexion::comentarioTabla()
y
Conexion::comentariosColumnas()
:
$esquema = null, $excepcion = false
.Conexion::clavesExtranjeras()
:
$esquema = false
.configuracion/acciones/accion/confirmar-ejecucion
.'antes_redirigir'
:
'es_destino_predeterminado'
.campo/condicion-no-editable
.'despues_inicializacion'
:
'recordset'
.despues_consulta
.Formateo::textoPlanoAHtml()
.
Advertencia de compatibilidad: La versión mínima requerida de PHP pasa a ser 5.2.4.
details/menu/condicion
.en_mantenimiento
,
pagina_mantenimiento
,
mensaje_mantenimiento
,
paginas_accesibles_en_mantenimiento
y
rolfs_acceso_en_mantenimiento
.aplicacionenmantenimiento_contenido.xml
.iSeguridad
:
Nuevas constantes
iSeguridad::VAR_SESION_ID_USUARIO_ACTUAL
,
iSeguridad::VAR_SESION_NOMBRE_CORTO_USUARIO_ACTUAL
,
iSeguridad::VAR_SESION_NOMBRE_COMPLETO_USUARIO_ACTUAL
,
iSeguridad::VAR_SESION_ID_ROLF_ACTUAL
y
iSeguridad::VAR_SESION_NOMBRE_ROLF_ACTUAL
.
Nuevos métodos
iSeguridad::usuarioLogueado()
y
iSeguridad::rolFuncionalUsuarioLogueado()
,
implementados en Seguridad::usuarioLogueado()
y
Seguridad::rolFuncionalUsuarioLogueado()
.
Advertencia de compatibilidad:
Las aplicaciones que utilicen una clase de seguridad personalizada
(parámetro de configuración clase_seguridad
)
que no herede de la implementación provista por XGAP
(clase Seguridad
) deberán implementar
estos métodos.
FULL_APP_DIR
.
Contiene la ruta completa del directorio raíz de la
aplicación en ejecución./*/@clases
.mostrar_acciones_mensajes_flash
,
accion_mensajes_flash__cerrar__texto
,
accion_mensajes_flash__mantener__texto
.efecto_abrir_mensajes_flash_transitorios
,
efecto_cerrar_mensajes_flash_transitorios
,
efecto_abrir_mensajes_flash_permanentes
,
efecto_cerrar_mensajes_flash_permanentes
columnas/columna/@mostrarLinkDeshabilitado
.'antes_valor_campo'
y 'despues_valor_campo'
:
'recordset'
y 'valores'
.Formateo::truncar()
.Conexion::crearConsultaGenerica()
.antes_fila_datos
.EstructuraPagina::esSimple()
.xgap_array_insert()
y
uriPaginaActual()
(funciones.php).Html
:
Html::heading()
.Html::cerrarTag()
,
Html::elemento()
,
Html::cerrarComentario()
y
Html::comentario()
reciben un nuevo parámetro:
$salto_linea
.
Si en la invocación no se pasa este parámetro,
el comportamiento de los métodos es el mismo que antes.buscador/personalizado-simple/rangofechas
) se
incluye un botón que permite vincular los campos de
inicio y fin del rango, haciendo que los dos tengan el mismo
valor. De esta manera se hace más sencillo buscar una
fecha específica, dado que sólo hace falta
seleccionarla una vez.
El elemento generado es un button
con clase
ButtonLinkFields
.
Advertencia de compatibilidad:
Las páginas de estos tipos que incluyan manualmente
formulario.js, por ejemplo mediante
configuracion/inclusiones/archivo
, deberían
ser modificadas para quitar esta inclusión manual; de lo
contrario el archivo se va a estar cargando dos veces.
XGAP_FORM.LinkedFieldSet
(formulario.js).Nuevos métodos en la clase PHP Flash
(flash.inc.php):
Flash::estaDeshabilitadoActual()
,
Flash::estaDeshabilitadoSiguiente()
,
Flash::cambiarDeshabilitadoActual()
,
Flash::cambiarDeshabilitadoSiguiente()
.
RequestXgap::PARAMETRO_SIN_FOCO_INICIAL_AUTOMATICO
.
Si está presente en el request y tiene valor verdadero, en los formularios
no se cambia el foco automáticamente al primer campo habilitado
o al definido por /formulario/campos/@foco-inicial
.
XGAP_FORM.FormState
. La generación de esta
característica está controlada por dos nuevos atributos XML:
la opción de configuración de la aplicación
(aplicacion.xml)
/aplicacion/generacion/formularios/@registrar-estado-cliente-campos
y la opción para formularios
/formulario/@registrar-estado-cliente-campos
.XGAP_FORM.FormState
.borrado-logico/valor/@boolean
.'despues_inicializacion'
en páginas de tipo
listado_master_inline
.despues_obtener_vbles_sistema
:
'agregado'
.@nombre-expr
y @expr
en
/listado/configuracion/acciones/accion/destino/parametros/parametro
,
/listado/columnas/columna/imagen/miniatura/parametros/parametro
,
/listado/columnas/columna/imagen/link/parametros/parametro
y
/listado/columnas/acciones/accion/destino/parametros/parametro
;
@nombre-expr
en
/listado/columnas/columna/parametros-link/parametro
.@nombre-expr
y @expr
en
/formulario/acciones/accion/parametros/parametro
.urlCompletoServidor()
(funciones.php).Request
(request.inc.php):
Request::esSeguro()
,
Request::esquema()
,
Request::host()
y
Request::puerto()
.Request::metodo()
ahora retorna el resultado siempre en mayúsculas.campos//campo/validacion-cliente/@excluir
.antes_procesar_uploads
.FormFileUpload::linkArchivo()
,
FormFileUpload::fueMovido()
,
FormFileUpload::cambiarDirDestino()
,
FormFileUpload::cambiarNombreArchivo()
,
FormFileUpload::valor()
.XgapIllegalStateException
(illegalstateexception.inc.php).extraer_directorio_pagina()
y
uniformizar_separadores_directorio()
.Además, en la parte inferior de la página principal del generador se agregaron links que llevan a esta nueva página (se muestra automáticamente uno por cada versión de motor instalada).
/formulario/campos//campo/@mostrar-saltos-linea
./formulario/acciones/accion
):
@imagen
,
@teclaacceso
,
@historial
,
@pasarParametrosDetail
,
tip
,
preparar
.link
ahora puede no estar presente,
lo que indica que la acción debe enviar el request a la misma página./listado/configuracion/texto-listado-vacio
y
/listado/configuracion/texto-listado-vacio-con-filtros
para listados;
/formulario/details/detail/texto-listado-vacio
para masters.RequestXgap::PARAMETRO_PAG_RETORNO
ahora admite
el valor especial SELF
, que hace que el URL de retorno
sea el mismo del request; es decir, causa que la página vuelva
sobre sí misma con los mismos parámetros GET.
Se puede usar, por ejemplo, para que un formulario se vuelva a cargar después de realizar la operación, en vez de volver a la página de retorno normal.
/formulario/campos//campo/destino-link/parametros/parametro
:
@nombre-expr
, @dato
y @expr
.
XGAP_FORM.Select
y
XGAP_FORM.Select.Chained
.
Funciones y clases:
XGAP_FORM.Select.resetSelection
,
XGAP_FORM.Select.setOptionsData
,
XGAP_FORM.Select.getOptionsData
,
XGAP_FORM.Select.getOptionData
,
XGAP_FORM.Select.OptionsFilter
,
XGAP_FORM.Select.Chained.ChildOptionsFilterByParentSelectedOptionData
.
Ejemplo: filtro de las opciones de un select
de acuerdo al valor seleccionado en otro:
<select id="padre" name="padre"> <option value="" selected="selected">--</option> <option value="p1">Padre 1</option> <option value="p2">Padre 2</option> </select> <select id="hijo" name="hijo"> <option value="" selected="selected">--</option> <option value="h1">Hijo 1</option> <option value="h2">Hijo 2</option> <option value="h3">Hijo 3</option> <option value="h4">Hijo 4</option> </select> <script type="text/javascript"> jQuery(document).ready(function () { var combo_padre = obtener_elemento("padre"), combo_hijo = obtener_elemento("hijo"), datos_filtro = { "": true, "p1": [ "", "h2", "h3" ] }; XGAP_FORM.Select.setOptionsData(combo_padre, "filtro", datos_filtro, [""], "value"); (new XGAP_FORM.Select.Chained.ChildOptionsFilterByParentSelectedOptionData( combo_padre, combo_hijo, "filtro", "value", [""])) .applyFilterOnParentChange(); }); </script>
El resultado es:
Cuando en "padre" se selecciona | En "hijo" quedan las opciones | Filtro en efecto |
---|---|---|
"" | todas | true |
"p1" | "", "h2", "h3" | [ "", "h2", "h3" ] |
"p2" | "" | default ([""] ) |
/odt/variables/variable/requerida
.Mensaje::COD_ERR_EJEC_FALTAN_PARAMETROS
.$var_{nombre}
ahora también puede generar una variable correspondiente
$var_xmltxt_{nombre}
, con
el mismo valor pero con los caracteres especiales XML escapados
para que se pueda emitir como texto XML de forma segura. Esta
generación está controlada por el nuevo atributo
/odt/configuracion/@definir-variables-xmltxt
.Formateo::prepararTextoXml()
(formateo.inc.php)./formulario/campos//campo/condicion-campo-visible
.antes_insert
, antes_update
y antes_delete
en formularios: boolean &'realizar_operacion' = true
.
Si se cambia su valor a falso, se aborta la operación
y se vuelve a presentar el formulario.xgapIsUndefined
,
xgapIsBoolean
,
xgapIsObject
,
xgapConstruirUrl
./formulario/campos//campo/condicion-visible
.
(texto-autocompletable|seleccionar-autocompletable)/@ignorar-acentos
.ip4
./listado/configuracion/buscador/personalizado-simple//condicion.
antes_campo_link
en formularios:
array 'metadatos'
array 'valores'
boolean 'agregado'
Conexion::obtenerListaIndexadaPorClave()
y
Conexion::literalSql()
.Conexion::obtenerTodos()
recibe dos nuevos parámetros opcionales:
$numrows
y $offset
.Conexion::expresionComparacionBinaria()
para que acepte cualquier operador, no sólo uno de los predefinidos.XgapTableArray
.campo/validacion-cliente
;
permite controlar la validación que se realiza en el cliente.
Incluye los elementos
campo/validacion-cliente/predefinida
,
campo/validacion-cliente/fn-condicion-realizacion
y
campo/validacion-cliente/fn-valor-atributo
.
El elemento campo/validacion-cliente/predefinida
tiene el mismo significado que
campo/validacion
y es la nueva forma recomendada de especificar el tipo de
validación de formato, aunque campo/validacion
se mantiene por compatibilidad.
campo/validacion-servidor-predefinida
.
Provee dos formas de controlar la validación que se realiza
en el servidor:
campo/validacion-servidor-predefinida/@realizar
y
campo/validacion-servidor-predefinida/condicion-realizacion
.campo/eventos/calendar-update
.Date
, con lo cual
la última de las dos en cargarse sobreescribía las
propiedades definidas por la primera. Por ejemplo, ambas definen
la función Date.parseDate
.
Advertencia de compatibilidad:
Para solucionar el problema fue necesario modificar DHTML Calendar
para renombrar las propiedades que agrega a Date
,
es decir que cambió parte del API definido por este widget.
Específicamente, los cambios fueron los siguientes:
Antes | Ahora |
---|---|
Date._MD | Date._jscal_MD |
Date.SECOND | Date.jscal_SECOND |
Date.MINUTE | Date.jscal_MINUTE |
Date.HOUR | Date.jscal_HOUR |
Date.DAY | Date.jscal_DAY |
Date.WEEK | Date.jscal_WEEK |
Date.parseDate | Date.jscal_parseDate |
Date.prototype.getMonthDays | Date.prototype.jscal_getMonthDays |
Date.prototype.getDayOfYear | Date.prototype.jscal_getDayOfYear |
Date.prototype.getWeekNumber | Date.prototype.jscal_getWeekNumber |
Date.prototype.equalsTo | Date.prototype.jscal_equalsTo |
Date.prototype.setDateOnly | Date.prototype.jscal_setDateOnly |
/listado/columnas/columna/[formato|formato-variedad]/codigo
;
formularios master: /formulario/campos//campo/formato/codigo
)
ahora tiene predefinida una nueva variable: $registro
,
que le permite al código tener acceso a todos los campos
del registro al que pertenece el valor.inicio_celda_encabezado
ahora recibe un parámetro
adicional: &'valor_a_mostrar'
.info_tipos_pagina_xgap()
.RequestXgap::PARAMETRO_DISPOSICION_CONTENIDO_IMPRIMIBLES
y nuevo método
RequestXgap::disposicionContenido
(request.inc.php).
Se provee una manera de indicar por cada solicitud el tipo de
disposición de contenido con que se deben retornar documentos
no HTML generados por la aplicación, ignorando durante dicha
solicitud el valor del parámetro de configuración
disposicion_contenido_imprimibles. Para ello se debe
pasar en la solicitud un parámetro con el nombre dado por
la constante
RequestXgap::PARAMETRO_DISPOSICION_CONTENIDO_IMPRIMIBLES
y el valor deseado para la disposición de contenido.
Request::metodo()
.XGAP.Flash
(flash.js).
Permite acceder al Flash después de cargada la página.RequestXgap::PARAMETRO_PAG_RETORNO
.Formateo::prepararSalidaString()
y
Formateo::prepararSalidaUrl()
.
La función preparar_salida()
ahora es un alias de
Formateo::prepararSalidaString()
, con algunas mejoras
de rendimiento.
/listado/columnas/*/@clase
.campo/eventos/select
.XGAP_FORM.cambiarHabilitacionSeleccionable()
,
XGAP_FORM.deshabilitarSeleccionable()
y
XGAP_FORM.habilitarSeleccionable()
(formulario.js).XGAP.cambiarHabilitacionLink()
,
XGAP.deshabilitarLink()
y
XGAP.habilitarLink()
(utilidades.js).(texto-autocompletable|seleccionar-autocompletable)/columnas-extra-mostrar
.usar_css_ext_predefinido
.XGAP.console
(utilidades.js). Provee un reemplazo
para window.console
que es seguro para usar en cualquier
entorno: si la consola no está disponible, los métodos
de este objeto no tienen efecto, en vez de producir un error.xgap_get_remote_file_contents()
.Auditor::log()
:
$tipo
; nuevas constantes para
usar con este parámetro:
Auditor::TIPO_LOG_OPERACION
,
Auditor::TIPO_LOG_ERROR
,
Auditor::TIPO_LOG_ADVERTENCIA
,
Auditor::TIPO_LOG_INFORMACION
.
Advertencia de compatibilidad: El agregado del tipo hace que cambie:
duracion_token_csrf
.iSeguridad
: nuevo método
iSeguridad::destruirSesionAplicacion()
.
Advertencia de compatibilidad:
Las aplicaciones que utilicen una clase de seguridad personalizada
(parámetro de configuración clase_seguridad
)
que no herede de la implementación provista por XGAP
(clase Seguridad
) deberán implementar
este método.
XgapRand
(rand.inc.php) y
XgapCsrf
(csrf.inc.php).
Advertencia de requerimientos:
La clase XgapCsrf
requiere que esté
disponible la extensión Hash de PHP.
sal_hashes
.Advertencia de compatibilidad:
Se debe agregar el parámetro sal_hashes
al archivo de configuración de las aplicaciones
existentes, dado que es requerido.
xgap_random_token()
./formulario/firma-digital
.iXgapPublicKeyInfrastructure
,
iXgapStoredPublicKeyInfrastructure
,
iFirmaOperacion
,
XgapPublicKeyInfrastructure
,
XgapOpenSslPublicKeyInfrastructureTest
,
XgapDefaultOpenSslPublicKeyInfrastructure
,
FirmaOperacion
,
FirmaOperacionDefault
.XGAP_FIRMADO_OPERACIONES_HABILITADO
;
se define automáticamente durante la generación
en xgap.php, de acuerdo al valor de
aplicacion.xml:/aplicacion/seguridad/@usa-firmas-digitales
./aplicacion/seguridad/@usa-firmas-digitales
.
Permite habilitar o deshabilitar en tiempo de generación el uso
del soporte de firmas.archivo_clase_pki
,
clase_pki
,
archivo_clase_firmaoperacion
,
clase_firmaoperacion
,
frase_clave_privada_requerida
,
certificado_obligatorio_en_carga_clave_privada
,
codificador_datos_firmaoperacion
y
archivo_codificador_datos_firmaoperacion
.Contexto
:
Contexto::existeSesion()
,
Contexto::idSesion()
,
Contexto::cambiarIdSesion()
y
Contexto::regenerarIdSesion()
.Contexto::destruirSesionAplicacion()
con la misma funcionalidad que Contexto::destruir_sesion_aplicacion()
y este último se hace obsoleto, disparando un aviso
si se invoca.duracion_sesion
.
Si el tiempo de inactividad se supera, en el siguiente acceso se
destruye automáticamente la sesión de esa aplicación,
sin afectar a las demás.
Este control es independiente de la duración de sesión
configurada en PHP.
Nuevo método PHP
Contexto::obtenerTiempoUltimaActividad()
/menu/@cache
, para indicar
el tipo de cache a usar (por defecto se usa cache por rol),
y /menu/@id
para permitir que
las aplicaciones guarden más de un menú en cache.RequestXgap::PARAMETRO_RECARGA_MENU
.
Si está presente en el request, se invalida el cache y se
reconstruye el menú.XgapXml
y XgapXmlArray
(xml.inc.php).XgapNotImplementedException
,
XgapFunctionNotImplementedException
y
XgapMethodNotImplementedException
./menu//item/@url
), de acuerdo a lo que indica
iSeguridad::puedeVerPagina()
,
y no se muestran en caso de no tenerlo.
Advertencia de compatibilidad:
En el código generado ahora se convierten correctamente
los caracteres XML especiales en entidades. Esto implica que
si en un archivo de definición de menú se estaban
escapando manualmente estos caracteres, se debe corregir para
eliminar el escape manual. Por ejemplo, si
ppal_menu.xml antes decía:
url="ciudad_listado.php?xgap_historial=reset&amp;agregado=true"
se debe cambiar a:
url="ciudad_listado.php?xgap_historial=reset&agregado=true"
Flash::vaciar()
,
Flash::existeSiguiente()
y
Flash::obtenerSiguiente()
.Conexion
:
Conexion::blobEncode()
y
Conexion::blobDecode()
.Conexion::ejecutarConsulta()
,
Conexion::ejecutarConsultaLimitOffset()
,
Conexion::ejecutarConsultaSegura()
,
Conexion::ejecutarConsultaSeguraLimitOffset()
,
Conexion::ejecutarConsultaActualizacion()
,
Conexion::obtenerPrimeraFila()
,
Conexion::obtenerPrimero()
y
Conexion::obtenerTodos()
reciben un nuevo parámetro
$excepcion
, que permite indicar
si al producirse un error en la consulta se debe disparar una
excepción o generar un error de aplicación, como
ocurría hasta ahora; el comportamiento predeterminado
sigue siendo generar un error.XgapClassLoader
(classloader.inc.php). Implementa
carga automática de clases/interfaces provistas por XGAP.
Se activa automáticamente cuando se carga la configuración,
o se puede habilitar manualmente invocando a
XgapClassLoader::register()
.Advertencia de compatibilidad: Ahora se verifica más estrictamente la correctitud de los parámetros de configuración durante la carga del archivo conf.inc.php, por lo cual se producirán excepciones en aplicaciones que tengan algún problema de configuración que antes no se detectaba, por ejemplo un parámetro requerido faltante o un parámetro entero definido como string.
iXgapVarConvert
(ivarconvert.inc.php),
con implementaciones:
XgapVarConvertSerialized
(varconvertserialized.inc.php),
XgapVarConvertExported
(varconvertexported.inc.php),
XgapVarConvertJson
(varconvertjson.inc.php),
XgapVarConvertXml
(varconvertxml.inc.php).Http
(http.inc.php):
nuevos métodos Http::statusLine()
y Http::getStatusCodeReasonPhrase()
;
nuevas constantes Http::HTTP1_STATUS_*
Formateo::entrecomilladoSimple()
y
Formateo::entrecomilladoDoble()
.Json::decodificar()
$opciones
en Json::codificar()
Json::codificar()
ahora dispara una excepción
si no puede codificar el valor dado.es_array_indexado_secuencial()
,
matrix_2d_transpose()
,
find_classes_in_dir()
,
xgap_convert_encoding()
,
xgap_convert_encoding_to_utf8()
,
xgap_convert_encoding_to_internal()
(funciones.php).XgapGenericFactory
(genericfactory.inc.php).Recursos
(recursos.inc.php), que provee
acceso a objetos globales.FormFileUpload
(upload.inc.php):
FormFileUpload::contenido()
,
FormFileUpload::contenidoLineas()
.Form::abrir_grupo
(form.inc.php):
$clase
.Componentes
(componentes.inc.php):
Componentes::separadorGrupoFormulario()
y
Componentes::comentarioCampoFormulario()
.ExcepcionXGAP
(xgap.php):
ExcepcionXGAP::getFullMessage()
,
ExcepcionXGAP::getFullDevMessage()
,
ExcepcionXGAP::prependToMessage()
,
ExcepcionXGAP::appendToMessage()
,
ExcepcionXGAP::prependToDevMessage()
,
ExcepcionXGAP::appendToDevMessage()
y
ExcepcionXGAP::__toString()
.id_usuario_en_sesion_base_nombre
e
id_usuario_en_sesion_base_var
.Conexion_postgres8::cambiarParametroConfiguracion()
y
Conexion_postgres8::establecerVariableSesion()
.
Conexion::ejecutarStoredProcedure()
(conexion.inc.php):
$registro_log
. Permite indicar si se
debe guardar la operación en el log del auditor.Formateo::ip4SinCerosIniciales()
.Html::idValido()
./formulario/campos//separador_grupo/@nombre
./formulario/campos//campo[@tipo="Seleccionable"]/texto-autocompletable
y
/formulario/campos//campo[@tipo="Seleccionable"]/seleccionar-autocompletable
):
@es-combo
.Javascript::codificarString()
:
$comillas_dobles
.SmtpEmail
(email.inc.php).XGAP_CONF_SMTP_HOST
, XGAP_CONF_SMTP_PORT
,
XGAP_CONF_SMTP_USER
, XGAP_CONF_SMTP_PASS
,
XGAP_CONF_SMTP_SECURITY
.Mensaje::mail()
ahora envía el email via SMTP si la aplicación
está configurada para usar este protocolo./formulario/campos//campo/texto-autocompletable
y
/formulario/campos//campo/seleccionar-autocompletable
,
aplicables cuando campo[not(@tipo)]
o campo[@tipo="Seleccionable"]
.Form::autocompletable()
(form.inc.php)
y nueva función javascript XGAP_FORM.crearCampoAutocompletable()
(formulario.js).Json
(json.inc.php).XGAP_FORM.moverFocoAPrimerCampo()
(formulario.js).Conexion
:
Conexion::ejecutarConsultaSeguraSinMsg()
,
Conexion::ejecutarConsultaSeguraLimitOffsetSinMsg()
,
Conexion::expresionComparacionBinaria()
,
Conexion::operadoresBinariosComparacion()
,
Conexion::textoOperadorBinarioComparacion()
.id="{nombre del campo}_fila"
.Tabla::abrirFila()
(tabla.inc.php):
$nombre
.unserialized_ok()
y
unserialize_with_exception()
;
nueva excepción PHP ExcepcionXGAPUnserialize
.Pagina
(pagina.inc.php)ObjetoMensaje
y ListaMensajes
(mensaje.inc.php)Mensaje::mostrar()
y Mensaje::mostrarLista()
(mensaje.inc.php).Se agrega un modo para que el código personalizado tenga la posibilidad
de mostrar mensajes en las páginas de una forma estandarizada.
Ejemplo de uso:
<formulario> ... <codigoExtra> ... <codigo ubicacion="despues_inicializacion" tipo="PHP"> <![CDATA[ ... Pagina::instancia()->mensajes()->agregar(ObjetoMensaje::nuevo( 'No se pudo realizar la comprobación.', Mensaje::TIPO_ALERTA)); ... ]]> </codigo> ... </codigoextra> ... </formulario>
Los mensajes almacenados en Pagina::instancia()->mensajes()
se muestran automáticamente en páginas de tipo
formulario, formulario_reporte, master, listado, seleccion y seleccion_m.
Para mostrarlos en páginas de tipo contenido,
se puede incluir código similar al siguiente dentro de /pagina/contenido
:
if (!Pagina::instancia()->mensajes()->isEmpty()) { Mensaje::mostrarLista(Pagina::instancia()->mensajes(), true, null, 'cont-msjs-pag'); }
Http
:
Http::noCache()
:
$send_content_type
, $media_type
,
$charset
.Http::headerContentType()
ahora no envía charset si el parámetro $charset
es vacío./pagina/configuracion/comandos-genericos/comando/preparar
.carpeta/condicion
,
item/condicion
y
separador/condicion
.carpeta/@id
,
carpeta/@clase
,
carpeta/@tip
,
item/@id
,
item/@clase
,
item/@tip
.Conexion
(conexion.inc.php):
Conexion.estaConectado()
y
Conexion.reconectar()
.Conexion.metaDatos()
:
'gentype'
,
'size'
y 'scale'
.
El campo 'gentype'
puede tomar cualquiera de los valores definidos por las
nuevas constantes Conexion::DATATYPE_*
.'len'
y 'clen'
, dado que eran inconsistentes: en algunos casos
representaban la longitud del campo y en otros su tamaño;
ahora corresponden siempre a la longitud y el campo 'size'
al tamaño.tecla_acceso_boton_agregar
,
tecla_acceso_boton_agregar_seguir
,
tecla_acceso_boton_borrar
,
tecla_acceso_boton_cancelar
y
tecla_acceso_boton_guardar
./formulario/configuracion/boton-agregar/@teclaacceso
,
/formulario/configuracion/boton-agregar-seguir/@teclaacceso
,
/formulario/configuracion/boton-borrar/@teclaacceso
,
/formulario/configuracion/boton-cancelar/@teclaacceso
y
/formulario/configuracion/boton-guardar/@teclaacceso
.DescriptorPaginas::tipoFormulario()
./odt/configuracion/antes-inicializacion
y /odt/configuracion/salida
.str_starts_with()
,
str_istarts_with()
,
str_ends_with()
,
str_iends_with()
./*/@mantener-pagina-sesion-vencida
, que permite
evitar la redirección a la página de inicio cuando vence
o no está creada la sesión del usuario.
Se puede obtener el mismo efecto definiendo una constante PHP con nombre
XGAP_CONF_MANTENER_PAGINA_SESION_VENCIDA
y valor true, antes de la inicialización de XGAP en la página.version_adodb
con valor vacío.longitud_max_cols_text
.Conexion
:
Conexion::esBooleano()
./listado/configuracion/acciones/accion/destino/@historial
.Mensaje
(mensaje.inc.php):
Los métodos Mensaje::error()
, Mensaje::alerta()
,
Mensaje::notificacion()
, Mensaje::info()
y Mensaje::generico()
reciben un nuevo parámetro: $clase_extra
.Conexion
(conexion.inc.php):
Conexion::concat()
.AdministradorHistorial::actualizar()
(historial.inc.php):
$comandos
e $ignorar_request
.Flash
(flash.inc.php):
Flash::instancia()
.Flash::mantener()
ahora mantiene también
el tiempo de presentación actual; este comportamiento se puede
controlar con el nuevo parámetro $mantener_tiempo_presentacion
.Request
(request.inc.php):
Request::eliminar()
,
Request::eliminarGet()
,
Request::eliminarPost()
.cambiarSeleccionSelect()
y restaurarSeleccionSelect()
(formulario.js):
ahora disparan un evento change
sobre el select que afectan./formulario//campos//campo/controles-seleccion-lista
,
que indica que se debe adjuntar a la lista una serie de controles para modificar
la selección de sus elementos, los cuales permiten seleccionar
y deseleccionar todos los elementos, y restaurar la selección inicial.controles-seleccion-lista
.Form::select_multiple()
(form.inc.php):
$controles_seleccion
y
$opciones_controles_seleccion
.restaurarSeleccionSelect()
.titulo
de campos de formulario de tipo 'CheckBox':
/formulario/campos//campo[@tipo='CheckBox']/titulo/@posicion
.consulta-sm
de campos de formulario
(tipo 'SeleccionableMultiple', 'Lista' y 'ListaBD'):
/formulario/campos//campo/consulta-sm/@realizar-en-alta
./formulario/campos//campo/@filas
ahora permite el valor 0 para campos de tipo 'SeleccionableMultiple',
'Lista' y 'ListaBD', el cual indica que la lista generada debe tomar
la altura que le asigna por defecto el navegador./formulario/campos//campo[@tipo="SeleccionableMultiple"]/orderby
./listado/columnas/acciones/accion[tipo-request="POST"]
):
los parámetros se estaban enviando al destino como parte del URL;
ahora se envían como parte del POST.Flash
: nuevos métodos
Flash::tiempoPresentacionActual()
,
Flash::cambiarTiempoPresentacionActual()
,
Flash::tiempoPresentacionSiguiente()
y
Flash::cambiarTiempoPresentacionSiguiente()
;
nueva constante Flash::TIEMPO_PRESENTACION_INDETERMINADO
.Componentes::DURACION_MENSAJE_FLASH
./formulario/campos//campo/@tipo
):
Lista
y ListaBD
./formulario/campos//campo[@tipo="Combo" or @tipo="Radio"]
):
select/options
,
alternativo al ya existente select/option
.Html::atributoTexto()
y
Html::atributoSimple()
.Html::abrirTag()
y el parámetro
$titulo
de los métodos de la clase Form
;
(b) la salida javascript producida por la clase Tooltip
;
(c) el código PHP generado a partir de
/formulario/campos//campo/tip
,
/formulario/campos//campo[@tipo='Link']/etiqueta
,
/formulario/campos//campo[@tipo='Link']/click
y
/formulario/campos//campo[@tipo='Link']/destino-link/parametros/parametro/@valor
.
Advertencia de compatibilidad:
Esto provoca problemas en aplicaciones existentes que escapan
el texto manualmente en los lugares mencionados,
dado que se produce un doble escape.
/pagina/configuracion/comandos-genericos/comando/condicion
./*/seguridad/validacionExtra
, para todos los tipos de página:
validacionExtra/@metodo-http
.validacionExtra/codigo
tiene disponibles nuevos parámetros:
&$mensaje_usuario
,
&$mensaje_debug
y
&$params_extra
,
que permiten pasar mensajes y parámetros arbitrarios a la página de error.HistorialNavegacion
(historial.inc.php):
HistorialNavegacion::siguienteA()
,
HistorialNavegacion::anteriorA()
y
HistorialNavegacion::primeroPorTipo()
.Http::redirigirAError()
(configuracion.inc.php)
ahora permite (1) indicar el método HTTP a usar para la redirección
(GET o POST) y (2) pasar parámetros arbitrarios a la página destino.Configuracion::paginaInterna()
.urlCompletoPagina()
.columnas/columna/parametros-link
.