تحويل فئة إلى خاصة وإضافة المستخدمين إلى مجموعة محددة مع صلاحيات الوصول

قد يكون العنوان غامضًا بعض الشيء، ولكن السياق هو تحويل فئة إلى “خاصة” ولكن مع وجود طريقة لتحديد جميع المستخدمين الذين شاركوا فيها في الماضي \\u003ctimeframe\u003e وإضافتهم إلى مجموعة بحيث يمكن تعيينها على أنها تتمتع بالوصول.\n\nلنفترض أنه يمكن إنشاء المجموعة قبل ذلك.\n\nما هو مدعوم حاليًا:\n\n- إنشاء مجموعة\n- تعيين أذونات لمجموعة لفئة\n- تغيير أذونات الفئة\n\nما هو مفقود هو طريقة لقول “تعيين هؤلاء المستخدمين إلى مجموعة”، بناءً على تفاعلهم في هذه الفئة في إطار زمني محدد.\n\nربما هناك استعلام أو رمز يمكنني تنفيذه يمكنه تحديد هؤلاء المستخدمين وتعيينهم إلى مجموعة؟

لقد استخدمت استعلام مستكشف البيانات لمعرفة من شارك في موضوع بناءً على user_actions:

-- [params]
-- int :topic = 3620561


select user_id,
       sum(action_type) actions,
       sum(case action_type when 5 then 1 else 0 end) replies
from user_actions ua
     join users u on u.id = ua.user_id
where target_topic_id = :topic
      and moderator is false
      and admin is false
group by ua.user_id

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

لتوسيع النطاق ليشمل الفئة بأكملها، قم بالربط مع topics t on target_topic_id = t.id وأضف category_id إلى عبارة where. لا ينبغي أن يكون من الصعب تحديد الإطار الزمني بناءً على ua.created_at.

إعجابَين (2)

شكراً لك @jericson، هذا بالضبط ما كنت أبحث عنه.

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

هذا هو الحل المفضل لدي عادةً. ولكن ربما يكون من المنطقي استخلاص صفحة من أمثلة العمليات المجمعة وتطبيق عبارة where على الكائن User في Rails. (وجود بيئة اختبار لوقت كهذا يساعد!)

اعتمادًا على عددهم، يمكنك لصق قائمة مفصولة بفواصل في مربع إضافة مستخدمين إلى المجموعة، إذا كان ذلك مفيدًا؟

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

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

لقد جلبت للتو تطبيق بيئة الاختبار لهذا السبب (وأيضًا اختبار ما ينكسر مع إمبر 5 :لسان_خارج: )

سأتعمق في الأمر خلال الأيام القليلة القادمة، إذا سمح لي “عملي الحقيقي” بالوقت :مبتسم:

فقط لترك الاستعلام مكتملاً في حال احتاج إليه الآخرون:

select ua.user_id, u.username, sum(action_type) actions, sum(case action_type when 5 then 1 else 0 end) replies from user_actions ua 
join users u on u.id = ua.user_id
join topics t on target_topic_id = t.id
where ua.created_at > 'YYYY-MM-DD'::date and t.category_id = CATEGORY_ID
group by ua.user_id, u.username;

فقط استبدل YYY-MM-DD بتاريخ القطع الخاص بك و CATEGORY_ID بمعرف الفئة الخاص بك.
ستعرض النتيجة user_id و username و actions و replies.

هل يمكنك توجيهي إلى هذا النص البرمجي يا @JammyDodger؟

لا يمكنني رؤيته في الرابط الذي نشره @jericson

يمكنني استخراج قائمة بالمستخدمين (ستكون حوالي 250).

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

الخيارات التي اقترحتها متاحة في واجهة المستخدم، على الرغم من أن الخيار الثاني يحتاج إلى المكون الإضافي Discourse Automation (إنه مكون إضافي جيد على أي حال :slight_smile:)

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

أنا آسف ولكنني لا أفهم كيف يمكن أن يساعدني ذلك.

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

أليس هناك دالة bulk_add_user_to_group أو حتى add_user_to_group يمكنني استدعاؤها في حلقة ربما؟

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

قد تتمكن من القيام بـ 250 دفعة واحدة، على الرغم من أنني لم أجرب ذلك. ومع ذلك، يجب أن تغطي حفنة من الدفعات ذلك، إن لم يكن كذلك.


يجب أن يكون ذلك ممكنًا أيضًا عبر واجهة برمجة التطبيقات (API) باستخدام طلب PUT إلى نقطة النهاية eg /groups/49/members.json (ستحتاج إلى group_id الخاص بك) مع قائمة بأسماء المستخدمين/رسائل البريد الإلكتروني الخاصة بك.

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

عمل بشكل مثالي، لقد نسيت أنه يمكنك إضافة أسماء مستخدمين متعددة إلى واجهة المستخدم :slight_smile:

بالنسبة للآخرين، لتصدير نتيجة استعلام psql ببساطة قم بتشغيل:

psql
\o /home/discourse/output.txt

<استعلامك هنا>
\o
exit

الآن في /home/discourse/output.txt سيكون لديك نتيجة الاستعلام كما ستتم طباعتها على الشاشة.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.