-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hotfix - General - Evitar la regeneración innecesaria de ficheros de idioma #405
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Realizadas las pruebas.
Login con módulo sin literales
Ok, funciona correctamente
Formulario con fichero adjunto
Se han regenerado los literales (ca_ES y en_us): Al recibir el formulario, se han regenerado (instancia en local)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Se han realizado más pruebas:
- Al iniciar sesión habilitando el módulo de ResourceCalendar, únicamente regenera el fichero de idioma al hacer login cambiando el idioma. No se regeneran los ficheros en cada login
- Al recibir el resultado de un formulario, regenera el idioma la primera vez. Al enviar múltiples veces el formulario, no se regeneran los idiomas cada vez que se recibe.
Revisado el código.
Apruebo ya que se consigue que no se regeneren de forma masiva los ficheros de idioma
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Funcionalidad probada 👍
Solo veo una cosilla a nivel de código y es que hay que eliminar o modificar el log de la línea 132 de include/SugarObjects/LanguageManager.php
Y además, habría que meter el PR en core modification ya que se toca el fichero anterior
Actions executed at: 2024-11-20 10:02:05. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(A)probado
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(A)Probado
Descripción
En el análisis que llevó a la apertura de los issues #392 y #393, se observó también que los ficheors de idioma eran regenerados con excesiva frecuencia sin que hubiera un motivo aparente.
Después de investigar el tema y múltiples pruebas, se han observado 2 causas posibles:
1.- Si hay algún módulo activo que no contiene literales (por ejemplo ResourceCalendar está activo en algunas instancias), no genera información en caché. Al hacer login e intentar recuperar los literales de todos los módulos no se encuentra la información de estos módulos y se fuerza la regeneración de los ficheros de idiomas (que tampoco generará información en caché) con lo que el siguiente login provocará una nueva regeneración.
2.- Los formularios, en la clase WebFormDataController, dentro de la función loadLanguage está ejecutando la sentencia
$this->mod_strings[$this->defaultModule] = return_module_language($this->lang, $this->defaultModule, true); // Load the module labels by default
, la cual provoca que se regeren siempre los ficheros de idioma.Solución aplicada
1.- Para el caso (1) se ha aplicado un cambio para que siempre se genere información en caché aunque sea vacía
2.- Para el caso (2) se han modificado las llamadas a return_module_language para que no fuerzen el refresco de los ficheros de idiomas.
Pruebas
No regenera con módulo vacío
1.- Habilitar algún módulo sin literales (por ejemplo ResourceCalendar)
2.- Realizar un nuevo login
3.- Comprobar la fecha de modificación de los ficheros de idioma
ls -la /web/custom/application/Ext/Language/
4.- Cerrar sesión y volver a iniciar sesión pasado un minuto
5.- Comprovar que no se han regenerado los ficheros de idioma
No regenera con formulario
1.- Crear un formulario (con documento) que ataque la instancia de prueba
2.- Comprobar la fecha de modificación de los ficheros de idioma
ls -la /web/custom/application/Ext/Language/
3.- Rellenar y lanzar el formulario
4.- Comprovar que no se han regenerado los ficheros de idioma
5.- Comprobar la descripción del documento adjunto en la persona para ver que se incluyen correctamente (WebFormDataBO)
6.- Modificar el formulario para provocar un error de parámetros (por ejemplo indicar un assigned_user_id incorrecto)
7.- Rellenar de nuevo el formulario
8.- Comprobar que los literales del e-mail recibido son correctos (WebFormDataController)
Información adicional
Realizando búsuqeda con el patrón
return_module_language\([^)]*,\s*[^)]*,\s*true\)
se detecta quehay más usos dentro de SuiteCRM de la llamada a return_module_language con el refresh a true. No se abordan en este PR por el posible impacto que pueden tener.