> For the complete documentation index, see [llms.txt](https://docs.chamilo.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chamilo.org/3.x/ar/dlyl-alidarh/admin-guide/installation/upgrading.md).

# الترقية

ملاحظة: في هذه الصفحة، نستخدم 3.0.0 كرقم إصدار صارم و3.x لتحديد جميع الإصدارات التي تبدأ بالرقم 3 (3.0.0، 3.0.1، 3.1.0، إلخ). وتنطبق الاتفاقية نفسها على 2.x.

تُوصف عملية الترقية من 1.11.x أيضًا في ملف `public/documentation/installation_guide.html` داخل شيفرة Chamilo الخاصة بك. المعلومات هنا زائدة إلى حد كبير. يمكنك الاطلاع عليها عبر الإنترنت على `https://campus.chamilo.net/documentation/installation_guide.html`.

**قم بالترقية إلى 3.0، وليس إلى 2.x.** الإصدار 3.0 هو الإصدار الحالي، وبعض إعدادات 1.11.x لم يكن لها مكافئ بعد في 2.0.0. لذلك ينتقل نظام 1.11.x مباشرة إلى 3.0. لقد اختبرنا عمليات ترحيل مماثلة على نطاق واسع، لكن كل منصة تحمل تاريخها الخاص: جرّبها أولاً في بيئة اختبار، وفكّر في الاستعانة بمرافقة مهنية من [مزوّدي Chamilo الرسميين](https://chamilo.org/providers) في هذا المسعى.

## الترقية من 1.11.x إلى 3.0

الترقية من Chamilo 1.11.x إلى 3.0 هي **ترحيل رئيسي**، وليست تحديثًا بسيطًا. أُعيد بناء Chamilo 2.0 على إطار عمل Symfony مع مخطط قاعدة بيانات معاد هيكلته، وواجهة API جديدة، وتنظيم ملفات مختلف، ويستمر 3.0 على هذا الخط. خطّط لهذا الترحيل بعناية وجرّبه في بيئة اختبار قبل طرحه في الإنتاج.

### قبل أن تبدأ

1. **اقرأ ملاحظات الإصدار** لـ Chamilo 3.x لفهم ما تغيّر، وما هو جديد، والميزات من 1.11.x التي قد لا تكون متاحة بعد.
2. **انسخ احتياطيًا كل شيء**:
   * تفريغ كامل لقاعدة البيانات (`mysqldump` أو ما يعادله).
   * جميع الملفات في دليل تثبيت Chamilo 1.11.x، وخاصة `app/upload/` و`app/courses/` و`main/`.
   * ملف `configuration.php` الخاص بك.
3. **اختبر على خادم تجريبي أولاً.** لا تشغّل الترحيل مباشرة على خادم الإنتاج أبدًا.
4. **تحقق من متطلبات الخادم.** لدى Chamilo 3.x متطلبات مختلفة عن 1.11.x (لا سيما PHP 8.3 أو أحدث — يرفض المثبّت أي إصدار أقدم). انظر [متطلبات الخادم](/3.x/ar/dlyl-alidarh/admin-guide/installation/server-requirements.md).
5. **احذف جدول `version` من قاعدة بيانات 1.11.x.** هذه الخطوة إلزامية. يخزّن Chamilo 2.x والإصدارات اللاحقة سجل ترحيلات Doctrine في جدول بهذا الاسم، مع أعمدة أخرى. إذا تركت جدول 1.11.x في مكانه، تتوقف الترقية فورًا. الجدول غير ضروري لعمل Chamilo 1.11.x.
6. **فك ضغط الشيفرة الجديدة في دليل جديد.** تبقى ملفات 1.11.x حيث هي. يقرأ المثبّت منها كمصدر لدوراتك وملفاتك المرفوعة، ويكتب النتيجة في الشجرة الجديدة.

### تشغيل الترقية

يمكنك تشغيل الترقية عبر معالج الويب أو عبر سطر الأوامر.

#### معالج الويب

1. وجّه `DocumentRoot` للمضيف الافتراضي إلى الدليل الفرعي `public/` في الشجرة الجديدة.
2. افتح عنوان URL الخاص بك. يبدأ المعالج لأن الشجرة الجديدة لا تحتوي بعد على ملف `.env`.
3. في الخطوة 2، اختر خيار الترقية وأعطِ المسار الجذري لتثبيت 1.11.x الخاص بك.
4. اتبع المعالج حتى النهاية.

#### سطر الأوامر

عيّن `UPDATE_PATH` إلى جذر تثبيت 1.11.x الخاص بك، ثم شغّل الترحيلات:

```bash
UPDATE_PATH=/path/to/chamilo-1.11 php bin/console doctrine:migrations:migrate --no-interaction
```

ارفع أولاً `memory_limit` و`max_execution_time`. يقرأ الترحيل كل ملف دورة، لذا يحتاج إلى أكثر بكثير من القيم الافتراضية.

#### المدة التي يستغرقها

تتبع المدة حجم قاعدة بياناتك وملفات دوراتك. كنقطة مرجعية، استغرقت منصة 1.11.28 تضم 238 جدولًا و11 دورة و63 مستخدمًا و1489 ملف دورة **6 دقائق** و1.7 غيغابايت من الذاكرة، ونفّذت 393 ترحيلاً. تستغرق منصة إنتاج كبيرة ساعات. خطّط لنافذة صيانة، واقرأ [منتدى Chamilo](https://chamilo.org) أو تواصل مع [مزوّد رسمي](https://chamilo.org/providers) قبل تشغيلها على الإنتاج.

### ما قد يتطلب اهتمامًا يدويًا

| المجال                             | ملاحظات                                                                                                                                                                 |
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **الإضافات المخصصة**               | إضافات 1.11.x لا تعمل في 2.x أو 3.x. يجب إعادة كتابتها أو استبدالها. نُقلت الإضافات الرسمية تدريجيًا منذ 2.0 — تحقق من قائمة الإضافات في إصدارك لمعرفة المتاح منها.     |
| **السمات المخصصة**                 | سمات 1.11.x لا تعمل في 2.x أو 3.x. أعد إنشاء علامتك التجارية باستخدام نظام السمات في 3.x.                                                                               |
| **تعديلات قاعدة البيانات المخصصة** | أي تعديلات مباشرة على قاعدة البيانات خارج Chamilo قد لا تُرحَّل.                                                                                                        |
| **حزم SCORM**                      | ينبغي أن يُرحَّل محتوى SCORM، لكن اختبر الحزم فرديًا للتحقق من التشغيل.                                                                                                 |
| **التكاملات الخارجية**             | أي تكاملات تستخدم واجهة API أو خدمات الويب في 1.11.x تحتاج إلى التحديث لاستخدام واجهة REST فقط في 2.x عبر [API Platform](https://github.com/api-platform/api-platform). |

## الترقية من 2.x إلى 3.0

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

### بذر سجل الترحيلات أولاً

يثبّت Chamilo مخطط قاعدة البيانات مباشرة من تعريفات الكيانات، لذا فإن تثبيتاً أنشأه المثبّت يحمل المخطط النهائي لكن **سجل ترحيلات فارغاً**. التثبيتات التي أُنشئت قبل Chamilo 3.0 لم تُمنح ذلك السجل قط. يعتمد عليه أمران:

* يقرر `doctrine:migrations:migrate` ما الذي سيُشغَّل انطلاقاً منه. مع سجل فارغ يحاول إعادة تشغيل كل ترحيل من البداية على مخطط محدَّث أصلاً.
* يقرر مثبّت الويب انطلاقاً منه ما إذا كان هناك ترقية معلّقة. مع سجل فارغ يرفض الطلب، لأنه لا شيء يثبت أن ترقية مستحقة.

لذا ابذره مرة واحدة، والتزم بالترتيب أدناه.

> **تحذير: ابذر السجل قبل نسخ الشيفرة الجديدة.** الأوامر تعلّم كل ترحيل تحمله الشيفرة **المنشورة** على أنه نُفِّذ مسبقاً. إذا شغّلتها بعد نسخ شيفرة 3.0، فإنها تعلّم أيضاً ترحيلات 3.0، ولن تُشغَّل ترقيتك أبداً.

مع بقاء إصدارك الحالي في مكانه، شغّل:

```bash
php bin/console doctrine:migrations:sync-metadata-storage --no-interaction
php bin/console doctrine:migrations:version --add --all --no-interaction
```

الأمر الأول ينشئ جدول السجل. والثاني يعلّم ترحيلات إصدارك الحالي. يفشل `doctrine:migrations:version` بمفرده إذا لم يكن الجدول موجوداً بعد، لذا لا تتخطَّ الأمر الأول.

تحقق من النتيجة:

```bash
php bin/console doctrine:migrations:status
```

يجب أن يساوي `Executed` القيمة `Available`، وأن يكون `New` مساوياً 0. انسخ الآن شيفرة 3.0.

### تشغيل الترقية

انسخ الشيفرة الجديدة، ثم افتح عنوان URL واتبع المعالج، أو شغّل الترحيلات من سطر الأوامر:

```bash
php bin/console doctrine:migrations:migrate --no-interaction
php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod
```

يفتح معالج الويب فقط بينما تكون الترحيلات معلّقة. بمجرد انتهاء الترقية، يجيب بـ `409 Conflict` مجدداً، وهذا ما يحميه: ليس للمعالج تسجيل دخول خاص به.

## تحديث Chamilo 3.0.x

التحديثات الثانوية ضمن فرع 3.0 أكثر مباشرة.

### عملية التحديث

#### باستخدام حزمة

1. **انسخ احتياطياً** قاعدة البيانات والملفات.
2. **نزّل أحدث إصدار 3.0.x** من [chamilo.org](https://chamilo.org/download):
3. **فك الضغط محلياً**

على سبيل المثال (عدّل وفق الإصدار المنزَّل)

```bash
unzip chamilo-3.0.1.zip
```

4. **انسخ الملفات فوق تثبيت Chamilo الحالي**

   ```bash
   cp -r chamilo/* [your-chamilo-installation-path]/
   cp -r chamilo/.* [your-chamilo-installation-path]/
   ```
5. **شغّل ترحيلات قاعدة البيانات:**

   ```bash
   php bin/console doctrine:migrations:migrate --no-interaction
   ```
6. **امسح الذاكرة المؤقتة:**

   ```bash
   php bin/console cache:clear --env=prod
   php bin/console cache:warmup --env=prod
   ```
7. **غيّر الأذونات**

عدّل وفق مستخدم خادم الويب لديك:

```bash
sudo chown -R www-data: [your-chamilo-installation-path]/var
```

8. **تحقق** من أن المنصة تُحمَّل بشكل صحيح وراجع عيّنة من الوظائف الأساسية.

#### باستخدام Git

إذا ثبّتَّ Chamilo باستخدام Git، يمكنك اتباع هذه التعليمات بدلاً من ذلك.

1. **انسخ احتياطياً** قاعدة البيانات والملفات.
2. **اسحب أحدث الشيفرة** (أو نزّل الإصدار الجديد):

   ```bash
   git pull origin 3.0
   ```
3. **حدّث اعتماديات PHP:**

   ```bash
   composer install --no-dev --optimize-autoloader
   ```
4. **حدّث اعتماديات JavaScript وأعد بناء الأصول:**

   ```bash
   yarn install && yarn build
   ```
5. **شغّل ترحيلات قاعدة البيانات:**

   ```bash
   php bin/console doctrine:migrations:migrate --no-interaction
   ```
6. **امسح الذاكرة المؤقتة:**

   ```bash
   php bin/console cache:clear --env=prod
   php bin/console cache:warmup --env=prod
   ```
7. **غيّر الأذونات**

عدّل وفق مستخدم خادم الويب لديك:

```bash
sudo chown -R www-data: [your-chamilo-installation-path]/var
```

8. **تحقق** من أن المنصة تُحمَّل بشكل صحيح وراجع عيّنة من الوظائف الأساسية.

### أتمتة التحديثات

للمؤسسات التي تدير عدة نسخ من Chamilo، فكّر في كتابة سكربت لعملية التحديث:

```bash
#!/bin/bash
set -e

# Pull code
git pull origin 3.0

# Dependencies
composer install --no-dev --optimize-autoloader
yarn install && yarn build

# Database
php bin/console doctrine:migrations:migrate --no-interaction

# Cache
php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod

echo "Update complete."
```

## نصائح

* **قم دائمًا بالنسخ الاحتياطي قبل الترقية.** عمليات ترحيل قاعدة البيانات غير قابلة للعكس عبر واجهة Chamilo.
* **اختبر على بيئة مرحلية أولاً** -- خاصة لترحيل 1.11.x إلى 3.0، الذي يتضمن تحويلاً كبيرًا للبيانات.
* **جدول الترقيات خلال نوافذ الصيانة** عندما لا يستخدم المستخدمون المنصة بنشاط.
* **اشترك في إصدارات GitHub** على [Github](https://github.com/chamilo/chamilo-lms/releases) باستخدام أيقونة الجرس ليتم إخطارك بالإصدارات الجديدة وتصحيحات الأمان.
* **إذا أجاب المعالج `Chamilo is already installed`**، فهذا يعني أنه لم يجد ترحيلاً معلّقًا. شغّل `php bin/console doctrine:migrations:status` للتحقق. إذا كانت قيمة `Executed` تساوي 0 على منصة تعمل، فإن سجل الترحيل لم يُبذر قط — انظر [بذر سجل الترحيل أولاً](#seed-the-migration-history-first).
* **التنزيل التلقائي للإصدارات الجديدة** غير متوفر بعد في Chamilo 3.0، لكن هذا مشروع جارٍ نأمل إطلاقه قريبًا. الترقية نفسها تعمل بالفعل من معالج الويب.
