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

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

## Bundles

Το Chamilo 3.0 είναι δομημένο σε τρία bundles του Symfony:

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

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

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

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

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

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

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

Υλοποίηση του προτύπου LTI 1.3:

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

## Service Container

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

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

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

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

## Παλαιός κώδικας

Ορισμένες λειτουργίες εξακολουθούν να χρησιμοποιούν παλαιό κώδικα PHP στο `public/main/`:

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

Αυτά μεταφέρονται σταδιακά στην αρχιτεκτονική Symfony+Vue. Οι παλαιές σελίδες εξυπηρετούνται μέσω ενός επιπέδου συμβατότητας που εκκινεί τον πυρήνα του Symfony.
