تدعم إضافة discourse-calendar الرسمية من Discourse بالفعل تصدير .ics، وهو أمر مفيد للغاية لمشاركة أحداث Discourse خارجيًا. ومع ذلك، تعتمد العديد من المجتمعات - لا سيما في التعليم أو الحكومة أو المؤسسات - على تغذيات iCal الخارجية لنشر معلومات الأحداث (على سبيل المثال، من Moodle أو Office365 أو Google Calendar أو منصات أنظمة إدارة المحتوى المؤسسية).
في الوقت الحالي، لا توجد طريقة مدمجة للاستيراد أو المزامنة من مصادر .ics. هذا يحد من استخدام Discourse كمركز تقويم حقيقي للمجتمعات التي تنشر بالفعل جداول زمنية مهمة في أماكن أخرى.
اقتراح ميزة
إضافة مزامنة تغذية iCal (الاستيراد من عناوين URL لـ .ics) إلى إضافة Discourse Calendar.
الميزات الأساسية
تكوين عنوان URL لتغذية .ics لفئة أو موضوع ممكّن للتقويم.
استيراد الأحداث تلقائيًا إلى التقويم، بما يتوافق مع تغذية .ics.
تحديد فاصل زمني للمزامنة (على سبيل المثال، كل ساعة، يوميًا) أو السماح بزر “مزامنة الآن” يدويًا.
استخدام حقل معرف الحدث لمنع التكرارات وتحديث الأحداث المعدلة بشكل نظيف.
تكوينات اختيارية
وضع علامة أو تسمية للأحداث المستوردة لإظهار مصدرها الخارجي.
الاختيار بين:
مزامنة أحادية الاتجاه (خارجي → Discourse فقط)،
أو مزامنة ثنائية الاتجاه (تحرير الأحداث المتزامنة داخل Discourse يدفع التغييرات مرة أخرى - نطاق مستقبلي).
دعم تغذيات .ics متعددة لكل تقويم، مدمجة في عرض واحد.
مؤشر مرئي على أن الحدث متزامن خارجيًا (على سبيل المثال، “متزامن من: outlook.university.edu”).
حالات الاستخدام
القطاع
مثال لحالة الاستخدام
التعليم
ملء منتديات الطلاب تلقائيًا بمواعيد الفصل الدراسي، وجداول الدورات، والاختبارات، وما إلى ذلك.
الحكومة
مزامنة الأحداث الرسمية من نظام إدارة المحتوى أو الإنترانت إلى تقويم مجتمعي مواجه للجمهور
الشركات
عكس تقويمات الاجتماعات الداخلية (من Outlook أو Google Calendar)
منتديات الأحداث
دمج قوائم المتحدثين أو جداول الجلسات من مزودي خارجيين
الأمان والخصوصية
يمكن أن تدعم تغذيات التقويم الوصول العام أو المميز برمز (على سبيل المثال، عنوان URL يحتوي على رمز سري).
يمكن أن يكون دعم OAuth2 / المصادقة الأساسية تحسينًا مستقبليًا.
حاجة مماثلة نوقشت في خيوط أقدم، على سبيل المثال، هنا
التوافق
لن تتطلب هذه الميزة discourse-events (التي تم إيقافها الآن)، وستعمل بشكل أصلي مع بناء جملة Discourse Calendar الحالي ([calendar] و [event]). سيظل المستخدمون قادرين على إنشاء أحداث Discourse أصلية يدويًا — ستؤدي مزامنة iCal فقط إلى تعزيز هذه التقاويم.
أود أن أسمع ما إذا كانت هذه الميزة موجودة بالفعل على خارطة الطريق - أو إذا كان الآخرون في المجتمع سيجدونها قيمة.
@Ethsim2 ستكون هذه ميزة ضخمة، وقد كنت أبحث في مدى جدواها الآن بعد أن تحولت Discourse إلى FullCalendar.
@sam ربط مباشرة بـ fullcalendar.io مؤخرًا، واتضح أن FullCalendar لديه الآن دعم من الدرجة الأولى لتدفقات .ics عبر نظام الإضافات الرسمي الخاص به - لذا فإن العمل الشاق تم إنجازه بالفعل بواسطة المكتبة.
الاقتراح: تمكين مزامنة تدفق .ics باستخدام الدعم الأصلي لـ FullCalendar
مع التكامل القادم لـ FullCalendar v6 في Discourse، تم وضع الأساس لدعم هذه الميزة بشكل أصلي.
تسمح إضافة FullCalendar @fullcalendar/icalendar (مع ical.js في الخلفية) بتحميل تدفقات .ics العامة مثل هذه:
عذرًا @Halden42 ولكنني مرتبك بعض الشيء بشأن منشورك.
أتفهم أن Discourse “يقوم بإصلاح الأسس” لنظام التقويم من خلال ترقية FullCalendar، ولكني قلق بشأن مقدار الوقت الذي سيستغرقه مني ملء تقويم مزدحم يدويًا. أستخدم واجهة مستخدم Discourse كل يوم لكل شيء، ويتطلب تكرار المحتوى خارج الواجهة أمرًا غير مقبول.
لاحظت أنك ذكرت ميزة أفتقدها حقًا من المكون الإضافي الخاص بـ Angus، والتي أعتقد أنها تلتقط النقطة الرئيسية لمزامنة الأحداث في Discourse:
سيكون هذا الجزء ضروريًا لحالتي الاستخدام.
لكنني قلق لأنك لم تدخل في أي تفاصيل حول كيفية تنفيذ ذلك. هل يمكنك شرح كيف سيبدو ذلك عمليًا؟ هل سينشئ Discourse موضوعًا واحدًا لكل حدث؟ هل سيدعم التحديثات أو الحذف إذا تغير التقويم المصدر؟
هذا هو الجزء الذي سأعتمد عليه أكثر، ولست متأكدًا بعد من مدى قربنا منه.
شكراً @Ethsim2 — هذه متابعة رائعة، وأعتقد أن قلقك هو القلق الصحيح تمامًا: الأمر لا يتعلق فقط بعرض الأحداث من تغذية .ics، بل يتعلق بتضمينها في Discourse بطريقة مفيدة وقابلة للتتبع.
عندما قلت “ربط الأحداث بالمواضيع أو إنشاء مواضيع جديدة”، كنت أتخيل إعدادًا مشابهًا لكيفية عمل إضافة Angus سابقًا - حيث يتوافق كل حدث في التغذية مع موضوع على Discourse، وسيتم عكس التحديثات على التغذية بمرور الوقت في الموضوع.
في الوقت الحالي، FullCalendar بمفرده لا يحتفظ بالأحداث - فهو يعرضها فقط من التغذية عند تحميل الصفحة. لذا إذا اختفى حدث من التغذية (أي تم إلغاؤه أو حذفه خارجيًا)، فإنه يختفي ببساطة من واجهة المستخدم للتقويم.
لكن هذا ليس كافيًا لمعظم سير عمل المنتديات، خاصةً عندما تُستخدم منشورات الأحداث للمناقشة، أو تأكيد الحضور، أو الإعلانات.
إليك ما أقترحه لذلك:
بدلاً من إزالة الموضوع عندما يختفي حدث من التغذية، يمكن لـ Discourse:
الاحتفاظ بالموضوع في مكانه
إضافة سطر في الأعلى مثل: ⚠️ تم إلغاء هذا الحدث أو إزالته من التقويم المصدر.
اختياريًا قفل الموضوع أو إلغاء إدراجه، حسب تفضيل المسؤول.
سيؤدي ذلك إلى الحفاظ على السياق، والسماح بالردود، وجعل الإلغاء مرئيًا - دون حذف أي شيء. من الناحية الفنية، هذا قابل للتطبيق إلى حد كبير: سنقوم فقط بتمييز أن UID لم يعد موجودًا في ملف .ics وتحديث حالة الموضوع المطابق.
لذا نعم - بينما لا يدير FullCalendar هذا الوضع بنفسه، يمكن لـ Discourse التعامل معه على مستوى المزامنة. الوظيفة التي تجلب التغذية (على سبيل المثال، عبر Sidekiq) ستتتبع الأحداث التي كانت موجودة سابقًا ولم تعد كذلك، وستقوم بتمييز الموضوع المقابل وفقًا لذلك.
إذا كان هناك اهتمام كافٍ بهذا الأمر، أعتقد أنه يمكننا بناء مواصفات مناسبة. لن يكون من الصعب إنشاء نموذج أولي.
شكراً على الرد المدروس @Halden42 — هذا يوضح الكثير.
ما وصفته هنا…
…هو بالضبط حالة الاستخدام الأساسية التي كنت أحاول استعادتها منذ الانتقال من المكون الإضافي الخاص بـ Angus. بالنسبة لي، الجزء الأكثر أهمية ليس فقط عرض الأحداث بصريًا، بل مزامنة تقويم خارجي مباشر إلى المنتدى، حيث يكون لكل حدث موضوع، وتنعكس التغييرات في هذا الحدث (مثل الإلغاء، إعادة الجدولة) في هذا الموضوع بمرور الوقت.
سأكون سعيدًا بنموذج مزامنة أحادي الاتجاه للبدء - للقراءة فقط من .ics إلى Discourse - وحتى الكشف الأساسي عن التحديثات سيغطي 90٪ من حالات الاستخدام الخاصة بي. سيكون من المثالي أيضًا عرض حالة “ملغاة” في موضوع الحدث إذا تم حذفه من الموجز، بدلاً من حذف الموضوع تمامًا.
إذا كان هناك مكان مفضل لاقتراح مواصفات لهذا - ربما بمجرد استقرار ترقية FullCalendar - سأكون مهتمًا جدًا بالمساهمة أو الاختبار.
نحتفظ بتقويمات Office 365 متعددة — لكل منها موجز .ics الخاص به — لأنواع مختلفة من الاجتماعات: اللجنة التنفيذية، وجلسات المشاركة العامة، وفرق العمل الداخلية، وما إلى ذلك. هذه الموجزات منظمة جيدًا بالفعل ويتم صيانتها بانتظام من قبل كتبة وفرق إدارية.
ما نحتاجه بشكل عاجل هو طريقة لـ:
الاشتراك في موجزات .ics مختلفة لكل فئة (على سبيل المثال، موجز واحد لكل نوع اجتماع)
إنشاء موضوع جديد تلقائيًا في فئة Discourse المقابلة
التحقق من أن الموضوع ينتهي به المطاف في الفئة الصحيحة، على غرار الطريقة التي سمحت لنا بها إضافة Angus بتصفية العلامات أو البيانات الوصفية الأخرى
عكس التغييرات (الوقت، العنوان) في الموضوع إذا تم تحديث حدث التقويم
اختياريًا، وضع علامة على الموضوع أو إغلاقه إذا تم إلغاء الحدث أو إزالته من الموجز
بالنسبة للمجالس مثل مجلسنا، تُستخدم الفئات لإدارة الرؤية التفصيلية — فبعض الاجتماعات خاصة (على سبيل المثال، تنفيذية أو تخطيطية)، والبعض الآخر عام. يمكن أن يؤدي سوء تصنيف الموضوع إلى كشف بيانات حساسة، لذا فإن التحقق على مستوى الفئة أمر ضروري.
نود أن نرى شيئًا كهذا مدعومًا رسميًا في التحديث القادم لـ FullCalendar. سيقلل ذلك بشكل كبير من العمل اليدوي ويجعل Discourse أكثر جدوى كمصدر وحيد للحقيقة لتنسيق الاجتماعات والشفافية.
أنا طالب صيدلة في الولايات المتحدة، وجامعتنا توفر جميع جداول الدورات التدريبية والامتحانات والتطبيقات العملية من خلال بوابة تقويم. لا تنتهي عناوين URL للتغذية بـ .ics، ولكن عندما أفتحها في كروم، يتم تنزيل ملف .ics صالح على الفور. لذا فهي بالتأكيد تغذية iCal قياسية - فقط مع بنية URL مختلفة.
حتى وقت قريب، كنت أستخدم إضافة أنجوس، وكانت تتعامل مع هذه التغذيات بشكل مثالي. كان كل حدث ينشئ موضوعًا، ويمكنني توجيه التغذيات المختلفة إلى فئات مختلفة (مثل “العلاج”، “الدورات التدريبية”، “الامتحانات”)، مما ساعد مجموعتنا الدراسية على البقاء منظمة.
ولكن منذ أن تسببت رسالة الخطأ this.router الأخيرة في تعطيل الإضافة، اضطررت إلى تعطيلها - مثل Ethsim2 - والآن لا توجد طريقة سهلة للحفاظ على تزامن تقويمنا.
إذا كانت الإضافة الرسمية يمكن أن تدعم:
تغذيات .ics الواردة (حتى لو لم ينتهِ عنوان URL بـ .ics)
إنشاء موضوع مع استهداف الفئة
تكوين خاص بالتغذية (على سبيل المثال، تغذية واحدة → فئة واحدة)
اكتشاف التحديث ومعالجة إلغاء الأحداث الاختياري
… فسيجعل ذلك Discourse أداة قوية للتعاون الأكاديمي. لقد كانت تعمل بشكل مثالي بالنسبة لنا قبل أن تتعطل الإضافة - لذا أود أن أرى هذه الوظيفة تُطبق بشكل أصلي.
يسعدني مشاركة عنوان URL لتقويم نموذجي بشكل خاص إذا كان ذلك يساعد في الاختبار.