السلام عليكم ورحمة الله وبركاته،
سعدت بالمساهمة في مشروع مجتمع إتقان ضمن مبادرة «كود يخدم القرآن»، وكانت مساهمتي في تطوير نظام الإشعارات من خلال العمل على المهمتين #14 و #16.
أشارك هنا بشكل مختصر المشكلة في كل مهمة، والحل الذي اعتمدته، والسبب وراء اختيار هذا الحل.
Issue #14 — التحكم في إشعارات الوسوم
المشكلة:
كان المستخدم يستطيع متابعة الوسوم (Tags)، لكن لم تكن لديه إمكانية تحديد طريقة استلام إشعارات كل وسم بشكل مستقل.
المطلوب كان إضافة خيارات تسمح للمستخدم بالتحكم في إشعارات الوسم الذي يتابعه دون تغيير آلية المتابعة الأصلية الموجودة في النظام.
الحل الذي اعتمدته:
تم تطوير الميزة داخل Extension الإشعارات "itqan-notifications" بدل تعديل Flarum أو ملفات "vendor" مباشرة.
أضفت ثلاثة مستويات للتحكم:
- Immediate Email: إشعار داخل المنصة + بريد إلكتروني فوري.
- In-App Only: إشعار داخل المنصة فقط، بدون بريد أو Push.
- Mute: كتم إشعارات متابعة هذا الوسم.
مع الإبقاء على السلوك الافتراضي في حال لم يختر المستخدم إعدادًا خاصًا.
وفي حالة احتواء الموضوع على أكثر من وسم، تم اعتماد الأولوية التالية:
"Mute > Immediate Email > In-App Only > Default"
كما تم الحفاظ على الإعدادات العامة للمستخدم كـ Master Switch؛ فاختيار Immediate Email لا يتجاوز قرار المستخدم إذا كان قد عطّل إشعارات البريد من حسابه.
أما "Mute" فهو خاص بإشعارات Follow Tags فقط، لذلك لا يمنع الإشعارات المباشرة مثل "@mentions".
لماذا هذا الحل؟
الهدف كان إضافة طبقة للتحكم في قناة وصول الإشعار فوق نظام متابعة الوسوم الموجود أصلًا، وليس إنشاء نظام متابعة جديد أو تغيير سلوك Follow/Lurk.
بهذه الطريقة بقيت مسؤولية كل جزء واضحة، وأصبح بالإمكان تطوير خيارات الإشعارات مستقبلًا دون التأثير على نظام متابعة الوسوم الأساسي.
Issue #16 — فقدان إشعارات الردود في المواضيع القديمة
المشكلة:
كانت بعض الردود الجديدة، خصوصًا في المواضيع القديمة، لا تصل بشكل موثوق إلى صاحب الموضوع.
كما كان من الضروري أن يعرض الإشعار محتوى الرد الجديد نفسه، وليس محتوى المنشور الأصلي.
الحل الذي اعتمدته:
تمت إضافة Reply Notification مخصصة داخل نفس Extension الإشعارات.
عند إضافة رد جديد:
- يتم تحديد صاحب الموضوع الأصلي كمستلم للإشعار.
- لا يتم إرسال إشعار إذا كان صاحب الموضوع هو نفسه صاحب الرد.
- يتم التأكد من أن الرد قابل للعرض للمستخدم قبل إرسال الإشعار.
- يصبح الـPost الخاص بالرد الجديد هو Subject للإشعار.
- تعرض المعاينة نص الرد الجديد.
- ينقل رابط الإشعار المستخدم مباشرة إلى الرد الجديد.
- يستخدم البريد الإلكتروني أيضًا محتوى الرد الجديد.
وفي الوقت نفسه حافظت على نظام الاشتراكات الأصلي في Flarum للمستخدمين الآخرين الذين يتابعون الموضوع.
ولمنع وصول إشعارين إلى صاحب الموضوع، يتم استبعاده فقط من إشعار "NewPost" الأصلي عندما يحصل على Reply Notification المخصصة، دون التأثير على بقية المتابعين أو أنواع الإشعارات الأخرى.
لماذا هذا الحل؟
بدل تعديل Flarum Core أو ملفات "vendor"، تم عزل السلوك داخل Extension مستقلة.
كما لم يتم استبدال نظام الإشعارات الأصلي بالكامل، وإنما أضيف السلوك المطلوب لصاحب الموضوع فقط، مع ترك النظام الأصلي مسؤولًا عن إشعارات بقية المتابعين.
وهذا يقلل احتمالية حدوث تأثيرات جانبية ويحافظ على قابلية تحديث Flarum مستقبلًا.
النتيجة
أصبحت منظومة الإشعارات أكثر مرونة من جهتين:
- يستطيع المستخدم التحكم في طريقة وصول إشعارات الوسوم التي يتابعها.
- أصبح صاحب الموضوع يتلقى إشعار الرد الجديد بشكل صحيح مع معاينة محتوى الرد نفسه، مع الحفاظ على إشعارات بقية المتابعين.
وخلال العمل ظهرت تحديثات جديدة على Extension الإشعارات في فرع "staging"، من بينها ميزة Do Not Disturb (DND) التي أضافها مساهم آخر. لذلك تم دمج العمل معها مع الحفاظ على الميزتين وعدم استبدال إحداهما بالأخرى.
تمت مراجعة التغييرات وقبول الـPull Requests من مشرف المشروع.
جزى الله القائمين على المشروع والمساهمين فيه خير الجزاء، وأسأل الله أن يجعل هذا العمل نافعًا وفي ميزان حسنات الجميع.