إليك ما توصلت إليه:
- ينشئ المستخدم موضوعًا
- يقوم المستخدم بحذف منشور الموضوع، مع جدولة الحذف (لقد قمت بتغيير إعداد الموقع
delete_removed_posts_afterإلى1) - يتم حذف الموضوع بعد الوقت المحدد
- يقوم الطاقم بإلغاء حذف الموضوع ويعيد النسخة الأصلية من المنشور (فقط عملية الاستعادة вернут المنشور مع الرسالة “الموضوع سحبه المؤلف، سيتم حذفه تلقائيًا خلال ساعة ما لم يتم الإبلاغ عنه”)
- سيتم حذف الموضوع مرة أخرى بعد مرور بعض الوقت
ما يحدث: عندما يقوم المستخدم بحذف منشور موضوعه الخاص، يتم تعيين خاصية تسمى user_deleted إلى true. هناك مهمة خلفية تسمى DestroyOldDeletionStubs تعمل كل 30 دقيقة. تقوم هذه المهمة بتشغيل دالة PostDestroyer.destroy_stubs التي ستبحث في قاعدة البيانات وتحذف أي منشورات تم تعيين user_deleted فيها إلى true مع انتهاء مؤقت الحذف.
المشكلة: عندما يستعيد الطاقم المنشور، لا يتم أبدًا تعيين user_deleted إلى false، لذا في المرة القادمة التي تعمل فيها مهمة DestroyOldDeletionStubs، سيتم حذف المنشور مرة أخرى.
الحل: أنا متأكد تقريبًا أننا سنحتاج إلى إضافة بعض المنطق إلى دالة staff_recovered لتعيين user_deleted إلى false (دالة user_recovered تقوم بذلك بالفعل) انظر discourse/lib/post_destroyer.rb at main · discourse/discourse · GitHub
الحل السريع: استعد منشور الموضوع واحصل على معرف المنشور، ثم اذهب إلى وحدة تحكم Rails وقم بتشغيل:
Post.find_by_id(POST_ID).update(user_deleted: false)
يمكن العثور على معرف المنشور بسهولة عن طريق إضافة .json في نهاية رابط الموضوع. لذا باستخدام هذا الموضوع كمثال: https://meta.discourse.org/t/topic-keeps-getting-deleted/128013.json. معرف منشور الموضوع هو 632362.