# Symfony Architecture

## الحزم Bundles

يُقسم Chamilo 2.0 إلى ثلاث حزم Symfony:

### CoreBundle (`src/CoreBundle/`)

أكبر حزمة، تتعامل مع جميع الاهتمامات على مستوى المنصة:

* **المستخدمون والمصادقة** — كيان المستخدم، الأدوار، رموز JWT، مزودي OAuth2
* **نظام الموارد** — ResourceNode و ResourceFile (التجريد الموحد للمحتوى)
* **إعدادات المنصة** — مخططات الإعدادات في `src/CoreBundle/Settings/` تغطي كل جانب قابل للتكوين
* **الإدارة** — وحدات تحكم الإدارة للمستخدمين، والدورات، والجلسات، وإدارة الإضافات
* **مزودو الذكاء الاصطناعي** — نمط المصنع لـ OpenAI، Gemini، Mistral، DeepSeek، Grok
* **تخزين الملفات** — محولات تخزين قائمة على Flysystem (محلي، S3، Azure، GCS)
* **الأمان** — الناخبون، التحكم في الوصول، تسلسل الأدوار
* **الأدوات** — تعريفات أدوات الدورة المسجلة من خلال نظام الأدوات

### CourseBundle (`src/CourseBundle/`)

كل ما يتعلق بمحتوى الدورة تحديدًا:

* **كيانات المحتوى** — 101 كيان للوثائق، والتمارين، ومسارات التعلم، والمنتديات، والمصطلحات، والاستطلاعات، والحضور، والمدونات، والمهام، وأكثر
* **نسخ الدورة** — الاستيراد/التصدير مع دعم Common Cartridge 1.3 وصيغة Moodle
* **إعدادات الدورة** — مخططات الإعدادات على مستوى الدورة

### LtiBundle (`src/LtiBundle/`)

تنفيذ معيار LTI 1.3:

* **تسجيل المنصة والأداة** — إدارة اتصالات الأدوات الخارجية
* **معالجة الإطلاق** — وحدات تحكم تدفق إطلاق LTI
* **إرجاع الدرجات** — إرجاع الدرجات من الأدوات الخارجية إلى Chamilo

## حاوية الخدمات Service Container

يستخدم Chamilo حاوية حقن التبعيات في Symfony. يتم تكوين الخدمات في:

* `config/services.yaml` — تعريفات الخدمات العالمية
* دليل `DependencyInjection/` لكل حزمة — خدمات خاصة بالحزمة

## هندسة الأمان Security Architecture

يتم تكوين نظام الأمان في `config/packages/security.yaml`:

* **تجزئة كلمات المرور** — يدعم bcrypt (افتراضي)، مع الهجرة من SHA1 و MD5 القديمين
* **تسلسل الأدوار** — 18 دورًا منظمة هرميًا (ROLE\_GLOBAL\_ADMIN > ROLE\_ADMIN > ROLE\_TEACHER > ROLE\_STUDENT > ROLE\_USER؛ أدوار إضافية تشمل ROLE\_HR، ROLE\_INVITEE، ROLE\_STUDENT\_BOSS، ROLE\_SESSION\_MANAGER، ROLE\_QUESTION\_MANAGER)
* **أدوار حساسة للسياق** — أدوار على مستوى الدورة (ROLE\_CURRENT\_COURSE\_TEACHER، ROLE\_CURRENT\_COURSE\_STUDENT) يتم حسابها لكل طلب بناءً على التسجيل
* **جدار الحماية** — مصادقة JWT لـ API، قائمة على الجلسة للواجهة الويبية
* **الناخبون** — التحكم في الوصول على مستوى المورد من خلال ناخبي Symfony

## الكود القديم Legacy Code

بعض الميزات لا تزال تستخدم كود PHP القديم في `public/main/`:

* عرض التمارين وتفاعلها
* مشغل مسار التعلم
* بعض أدوات الإدارة

يتم نقل هذه تدريجيًا إلى هندسة Symfony+Vue. يتم تقديم الصفحات القديمة من خلال طبقة توافق تبدأ نواة Symfony.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chamilo.org/2.x-ar/dlyl-almtwr/developer-guide/backend/symfony-architecture.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
