Buen día, necesitamos implementar una personalización que tenga la siguiente funcionalidad:
Para el perfil alumno (usuario registrado), al presionar el botón de Finalizar, consulte en la base de datos si existen periodos de inscripción vigentes para las propuestas seleccionadas. si por lo menos una de las propuestas seleccionadas no presenta periodo de inscripción vigente, emitir un mensaje de error con un mensaje personalizado y que no continúe la ejecución de la lógica de la acción finalizar heredada del controlador del censo estándar. Un comportamiento similar a la operación de crear usuario, acción ini del pagelet en cuestión.
Intentamos esta opción: personalizar la operación censo, extendiendo el controlador y sobreescribiendo el método accion__finalizar() con la siguiente porción de código:
function accion__finalizar()
{
...
//aquí la consulta a la base de datos
kernel::sesion()->set('msj_pagina_error', kernel::traductor()->trans('no_existen_periodos'));
$this->nuevo_request('pagina_error', 'index');
}
Con este enfoque obtenemos un error con el mensaje: "No existe la operación pagina_error’. Inferimos que debido a que el perfil alumno (usuario registrado) no tiene la operación definida. Intentamos agrear una línea en el archivo …conf/acceso/acc_alumno.xml pero obtuvimos el mismo resultado.
Por otro lado intentamos algo mas abreviado:
function accion__finalizar()
{
...
throw new error_preinscripcion(kernel::traductor()->trans('No hay periodo de inscripcion abierto'));
}
Con este enfoque obtenemos mensaje de error: Ha ocurrido un error..
Logramos el objetivo, pero no podemos personalizar el mensaje.
¿Cómo podemos lograr que se obtenga un mensaje personalizado?
La operación $this->nuevo_request($operacion, $accion); se puede usar solo en controladores, la operación y la acción deben existir y deben estar habilitadas para el perfil en cuestión, ej: para el perfil alumno la debes agregar en src/pers/uni/conf/acceso/acc_Alumno.php.
Los mensajes los agregas en src/pers/uni/mensajes/mensajes.es.php, ej:
'no_hay_periodo_insc_abierto' => 'No hay periodo de inscripción abierto',
src/siu/conf/acceso/acc_anonimo_admin.xml: Interfaz para el admin sin sesión iniciada. src/siu/conf/acceso/acc_admin.xml: Interfaz para el admin con sesión iniciada. src/siu/conf/acceso/acc_anonimo_alumno.xml: Interfaz para el aspirante sin sesión iniciada. src/siu/conf/acceso/acc_alumno.xml: Interfaz para el aspirante con sesión iniciada.