إصداران، منتج واحد
يوجد Toutadmin في نسختين: إحداهما تعمل على Node.js والأخرى على PHP. ليسا منتجين، ولا نسخة مخفَّفة وأخرى كاملة. هما المساحات نفسها وعددها 51، والمخطط نفسه بـ 142 جدولًا، واللغات نفسها وعددها 16، والشاشات نفسها. هذه الصفحة تقول ما يفصل بينهما حقًا — وهو قليل.
لماذا اثنان#
منتج المؤسسات يجب أن يُثبَّت حيث تكون المؤسسة أصلًا. بعضها يملك خادمًا وsystemd
ومسؤول نظام؛ وبعضها يملك استضافة مشتركة بأربعة يوروهات شهريًا ووصولًا عبر FTP. إصدار
Node يخاطب الأولى، وإصدار PHP يخاطب الثانية. ورفض الثانية كان سيعني رفض نصف الشركات التي
تحتاج أداة إدارة أكثر من غيرها.
ما هو متطابق تمامًا#
| العنصر | Node | PHP |
|---|---|---|
| مساحات العمل | 51 | 51 |
| جداول قاعدة البيانات | 142 | 142 |
| الأعمدة | 1311 | 1311 |
| لغات الواجهة | 16 | 16 |
| مفاتيح الترجمة | 2765 | 2792 |
| الوحدات الاختيارية | 7 | 7 |
| أحداث خطافات الويب | 8 | 8 |
| موارد واجهة البرمجة | 9 | 9 |
ولأن المخطط واحد، تنتقل قاعدة البيانات من إصدار إلى آخر بلا أي تحويل:
أوقف أحدهما، وانسخ app.sqlite ومجلدات الملفات، وشغّل الآخر. وكلمات المرور
تبقى صالحة، إذ يقرأ الإصداران صيغة البصمة نفسها. هذا أنزه اختبار للتكافؤ، وقد نجح.
ما يختلف#
شكل بضعة عناوين#
531 مسارًا في جانب Node، و513 في جانب PHP. والفارق ليس نقصًا: هي الوظائف نفسها مكتوبة بصورة أكثر إيجازًا.
-
واجهة البرمجة. يعلن Node موارده التسعة واحدًا واحدًا
(
/api/v1/collaborateursو/api/v1/services…)؛ أما PHP فيقدّمها تحت مسار واحد ذي وسيط. التسعة كلها تستجيب، والجذر يعلنها جميعًا، واختبار يستدعيها واحدًا واحدًا ليثبت ذلك. - التثبيت. يرشدك Node في خمس خطوات، ويتّسع PHP لصفحة واحدة وإرسال واحد. والمعلومات المطلوبة هي الخمس نفسها: اللغة، والمتطلبات، والشركة، وأيام الإجازة السنوية، وحساب الإدارة.
-
الصلاحيات العرضية. لدى Node مسار لكل صلاحية، ولدى PHP مسار واحد ذو
وسيط هو
/admin/droits/{flag}.
هذه الفروق الشكلية الثمانية والعشرون لا تُقال عن ظهر قلب: ملف
tests/test_parity.php يختبرها كلها، واحدًا تلو الآخر.
المسح الدوري#
يحمل Node مجدوِله الخاص: الخادم يعمل على الدوام ويوقظ نفسه. أما PHP فلا يحيا إلا أثناء
طلب: العمليات الثماني نفسها تمرّ عبر tools/cron.php، الذي يستدعيه مجدول
الاستضافة. الشفرة نفسها، والأثر نفسه، ومُطلِق مختلف.
التواريخ#
يكتب Node تواريخه بواسطة Intl المدمج في V8. ويفعل PHP الشيء نفسه متى توفّر
امتداد intl — محرك ICU نفسه، والنتائج نفسها حرفًا بحرف. وعند غيابه تأتي أسماء
الأيام والأشهر من قواميس الترجمة: يبقى التاريخ صحيحًا ومترجَمًا، وقد يختلف ترتيب عناصره في
بضع لغات.
ما لا يختلف وقد تظنه مختلفًا#
| الموضوع | في الإصدارين |
|---|---|
| رموز QR (التحقق بخطوتين) | مُرمِّز مكتوب يدويًا في جانب PHP، جرى التحقق منه بايتًا ببايت مقابل المكتبة المستعملة في جانب Node، على ست عشرة طولًا نصيًا. |
| أرشيفات النسخ الاحتياطي | ملف tar.gz مكتوب بلا أي اعتمادية في الجانبين، بالمحتوى نفسه والبصمات SHA-256 نفسها. |
| صندوق البريد المحاسبي IMAP | عميل IMAP مكتوب داخل المنتج في الجانبين. |
| PDF وCSV والاستيراد | مكتوبة داخل المنتج، والملفات الناتجة هي ذاتها. |
| سجل التدقيق | تسلسل البصمات نفسه: سطر واحد معدَّل يقطع السلسلة، في الجانبين. |
| سياسة أمان HTTP | الترويسات نفسها، وسياسة المحتوى نفسها برقم لمرة واحدة، والغياب نفسه لأي JavaScript لا غنى عنه. |
أيّهما تختار#
| حالتك | الإصدار |
|---|---|
| استضافة مشتركة، ووصول FTP، وبلا سطر أوامر | PHP — هذه هي الحالة المقصودة بالضبط |
خادم تملكه، وsystemd، ومسؤول نظام | Node |
| تُحسن إدارة أحدهما سلفًا | ذاك. التكافؤ يجعل الاختيار قابلًا للرجوع. |
| مستخدمون كثر في الوقت نفسه | Node — سيرورة دائمة، وقاعدة البيانات مفتوحة سلفًا |
| إن ترددت | PHP — قطع أقل للصيانة، والانتقال إلى Node يبقى نسخ ملفات |
كيف يُحفظ التكافؤ#
ليس نيةً بل تحققًا. مع كل تعديل تجري أربع مقارنات:
- المسارات — تُستخرج من الجانبين وتُقارن؛ وكل فارق يجب أن يكون اختلافًا موثَّقًا.
- الدوال — الأسماء التي تصدّرها كل وحدة، تُقارن وحدةً وحدة.
- المخطط — الجداول والأعمدة تُقرأ من القاعدتين وتُقارن.
- الشاشات — يُشغَّل الإصداران جنبًا إلى جنب ويتصفّحهما متصفح حقيقي صفحةً صفحة، مع مقارنة رمز الاستجابة والبنية.
وجدت هذه المرات الأربع عيوبًا حقيقية — منها اثنان يمسّان كلا الإصدارين. وهذا ما يجعلها مفيدة: تكافؤ لا تقيسه هو تكافؤ فقدته دون أن تدري.
يُضاف إلى ذلك مجموعات الاختبار: 802 حالة في جانب Node، و572 في جانب PHP، أي 1374 في المجموع.
تثبيت إصدار Node
الخدمة، والوسيط العكسي، وTLS، والنسخ الاحتياطية، والترقية.
تثبيت إصدار PHP
الاستضافة المشتركة، والصلاحيات، والمهمة المجدولة، وTLS.
توثيق Toutadmin — بُني في 2026-09-13. موقع مستقل، منفصل عن البرنامج.