توقيعات Discourse

هل أنا مجنون أم لا يوجد أي تحقق من صحة عنوان URL لصورة التوقيع للمدخلات من المستخدم؟
بشكل أساسي، يمكن للمستخدم إدخال أي شيء يريده وسيتم دفعه للمستخدمين الآخرين؟

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

مخيف :ghost:

لقد قمت بتعديل CSS إلى هذا من أجل ترميز الحد الأقصى للارتفاع والعرض يدويًا؛

.signature-img {
  max-width: 600px;
  max-height: 100px;
  width: auto;
  height: auto;
  display: block;
  margin: 5px 0;
}

لقد غيرت الحد الأقصى لحجم عنوان URL للتوقيع إلى 250 في plugin.rb

  register_user_custom_field_type("signature_url", :string, max_length: 250)
  register_user_custom_field_type("signature_raw", :string, max_length: 250)

لقد أضفت هذا في أسفل “on(:user_updated) do |user|” في plugin.rb (لن أستخدم الوضع المتقدم)

    # التحقق من صحة عنوان URL إذا لم يكن في الوضع المتقدم
    if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
      url = user.custom_fields["signature_url"]

      # التحقق الصارم: HTTPS فقط، أنواع ملفات صور معينة فقط
      unless url =~ /\Ahttps:\/\/a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=\&]+)?\z/
        Rails.logger.warn("[discourse-signatures] Rejected invalid signature_url for user #{user.id}: #{url.inspect}")
        user.custom_fields["signature_url"] = nil
        user.save
      end
    end

إذا كنت أفعل أي شيء خاطئ هنا (لم أعمل مع Discourse من قبل)، فيرجى تصحيحه وإظهار الطريقة الصحيحة للقيام بذلك.

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

لأن 250 غير كافٍ…

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

5 إعجابات

عند ترقية Discourse إلى الإصدار 3.5.0.beta8 (الإصدار 3.5.0.beta9-dev يمثل مشكلة أيضًا)، تم اكتشاف أن المستخدم قام بتعديل التوقيع ولا يمكنه حفظه (على الرغم من أنه يظهر محفوظًا ولكنه لا يسري)، ولا يزال طبيعيًا في الإصدار 3.5.0.beta7. نأمل في إصلاحه قريبًا، حيث تم تضمين العديد من الإضافات من الإصدار beta7 إلى الإصدار beta8.

إعجابَين (2)

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

  1. أتفق على أنني أود رؤية التوقيعات لمجموعات محددة فقط في واجهة المستخدم، أنا لست جيدًا في CSS.
  2. نحن نستخدم Discourse الخاص بنا كمجتمع ونظام تذاكر دعم. هل هناك أي طريقة يمكننا من خلالها الحصول على إعداد لـ “عرض التوقيعات فقط في فئات X”.

نحن نحتاج إليها حقًا فقط في قسم الدعم الخاص بنا حيث يتم إجراء معظم تفاعلاتنا عبر البريد الإلكتروني.

3 إعجابات

تم تقسيم 4 مشاركات إلى موضوع جديد: طلب ميزة: تضمين التوقيع في إشعارات البريد الإلكتروني

هل هناك أي شخص جيد في CSS يعرف كيفية:

  1. قصر القدرة على وضع توقيع على مجموعة (مجموعات) محددة؟

  2. تحديد الحد الأقصى لحجم الصورة وحجم النص للتوقيع للحفاظ عليه أقل إزعاجاً (spammy)

أعتقد أنه يمكنك استخدام هذا:

يمكنك النقر بزر الماوس الأيمن > فحص للحصول على مُعرِّف/فئة عنصر لإخفائه باستخدام display:none. أخشى أنني على هاتفي الآن لذلك لا يمكنني التحقق من الفئات/المُعرِّفات :sweat_smile: .

مرحباً يا شباب.

هل هذا المكون الإضافي لا يزال متاحاً؟

لا أستطيع العثور عليه…

إنها ليست #included-in-core، لذا ستحتاج إلى تثبيتها بشكل منفصل.

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

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

أتمنى لو كنت أعرف لغة CSS هههه

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

أردت تحقيق الأمرين التاليين:
أ) أردت تعطيل القدرة على عدم عرض التوقيعات. هذا يعني أن المستخدمين الذين يقومون بالترقية يعلمون أن توقيعهم سيظهر للجميع.

ب) أردت فقط مجموعة معينة لديها القدرة على إنشاء توقيع.

  1. اذهب إلى Admin > Appearance > Themes & components > Components > Install > Create new

  2. أضف هذا الكود إلى علامة التبويب :

<script>
// انتظر حتى يتم تحميل هيكل الصفحة الأساسي أولاً
document.addEventListener("DOMContentLoaded", function() {
    
    // قم بإعداد المراقب
    const observer = new MutationObserver(function(mutations) {
        // ابحث عن جميع تسميات التحكم في الصفحة
        const labels = document.querySelectorAll('label.control-label');
        
        labels.forEach(label => {
            // ابحث عن تسمية التوقيعات المحددة
            if (label.textContent.trim() === 'Enable Signatures') {
                // ابحث عن الحاوية الرئيسية التي تحتوي على كل من التسمية ومربع الاختيار وأخفها
                const controlGroup = label.closest('.control-group') || label.parentElement;
                if (controlGroup) {
                    controlGroup.style.display = 'none';
                }
            }
        });
    });

    // ابدأ الآن بمراقبة الجسم، لأننا نعلم أنه موجود
    observer.observe(document.body, { childList: true, subtree: true });
});
</script>

3. أضف هذا الكود إلى علامة التبويب css (استبدل XXXXX باسم مجموعتك):

/* إخفاء قسم التوقيع للجميع */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* إظهاره فقط إذا كان الفصل 'user-is-XXXXX' موجودًا على الجسم */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: block !important;
}
  1. أضف هذا الكود إلى علامة التبويب أسفل الكتلة الأولى أعلاه (استبدل XXXXX باسم مجموعتك):
<script>
(function() {
  const checkAccess = () => {
    // يخزن Discourse مجموعات المستخدم الحالي في هذا الكائن العام
    const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
    
    if (user && user.groups) {
      // تحقق مما إذا كان أي اسم مجموعة يطابق "XXXXX"
      const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
      
      if (isXXXXX) {
        document.body.classList.add('user-is-XXXXX');
      }
    }
  };

  // تشغيل فوري
  checkAccess();

  // التشغيل في كل مرة يتنقل فيها المستخدم بين الصفحات
  document.addEventListener('discourse-ready', checkAccess);
  
  // احتياطي: التشغيل مرة أخرى بعد ثانية واحدة لالتقاط التحميلات البطيئة
  setTimeout(checkAccess, 1000);
})();
</script>
  1. أضف هذا الكود إلى علامة التبويب css أسفل الكتلة الأولى أعلاه (استبدل XXXXX باسم مجموعتك):
/* إخفاء قسم التوقيع للجميع */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* إظهاره فقط إذا كان الفصل 'user-is-XXXXX' موجودًا على الجسم */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: block !important;
}

تم.

أنا لست مطورًا. كل ما أعرفه هو أن هذا يعمل بنسبة 100٪ على موقعي.

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

لقد أضفت الميزات الأكثر طلبًا إلى المكوّن الإضافي في فرع

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

3 إعجابات

بخصوص الترقية إذا كانت الأسبوع المقبل، كيف سيتم ذلك؟ :slight_smile:

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

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

شخصيًا، أوصي بالانتظار حتى يتم الانتهاء من فرع فالكو ودمجه.

نعم، الاستضافة الذاتية. لقد قمت بتثبيت المكون الإضافي. بمجرد الانتهاء من دمج هذا الفرع، هل سيتم تحديثه تلقائيًا؟ شكرًا!

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

أنت تغير سطر الإضافة الخاص بك في app.yml ليصبح كالتالي

- sudo -E -u discourse git clone -b feature/group-category-restrictions git@github.com:discourse/discourse-signatures.git

شكراً لك. سأنتظر المكوّن الإضافي المحدّث. من غير المرجح أن أفسد ذلك :rofl:

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

لا، أعتقد أنك ستحتاج إلى تحديثه يدويًا.

إعجابَين (2)