Hola a todos:
En la Universidad Nacional del Sur hemos estado realizando personalizaciones sobre la versión 2.8.3 de G3W2, tanto para el Perfil Docente, como para el de Alumnos, comenzando por este último. Actualmente nos encontramos en la versión 2.7.0 planificando la conversión para el primer cuatrimestre del año 2015.
Durante este proceso, nos hemos encontrado con algunas dificultades para implementar las personalizaciones sobre Chulupí siguiendo los instructivos publicados en el portal. Estos tutoriales en formato wiki no nos han provisto de toda la información que hemos ido necesitando para resolver nuestros casos, resultando en un esfuerzo mayor del que habíamos evaluado inicialmente. Las funcionalidades que intentamos personalizar ya las tenemos implementadas para la versión 2.7 y anteriores, por lo que intuíamos que solo implicaría realizar una "traducción" del código para adaptarlo al nuevo framework.
Los módulos y operaciones que al momento hemos llegado a personalizar son:
-
Reinscripción
-
Administración de contraseñas con formatos propios de UNS
-
Controles de reinscripción y datos censales
-
Modificación de la vista de carreras seleccionables en el menú superior (para poder visualizar y operar sobre carreras vocacionales, extracurriculares, idiomas y carreras en las cuales el alumno esté egresado, que por defecto no aparecen).
-
Solicitud de Certificados
-
Reporte de Planes de Estudio
-
Perfil para Aspirantes
Estuvimos preparando una lista que enumera las dificultades con las que nos hemos encontrado, con algunas observaciones y sugerencias, pensando en que puede ser útil nuestra experiencia, y a su vez, nos serviría muchísimo lo que ustedes nos pudieran comentar en respuesta, para acelerar este proceso de implementación:
PERSONALIZACIONES
1. La documentación del Portal referida a las personalizaciones sobre Chulupí y G3W2 no posee un apartado relacionado con la versión G3W2 2.8.x. Los ejemplos que figuran no son suficientes para deducir la funcionalidad disponible. No se ha publicado la documentación de una API mínima y estable. Esto provoca que cada intento de personalización se vea demorado constantemente tratando de encontrar la funcionalidad mínima y cuál es el alcance correspondiente. Por ejemplo, al tratar de buscar la definición y las invocaciones de una función, se debe buscar a ciegas sobre todo el árbol de fuentes a nivel de archivos, luego deducir los tipos y validaciones de los parámetros de entrada y salida.
2. Sería conveniente indicar en la documentación, los límites del esquema básico de personalizaciones para scripts en PHP. Por ejemplo, si una personalización extiende la clase “controlador_errores_control” del directorio “extension_kernel”, también deben extender los controladores de todas las operaciones que la heredan, sólo para redefinir la clase padre heredada, aun cuando no se hayan personalizado puntualmente ninguna de esas operaciones.
ESTRUCTURALES
1. Las clases principales “guarani” y “persona” -esenciales para G3W2- se encuentran pobladas de métodos estáticos, con funcionalidades que no se pueden personalizar sin romper el esquema propuesto. No son personalizables porque se invocan directamente en el bootstrap, el cual a su vez depende del punto de acceso (index.php, rs.php y servicios.php) del namespace siu.
2. ¿Por qué se transforma a minúsculas la clave de cada parámetro de las funciones del catálogo en tiempo de ejecución? Sería conveniente ser sensible a mayúsculas y minúsculas, como cualquier arreglo asociativo, o alternativamente, debería quedar documentado de forma clara.
3. ¿Por qué no se pueden pasar valores NULL como parámetros de las funciones de catálogo (testeo isset incorrecto)? Sería conveniente que se respetara la semántica del valor NULL, cuya interpretación debería ser responsabilidad de la implementación de la función del catálogo.
4. ¿Por qué no se pueden pasar valores booleanos como parámetros de las funciones de catálogo (se transforman a cadena vacía)? Análogo al caso anterior, sería conveniente que las funciones del catálogo fueran las responsables de interpretar y traducir un valor booleano según el motor de base de datos utilizado.
ESPECIFICAS
1. Se ha detectado en el controlador de la solicitud de certificados que no se efectúa una mínima sanitización de los parámetros recibidos por el servidor por el método POST. Sería conveniente que existiera un conjunto mínimo de funciones en la API para efectuar una sanitización inicial, aun en carácter opcional.
2. El esquema de validación de formato de claves -en particular, la expresión regular- se encuentra en la clase “guarani”, que no puede personalizarse siguiendo el método propuesto.
3. Acoplamiento en la implementación de controles de reinscripción y datos censales. Estos controles se disparan, se capturan y producen cambios de estado a través de múltiples clases y operaciones, dificultando el seguimiento y personalización. Se implementan mediante segmentos de código y variables globales que se diseminan en varios scripts. Por ejemplo, si se quisiera implementar un control de pago o sanciones análogos a la reinscripción, habría que replicar este comportamiento en todas operaciones que controlan este tipo especial de error. Sería conveniente definir una abstracción en una jerarquía de clases bien definidas, que permitan tratar los aspectos transversales que no cubre el sistema de controles actual.
4. Se detectaron errores en la validación y actualización de registros en formularios de datos censales. Al ejecutar la operación de actualización de datos censales en “modo reinscripción”, una simple visita a una sección deja marcada la solapa con un tilde; aun cuando el formulario correspondiente permanezca con errores y/o datos obligatorios pendientes. Si todas las solapas quedan tildadas, se considera que los datos censales se han revisado, y la operación termina sin advertir los errores pendientes. Se debería confirmar explícitamente el guardado de una sección antes de considerarla actualizada con un tilde. Por otro lado, los datos censales, con todas sus tablas, deberían actualizase simultáneamente en una sola transacción, y no en partes, como sucede actualmente
Muchas gracias y saludos