Sistema de Recursos
O sistema de recursos é um dos conceitos arquitetônicos mais importantes no Chamilo 2.0. Ele fornece uma abstração unificada para todo o conteúdo do curso — documentos, exercícios, caminhos de aprendizagem, postagens no fórum e muito mais.
Conceito Central
Cada peça de conteúdo do curso é representada por um ResourceNode. Isso confere a todos os tipos de conteúdo um conjunto comum de capacidades:
Controle de visibilidade — Mostrar/ocultar para os alunos
Controle de acesso — Eleitores de segurança verificam permissões através do ResourceNode
Armazenamento de arquivos — Arquivos anexados são armazenados via ResourceFile
Estrutura em árvore — ResourceNodes formam uma árvore (relações pai-filho)
Rastro de auditoria — Criador, data de criação, rastreamento de modificações
Entidades Principais
ResourceNode (src/CoreBundle/Entity/ResourceNode.php)
src/CoreBundle/Entity/ResourceNode.php)A entidade central. Cada entidade de conteúdo tem uma relação um-para-um com um ResourceNode.
Campos principais:
id
integer
Chave primária
uuid
UUID v4
Identificador único para uso na API
title
string
Título exibido
creator
User
O usuário que criou este recurso
resourceFile
ResourceFile
O arquivo anexado (se houver)
resourceType
ResourceType
O tipo de recurso (documento, questionário, etc.)
parent
ResourceNode
Pai na árvore de recursos
children
Collection
ResourceNodes filhos
resourceLinks
Collection
Links de visibilidade e acesso
A árvore utiliza a estratégia de materialized path do Gedmo para consultas hierárquicas eficientes.
ResourceFile (src/CoreBundle/Entity/ResourceFile.php)
src/CoreBundle/Entity/ResourceFile.php)Armazena os dados reais do arquivo para um recurso:
id
integer
Chave primária
title
string
Nome original do arquivo
mimeType
string
Tipo MIME
originalName
string
Nome original do upload
size
integer
Tamanho do arquivo em bytes
crop
string
Dados de recorte (para imagens)
O armazenamento de arquivos é gerenciado pelo Flysystem, permitindo que os arquivos estejam no disco local, S3, Azure ou GCS, dependendo da configuração.
ResourceLink
Controla a visibilidade e o acesso por contexto. Existem 3 tipos principais de contexto:
Curso
Sessão
Grupo (em um curso)
Assim, a entidade ResourceLink reflete a combinação desses 3 tipos de contexto e estabelece uma visibilidade para esse contexto completo:
course
Course
A qual curso o recurso pertence
session
Session
Qual sessão (nulo para curso base)
group
CGroup
Qual grupo (nulo para todo o curso)
visibility
integer
Visível, invisível ou excluído
Isso permite que o mesmo ResourceNode tenha diferentes visibilidades em diferentes contextos (por exemplo, visível em uma sessão, mas oculto em outra).
Isso é definido automaticamente ao usar a interface e decidir, por exemplo, que um recurso é específico de uma sessão, sendo visível para todos os grupos em um determinado curso em uma determinada sessão, mas invisível no curso base ou em outra sessão.
Por padrão, recursos visíveis em um curso base também são visíveis em todas as sessões desse curso, mas o tutor do curso pode decidir ocultar um recurso de uma sessão específica. Nesse caso, recuperaremos a visibilidade específica para esse recurso nesta sessão e veremos que ela tem uma visibilidade de 0, então o item não aparecerá para os alunos nesta sessão, enquanto a falta de visibilidade específica da sessão em outras sessões fará com que o recurso use a visibilidade do curso base (e o recurso será exibido para os alunos).
Integração com API Platform
ResourceNode é exposto como um recurso da API Platform com segurança:
Como as Entidades de Conteúdo se Conectam
Entidades de conteúdo do curso (CDocument, CQuiz, CLp, etc.) estendem AbstractResource ou implementam ResourceInterface, o que lhes confere uma relação resourceNode:
Quando você cria um CDocument, um ResourceNode é automaticamente criado junto com ele, proporcionando gerenciamento unificado de recursos.
Implicações Práticas
Ao trabalhar com conteúdo do curso:
Criação de conteúdo — Crie tanto a entidade de conteúdo quanto seu ResourceNode
Verificação de permissões — Use os eleitores de segurança do ResourceNode
Gerenciamento de arquivos — Anexe arquivos através do ResourceFile
Controle de visibilidade — Crie/modifique ResourceLinks
Construção de árvores — Use a relação pai-filho no ResourceNode para estruturas de pastas (por exemplo, pastas de documentos)
Última atualização
Isto foi útil?