A Restrição de Acesso do PlayerHUD é uma extensão complementar obrigatória do Bloco PlayerHUD. Ela permite ao professor restringir o acesso a atividades, recursos ou seções do curso com base no progresso do estudante no PlayerHUD.
Ela se conecta diretamente ao sistema nativo de Restringir acesso do Moodle, liberando conteúdo apenas quando o estudante atinge um determinado Nível, possui um Item necessário, pertence a uma Classe de personagem, ou tem a gamificação ativa.
👈 Use a barra lateral para ir a qualquer seção desta página.
✨ Funcionalidades
- 🎯 Restrição por Nível Mínimo: libera conteúdo apenas quando o nível do estudante no PlayerHUD atinge um limite configurado.
- 🎒 Restrição por Item Possuído: libera conteúdo com base em quantas unidades de um item do
PlayerHUD o estudante possui atualmente, com um operador de comparação (
>=,>,<,=). - 🧙 Restrição por Classe de Personagem: libera conteúdo apenas para estudantes que têm uma classe RPG específica atribuída no PlayerHUD.
- 🎮 Restrição por Status de Gamificação: libera conteúdo apenas para estudantes com a gamificação ativa (não pausada) no bloco PlayerHUD do curso.
- 🧠 Integração Nativa com Restringir Acesso: aparece como uma opção comum dentro do próprio painel “Restringir acesso” do Moodle — sem tela de configuração separada, sem capability extra para gerenciar.
- 🧩 Disponibilidade Sensível ao Contexto: a opção de restrição só é oferecida quando existe uma instância do bloco PlayerHUD no curso; caso contrário, permanece oculta.
- ⚡ Avaliação em Tempo Real: a condição é recalculada a cada carregamento de página diretamente a partir dos dados atuais do estudante no PlayerHUD — sem cache, sem estado “liberado” desatualizado.
- 📝 Texto de Descrição Dinâmico: a mensagem “Não disponível a menos que…” exibida ao estudante é construída a partir do requisito real (nível, nome e quantidade do item, nome da classe ou status de gamificação), não de um texto estático.
- 🧩 Edição em Lote de Todo o Curso (opcional): gerencie todas as restrições do PlayerHUD no curso a partir de um único painel via o plugin separado Report Unlocker.
🕹️ Ecossistema PlayerGames
Este plugin faz parte do ecossistema de gamificação PlayerGames. Juntos, esses plugins transformam o Moodle em uma experiência imersiva:
-
Bloco PlayerHUD (Obrigatório): o motor de gamificação — XP, níveis, inventário, missões, troca e progressão RPG. Esta condição não tem dado nenhum a avaliar sem ele.
-
Filtro PlayerHUD: insere drops de itens colecionáveis, ofertas de troca e o widget compacto do HUD diretamente no conteúdo do curso por meio de shortcodes.
-
PlayerGroup: permite que os estudantes formem seus próprios grupos de forma autônoma diretamente na página da atividade — sem necessidade de intervenção do professor.
🧩 Integração Opcional: Report Unlocker
As restrições do PlayerHUD normalmente são configuradas e editadas uma atividade por vez, pelo
próprio painel Restringir acesso de cada atividade (veja Como Usar). O plugin de
relatório separado Report Unlocker (report_unlocker, do mesmo autor, mas que não faz
parte da família PlayerGames) adiciona um painel de todo o curso que lista todas as restrições de
acesso — incluindo as condições de Nível, Item, Personagem e Gamificação do PlayerHUD — com
edição inline, remoção em lote e um assistente de IA para mudanças em linguagem natural. O Report
Unlocker lê e grava o mesmo JSON de {course_modules}.availability que este plugin produz,
sempre escopado à instância do bloco PlayerHUD do próprio curso, então nada muda na forma como a
restrição é armazenada. Sem o Report Unlocker instalado, as restrições continuam funcionando
exatamente como descrito em Como Usar — só o painel de todo o curso fica indisponível.
👉 https://github.com/jeanlucio/moodle-report_unlocker
📦 Requisitos
| Componente | Versão |
|---|---|
| Moodle | 4.5+ |
| PHP | Compatível com a versão do Moodle |
| Dependência obrigatória | Bloco PlayerHUD |
🛠️ Instalação
- Certifique-se de que o Bloco PlayerHUD esteja instalado primeiro: 👉 https://github.com/jeanlucio/moodle-block_playerhud Esta condição de disponibilidade depende do bloco e não funcionará sem ele.
- Baixe o arquivo
.zipou clone este repositório. - Extraia a pasta para o diretório
availability/condition/do seu Moodle. - Renomeie para
playerhud(se necessário). Caminho final:seu-moodle/availability/condition/playerhud/ - Acesse Administração do site > Notificações para concluir a instalação.
📖 Como Usar
- Adicione o Bloco PlayerHUD ao curso (veja Instalação) — a opção de restrição só aparece em cursos onde existe uma instância do bloco PlayerHUD.
- Ative o Modo de edição no curso.
- Edite uma atividade, recurso ou seção.
- Abra a seção Restringir acesso e clique em Adicionar restrição…
- Selecione PlayerHUD.
- Escolha o tipo de restrição e seus parâmetros (veja a tabela de referência abaixo).
O estudante só ganha acesso quando a condição definida é atendida; a descrição exibida a ele é gerada dinamicamente a partir da mesma condição.
Referência dos Tipos de Restrição
| Tipo | Parâmetros | Acesso liberado quando |
|---|---|---|
| Nível Mínimo | Nível necessário | O nível atual do estudante no PlayerHUD é maior ou igual ao nível configurado. |
| Possuir Item | Item, operador (ao menos, mais que, menos que, exatamente), quantidade |
A quantidade do item selecionado no inventário do estudante satisfaz o operador escolhido em relação à quantidade configurada. |
| Personagem | Classe RPG | O estudante tem a classe RPG selecionada atribuída no seu progresso do PlayerHUD. |
| Gamificação Ativa | — | O estudante não pausou/optou por sair da gamificação no bloco PlayerHUD do curso. |
Observações
- A restrição é sempre reavaliada no servidor a cada carregamento de página — não há cache no cliente do estado “liberado” que possa ficar desatualizado.
- Se o bloco PlayerHUD for removido do curso após uma restrição ter sido configurada, a condição passa a avaliar com segurança como indisponível, em vez de gerar erro.
- Editar restrições uma atividade por vez é o fluxo padrão. Para um painel de todo o curso com edição inline e remoção em lote, veja a integração opcional com o Report Unlocker.
🧪 Testes Automatizados
O plugin inclui testes unitários/integração (PHPUnit) e de aceitação em navegador (Behat), executados a cada push de CI contra a matriz completa (Moodle 4.5 → 5.2, PostgreSQL & MariaDB).
PHPUnit — Testes Unitários e de Integração
| Arquivo de teste | Casos |
|---|---|
backup/restore_test.php |
2 |
condition_test.php |
24 |
frontend_test.php |
5 |
privacy/provider_test.php |
1 |
| Total | 32 |
vendor/bin/phpunit --testsuite availability_playerhud
Cobertura de linhas total (PHPUnit + Xdebug): 94%.
Behat — Testes de Aceitação
| Arquivo de feature | Cenários |
|---|---|
allow_add.feature |
2 |
restriction_level.feature |
2 |
restriction_gamification.feature |
2 |
| Total | 6 |
php admin/tool/behat/cli/init.php
vendor/bin/behat --tags=@availability_playerhud --profile=chrome
Detalhamento completo dos testes e tabela de cobertura →
🔐 Segurança e Conformidade
- Isolamento de instância: as buscas de nome de item/classe em
get_description()e a contagem de inventário emis_available()são sempre escopadas à instância do bloco PlayerHUD do próprio curso (blockinstanceid) — um payloadavailabilityconditionsjsonforjado apontando para um item ou classe de outro curso não consegue vazar o nome, nem pode ser satisfeito por inventário concedido através do bloco de outro curso. - Renderização protegida contra XSS: os valores
levelvaleitemqtyvindos da árvore de disponibilidade são convertidos paraintantes de serem persistidos (save()) e antes de serem renderizados (get_description()) — um payload forjado não consegue injetar HTML/JS na mensagem “Não disponível a menos que…” exibida a todo estudante, professor e admin que visualize o curso. - Desserialização segura: o
configdataarmazenado pelo bloco é lido comunserialize_object(), restringindo o payload astdClass— uma configuração adulterada nunca pode disparar instanciação arbitrária de objeto nem uma cadeia POP-gadget como umunserialize()puro permitiria. - Reavaliação no servidor:
is_available()é sempre recalculado a partir dos dados atuais do estudante no PlayerHUD a cada checagem; nada sobre o estado “liberado” é confiado a partir do cliente. - Sem chamadas a APIs externas: a condição apenas lê o próprio banco de dados do Moodle.
- Consciente de privacidade: implementa o
null_providerdo Moodle — este plugin não armazena nenhum dado pessoal próprio; ele apenas avalia regras de acesso contra dados pertencentes ao Bloco PlayerHUD.
Provedor de Privacidade
A Restrição de Acesso do PlayerHUD implementa o null_provider do Moodle — ele apenas lê
dados pertencentes e armazenados pelo Bloco PlayerHUD (nível, inventário, classe RPG, status de
gamificação) para calcular uma decisão de acesso; nunca persiste nenhum dado pessoal próprio.
Veja a documentação do próprio bloco para a cobertura completa de exportação/exclusão GDPR.
📄 Licença
Este projeto é licenciado sob a GNU General Public License v3 (GPLv3).
Copyright: 2026 Jean Lúcio