غير قادر على تعيين الوضع الافتراضي إلى وضع markdown

مرحباً، أجد أنه حتى عندما أقوم بتعيين “default_composition_mode” على وضع Markdown، يتم تقديم محرر النصوص الغنية للمستخدمين في منتدياتي عند بدء موضوع جديد. إصدار المنتدى هو “Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0”.

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

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

إعجابَين (2)

متابعةً لهذا، لدينا إضافة تستخدم رموز BBCode “wrap_open”، والتي لم يدعمها محرر النصوص المنسقة بعد. لذا نحتاج إلى التأكد من بقائنا في وضع Markdown في الوقت الحالي.

لقد استخدمت Claude Sonnet لإنشاء الكود التالي لضمان ذلك. سأكون سعيدًا بتلقي أي ملاحظات حول كيفية تحسينه (خاصة إذا كان به أي أخطاء :sweat_smile:). أشارك هذا أيضًا في حال ساعد مشرفي منتديات آخرين. يوضع الكود في إعدادات السمة > JS (/admin/customize/themes/2/common/js/edit):

import {
  apiInitializer
} from "discourse/lib/api";

export default apiInitializer((api) => {
  // فرض تبديل محرر المستخدم إلى وضع markdown
  function switchToMarkdownMode() {
    const currentUser = api.getCurrentUser();

    // يجب أن يكون المستخدم مسجلاً دخوله إذا تم فتح المؤلف
    if (!currentUser) {
      console.error('لم يتم العثور على مستخدم');
      return;
    }

    // تم الحصول على هذا الخيار من هنا
    // https://github.com/discourse/discourse/blob/f0fc5646dc9bd29b0e814faea490e34800e9b322/app/assets/javascripts/discourse/app/models/user.js#L262C1-L266C4
    const currentMode = currentUser.get('user_option.composition_mode');

    if (currentMode !== 0) {
      // التبديل فقط إذا لم يكن بالفعل في وضع markdown
      // مثال للاستخدام: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
      currentUser.set('user_option.composition_mode', 0);

      // حفظ تفضيل المستخدم على الخادم
      currentUser.save(['composition_mode']).then(() => {
        console.log('تم التبديل بنجاح إلى وضع markdown');
      }).catch((error) => {
        console.error('فشل تحديث وضع التركيب:', error);
      });

      // تبديل واجهة المستخدم للمؤلف الحالية فورًا
      setTimeout(() => {
        const toggleButton = document.querySelector('.composer-toggle-switch[data-rich-editor]');
        if (toggleButton) {
          const isRichTextActive = toggleButton.getAttribute('aria-checked') === 'true';
          if (isRichTextActive) {
            toggleButton.click();
            console.log('تم تبديل المؤلف الحالي إلى وضع markdown');
          }
        }
      }, 100); // تأخير بسيط لضمان عرض المؤلف بالكامل
    } else {
      console.log('بالفعل في وضع markdown، لا حاجة للتغيير');
    }
  }

  api.onAppEvent('composer:opened', () => {
    switchToMarkdownMode();
  });
});

هذه ممارسة سيئة بشكل عام، الاعتماد على التوقيت لمثل هذه الأشياء هش.

دعني أفصل هذا، نريد بالتأكيد السماح للمسؤولين بتعيين الإعدادات الافتراضية لوضع markdown.

ما هو الحد الأدنى من التكرار هنا؟

إعجابَين (2)

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

إعجابَين (2)

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

إعجابَين (2)

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

لكي يعمل هذا كما هو متوقع، قمت بما يلي:

  • تم التحقق من المستخدم أ بأن المحرر تم تبديله إلى الوضع الغني
  • بصفتي مسؤولاً، قمت بتغيير الإعداد الافتراضي إلى وضع markdown وطبقته على جميع المستخدمين
  • بصفتي المستخدم أ، قمت بإعادة تحميل الصفحة وأعدت فتح المحرر، ورأيت أنه كان في وضع markdown

إذا لم أقم بإعادة التحميل في الخطوة 3، لكنت لا أزال أرى الوضع الغني.

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

شكرًا على المتابعة يا مارتن. لقد قمت بالفعل بتعيين الوضع على Markdown يوم الأحد. ثم قمت بتسجيل الدخول بحساب تجريبي يوم الاثنين، في ملف تعريف متصفح منفصل، والذي تلقى محرر Rich بدلاً من ذلك.

أيضًا، إذا كان ذلك مفيدًا، في كل مرة أقوم فيها بتعيين “default_composition_mode” على “Markdown”، أتلقى التحذير: “هل ترغب في تطبيق هذا التغيير تاريخيًا؟ سيؤدي هذا إلى تغيير التفضيلات لـ 61 مستخدمًا حاليًا.” أفهم أنني يجب أن أحصل على هذا في المرة الأولى، ولكن يبدو أنه خطأ أنه يطالبني في كل مرة لعدد من المستخدمين.

لمزيد من الاختبار، قمت أيضًا بتسجيل الدخول للتو إلى حساب تجريبي آخر لم يسجل الدخول لمدة 10 أشهر. تم تعيينه أيضًا على وضع Rich Text افتراضيًا.

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

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

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

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

وفقًا لصفحة /about الخاصة بنا، لدينا 20,000 عضو.

سأوضح أن الخطوات هي كما يلي:

  1. قم بزيارة /admin/site_settings/category/all_results?filter=default_composition_mode
  2. قم بتعيين default_composition_mode إلى وضع Markdown. حتى عندما يكون بالفعل في وضع Markdown، يمكنك فتح القائمة المنسدلة وتحديد خيار Markdown.
  3. احصل على تحذير لعدد XX من المستخدمين. اقبله.
  4. انتظر عشر دقائق، ثم أعد تحميل الصفحة.
  5. قم بتعيين default_composition_mode إلى وضع Markdown (نفس الخطوة 2).
  6. مرة أخرى، احصل على تحذير لنفس العدد من المستخدمين.

كما ذكرت، لا أعرف أيضًا المدة التي تستغرقها (أكثر من 10 دقائق؟) لتحديث تفضيلات المستخدم التاريخية. أيضًا، لا أعتقد أن كل هؤلاء المستخدمين سيقومون بتحديث تفضيلاتهم مرة أخرى في هذا الوقت فقط. قد يكون هناك شيء فاتني هنا.

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

حسنًا، بالتأكيد لا يبدو أن الكثير من الأشخاص سيقومون بالتبديل في ذلك الوقت :thinking: هل يمكنك إجراء تسجيل شاشة لإظهار ما يحدث؟

أنصحك أيضًا بإلقاء نظرة على علامة التبويب “الشبكة” (Network) في أدوات مطوري Chrome. يجب أن تعرض طلبين مثل هذين بعد حفظه (الأول هو الذي يعرض المطالبة الخاصة بالمستخدمين XX، والثاني هو لحفظ الإعداد فعليًا وإجراء التعبئة الخلفية):

image

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

شكراً على المعلومات الإضافية. تم عرض الطلبين في الصورة أدناه. كلاهما كانا سريعين للغاية.

يوجد تسجيل فيديو على رابط Drive هذا. قمت بتعيين الإعداد، وقبلت مربع الحوار التحذيري، وانتظرت قليلاً، وأعدت تحميل الصفحة، ثم قمت بتعيينه مرة أخرى. ثم ظهر لي مربع الحوار التحذيري مرة أخرى.

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

حسنًا، تتكشف الأمور… هذا الجزء حيث تختار Markdown عندما يكون لديك بالفعل Markdown محددًا ويعرض الحفظ:

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

  • تغيير الإعداد إلى “نص منسق”
  • حفظه، ولكن اختر “لا، قم بتطبيق التغييرات للمستقبل فقط”
  • العودة إلى “Markdown”
  • حفظه، واختر “نعم” لتطبيقه بأثر رجعي

وانظر إذا كان ذلك سيصلح المشكلات التي تواجهها.

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

شكرًا لإعلامي. لقد سجلت الدخول باستخدام حساب اختبار قديم، ويبدو أنه عمل بشكل صحيح: لقد حصل على وضع Markdown عند التشغيل الأول :slightly_smiling_face:

هل هناك طريقة للتحقق مرة أخرى من أن جميع المستخدمين في وضع Markdown، على سبيل المثال، باستخدام مستكشف البيانات؟

إعجابَين (2)

يسعدني سماع أن ذلك حل المشكلة!

نعم بالتأكيد، يمكنك إجراء استعلام مثل:

SELECT composition_mode, COUNT(composition_mode) FROM user_options GROUP BY composition_mode;

القيم موجودة هنا:

إعجابَين (2)

شكراً لك، جميع مستخدمينا الآن في وضع Markdown :partying_face:

3 إعجابات

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

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

تم إصلاحه بواسطة FIX: Don't show setting save/cancel buttons when selecting the current value by OsamaSayegh · Pull Request #34552 · discourse/discourse · GitHub

5 إعجابات