Logotipo de DefensioSupongo que no habrá nadie aún utilizando Gesbit, ni sus plugins, por lo tanto, pero, creo que debo informar de un error grave que he descubierto en el plugin GbDefensio, y que ya he solucionado. Es lo que tienen este tipo de plugins que tratan con la base de datos de Gesbit, que hay que prestar mucha atención a lo que se lleva a cabo: se ve que no lo hice así, y menos mal que me he dado cuenta del problema sin que llegara más lejos.

¿De qué estoy hablando y por qué lo considero un error grave? No es que se trate de un error que no tuviera reparación posible, pero, el caso es que el plugin GbDefensio, cuando marcaba un comentario como SPAM, no decrementaba el número de comentarios en la entrada correspondiente. Y esto conducía al problema de que el número de comentarios que podían indicarse en una entrada, no correspondía con los que el usuario podía ver, realmente.

¿Qué ha pasado? Ha pasado que los comentarios SPAM no cuentan, como es natural. Cuando desde Gesbit, desde su panel de administración, marcas un comentario como SPAM, este no se borra, pero, sí que causa el decremento del contador de comentarios en la entrada a la que pertenezca dicho comentario. Pues bien, GbDefensio no estaba llevando esto a cabo, siendo tarea suya hacerlo, puesto que es el plugin el que marca como SPAM un determinado comentario.

Quiere decirse que Gesbit, por principio, no marca como SPAM los comentarios, siendo el usuario quien tiene que encargarse de esto, si es que aparece algún "spammer" en la bitácora. Ahora bien, GbDefensio es, precisamente, un filtro automático, basado en el servicio web de Defensio, que sí que es capaz de determinar automáticamente si un comentario es SPAM o no. Entonces, si determina que un comentario es SPAM, debe también decrementar la cuenta de comentarios en la entrada correspondiente, porque esa es la regla.

Los comentarios en Gesbit pueden estar aprobados o no, y, pueden ser de varios tipos. Un comentario, sin embargo, aprobado o no, incrementa la cuenta de comentarios de una determinada entrada. Sin embargo, los comentarios que se marquen como SPAM, no cuentan, simplemente. No se muestran a los lectores de la bitácora, y tampoco cuentan como comentarios de una entrada, a no ser que vuelva a marcarse como "normal" o "trackback". Gesbit hace bien su trabajo, y GbDefensio también, salvo que se le olvidaba decrementar la cuenta de comentarios de la entrada.

¡Tampoco es para tanto! Podrías decir. Y sí, lo cierto es que no es un error gravísimo, pero, sí que lo considero grave, porque, el uso continuado del plugin (sin actualizar, es decir, con el problema sin resolver) haría inconsistente la cuenta de los comentarios de las entradas. El problema no iría más allá, en principio (porque nunca se sabe...) pero, el usuario vería que una entrada tiene tres comentarios, y cuando eche un vistazo no verá sino dos, por ejemplo, si uno de ellos hubiera sido marcado como SPAM por GbDefensio.

El caso es que ya he actualizado el plugin para que tenga en cuenta lo que he dicho, y ahora, en caso de detectar que un comentario es SPAM, decrementa la cuenta de comentarios de la entrada correspondiente, manteniendo correcta la consistencia de la base de datos. Así que ya lo sabes. No es que se acabe el mundo, pero, desde luego, era algo que no podía dejarse tal como estaba. Y veré de prestar más atención a este tipo de cosas, puesto que una de las cuestiones que más me preocupa en Gesbit es su base de datos, y cómo pueda verse afectada por el uso de plugins.

Actualización: Al hilo de esta entrada, he revisado de nuevo el plugin, de forma que ahora hace uso de cierto método de la clase GbDb de Gesbit, que se encarga de decrementar la cuenta de comentarios de una entrada si es necesario. De este modo la implementación de cierto método (que actualiza los comentarios) del plugin queda mejor, en mi opinión, pues el plugin "delega" en Gesbit el decrementar la cuenta de comentarios de una entrada, si el tipo del comentario es "SPAM". En fin, el problema estaba solucionado, pero, ahora pareciera que con una mejor solución.