أدوات المسؤول/مفتاح ربط على منشورات الإجراءات الصغيرة

هل سيكون من الممكن تضمين أدوات المسؤول في منشورات الإجراءات الصغيرة (رسائل مغلق/مثبت وما إلى ذلك؟) مثل السماح بالحذف الدائم، وتغيير الملكية وما شابه ذلك.

أنا المستخدم المسؤول الوحيد على موقعي، وبينما يتم إخفاء هذه المنشورات كحذف ناعم، إلا أنها لا تزال قبيحة نوعًا ما - حتى كمستخدم موظف. في بعض الأحيان أقوم بتدوين الأشياء في رسائل محذوفة ناعمًا قبل تحويل المسودات الأولية إلى منشورات فعلية، لذلك يصبح من الصعب بعض الشيء التمييز بينها وبين رسائل الإجراءات الصغيرة عندما أنقر لإظهار الردود المخفية.

كما أنني لا أرغب حقًا في استخدام CSS في مكون - لأن هناك بعض الحالات التي أرغب فيها في عرض رسالة الإجراء الصغيرة مثل إعلام المستخدمين بأنني قمت بأرشفة أو إغلاق مواضيع معينة. أنا فقط لا أريد تدفقات التثبيت/إلغاء التثبيت/التثبيت/إلغاء التثبيت وما إلى ذلك - لقد رأينا جميعًا هذا من قبل لذلك أعتقد أنك تفهم جوهر ما أعنيه.

للسياق، أدير موقعًا صغيرًا به حوالي 10 مستخدمين أستخدمه بشكل أساسي كمكتبة رقمية للملاحظات والوسائط المختلفة (أقوم بترويج الأحداث كهواية لذا فإن نشر الصفحة مفيد للغاية للربط الدائم للمعلومات).

أعتقد أن مفتاح الربط لم يتم تنفيذه على منشورات الإجراءات الصغيرة عن قصد لأن معظم المواقع تفضل أن يكون لدى الموظفين سجل تدقيق لمن قام بماذا على منشور، وهذا منطقي. لكنني أعتقد أنه يمكن أن يكون مفيدًا في ظروف معينة، ربما كمكون إضافي إضافي.

هذه أيضًا أول مرة أنشر فيها على هذا الموقع :hugs:. أعتقد أن هذا هو المكان المناسب لهذا الطلب ولكن أعتذر إذا لم يكن كذلك!

3 إعجابات

منشور رائع. من المفيد للغاية الحصول على السياق المحدد وراء طلبات كهذه، لذا أشكرك على تضمين ذلك.

بالنسبة لحالة الاستخدام الخاصة بك، هل “الحذف الدائم” هو الشيء الرئيسي الذي تبحث عنه ولا يمكنك القيام به حاليًا؟

أم أن لديك حاجة لأي من الإجراءات الأخرى؟ (إذا كان الأمر كذلك، فأيها ولماذا؟)

إعجابَين (2)

شكراً على كلماتك الرقيقة، أقدر ذلك!

الحذف الدائم هو بالتأكيد الأمر الرئيسي. لا يمكنني شخصيًا التفكير في حالة استخدام محددة لتغيير ملكية إجراء صغير، أو خيارات المسؤول الأخرى المتاحة عادةً في المنشورات.

يمكنني حذف هذه الرسائل عبر Rails، ولكن بالطبع يتضمن ذلك العثور على معرف المنشور المحدد والوصول إلى وحدة التحكم، لذا سيكون الأمر أكثر ملاءمة داخل واجهة المستخدم.

أنا على دراية إلى حد ما بإنشاء المكونات (لست على دراية بتصميم المكونات الإضافية بعد، ولكني أرغب في التعلم قريبًا!). إذا تمكنت من جعل هذا يعمل في مكون - إذا كان ذلك ممكنًا على الإطلاق - فسأقدم بالتأكيد رابط GitHub للمجتمع!

إعجابَين (2)

لقد تذكرت هذا المنشور من فترة. في حال استفاد أي شخص آخر من هذا في المستقبل، كان هذا هو الحل الذي توصلت إليه لهذه المشكلة في النهاية!


إزالة منشورات الإجراءات الصغيرة غير المرغوب فيها

السكريبت الخاص بـ Rails أدناه مطلوب للقيام بذلك - لقد قمت بتسميته smalldelete.rb ووضعته في /var/www/discourse/script أثناء التواجد داخل الحاوية.

نحتاج أيضًا إلى المرور والتأكد من وضع كلمة delete في قسم المنشور الفعلي لكل منشور إجراء صغير نريد تدميره، للتمييز بين ما قد نرغب في الاحتفاظ به. إليك مثال لما أعنيه مع منشور التحديث التلقائي (Auto Bump):

يمكنك تغيير كلمة المفتاح هذه إلى شيء آخر إذا لزم الأمر عن طريق تعديل السطر p.raw.strip.downcase == \"delete\" إلى كلمة مفتاح أخرى.

سكريبت لـ smalldelete.rb


class TopicCleaner
  def self.delete_small_actions(topic_id, dry_run: false)
    topic = Topic.find_by(id: topic_id)
    unless topic
      puts "Topic #{topic_id} not found"
      return
    end

    posts = topic.posts.where(post_type: Post.types[:small_action])
    to_delete = posts.select { |p| p.raw.strip.downcase == "delete" }

    if to_delete.empty?
      puts "No small action posts with 'delete' found in topic #{topic_id}"
      return
    end

    puts "Found #{to_delete.size} matching posts in topic ##{topic_id}"

    to_delete.each do |post|
      if dry_run
        puts "Would PERMANENTLY delete post ##{post.id} (created #{post.created_at}, by #{post.user.username})"
      else
        post.destroy()
        puts "🗑️ Permanently deleted post ##{post.id}"
      end
    end

    puts dry_run ? "Dry run complete — no posts deleted." : "Finished permanent cleanup of topic #{topic_id}"
  end
end

يجد السكريبت موضوعًا حسب المعرّف (ID)، ثم يتحقق من كل منشور في هذا الموضوع لمعرفة ما إذا كان يحتوي على الكلمة المفتاحية المحددة، ولا شيء آخر. إذا كان هذا صحيحًا، فإنه يقوم بتهيئة هذا المنشور المحدد للحذف.


بمجرد إعداد السكريبت، يمكننا الدخول إلى وحدة تحكم rails وتحميله:

load Rails.root.join("script/smalldelete.rb")

ثم، أخيرًا، يمكننا تشغيل

TopicCleaner.delete_small_actions(topic_id, dry_run: false)

تم تضمين علامة dry_run أيضًا لسرد ما سيتم حذفه نهائيًا بالضبط، إذا رغبت في ذلك.


الآن بالطبع، هذه التغييرات جمالية بحتة ولا تحدث فرقًا من حيث المحتوى، حيث أن المنشورات المحذوفة مؤقتًا لن تظهر لغير الموظفين على أي حال.

أنا معجب بشكل خاص بجعل كل شيء يبدو جميلاً ومرتبًا، لذلك يمكنني بالتأكيد رؤية بعض الحالات التي قد يرغب فيها مالكو المنتديات المعينون في الاستفادة من هذا!

إعجاب واحد (1)