> 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/2.x/el/odigos-programmatisti/developer-guide/backend/symfony-architecture.md).

# Αρχιτεκτονική 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.
