Ecco cosa ho realizzato:
- L’utente crea un argomento
- L’utente elimina il post dell’argomento, programmandone l’eliminazione (ho modificato l’impostazione del sito
delete_removed_posts_afterimpostandola su1) - L’argomento viene eliminato dopo il tempo specificato
- Lo staff ripristina l’argomento e torna alla versione originale del post (solo il ripristino riporta il post con il messaggio “argomento ritirato dall’autore, verrà eliminato automaticamente tra 1 ora a meno che non venga segnalato”)
- L’argomento verrà eliminato nuovamente dopo un certo periodo
Cosa sta succedendo: Quando un utente elimina il proprio post dell’argomento, viene impostata una proprietà chiamata user_deleted su true. Esiste un’attività in background chiamata DestroyOldDeletionStubs che viene eseguita ogni 30 minuti. Questa attività esegue la funzione PostDestroyer.destroy_stubs, che cercherà nel database ed eliminerà tutti i post con user_deleted impostato su true e un “timer di eliminazione” scaduto.
Il problema: Quando lo staff ripristina il post, user_deleted non viene mai impostato su false, quindi la prossima volta che DestroyOldDeletionStubs viene eseguita, il post verrà nuovamente eliminato.
La soluzione: Sono quasi sicuro che sarà necessario aggiungere una logica alla funzione staff_recovered che imposti user_deleted su false (user_recovered lo fa già). Vedi discourse/lib/post_destroyer.rb at main · discourse/discourse · GitHub
La soluzione rapida: Ripristina il post dell’argomento e ottieni il suo ID, poi vai alla tua console Rails ed esegui:
Post.find_by_id(POST_ID).update(user_deleted: false)
L’ID del post può essere trovato facilmente aggiungendo .json alla fine dell’URL di un argomento. Quindi, usando questo argomento come esempio: https://meta.discourse.org/t/topic-keeps-getting-deleted/128013.json. L’ID del post dell’argomento è 632362.