# Αρχιτεκτονική Symfony

## Bundles

Το Chamilo 2.0 δομείται σε τρία bundles του Symfony:

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

Το μεγαλύτερο bundle, που διαχειρίζεται όλες τις πλατφορμικές ανησυχίες:

* **Χρήστες και εμπιστοσύνη** — Οντότητα χρήστη, ρόλοι, JWT tokens, πάροχοι OAuth2
* **Σύστημα πόρων** — ResourceNode και ResourceFile (η ενιαία αφαίρεση περιεχομένου)
* **Ρυθμίσεις πλατφόρμας** — Σχήματα ρυθμίσεων στο `src/CoreBundle/Settings/` που καλύπτουν κάθε ρυθμιζόμενη πτυχή
* **Διαχείριση** — Controllers διαχειριστή για χρήστες, μαθήματα, συνεδρίες και plugins
* **Πάροχοι ΤΝ** — Factory pattern για OpenAI, Gemini, Mistral, DeepSeek, Grok
* **Αποθήκευση αρχείων** — Adapters αποθήκευσης βασισμένοι στο Flysystem (τοπική, S3, Azure, GCS)
* **Ασφάλεια** — Voters, έλεγχος πρόσβασης, ιεραρχία ρόλων
* **Εργαλεία** — Ορισμοί εργαλείων μαθήματος που καταχωρούνται μέσω του συστήματος εργαλείων

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

Όλα τα ειδικά για το περιεχόμενο μαθήματος:

* **Οντότητες περιεχομένου** — 101 οντότητες για έγγραφα, ασκήσεις, μονοπάτια μάθησης, φόρουμ, γλωσσάρια, έρευνες, παρουσίες, blogs, εργασίες και άλλα
* **Αντιγραφή μαθήματος** — Εισαγωγή/εξαγωγή με υποστήριξη Common Cartridge 1.3 και μορφή Moodle
* **Ρυθμίσεις μαθήματος** — Σχήματα ρυθμίσεων επιπέδου μαθήματος

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

Εφαρμογή του προτύπου LTI 1.3:

* **Εγγραφή πλατφόρμας και εργαλείου** — Διαχείριση συνδέσεων εξωτερικών εργαλείων
* **Διαχείριση εκκίνησης** — Controllers ροής εκκίνησης LTI
* **Επιστροφή βαθμών** — Επιστροφή βαθμών από εξωτερικά εργαλεία στο Chamilo

## Container Υπηρεσιών

Το Chamilo χρησιμοποιεί το container έγχυσης εξαρτήσεων του Symfony. Οι υπηρεσίες ρυθμίζονται σε:

* `config/services.yaml` — Παγκόσμιοι ορισμοί υπηρεσιών
* Τον κατάλογο `DependencyInjection/` κάθε bundle — Υπηρεσίες ειδικές για το bundle

## Αρχιτεκτονική Ασφαλείας

Το σύστημα ασφαλείας ρυθμίζεται στο `config/packages/security.yaml`:

* **Hashing κωδικών πρόσβασης** — Υποστηρίζει 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) υπολογίζονται ανά αίτημα βάσει εγγραφής
* **Firewall** — JWT εμπιστοσύνη για API, βασισμένη σε συνεδρία για την web διεπαφή
* **Voters** — Έλεγχος πρόσβασης επιπέδου πόρου μέσω Symfony voters

## Κώδικας Κληρονομιάς

Μερικά χαρακτηριστικά εξακολουθούν να χρησιμοποιούν παλαιό κώδικα PHP στο `public/main/`:

* Απόδοση και αλληλεπίδραση ασκήσεων
* Player μονοπατιού μάθησης
* Μερικά εργαλεία διαχειριστή

Αυτά μεταφέρονται σταδιακά στην αρχιτεκτονική 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-el/odigos-programmatisti/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.
