المجموعات الديناميكية في Discourse

:information_source: ملخص إدارة عضوية المجموعات تلقائيًا
:hammer_and_wrench: رابط المستودع https://github.com/communiteq/discourse-dynamic-groups
:open_book: دليل التثبيت كيفية تثبيت الإضافات في Discourse

الميزات

تحتاج مجتمعات Discourse في كثير من الأحيان إلى أتمتة عضويات المجموعات بناءً على شروط مثل امتلاك الشارات أو العضويات الحالية في مجموعات أخرى.

تشمل حالات الاستخدام الشائعة:

  • المستخدمين غير المنتمين إلى مجموعة “المشتركين”

  • المستخدمين غير المحظورين من النشر في Marketplace

  • المستخدمين الذين يتمتعون بمستوى ثقة 0 أو مستوى ثقة 1، ولكن ليس مستوى ثقة 2

  • المستخدمين الذين أكملوا درس المستخدم الجديد أو كانوا أعضاء لمدة تزيد عن عام

  • المستخدمين المنتمين إلى client_1 أو client_2 أو client_3 وغير المنتمين إلى فئة المتدربين

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

تقدم هذه الإضافة حقل تعبير منطقي (Boolean expression) إلى إعدادات المجموعة، مما يسمح للمسؤولين بتعريف قواعد تحدد عضوية المجموعة ديناميكيًا.

أمثلة:

  • المستخدمين غير المنتمين إلى مجموعة “المشتركين”
    trust_level_0 AND NOT subscribers

  • المستخدمين غير المحظورين من النشر في Marketplace
    trust_level_2 AND NOT banned_users

  • المستخدمين الذين يتمتعون بمستوى ثقة 0 أو مستوى ثقة 1 ولكن ليس مستوى ثقة 2
    trust_level_0 AND NOT trust_level_2

  • المستخدمين الذين أكملوا درس المستخدم الجديد أو كانوا أعضاء لمدة تزيد عن عام
    badge:certified OR badge:anniversary

  • المستخدمين المنتمين إلى العميل 1 أو 2 أو 3 وغير المنتمين إلى فئة المتدربين
    (client_1 OR client_2 OR client_3) AND NOT interns

التكوين

بمجرد تثبيت الإضافة وتفعيلها، ستظهر علامة تبويب جديدة في واجهة إدارة المجموعات:

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

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

28 إعجابًا

عمل رائع يا ريتشارد!

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

سأستخدمه بشكل أساسي لتمكين المجموعات الفرعية الوظيفية.

4 إعجابات

بالتأكيد إضافة مرحب بها لميزات Discourse!

إعجابَين (2)

تم دمج 7 مشاركات في موضوع موجود: يعمل الإدخال الأول فقط مع حقول التحديد المتعدد عند استخدام مشغل عند تسجيل دخول المستخدم لأول مرة

مرحبًا، شكرًا لك على تطوير هذا المكون الإضافي المفيد للغاية!

أستخدم حاليًا Discourse Dynamic Groups لإضافة جميع المستخدمين غير المجهولين تلقائيًا إلى مجموعة خاصة. التعبير المنطقي الخاص بي هو:

NOT anonymous_users
السلوك المتوقع:
عندما يسجل مستخدم جديد (لا ينتمي إلى مجموعة anonymous_users)، يجب إضافته تلقائيًا إلى هذه المجموعة، دون أي تدخل يدوي.

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

إعجابَين (2)

همم… ملاحظة جيدة. وأنا أتفق على أن هذا يجب أن يكون السلوك المتوقع.

من وجهة نظر فنية، لن يعيد المكون الإضافي تقييم عضوية المجموعة إلا في حالتين مختلفتين:

  1. عند حفظ التعبير المنطقي في إعدادات المجموعة
  2. إذا تمت إضافة مستخدم أو إزالته من مجموعة مذكورة في التعبير المنطقي.

عندما يسجل مستخدم جديد، لا تكون أي من الحالتين صحيحة.

هل يمكنك محاولة تغيير التعبير إلى trust_level_0 AND NOT anonymous_users وإبلاغنا إذا كان ذلك يحل المشكلة؟

3 إعجابات

مرحباً،

عندما أحاول استخدام التعبير

trust_level_0 AND NOT anonymous_users

أحصل على الخطأ:
كلمة مفتاحية أو مجموعة أو شارة غير معروفة: 'anonymous_users'

إذا قمت بتغيير اسم المجموعة إلى مجموعتي الفعلية، على سبيل المثال:

trust_level_0 AND NOT interns

ما زلت أتلقى:
كلمة مفتاحية أو مجموعة أو شارة غير معروفة: 'interns'

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

4 إعجابات

شكرًا لك على الإبلاغ عن ذلك.

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

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

3 إعجابات

هل يستخدم هذا مكون “Category restrictor” الإضافي الخاص بك أم أنه يعمل بشكل مستقل عنه؟

مكون إضافي رائع لسد الفجوات.

إنها تعمل بشكل مستقل.

إعجابَين (2)

مرحباً،

أنا أستخدم إضافة المجموعات الديناميكية (Dynamic Groups) وقمت بتعيين معاييري كالتالي:

trust_level_0 AND NOT anon_group

ومع ذلك، لاحظت أنه يتم إضافة المستخدمين ذوي trust_level_1 الذين ليسوا في anon_group إلى هذه المجموعة الديناميكية أيضًا.

هل يمكنك تأكيد ما إذا كان هذا هو السلوك المتوقع، أم أن هذه مشكلة؟

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

إعجابَين (2)

شكرا على التوضيح

أنا أحب هذا البرنامج المساعد حقًا :heart: — إنه مفيد للغاية لعدة حالات استخدام. شكرًا مرة أخرى لفريق Communiteq على مشاركته وصيانته!

مسألة تجربة المستخدم - ألا يكون من الأفضل إخفاء حقول المفاتيح بدلاً من إخفاء تبويب العضوية بالكامل؟

لاحظت أنه يخفي تبويب العضوية في صفحات المجموعات. أعني هذا التبويب:

وفي حين أنني أستطيع فهم السبب، إلا أن هذا يتسبب في بعض المشاكل عندما ترغب في التعديل على العنوان الافتراضي، والزينة، والتأثير.

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

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

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

أوافق على اقتراحك، لكن…

هذه وظيفة أساسية.
عند تعيين المجموعة الديناميكية على أنها “تلقائية”، ستختفي علامة التبويب “الأعضاء”.

هذا لن ينجح، لأن نواة Discourse لن تُظهر علامة التبويب من الأساس. إنها ليست مخفية، بل ببساطة غير موجودة.

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

أجل، لقد استنتجت ذلك في الوقت بين نشر رسالتي وردك! لم أكن أدرك أنك ترتبط بالوظائف الأساسية من خلال ذلك — وقد تم ذلك ببراعة أيضًا.

لقد شطبت اقتراحي الخاطئ.

أعتقد إذن أن البديل الآخر الذي أشرت إليه مقبول.

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

لم أكن أدرك ذلك أيضًا!

سنقوم بجولة صيانة لجميع الإضافات خلال الشهر أو الشهرين القادمين، ربما نحتاج إلى إعادة النظر في علامة “تلقائي” حيث أتذكر أنها كانت مجرد طريقة سريعة لتعطيل وظيفة إضافة/إزالة الأعضاء. كل الأشياء الأخرى على الأرجح آثار جانبية غير مرغوب فيها.

4 إعجابات

هل توصلتَ إلى أي نتيجة بشأن هذا الأمر؟

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

هناك بعض إشعارات الإلغاء في هذا البرنامج المساعد في الوقت الحالي:

image

image

3 إعجابات

لقد قمت بحلها. شكرًا لك على الإبلاغ عن هذه المشكلات! :+1:

3 إعجابات