# Entities and Doctrine

يحتوي Chamilo 2.0 على 314 كيان Doctrine عبر حزمتين. يذكر الآتي فقط الأساسيات منها.

## تنظيم الكيانات

### كيانات CoreBundle (213)

كيانات على مستوى المنصة:

| الفئة                | أمثلة                                                                      |
| -------------------- | -------------------------------------------------------------------------- |
| **المستخدمون**       | `User`, `UserRelUser`, `AccessUrl`, `AccessUrlRelUser`                     |
| **الدورات**          | `Course`, `CourseCategory`, `CourseRelUser`                                |
| **الجلسات**          | `Session`, `SessionRelUser`, `SessionRelCourse`, `SessionRelCourseRelUser` |
| **الموارد**          | `ResourceNode`, `ResourceFile`, `ResourceLink`, `ResourceType`             |
| **الإعدادات**        | `SettingsCurrent`, `SettingsOptions`                                       |
| **الرسائل**          | `Message`, `MessageRelUser`, `MessageAttachment`                           |
| **التتبع**           | `TrackELogin`, `TrackEOnline`, `TrackEDefault`                             |
| **المهارات**         | `Skill`, `SkillRelUser`, `SkillRelProfile`                                 |
| **الذكاء الاصطناعي** | `AiRequests`                                                               |
| **الإضافات**         | `Plugin`, `AccessUrlRelPlugin`                                             |
| **الاجتماعي**        | `Usergroup`, `UsergroupRelUser`                                            |
| **xAPI**             | `XApiObject`, `XApiResult`, `XApiActivityState`                            |

### كيانات CourseBundle (101)

كيانات محتوى الدورة — جميعها مسبوقة بـ `C`:

| الفئة             | أمثلة                                                                                |
| ----------------- | ------------------------------------------------------------------------------------ |
| **المستندات**     | `CDocument`                                                                          |
| **التمارين**      | `CQuiz`, `CQuizQuestion`, `CQuizAnswer`, `CQuizQuestionCategory`                     |
| **مسارات التعلم** | `CLp`, `CLpItem`, `CLpView`, `CLpItemView`, `CLpCategory`                            |
| **المنتديات**     | `CForum`, `CForumCategory`, `CForumThread`, `CForumPost`                             |
| **المهام**        | `CStudentPublication`, `CStudentPublicationAssignment`, `CStudentPublicationComment` |
| **الاستطلاعات**   | `CSurvey`, `CSurveyQuestion`, `CSurveyAnswer`, `CSurveyInvitation`                   |
| **الحضور**        | `CAttendance`, `CAttendanceCalendar`, `CAttendanceResult`                            |
| **المدونات**      | `CBlog`, `CBlogPost`, `CBlogComment`, `CBlogTask`                                    |
| **أخرى**          | `CCalendarEvent`, `CGlossary`, `CLink`, `CLinkCategory`, `CNotebook`, `CWiki`        |

## اتفاقية التسمية

* كيانات CoreBundle: PascalCase القياسي (مثل `User`، `Course`، `Session`)
* كيانات CourseBundle: مسبوقة بـ `C` (مثل `CDocument`، `CQuiz`، `CLp`)

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

## العلاقات الرئيسية

تُظهر العلاقات عادةً بواسطة فاصل `Rel`.

### User ↔ Course

```
User --[CourseRelUser]--> Course
```

يخزن `CourseRelUser` حالة التسجيل (TEACHER = 1، STUDENT = 5).

### User ↔ Session ↔ Course

```
User --[SessionRelUser]--> Session --[SessionRelCourse]--> Course
User --[SessionRelCourseRelUser]--> (Session + Course)
```

### ResourceNode (تجريد المحتوى)

تتصل جميع كيانات محتوى الدورة بنظام الموارد عبر `ResourceNode`:

```
CDocument --> ResourceNode --> ResourceFile
CQuiz ------> ResourceNode
CLp --------> ResourceNode
```

انظر [نظام الموارد](/2.x-ar/dlyl-almtwr/developer-guide/backend/resource-system.md) للتفاصيل.

## امتدادات Doctrine

يستخدم Chamilo امتدادات Gedmo Doctrine (عبر `stof/doctrine-extensions-bundle`):

* **Tree** — بيانات هرمية (يستخدم ResourceNode مسارًا ماديًا)
* **Timestampable** — حقول `createdAt`/`updatedAt` التلقائية
* **Sluggable** — اختصارات صديقة للـ URL
* **Sortable** — مجموعات قابلة للترتيب


---

# 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/entities-and-doctrine.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.
