Quick Messages Plugin

حاول إعادة إنتاج المشكلة باستخدام النسخة المحمولة من جوجل كروم أو النسخة المحمولة من فايرفوكس (أو أي متصفح محمول آخر).

إعجابَين (2)

مسح الذاكرة المؤقتة حل المشكلة! شكرًا! تعديل: أو ربما لا. :frowning:

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

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

@DaleKramer @Hifihedgehog إذا كانت لديك مشكلة عاجلة، فأخبرني وسأقوم بمراجعتها هذا الأسبوع.

4 إعجابات

في الواقع، بعد تحديث الخادم، عاد المشكلة. كما يحدث ذلك على جميع متصفحاتي المحمولة:

لقد أعدت إضافة الرسائل السريعة إلى thepavilion.io. هل يمكنك تكرار المشكلة هناك؟

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

ربما يمكنك النظر في هذه المشكلة التي واجهتها والتي بدت وكأنها تشير إلى أن هذه الإضافة هي السبب

في أحدث الإصدار، الرسائل السريعة لا تعمل بشكل صحيح، وفي كل رسالة تظهر لي هذه الرسالة:

عذرًا، لا يمكنك إنشاء رسالة خاصة في موضوع موجود مسبقًا.

صحيح، أنا أحصل على نفس الخطأ: عذرًا، لا يمكنك إنشاء رسالة خاصة في موضوع موجود.

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

أحصل على نفس خطأ “لا يمكن إنشاء رسالة خاصة”. هل يمكن أن يكون بسبب هذا التعديل؟

https://review.discourse.org/t/fix-ensures-we-dont-attempt-to-create-a-new-pm-on-an-existing-topic-9029/9319

شكرًا على التقارير. سأراجع هذا في أقرب وقت ممكن.

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

كانت هذه هي المشكلة. الحل هو إعادة كتابة دالة valid؟ دون التغييرات الواردة في هذا الالتزام، لذا في ملف plugin.rb أو ما شابه ذلك قم بـ
require_dependency ‘post_creator’

class ::PostCreator

def valid?

أعد كتابتها هنا مطروحًا منها 4 أسطر

ربما أقوم بإنشاء طلب سحب (PR) لهذا الأمر غدًا إذا لم يقم به شخص آخر، حيث كنت أعمل عليه طوال الصباح.

4 إعجابات

سيكون ذلك موضع تقدير كبير. الأمور مشغولة جدًا في الوقت الحالي :grimacing:. شكرًا لك!

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

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

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

نعم، أتفق معك، هذه ليست الطريقة الصحيحة للقيام بذلك… خاصة مع وجود دالة valid?، فهذا مجرد انتظار لحدوث ثغرة أمنية… ولا نريد أن يصبح Discourse هو الـ Wordpress التالي من هذه الناحية… لكن ما البديل الجيد؟

لقد كنت أواجه صعوبة مع أمثال هذه الأمور مؤخرًا، حيث توجد دالة طويلة مليئة بالتحقق وأريد تجاوز تحقق واحد فقط، في منتصف الدالة.

لا يمكنك ببساطة التحقق مما إذا كان :create_pm_on_existing_topic هو الخطأ الوحيد لأن الكود يعود فورًا عند تعيينه، وقد يكون فشل في تحقق آخر بعد ذلك أيضًا.

سأقوم على الأقل بإضافة هذا الوحدة (module) في البداية، ثم التحقق مما إذا كانت هذه حالة رسالة سريعة في دالة valid? الجديدة. إذا كانت كذلك، شغّل كود التحقق المعدّل، ولكن إذا لم تكن تتعلق برسالة سريعة، فقط return super بدلاً من ذلك، لاستدعاء الكود الأساسي. عندما تتغير الدالة الأساسية، فإنك ستكسر فقط وظيفة الإضافة (plugin) وليس باقي برنامج المنتدى.

كان عليّ مقارنة الدالتين سطرًا بسطر لأكتشف أن التحقق الذي تم إزالته كان:

if new_topic?
  ... 
else
  if @topic.present? && @opts[:archetype] == Archetype.private_message
    errors.add(:base, I18n.t(:create_pm_on_existing_topic))
    return false
  end
...

كان تعليقًا لن يضرّ :wink:

هل يعرف أحد طريقة أفضل لضمان بقاء هذه النوعية من التصحيحات الديناميكية (monkey patches) قابلة للصيانة؟

(هل استخدمت بالفعل مصطلحي “monkey patch” و"قابل للصيانة" في جملة واحدة؟ :thinking:)

في الواقع، ما زلت غير متأكد من سبب تعطل الرسائل السريعة بسبب [FIX: يضمن عدم محاولة إنشاء رسالة خاصة جديدة في موضوع موجود #9029]؟ هل يعمل إصلاح 9029 للرسائل الخاصة والموضوعات، ثم لماذا تتعطل الرسائل السريعة؟ هل يعود ذلك إلى طريقة محددة تنشر بها الرسائل السريعة رسالة خاصة جديدة تتعارض مع إصلاح 9029؟

نعم، أعتقد أن هذا هو السبب. وقد أضافت #9029 هذا الفحص المحدد.

لقد دفعت للتو إصلاحًا لهذا الإضافة. أخبرني كيف تسير الأمور.

@Oliver_Walker شكرًا لك على طلب السحب (PR). كما ذكر الآخرون، من الأفضل عدم تجاوز الأساليب الكبيرة، لكن شكرًا لك على المحاولة :+1:

وخطرًا من أن أبدو مثل كعكة الحظ القديمة، في 95% من الحالات التي تفكر فيها في تجاوز جزء من أسلوب كبير على جانب الخادم، فأنت تحارب منطق الإطار (قد تكون هناك بعض الاستثناءات القليلة لهذا).

في هذه الحالة، أول ما يجب السؤال عنه هو: كيف تُضاف الرسائل الخاصة العادية إلى مواضيع الرسائل الخاصة العادية الموجودة؟ اتضح أن المشكلة كانت في أن الإضافة كانت تحاول تعيين archetype private_message لكل رسالة، بدلاً من الرسالة الأولى فقط التي تنشئ الموضوع.

5 إعجابات

شكرًا لك @angus. أفترض أنك تمكنت من اختبار هذا؟ أيضًا، هل عليّ فقط أن أطلب من شريك الاستضافة لدينا (Communiteq (المعروف سابقًا باسم DiscourseHosting)) إعادة تحميل الإضافة لنا؟