أفضل الممارسات لأتمتة العناوين حسب مجموعات + مستويات الثقة

مرحباً!

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


1. تعديلاتي

مسار الملف والمحتوى:

الملف: app/jobs/scheduled/update-all-titles.rb

# frozen_string_literal: true

module AddTitleBasedOnTrustLevel
  class UpdateTitles < ::Jobs::Scheduled
    every SiteSetting.update_title_frequency.hours

    def execute(args)
      group_titles = JSON.parse(SiteSetting.group_trust_level_titles || "{}")

      User.find_each do |user|
        # تخطي المسؤولين والمشرفين، لا تقم بتحديث ألقابهم
        next if user.admin? || user.moderator?

        group_id = user.primary_group_id
        next unless group_id

        group = Group.find_by(id: group_id)
        next unless group

        group_key = group.name.downcase
        tl = user.trust_level

        titles = group_titles[group_key]
        next unless titles.is_a?(Array)
        next unless tl >= 1 && tl <= 4

        new_title = titles[tl]
        next unless new_title.present?

        user.update_column(:title, new_title) if user.title != new_title
      end
    end
  end
end

الملف: config/settings.yml

plugins:
  add_title_based_on_trust_level_enabled:
    default: false
    client: true
  group_trust_level_titles:
    default: '{"designers": ["", "Junior Designer", "Designer", "Senior Designer", "Chief Designer"], "developers": ["", "Junior Developer", "Developer", "Senior Developer", "Tech Lead"]}'
    type: string
    client: true
    multiline: true
  update_title_frequency:
    default: 24
    type: integer

2. كيف اختبرت

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


3. مشكلة إدخال إعدادات المكون الإضافي

لا يوجد زر “إعدادات” لهذا المكون الإضافي في صفحة /admin/plugins. في الوقت الحالي، لتغيير التكوين، يتعين عليّ زيارة /admin/plugins/add-title-based-on-trust-level/settings مباشرةً. هل هناك طريقة لجعل زر الإعدادات أو الرابط يظهر في صفحة المكونات الإضافية لسهولة الوصول؟


4. إعداداتي الحالية

هذا هو تكوين JSON الحالي الخاص بي (سأرفق لقطة شاشة أيضًا):

{
  "designers": ["", "Junior Designer", "Designer", "Senior Designer", "Chief Designer"],
  "developers": ["", "Junior Developer", "Developer", "Senior Developer", "Tech Lead"]
}


5. أسئلة / تحسينات محتملة

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

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

إعجابَين (2)