مكرر الأحداث: تكرار أحداث/مواضيع التقويم إلى فترة زمنية جديدة

:information_source: ملخص يسمح للمستخدمين المصرح لهم بنسخ أحداث/مواضيع التقويم (التي تم إنشاؤها عبر Discourse Calendar and Events ) إلى فترة زمنية جديدة. يعمل على موضوع واحد أو سلسلة كاملة موسومة (على سبيل المثال، كل موضوع موسوم بـ `grand-prix`)، مع خطوة مراجعة لتحرير التواريخ المقترحة قبل التأكيد.
:hammer_and_wrench: رابط المستودع GitHub - louking/discourse-event-duplicator: discourse plugin to duplicate events · GitHub
:open_book: دليل التثبيت كيفية تثبيت الإضافات في Discourse

ملخص

تم بناء هذه الإضافة لمجتمع نادي ركض يكون فيه تقويمهم متشابهًا إلى حد كبير بأحداث تتكرر كل عام في تواريخ مُزاحة. كان إعادة إنشاء موضوع كل حدث يدويًا في كل موسم يعني تكرار كتلة [event ...]، وتصحيح العنوان، والبحث عن تلك التي تم إعادة إنشاؤها بالفعل. كان ذلك شاقًا وعرضة للأخطاء. يقوم Event Duplicator بأتمتة العملية: اختر حدثًا مصدرًا، أو سلسلة كاملة موسومة منه، واحصل على تاريخ جديد مقترح، راجعه أو عدله، ثم أكد.

راجع docs/USAGE.md للحصول على دليل استخدام كامل موجّه للمستخدمين: من يمكنه استخدامها، نسخ سلسلة مقابل موضوع واحد، وكيفية عمل خطوة المراجعة.

الميزات

  • نسخ السلسلة: اختر فئة ووسمًا أو أكثر (على سبيل المثال، grand-prix، signature-race؛ يتم مطابقة النتائج باستخدام OR وإزالة التكرارات، لذا يظهر الموضوع الذي يحتوي على عدة وسوم مطابقة مرة واحدة فقط)، مع إمكانية تقييده بنطاق تاريخي للمصدر، ثم راجع تواريخ التكرار المقترحة قبل التأكيد.
  • نسخ حدث واحد: نفس سير عمل المراجعة والتأكيد لموضوع واحد في كل مرة، من قائمة إدارة ذلك الموضوع (أيقونة المفتاح).
  • خطوة مراجعة قابلة للتحرير: تعرض كل صف تاريخ البدء الأصلي بجانب تاريخ جديد مقترح يمكنك تحريره (بدقة يومية)، بالإضافة إلى عنوان قابل للتحرير. يتم اشتقاق تاريخ الانتهاء تلقائيًا دائمًا من مدة الحدث المصدر الخاصة به، لذا لا يمكن أن يخرج عن المزامنة مع تاريخ البدء المُعدّل.
  • استراتيجيتان قابلتان للتبديل لتزاحة التواريخ، يمكن اختيارهما لكل تشغيل مع قيمة افتراضية قابلة للتكوين:
    • نفس التاريخ التقويمي: إزاحة للأمام بعدد الأشهر المُحدّد.
    • يوم الأسبوع N من الشهر: الحفاظ على “السبت الثالث من الشهر” على سبيل المثال، حتى عندما تقع الإزاحة في شهر مختلف.
  • مقدار إزاحة قابل للتكوين: إزاحة للأمام بعدد أي من الأشهر (12، أي سنة واحدة، بشكل افتراضي)، وليس سنويًا فقط. مفيد للتكرارات الشهرية أو ربع السنوية أو غيرها. يمكن تجاوزها لكل تشغيل، مع قيمة افتراضية على مستوى الموقع عبر إعداد جديد (أدناه).
  • وضع علامة “التاريخ待定”: للأحداث التي لم يتم تحديد تاريخها الفعلي بعد، ضع علامة على الصف. يتم إضافة ملاحظة قابلة للتكوين (افتراضيًا (date TBD)) إلى عنوان الموضوع واسم الحدث.
  • تتبع النسخ: يمنع نسخ نفس الحدث مرتين (مهم لأن الموضوع يمكن أن يحمل أكثر من وسم سلسلة). يتم وضع علامة على المواضيع المنسخة مسبقًا وإلغاء تحديدها بشكل افتراضي أثناء المراجعة، مع خيار صريح لإعادة تحديد المربع لإجبار العملية. يؤدي حذف موضوع منسوخ إلى تحرير مصدره لإعادة النسخ، ويعيد الإلغاء قفله.
  • ملاحظات ما بعد النسخ: تتحول الصفوف المنسوخة بنجاح إلى رابط للموضوع الجديد مباشرة في جدول المراجعة. يتم الإبلاغ عن الأخطاء الحقيقية لكل صف بدلاً من إلغاء الدفعة بأكملها.

المتطلبات

  • يجب تثبيت discourse-calendar وتمكينه. تنسخ هذه الإضافة الأحداث من خلال استخدام تنسيق منشور [event ...] الخاص بـ discourse-calendar ونموذج DiscoursePostEvent::Event بدلاً من إنشاء تخزين تواريخ منفصل.
  • تم اختبارها ضد Discourse 2026.7.0. لم يتم التحقق منها على الإصدارات السابقة.

التكوين

جميع الإعدادات موجودة تحت الإدارة → الإعدادات → الإضافات، ابحث عن event_duplicator:

الإعداد الافتراضي الوصف
event_duplicator_enabled إيقاف يمكّن الإضافة.
event_duplicator_allowed_groups الموظفين المجموعات (بالإضافة إلى إذن إنشاء الموضوعات لكل فئة) المسموح لها بنسخ الأحداث. ملاحظة: القائمة الفارغة تعني لا أحد، وليس الجميع. أضف مجموعة “الجميع” لفتح هذا بالكامل.
event_duplicator_default_date_strategy نفس التاريخ التقويمي قاعدة إزاحة التواريخ الافتراضية؛ يمكن تجاوزها لكل تشغيل.
event_duplicator_default_shift_months 12 مقدار الإزاحة الافتراضي، بالأشهر؛ يمكن تجاوزها لكل تشغيل.
event_duplicator_tbd_annotation (date TBD) النص المضاف إلى عنوان الموضوع/اسم الحدث المنسوخ عند وضع علامة TBD في المراجعة. اتركه فارغًا لإيقاف ميزة الملاحظة بالكامل.

التفويض هو AND من ثلاثة فحوصات: أذونات الفئات العادية في Discourse، والعضوية في event_duplicator_allowed_groups، وإذن discourse-calendar الخاص لإنشاء منشورات [event] على الإطلاق.

القيود المعروفة

  • تحرير التواريخ في خطوة المراجعة بدقة يومية فقط (بدون تحرير وقت اليوم). هذا قرار نطاق مقصود: حالة الاستخدام المستهدفة هي تواريخ السباقات/الأحداث المتكررة، وليس الأوقات.

المصدر / المشكلات

تم التحديث في 2026-08-01: الإصدار v1.1.0 يضيف إزاحة شهرية قابلة للتكوين، انظر أدناه

4 إعجابات

عمل رائع! وشكرًا لك على مشاركته مع الآخرين. إنه يسد فجوة بفعالية في وظيفتي #التقويم-والأحداث.

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

هل أنت منفتح على توسيع نطاقه ليشمل حالة الاستخدام الشهري؟

لدينا الكثير من الأحداث الشهرية، والثنائية الشهرية، والثلاثية الشهرية (أي ربع السنوية)، والتي تقع في الاثنين الـ X (إلخ) من الشهر. تحمل هذه الأحداث قدرًا كبيرًا من التوثيق / التحميلات، مما يجعلها غير مناسبة لآلية الأحداث المتكررة الأساسية.

في الوقت الحالي، يتطلب هذا قدرًا كبيرًا من المعالجة اليدوية، وتحدث أخطاء بالفعل!!

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

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

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

لقد أضفت add n months shift support · Issue #19 · louking/discourse-event-duplicator · GitHub لتتبع هذا. لدي بعض الأعمال الأخرى على طاولتي، لذا لست متأكدًا مما ستكون عليه الأولوية. لكن على السطح، يبدو أنه سيكون تعديلًا سريعًا جدًا.

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

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

رائع - شكراً لك.

منطقي! يمكن تحقيقه بسهولة تامة من خلال علامة مرجعية بسيطة الآن بعد أن فكرت فيه أكثر.

@nathank تم إصدار ميزة “الإزاحة (بالأشهر)” في الإصدار v1.1.0.

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

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

قم بالتحديث إلى الإصدار v1.1.0 للحصول عليها (أعد البناء إذا كان ملف app.yml يحدد علامة إصدار معينة). يحتوي المشكلة رقم #19 على تفاصيل التنفيذ إذا كنت فضولياً.

أعتقد أنه من المنطقي تحديث المنشور الأصلي أيضاً. سأقوم بذلك بحلول الغد، على الأرجح.