كليجا 4: ما الجديد، وما الذي يتغير عند الترقية

Mitan Omar

Mitan Omar

@MitanOmar

18 دقيقة للقراءة
يتحدث هذا المقال عن إصدار قادم. سيصدر كليجا 4 في 30 أكتوبر 2026.

كليجا 4 هو أكبر إصدار نصدره منذ سنوات. أعدنا فيه بناء لوحة التحكم من الصفر، وأعدنا تصميم ستايل Bootstrap ليصبح الستايل الافتراضي، وكتبنا محرك القوالب والمحدّث التلقائي من جديد، ونظّفنا قاعدة البيانات من أعمدة لم يعد كليجا يقرؤها.

بعض هذه التغييرات يكسر التوافق مع إضافات وستايلات كُتبت لكليجا 3. لذلك قسمنا هذا المقال إلى أربعة أجزاء: ما الجديد في كليجا 4، والإضافات المتوفرة له، وما الذي قد يتعطل عندك بعد الترقية، وكيف تترقى بأمان. إن كان موقعك يعمل على كليجا 3، فاقرأ الجزأين الأخيرين قبل أن تبدأ.

متطلبات كليجا 4: PHP 8.2 أو أحدث، وامتداد PDO مع مشغّل MySQL/MariaDB أو SQLite 3.35 أو أحدث. ويحتاج المحدّث التلقائي ومتجر الإضافات والستايلات إلى امتداد ZipArchive.

ما الجديد في كليجا 4

لوحة تحكم جديدة اسمها Damask

يحل Damask محل Masmak، ثيم لوحة التحكم الذي رافق كليجا سنوات طويلة. بنيناه على Bootstrap 5.3 وFont Awesome 7 دون jQuery، وهو يعمل بالعربية والإنجليزية في الاتجاهين، ويتكيف مع شاشات الهواتف.

أبرز ما ستجده فيه:

  • وضع فاتح ووضع داكن، ووضع تلقائي يتبع إعداد جهازك.
  • صفحة بداية تختار أنت الصناديق التي تظهر فيها، مع رسم بياني لعمليات الرفع.
  • تحديد جماعي للعناصر في الجداول، وأزرار لنسخ القيم مثل رابط المهام المجدولة (Cron).
  • تبويب «مدونة كليجا» في صفحة البداية، يعرض آخر مقالات هذه المدونة بلغة لوحتك.
  • صفحة «فريق تطوير كليجا» بتصميم جديد، تعرض المساهمين ونشاط المشروع على GitHub برسوم بيانية.

صفحة مساعدة داخل لوحة التحكم

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

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

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

ستايل Bootstrap جديد، وهو الستايل الافتراضي الآن

أعدنا تصميم ستايل Bootstrap بالكامل على Bootstrap 5.3 وبألوان هوية كليجا. صار هو الستايل الافتراضي للمواقع الجديدة، وهو أيضاً الستايل الاحتياطي: إن نقص قالبٌ من الستايل المفعّل، يأخذه كليجا من Bootstrap.

ما يلاحظه زوار موقعك:

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

لم يعد الستايل يحمل نسخته الخاصة من Bootstrap وjQuery، بل يحمّل Bootstrap وFont Awesome من مجلد includes/static_shared_files الذي يشاركه مع لوحة التحكم.

أما ستايل Default القديم فقد خرج من نواة كليجا، ونسخته الجديدة في المتجر باسم og_default. نعود إليه في قسم التغييرات الكاسرة للتوافق.

محدّث تلقائي أكثر أماناً

الترقية التي تفشل في منتصفها أسوأ من عدم الترقية، لذلك أعدنا كتابة المحدّث التلقائي. المحدّث الجديد:

  • يتأكد أن كل ملف سيستبدله قابل للكتابة قبل أن يلمس أي ملف، ويعرض لك الملفات التي تحتاج إلى تعديل صلاحياتها.
  • يحفظ الملفات التي سيستبدلها أو يحذفها في cache/backup.zip، ويعيدها كما كانت إن فشل نسخ أي ملف.
  • يحذف ملفات النسخة القديمة التي لم تعد جزءاً من كليجا، مثل مجلد ثيم لوحة تحكم استُبدل.
  • يغلق الموقع للصيانة أثناء الترقية، ثم يعيده إلى حالته السابقة، فلا يفتح موقعاً كنت قد أغلقته بنفسك.
  • يتوقف عند أول تحديث فاشل في قاعدة البيانات ويعرض لك الخطأ، ثم يكمل منه في المحاولة التالية.
  • إن توقف تحديثٌ بعد نسخ الملفات وقبل أن يكمل قاعدة البيانات، يظهر للمؤسس في بداية لوحة كليجا تنبيه فيه زر «تحديث قاعدة البيانات» يكمل ما بقي.
  • يذكّرك بعد الترقية بتحديث الإضافات والستايلات، ويضع لك زرين يأخذانك إلى صفحتيهما.

متجر خاص بكليجا 4

لكليجا 4 قائمة مستقلة في متجر الإضافات والستايلات، هي الملف kleeja-4-catalog.json في مستودع kleeja/store-catalog. يعرض المتجر الآن الإضافات والستايلات المتوافقة مع نسخة كليجا لديك فقط، فلن تثبّت إضافة ثم تكتشف أنها لا تعمل.

رسائل بريد بتصميم جديد

صار كليجا يرسل رسائله بصيغة HTML، ومعها نسخة نصية لبرامج البريد التي لا تعرض HTML. أعدنا كتابة نصوص رسائل استعادة كلمة المرور، وإشعارات التبليغات ورسائل «اتصل بنا»، وردود الإدارة عليها. صارت أوضح، وفيها أزرار تأخذ المستلم إلى الصفحة المطلوبة.

رمز تحقق بهوية كليجا

أعدنا رسم صورة رمز التحقق (Captcha) بألوان كليجا وشعارها. صار ارتفاعها مساوياً لارتفاع حقول النماذج، وتُرسم كل خانة فيها بزاوية مختلفة.

محرك قوالب جديد

محرك القوالب هو الجزء الذي يحول ملفات .html في الستايلات إلى كود PHP. أعدنا كتابته ليكون أكثر أماناً وأوضح عند الأخطاء:

  • لا يشغّل أي كود PHP لم يكتبه هو. الشرط الذي يحوي كود PHP يُعدّ شرطاً خاطئاً، ويظهر تحذير بذلك.
  • إن نسيت إغلاق <IF> أو <LOOP>، يخبرك باسم القالب ورقم السطر بدلاً من خطأ PHP غامض.
  • يحفظ القوالب المترجمة بطريقة لا تسمح لطلب آخر بقراءة ملف لم تكتمل كتابته.
  • تعمل الحلقات المتداخلة (<LOOP> داخل <LOOP>) دون أن تفسد الحلقة الداخلية قيم الحلقة الخارجية.
  • أضفنا مرشحات للمخرجات: |e لترميز HTML، و|url للروابط، و|js لقيم JavaScript، و|int للأرقام.

إصلاحات يلاحظها زوارك

  • استئناف التحميل يعمل الآن كما يجب، فيستطيع برنامج التحميل أن يكمل ملفاً انقطع تحميله.
  • تبقى أسماء الملفات العربية سليمة عند تحميلها في كل المتصفحات.
  • انتهت مشكلة النصوص المرمّزة مرتين، مثل ظهور &amp;amp; أو &quot; في أسماء الملفات والأعضاء والمجموعات وفي الرسائل. نصلحها عند العرض دون أن نغيّر بياناتك.
  • إن ثبّتّ كليجا على http:// ثم فعّلت HTTPS لاحقاً، ينقل كليجا رابط موقعك في الإعدادات إلى https:// تلقائياً.
  • يبقى العضو مسجّل الدخول بعد أن يغيّر اسمه أو بريده أو كلمة مروره من ملفه الشخصي.
  • لا يقبل نموذج التبليغ إلا روابط تبدأ بـ http أو https.
  • يعمل حظر الأعضاء بالاسم مع الأسماء التي تحوي رموزاً خاصة.
  • تبقى روابط الإجراءات المحمية في لوحة التحكم، مثل روابط الحذف، صالحة ساعة إضافية، فلا يرفضها كليجا لأنك فتحت الصفحة قبل تغيّر الساعة بدقائق.

ما وصل بعد كليجا 3.2.7

كليجا 4 هو أول إصدار بعد 3.2.7، فهو يضم أيضاً ما أنجزناه بعدها ولم يصدر بعد:

  • انتقلت طبقة قاعدة البيانات إلى PDO، وصارت الاستعلامات تمرر القيم معاملاتٍ مربوطة (Bound Parameters) بدلاً من دمجها في نص الاستعلام.
  • صفحة أخطاء جديدة بهوية كليجا.
  • معالج تثبيت بتصميم جديد، فيه وضع داكن، ويحمّل ملفاته من خادمك بدلاً من شبكات CDN.
  • رفع إضافة من ملف zip كما يولّده GitHub لإصدارات المستودعات.

تنظيف

حذفنا من قاعدة البيانات أعمدة لم يعد كليجا يقرؤها: عدادات الزيارات القديمة في جدول stats، والعمود session_id في جدول الأعضاء، وخمسة أعمدة في جدول الإضافات. وحذفنا ملفات قديمة لم تعد مستخدمة، وأوقفنا دعم Internet Explorer في لوحة التحكم.

الإضافات في كليجا 4

لكل إضافة رسمية مستودع خاص بها على GitHub وإصدارات خاصة بها، ويثبّت المتجر الإصدار المسجّل لها في قائمة كليجا 4. أصدرنا نسخاً جديدة من الإضافات الرسمية لكليجا 4، وكل واحدة منها:

  • تعمل على كليجا 4 وPHP 8.2 وطبقة قاعدة البيانات الجديدة.
  • فيها صفحات إعدادات بتصميم Damask، مقسّمة إلى تبويبات.
  • لها دليل كامل في صفحة «المساعدة» بالعربية والإنجليزية.
  • لها أيقونة تظهر في المتجر وفي صفحة المساعدة.

إضافتان جديدتان

  • Kleeja SMTP Mailer (kj_smtp_mailer) 1.4: ترسل كل رسائل كليجا عبر خادم SMTP خاص بك بدلاً من دالة البريد في PHP، فتصل رسائل استعادة كلمة المرور وردودك بعيداً عن مجلد الرسائل المزعجة. فيها إعدادات جاهزة لـ Hostinger وGmail بضغطة واحدة، وتبويب يفحص الإعدادات ويرسل رسالة تجريبية ويعرض سبب رفض الخادم إن رفضها. وترسل الرسائل بتصميم كليجا الجديد، وتضع عنوان الزائر عنواناً للرد في تنبيهات الرسائل والتبليغات.
  • Kleeja Advanced Stats (kleeja_advanced_stats) 1.3: تقرير عمّا حدث في خدمتك بين تاريخين: الرفع والمساحة والتحميلات والرسائل والتبليغات والأعضاء الجدد، مع مقارنة بالفترة السابقة ورسوم بيانية. يعرض أكثر الملفات تحميلاً وأكبرها وأكثرها تبليغاً، وأوقات الرفع حسب الساعة واليوم، ويحفظ التقرير ملف PDF من متصفحك. ويمكن للإضافات الأخرى أن تضيف إحصائياتها إليه في تبويب خاص بها، كما تفعل Kleeja Payment.

إضافات فيها جديد

  • PDF Viewer (pdf_viewer) 2.0: عارض جديد مبني على PDF.js من Mozilla بدلاً من العارض القديم. فيه شريط أدوات للتنقل بين الصفحات والتكبير، وملء الشاشة ووضع العرض التقديمي، ويمكن تحديد النص ونسخه. يفتح الملفات الكبيرة بسرعة لأنه يقرأ الصفحات التي يعرضها أولاً، ويتبع لغة الصفحة والوضع الداكن.
  • Video & Audio Player (video_player) 2.1: انتقل إلى أحدث إصدار من Video.js. فيه سرعة التشغيل وصورة داخل صورة واختصارات لوحة المفاتيح، والنقر المزدوج على شاشات اللمس للتقديم والتأخير، وشريط مضغوط للملفات الصوتية. ويأخذ صندوق الفيديو شكل الفيديو، فلا يظهر فيديو الهاتف العمودي صغيراً.
  • Kleeja Multi-FTP Uploading (kj_ftp) 2.0: تبويب «اختبار الاتصال» يفحص حساب FTP من أوله إلى آخره: العنوان والمنفذ وFTPS وتسجيل الدخول والمجلد الرئيسي ورفع ملف وحذفه والرابط العام، ويسمّي الإعداد الخاطئ. وتدعم الإضافة FTPS والوضع السلبي (Passive) لكل حساب، ويشغّل مشغل الفيديو وعارض PDF الملفات المخزنة على خوادم FTP.
  • Kleeja Payment (kleeja_payment) 2.0.4: خيارات دفع بتصميم البطاقات، ورسائل أوضح للمشترين، وإحصائيات المدفوعات داخل Kleeja Advanced Stats، ودعم ستايل og_default. وتأتي مكتبات PayPal وStripe داخل حزمة الإصدار التي يثبّتها المتجر.
  • KJ Comment (kj_comment) 1.1.4: تُحذف تعليقات الملف معه، سواء حذفته من لوحة التحكم، أو حذفه صاحبه، أو حُذف برابط الحذف أو بتنظيف الملفات القديمة.

بقية الإضافات

نقلنا هذه الإضافات إلى كليجا 4 مع التحسينات المشتركة أعلاه:

الإضافةالإصدارما تفعله
KJ reCaptcha (kj_recaptcha)2.0تضع reCAPTCHA من Google (مربع v2 أو الشارة المخفية أو v3) مكان رمز التحقق، وتحمي دخول لوحة التحكم
Kleeja X SendFile (kj_x_sendfile)1.1تسلّم إرسال الملفات إلى Apache أو Nginx، فلا تبقى عملية PHP مشغولة طوال التحميل
Advanced Watermark (advanced_watermark)1.2تختم الصور بشعارك أو بنص، مع معاينة قبل أن يرفع زوارك أي صورة
Kleeja Admin Firewall (kj_ban_admin)1.1تحظر عنوان IP بعد 10 كلمات مرور خاطئة في دخول لوحة التحكم
KJ Download Speed Limit (kj_download_speed_limit)1.2تحدد سرعة التحميل لكل مجموعة
Meta SEO (kj_meta_seo)1.2.0تضيف الوصف والكلمات المفتاحية ووسوم Open Graph وX إلى كل صفحة
KJ AMP SEO (kj_amp_seo)1.2.0نسخة AMP سريعة لكل صفحة تحميل، مع أزرار المشاركة وإعلانات AdSense
KJ SiteMap SEO (kj_sitemap_seo)2.0.0خريطة موقع XML لآخر 100 ملف وصورة
Language Switch (language_switch)2.0قائمة لغات في أعلى كل صفحة، بجانب قائمة وضع الألوان في ستايل Bootstrap
Advanced Extras (advanced_extras)1.1هيدر وفوتر إضافي لكل صفحة على حدة

التغييرات الكاسرة للتوافق

لأصحاب المواقع

الحد الأدنى صار PHP 8.2

لا يعمل كليجا 4 على PHP أقدم من 8.2، بينما كان كليجا 3.2.7 يعمل على PHP 8.0. إن رفعت ملفات كليجا 4 على خادم يعمل بـ PHP 8.0 أو 8.1، فسيعرض موقعك صفحة خطأ بدلاً من صفحاته.

المحدّث التلقائي في كليجا 3 يتحقق من وجود PHP 8 فقط، فقد يعرض عليك الترقية إلى كليجا 4 وموقعك يعمل على PHP 8.0. تأكد من إصدار PHP بنفسك قبل الترقية.

تعطيل كل الإضافات بعد الترقية

يعطّل تحديث قاعدة البيانات في كليجا 4 كل الإضافات المثبتة. إضافات كليجا 3 لم تُكتب لهذا الإصدار، وتشغيلها دون تحديث قد يعطل الموقع كله. تبقى بيانات الإضافات وإعداداتها في قاعدة البيانات، وتعيد أنت تفعيل كل إضافة بعد تحديثها.

معظم إضافات المتجر لها نسخة لكليجا 4، تجدها في قسم «الإضافات في كليجا 4» أعلاه. أما هذه الإضافات فليست لها نسخة لكليجا 4 حتى كتابة هذا المقال: menu_toggle وrebrandly وvbulletin_integration وphpbb_integration وthumbs_generator وkjp_account_charger. إن كان موقعك يعتمد على إحداها، فانتظر قبل الترقية.

ستايل Default خرج من النواة

يحذف تحديث قاعدة البيانات مجلد styles/default. إن كان موقعك يستخدم Default، أو ستايلاً مبنياً عليه، ينقله التحديث إلى og_default بعد تنزيله من GitHub. وإن تعذّر التنزيل، ينقله إلى Bootstrap.

النتيجة أن الستايل المخصص المبني على Default لن يبقى مفعّلاً بعد الترقية، وأن أي تعديل كتبته داخل مجلد styles/default نفسه سيُحذف.

حذف ثيم Masmak

حذفنا ثيم لوحة التحكم القديم Masmak. صفحات الإضافات في لوحة التحكم كُتبت له على Bootstrap 4 وjQuery، أما Damask فلا يحمّل jQuery. يحوّل Damask خصائص Bootstrap 4 الشائعة (مثل data-toggle) إلى ما يقابلها في Bootstrap 5، لكن صفحة الإضافة التي تعتمد على jQuery لن تعمل كما يجب حتى تحدّث الإضافة.

ستايلات كليجا 3 قد تحتاج إلى تحديث

لم يعد ستايل Bootstrap يأتي بالملفات css/bootstrap.min.css وjs/jquery.min.js وjs/bootstrap.min.js. الستايلات المبنية عليه التي تحمّل هذه الملفات منه ستظهر دون تنسيق، أو تتعطل فيها أجزاء JavaScript. ومحرك القوالب الجديد أكثر صرامة، فالقالب الذي فيه وسم غير مغلق يعرض صفحة خطأ.

في المتجر نسخ لكليجا 4 من og_default وbootstrap_black وdragdrop وkleeja_return.

المحدّث يحذف ما ليس من كليجا

من كليجا 4 فصاعداً، يحذف المحدّث التلقائي الملفات الموجودة في مجلدات كليجا نفسها (مثل admin وincludes) إن لم تكن جزءاً من الإصدار الجديد. ويستبدل كذلك أي ملف من ملفات النواة عدّلته بنفسك.

لا يلمس المحدّث المجلدات cache وplugins وuploads وstyles وimages وinstall، ولا اللغات التي أضفتها إلى lang، ولا الملفات في المجلد الرئيسي مثل config.php و.htaccess. والملفات التي يستبدلها أو يحذفها تبقى في cache/backup.zip حتى الترقية التالية.

لمطوري الإضافات والستايلات

أعلن توافق إضافتك مع كليجا 4

يقرأ كليجا 4 متجره من kleeja-4-catalog.json، ولا يعرض منه إلا العناصر التي يشمل مجال توافقها (kleeja_version) نسخة كليجا المثبتة. أضف إضافتك أو ستايلك إلى هذا الملف بهذا الشكل:

kleeja-4-catalog.json
{
  "type": "plugin",
  "name": "my_plugin",
  "kleeja_version": {
    "min": "4.0.0",
    "max": "4.9.9"
  },
  "file": {
    "version": "2.0",
    "url": "https://github.com/me/my_plugin/archive/2.0.zip"
  }
}

وحدّث plugin_kleeja_version_min وplugin_kleeja_version_max في init.php، فكليجا يرفض تثبيت الإضافة خارج هذا المجال.

أثناء التطوير، عرّف IGNORE_STORE_COMPATIBILITY في config.php ليعرض المتجر كل العناصر بغض النظر عن توافقها. وإن أضفت إلى إضافتك في القائمة مفتاح preview بنفس شكل file، ينزّله الموقع الذي عرّف DEV_STAGE بدلاً من النسخة المنشورة، فتختبر نسختك الجديدة قبل نشرها.

قاعدة البيانات

  • انتقلت طبقة قاعدة البيانات إلى PDO عبر الصنف KleejaDatabase. مرّر القيم في BIND بدلاً من دمجها في نص الاستعلام.
  • صار المعامل الثاني للدالة $SQL->query() مصفوفة القيم المربوطة، بعد أن كان قيمة منطقية للمعاملات (Transactions). وحُذفت الدالتان set_names() وclient_encoding().
  • حذفنا من جدول الإضافات الأعمدة plg_icon وplg_uninstall وplg_instructions وplg_store وplg_files، ومن جدول الأعضاء العمود session_id، ومن جدول stats الأعمدة last_file وtoday وcounter_today وcounter_yesterday وcounter_all. أي استعلام يذكر أحدها سيفشل، وحُذف معها المتغير $stat_last_file.

صفحات لوحة التحكم

يبني Damask صفحاته على Bootstrap 5.3 وFont Awesome 7، ولا يحمّل jQuery. انقل صفحات إضافتك إلى أصناف Bootstrap 5 وإلى JavaScript دون jQuery. ما زالت الدوال العامة القديمة مثل checkAll() وconfirm_form() وget_kleeja_link() موجودة.

أيقونات صفحات لوحة التحكم في $ext_icons صارت أسماء Font Awesome 7 دون البادئة fa-، مثل folder-open بدلاً من folder-open-o. ولعناصر القائمة الجانبية للموقع مفتاح جديد اسمه icon يأخذ اسم أيقونة بالطريقة نفسها، والعنصر الذي تضيفه إضافة دون أيقونة يأخذ الأيقونة puzzle-piece.

محرك القوالب

الشرط الذي يحوي كود PHP، مثل اسم يبدأ بـ $ أو استدعاء دالة، صار شرطاً خاطئاً دائماً. استخدم أسماء المتغيرات والمقارنات فقط:

styles/my_style/index_body.html
<!-- لم يعد يعمل: كود PHP داخل الشرط -->
<IF NAME="$config['mod_writer']">...</IF>

<!-- اكتبه هكذا -->
<IF NAME="config.mod_writer == 1">...</IF>

<!-- المرشحات الجديدة -->
<a href="{config.siteurl}?q={query|url}">{title|e}</a>
<script>
  var fileName = {file_name|js};
</script>

وإن كانت إضافتك تضيف وسوماً خاصة إلى القوالب، فاستخدم الخطاف الجديد style_parse_func_step_2، وأضف إلى المصفوفة $rep أزواج «تعبير نمطي ← بديل» تعمل على الكود بعد ترجمته.

الستايلات المبنية على Default أو Bootstrap

غيّر الستايل المبني على Default ليعتمد على Bootstrap أو على og_default:

styles/my_style/info.txt
# كان: depend_on = default
depend_on = bootstrap

وإن كان ستايلك يحمّل Bootstrap أو jQuery من ستايل Bootstrap، فحمّل Bootstrap 5.3 وFont Awesome من المجلد المشترك كما يفعل ستايل Bootstrap نفسه:

styles/my_style/header.html
<IF NAME="lang.DIR==rtl">
<link rel="stylesheet" href="{config.siteurl}includes/static_shared_files/bootstrap/css/bootstrap.rtl.min.css">
<ELSE>
<link rel="stylesheet" href="{config.siteurl}includes/static_shared_files/bootstrap/css/bootstrap.min.css">
</IF>
<link rel="stylesheet" href="{config.siteurl}includes/static_shared_files/fontawesome/css/all.min.css">

البريد

تقبل send_mail() الآن نصاً عادياً كما كانت، أو مصفوفة كتل من الأنواع text وbutton وalert تُعرض في قالب includes/mail_template.html. تحصل خطافات send_mail على $body نصاً عادياً كما كانت، ومعه $html_body. وإن كانت إضافتك ترسل البريد بنفسها، عبر SMTP مثلاً، فأرسل النسختين.

وحذفنا مفاتيح اللغة التي كانت تبني الرسائل القديمة: GET_LOSTPASS_MSG وU_REPORT_ON وBY_EMAIL وADMIN_REPLIED وREPLIED_ON_CAL، ومعها PHP_8_REQUIRED وPDO_EXT_REQUIRED.

أدوات جديدة للمطورين

  • Plugins::installFromStore('name') تنزّل إضافة من المتجر وتثبتها وتفعّلها في خطوة واحدة، فتستطيع إضافتك أن تثبّت إضافة أخرى تعتمد عليها. ومعها Plugins::download() وinstall() وenable() وdisable()، وPlugins::lastError() التي تخبرك بسبب الفشل.
  • الخطاف admin_help_guides يضيف دليل إضافتك إلى صفحة المساعدة. تجد مثالاً كاملاً في الدليل الأخير من صفحة المساعدة نفسها.
  • الخطاف kleeja_mail_template_func يغيّر قالب البريد.
  • الدالة kleeja_html_decode() تعيد النص كما كتبه صاحبه مهما تكرر ترميزه، والدالة kleeja_html_display() ترمّزه مرة واحدة لعرضه.
plugins/my_plugin/init.php
$kleeja_plugin['my_plugin']['install'] = function ($plg_id) {
    // ثبّت الإضافة التي تعتمد عليها إضافتك وفعّلها
    if (!Plugins::installFromStore('kj_smtp_mailer')) {
        kleeja_log(Plugins::lastError());
    }
};

كيف تترقى إلى كليجا 4 بأمان

تستطيع الترقية من كليجا 3 بزر التحديث في لوحة التحكم. ينسخ المحدّث ملفات كليجا 4، ثم يحدّث كليجا 4 قاعدة البيانات، ويحدّث ستايل Bootstrap من حزمة الإصدار، وينقل موقعك إلى og_default إن كان يستخدم Default، ويعيد فتح الموقع. الشرط الذي لا يتحقق منه المحدّث في كليجا 3 هو إصدار PHP، فتحقق منه بنفسك قبل أن تبدأ.

خذ نسخة احتياطية كاملة

انسخ كل ملفات موقعك، وصدّر قاعدة البيانات من لوحة الاستضافة. إن كان موقعك يعمل على SQLite، فملف قاعدة البيانات جزء من الملفات. لا تبدأ قبل أن تتأكد أنك تستطيع استعادة النسختين.

تأكد من متطلبات الخادم

تحقق من لوحة الاستضافة أن إصدار PHP هو 8.2 أو أحدث، وأن امتدادَي PDO وZipArchive مفعّلان. إن لم يكن كذلك، فاطلب من شركة الاستضافة ترقية PHP قبل أي خطوة أخرى. وإن كان موقعك يعمل على SQLite، فتأكد أن إصدار مكتبة SQLite هو 3.35 أو أحدث (تجده في صفحة phpinfo() تحت pdo_sqlite)، لأن كليجا 4 يحذف أعمدة من قاعدة البيانات، والإصدارات الأقدم لا تستطيع ذلك.

راجع إضافاتك وستايلاتك

اكتب قائمة بالإضافات والستايل الذي يستخدمه موقعك، وابحث عن كل منها في قسم «الإضافات في كليجا 4» أعلاه. إن كان موقعك يعتمد على إضافة ليست لها نسخة لكليجا 4، فأجّل الترقية. وإن كان عندك ستايل مخصص مبني على Default، أو عدّلت ملفات النواة بنفسك، فاحفظ تعديلاتك في مكان منفصل.

جرّب على نسخة تجريبية أولاً

انسخ موقعك وقاعدة بياناته إلى نطاق فرعي أو إلى جهازك، ونفّذ الترقية عليها. افتح صفحة الرفع وصفحة التحميل ولوحة التحكم، وجرّب رفع ملف وتحميله.

حدّث من لوحة التحكم

افتح صفحة «فحص عن تحديثات» في لوحة تحكم كليجا 3، ثم اضغط «تحديث الآن!». ينزّل المحدّث كليجا 4 ويستبدل الملفات ويحدّث قاعدة البيانات في ثلاث خطوات، ويغلق الموقع للصيانة أثناءها. لا تغلق الصفحة حتى تنتهي الخطوات الثلاث.

يحذف تحديث قاعدة البيانات الأعمدة القديمة، ويعطّل الإضافات، وينقل موقعك من Default إلى og_default إن كان يستخدمه، ويحذف مجلدَي Masmak وstyles/default.

أعد تحميل لوحة التحكم

بعد انتهاء التحديث، أعد تحميل لوحة التحكم بالضغط على Ctrl+F5، لأن Damask حلّ محل Masmak وتغيرت ملفات CSS وJavaScript. إن ظهر لك في بداية لوحة كليجا تنبيه «قاعدة البيانات تحتاج إلى تحديث»، فاضغط «تحديث قاعدة البيانات» فيه ليكمل كليجا ما بقي.

حدّث الإضافات والستايلات وفعّلها

افتح صفحة «إضافات برمجية» في لوحة التحكم، وحدّث كل إضافة ثم فعّلها واحدة بعد الأخرى، وافتح موقعك بعد كل واحدة. إن تعطل شيء، فستعرف الإضافة المسؤولة. ثم افتح صفحة «الستايلات» وحدّث ستايلك.

الترقية اليدوية: إن لم يكن ZipArchive متوفراً على خادمك، أو لم يستطع المحدّث الكتابة على ملفات موقعك، فنزّل كليجا 4.0.0 من صفحة الإصدارات على GitHub وارفع ملفاتها فوق ملفات موقعك، بما فيها مجلد install. ثم افتح /install/update.php وادخل باسم المدير وكلمة مروره، واحذف مجلد install بعد انتهاء التحديث. لا تحوي الحزمة الملف config.php، فتبقى إعدادات الاتصال بقاعدة البيانات كما هي.
إن فشلت الترقية، فلا تحاول إصلاح الموقع المباشر وهو نصف محدّث. استعد النسخة الاحتياطية من الملفات وقاعدة البيانات معاً، ثم أخبرنا بما حدث.

نصائح لمواجهة التغييرات الكاسرة

  • انقل تعديلاتك إلى إضافة. إن كنت تعدّل ملفات النواة مباشرة، فسيستبدلها المحدّث في كل ترقية. الخطافات (runHook) موجودة في كل صفحة تقريباً، والإضافة الصغيرة تحمي تعديلك من الترقيات القادمة.
  • ابنِ ستايلك على Bootstrap. الستايل الذي يعتمد على Bootstrap عبر depend_on يرث كل قالب لم تعدّله، فتصلك إصلاحات القوالب مع كل ترقية دون أن تكتبها بنفسك.
  • لا تترقَّ وإضافة أساسية لموقعك ما زالت دون نسخة. إن كانت خدمتك تعتمد على الربط بمنتدى مثلاً، فإبقاء موقعك على كليجا 3.2.7 حتى تصدر نسختها أفضل من موقع يعمل دونها.
  • فعّل DEV_STAGE في النسخة التجريبية. أضف define('DEV_STAGE', true); إلى config.php فيها، فيعرض كليجا كل الأخطاء ويترجم القوالب في كل طلب. ستجد أخطاء الستايلات والإضافات بسرعة، لكن لا تفعّله في موقعك المباشر.
  • اقرأ صفحة المساعدة بعد الترقية. دليل «تعرّف على لوحة التحكم» وأدلة الصفحات تختصر عليك التعرف على Damask.

شكر

من مساهمات Hani Rouatbi في هذا الإصدار: إصلاح استئناف التحميل، وتحديث بيانات الدخول بعد تعديل الملف الشخصي، والتحقق من رمز حذف الملفات، وعدد من الأخطاء الأخرى. شكراً لـ Hani، ولكل من أبلغ عن خطأ أو ترجم أو اقترح فكرة.

روابط

إن واجهتك مشكلة في الترقية، فافتح بلاغاً على GitHub واذكر فيه إصدار PHP ونوع قاعدة البيانات والإضافات التي كانت مفعّلة، وسنساعدك.