# Arquitectura de Symfony

## Bundles

Chamilo 2.0 está estructurado en tres bundles de Symfony:

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

El bundle más grande, que maneja todos los aspectos de la plataforma:

* **Usuarios y autenticación** — Entidad de usuario, roles, tokens JWT, proveedores OAuth2
* **Sistema de recursos** — ResourceNode y ResourceFile (la abstracción unificada de contenido)
* **Configuraciones de la plataforma** — Esquemas de configuración en `src/CoreBundle/Settings/` que cubren todos los aspectos configurables
* **Administración** — Controladores de administración para la gestión de usuarios, cursos, sesiones y plugins
* **Proveedores de IA** — Patrón de fábrica para OpenAI, Gemini, Mistral, DeepSeek, Grok
* **Almacenamiento de archivos** — Adaptadores de almacenamiento basados en Flysystem (local, S3, Azure, GCS)
* **Seguridad** — Votantes, control de acceso, jerarquía de roles
* **Herramientas** — Definiciones de herramientas de curso registradas a través del sistema de herramientas

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

Todo lo relacionado con el contenido de los cursos:

* **Entidades de contenido** — 101 entidades para documentos, ejercicios, rutas de aprendizaje, foros, glosarios, encuestas, asistencia, blogs, tareas y más
* **Copia de curso** — Importación/exportación con soporte para Common Cartridge 1.3 y formato Moodle
* **Configuraciones de curso** — Esquemas de configuración a nivel de curso

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

Implementación del estándar LTI 1.3:

* **Registro de plataforma y herramientas** — Gestiona conexiones con herramientas externas
* **Gestión de lanzamiento** — Controladores para el flujo de lanzamiento de LTI
* **Retorno de calificaciones** — Devolución de calificaciones desde herramientas externas a Chamilo

## Contenedor de Servicios

Chamilo utiliza el contenedor de inyección de dependencias de Symfony. Los servicios se configuran en:

* `config/services.yaml` — Definiciones de servicios globales
* Directorio `DependencyInjection/` de cada bundle — Servicios específicos de cada bundle

## Arquitectura de Seguridad

El sistema de seguridad se configura en `config/packages/security.yaml`:

* **Hash de contraseñas** — Soporta bcrypt (por defecto), con migración desde los antiguos SHA1 y MD5
* **Jerarquía de roles** — 18 roles organizados jerárquicamente (ROLE\_GLOBAL\_ADMIN > ROLE\_ADMIN > ROLE\_TEACHER > ROLE\_STUDENT > ROLE\_USER; roles adicionales incluyen ROLE\_HR, ROLE\_INVITEE, ROLE\_STUDENT\_BOSS, ROLE\_SESSION\_MANAGER, ROLE\_QUESTION\_MANAGER)
* **Roles sensibles al contexto** — Roles a nivel de curso (ROLE\_CURRENT\_COURSE\_TEACHER, ROLE\_CURRENT\_COURSE\_STUDENT) se calculan por solicitud en función de la inscripción
* **Firewall** — Autenticación JWT para la API, basada en sesiones para la interfaz web
* **Votantes** — Control de acceso a nivel de recursos mediante votantes de Symfony

## Código Heredado

Algunas funcionalidades aún utilizan código PHP heredado en `public/main/`:

* Renderizado e interacción de ejercicios
* Reproductor de rutas de aprendizaje
* Algunas herramientas de administración

Estas funcionalidades están siendo migradas progresivamente a la arquitectura Symfony+Vue. Las páginas heredadas se sirven a través de una capa de compatibilidad que inicia el kernel de 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-es/guia-para-desarrolladores/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.
