Esto es lo que he logrado:
- El usuario crea un tema.
- El usuario elimina la publicación del tema, programando su eliminación (cambié la configuración del sitio
delete_removed_posts_aftera1). - El tema se elimina después del tiempo especificado.
- El personal deselimina el tema y revierte a la versión original de la publicación (solo restaurar traerá la publicación de nuevo con el mensaje “tema retirado por el autor, se eliminará automáticamente en 1 hora a menos que sea reportado”).
- El tema se volverá a eliminar después de algún tiempo.
Lo que está ocurriendo: Cuando un usuario elimina su propia publicación de tema, se establece una propiedad llamada user_deleted en true. Hay un trabajo en segundo plano llamado DestroyOldDeletionStubs que se ejecuta cada 30 minutos. Este trabajo ejecuta la función PostDestroyer.destroy_stubs, que buscará en la base de datos y eliminará cualquier publicación que tenga user_deleted establecido en true junto con un “temporizador de eliminación” vencido.
El problema: Cuando el personal restaura la publicación, user_deleted nunca se establece en false, por lo que la próxima vez que se ejecute DestroyOldDeletionStubs, la publicación se volverá a eliminar.
La solución: Estoy bastante seguro de que necesitaremos agregar alguna lógica a la función staff_recovered que establezca user_deleted en false (user_recovered ya hace esto). Ver discourse/lib/post_destroyer.rb at main · discourse/discourse · GitHub
La solución rápida: Restaura la publicación del tema y obtén su ID de publicación, luego ve a tu consola de Rails y ejecuta:
Post.find_by_id(ID_DE_LA_PUBLICACIÓN).update(user_deleted: false)
El ID de la publicación se puede encontrar fácilmente agregando .json al final de la URL de un tema. Así que usando este tema como ejemplo: https://meta.discourse.org/t/topic-keeps-getting-deleted/128013.json. El ID de la publicación del tema es 632362.