# Arquitetura Symfony

## Bundles

O Chamilo 2.0 está estruturado em três bundles Symfony:

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

O maior bundle, responsável por todas as questões de abrangência da plataforma:

* **Usuários e autenticação** — Entidade de usuário, papéis, tokens JWT, provedores OAuth2
* **Sistema de recursos** — ResourceNode e ResourceFile (a abstração unificada de conteúdo)
* **Configurações da plataforma** — Esquemas de configurações em `src/CoreBundle/Settings/` cobrindo todos os aspectos configuráveis
* **Administração** — Controladores de administração para gerenciamento de usuários, cursos, sessões e plugins
* **Provedores de IA** — Padrão Factory para OpenAI, Gemini, Mistral, DeepSeek, Grok
* **Armazenamento de arquivos** — Adaptadores de armazenamento baseados em Flysystem (local, S3, Azure, GCS)
* **Segurança** — Voters, controle de acesso, hierarquia de papéis
* **Ferramentas** — Definições de ferramentas de curso registradas pelo sistema de ferramentas

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

Tudo relacionado ao conteúdo do curso:

* **Entidades de conteúdo** — 101 entidades para documentos, exercícios, caminhos de aprendizagem, fóruns, glossários, enquetes, frequência, blogs, tarefas e mais
* **Cópia de curso** — Importação/exportação com suporte ao formato Common Cartridge 1.3 e Moodle
* **Configurações de curso** — Esquemas de configurações no nível do curso

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

Implementação do padrão LTI 1.3:

* **Registro de plataforma e ferramenta** — Gerenciamento de conexões com ferramentas externas
* **Gerenciamento de lançamento** — Controladores de fluxo de lançamento LTI
* **Retorno de notas** — Envio de notas de ferramentas externas para o Chamilo

## Contêiner de Serviços

O Chamilo utiliza o contêiner de injeção de dependência do Symfony. Os serviços são configurados em:

* `config/services.yaml` — Definições globais de serviços
* Diretório `DependencyInjection/` de cada bundle — Serviços específicos de cada bundle

## Arquitetura de Segurança

O sistema de segurança é configurado em `config/packages/security.yaml`:

* **Hash de senhas** — Suporta bcrypt (padrão), com migração de SHA1 e MD5 legados
* **Hierarquia de papéis** — 18 papéis organizados hierarquicamente (ROLE\_GLOBAL\_ADMIN > ROLE\_ADMIN > ROLE\_TEACHER > ROLE\_STUDENT > ROLE\_USER; papéis adicionais incluem ROLE\_HR, ROLE\_INVITEE, ROLE\_STUDENT\_BOSS, ROLE\_SESSION\_MANAGER, ROLE\_QUESTION\_MANAGER)
* **Papéis sensíveis ao contexto** — Papéis no nível do curso (ROLE\_CURRENT\_COURSE\_TEACHER, ROLE\_CURRENT\_COURSE\_STUDENT) são calculados por solicitação com base na matrícula
* **Firewall** — Autenticação JWT para API, baseada em sessão para interface web
* **Voters** — Controle de acesso no nível de recurso por meio de voters do Symfony

## Código Legado

Alguns recursos ainda utilizam código PHP legado em `public/main/`:

* Renderização e interação de exercícios
* Player de caminho de aprendizagem
* Algumas ferramentas administrativas

Esses recursos estão sendo progressivamente migrados para a arquitetura Symfony+Vue. Páginas legadas são servidas por meio de uma camada de compatibilidade que inicializa o kernel do 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-pt/guia-do-desenvolvedor/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.
