O PlayerGroup permite que estudantes formem seus próprios grupos de forma autônoma diretamente na página da atividade — sem precisar de intervenção do professor. Ele substitui a formação manual de grupos por uma experiência de autoatendimento que funciona em qualquer formato de curso.
👈 Use a barra lateral para pular direto a qualquer seção desta página.
🖼️ Capturas de Tela
Navegue pelas setas, pelos pontos, ou pelas teclas de seta do teclado. Clique na imagem para ampliar.
A atividade aparece na página do curso como qualquer outro recurso
✨ Funcionalidades
- 👥 Criação de Grupos: Estudantes criam grupos com nome, descrição e emoji personalizado — sem precisar de intervenção do professor.
- 🔐 Níveis de Privacidade: Aberto, protegido (senha) e fechado (somente convite).
- 📨 Sistema de Convites: Convites entre colegas via notificação nativa do Moodle (sininho + e-mail para usuários offline); a lista de convidáveis respeita
moodle/course:viewparticipantse é filtrada a estudantes ativamente matriculados, seguindo as mesmas regras de visibilidade do resto do curso. - 👀 Ver Integrantes: O contador de membros de cada card de grupo é um botão que abre a lista somente-leitura dos integrantes daquele grupo, com o fundador marcado como líder — tanto na visão web quanto no app mobile.
- ⚙️ Limites Configuráveis: O professor define o mínimo e máximo de integrantes por grupo.
- 🗂️ Agrupamento Automático: Um agrupamento do Moodle é criado automaticamente — sem configuração manual. Excluir a atividade só remove os grupos e o agrupamento que ela mesma criou; se o professor apontou para um agrupamento pré-existente, esse agrupamento e os grupos que não pertencem a esta atividade permanecem intactos.
- 🔒 Seguro contra Concorrência: Criar um grupo, entrar nele ou aceitar um convite é serializado por instância da atividade, então duas requisições quase simultâneas (um duplo clique, ou dois dispositivos) nunca colocam o mesmo estudante em dois grupos ao mesmo tempo nem ultrapassam o limite de integrantes.
- 🏆 Integração com Notas: Nota atribuída automaticamente quando o estudante entra ou cria um grupo; permanente mesmo que ele saia depois.
- ✅ Conclusão de Atividade: Regra personalizada — o estudante deve entrar ou criar um grupo.
- 📊 Relatórios do Professor:
- Log de Atividade: Visão de auditoria dos últimos 200 eventos (grupo criado, entrou, saiu, convite aceito), com exportação em CSV e Excel.
- Grupos e Integrantes: Uma linha por integrante — grupo, privacidade, papel (líder/integrante) e nome — para ver a composição de toda a turma de uma vez, também exportável em CSV e Excel.
- 🔗 API de Grupos: Integração completa com os grupos e agrupamentos nativos do Moodle, além de uma API pública somente-leitura (
mod_playergroup\api\group_info) que outros plugins podem consultar — o resumo do grupo de um estudante, ou os emblemas de vários grupos numa única chamada em lote. - 📱 App Mobile: Suporte nativo no app oficial do Moodle — criar, entrar, sair, convidar, ver integrantes e gerenciar seu grupo pelo celular.
🎓 Finalidade Educacional
O PlayerGroup foi projetado para:
- Estimular o aprendizado colaborativo por meio de equipes autoformadas
- Reduzir o trabalho do professor na formação de grupos
- Recompensar a participação em grupos como um marco de gamificação
- Integrar-se naturalmente a fluxos de cursos gamificados
Indicado para:
- Aprendizagem baseada em projetos onde os estudantes escolhem suas próprias equipes
- Laboratórios e workshops com vagas limitadas por grupo
- Cursos gamificados que usam o ecossistema PlayerHUD
- Qualquer contexto em que a seleção de equipes pelos próprios estudantes seja relevante
🕹️ Ecossistema PlayerGames
O PlayerGroup faz parte do ecossistema de gamificação PlayerGames para o Moodle. Juntos, esses plugins transformam o Moodle em uma experiência imersiva:
-
Bloco PlayerHUD: O componente central de gamificação — XP, níveis, inventário, ranking, classes RPG e motor de história. Exibe o grupo do estudante como parte do seu perfil no jogo via a API pública do PlayerGroup.
-
Filtro PlayerHUD: Permite inserir drops de itens por meio de shortcodes no conteúdo do curso.
-
Restrição de Acesso PlayerHUD: Restringe o acesso a atividades do curso com base no nível atual do estudante ou nos itens coletados.
👉 https://github.com/jeanlucio/moodle-availability_playerhud
Veja o hub do PlayerGames para a família completa de plugins.
📦 Requisitos
| Componente | Versão |
|---|---|
| Moodle | 4.5+ |
| PHP | 8.1+ |
🛠️ Instalação e Configuração
- Baixe o arquivo
.zipou clone este repositório. - Extraia a pasta dentro do diretório
mod/do seu Moodle. - Renomeie a pasta para
playergroup(se necessário). Caminho final:seu-moodle/mod/playergroup/ - Acesse Administração do site > Notificações para concluir a instalação.
- Adicione uma atividade PlayerGroup a qualquer curso.
Este plugin não tem configurações separadas em nível de site após a instalação — toda configuração é feita pelo professor ao adicionar a atividade a um curso, conforme explicado em Como Usar abaixo.
📖 Como Usar
- Adicione uma atividade PlayerGroup ao seu curso.
- Configure:
- Mínimo / máximo de integrantes por grupo
- Modo de agrupamento — criar um novo agrupamento automaticamente, usar um já existente, ou nenhum
- Permitir que estudantes saiam do grupo, e se um grupo esvaziado é excluído automaticamente
- Excluir grupos ao excluir a atividade — só remove grupos e um agrupamento que esta atividade realmente criou; um agrupamento pré-existente apontado via “usar um agrupamento existente” fica intacto
- Recompensa de fundação — nota atribuída automaticamente a todo estudante que entra ou cria um grupo
- Os estudantes abrem a atividade e criam um grupo (nome, descrição, emblema, nível de privacidade) ou entram em um grupo existente — aberto, protegido por senha, ou aceitando um convite.
- A partir de qualquer card de grupo, o estudante pode:
- Clicar no contador de integrantes para ver quem está naquele grupo, com o fundador marcado como líder
- Convidar um colega matriculado que ainda não tem grupo (só é mostrado a estudantes que também podem ver a lista de participantes do curso)
- Sair do próprio grupo, se o professor permitir
- A atividade é concluída e a nota é atribuída automaticamente no momento em que o estudante entra ou cria um grupo.
- O professor tem acesso a duas abas de relatório a partir da página da atividade: o log de atividade (quem fez o quê, e quando) e grupos e integrantes (a composição completa, uma linha por integrante) — ambos exportáveis em CSV e Excel.
🧪 Testes Automatizados
O PlayerGroup inclui uma suíte PHPUnit cobrindo lógica de negócio, web services, relatórios e exportações, o renderer e a saída do app mobile, a API pública, e conformidade com a Privacy API, além de uma suíte Behat para aceitação em navegador. Todo push de CI executa a matriz completa (Moodle 4.5 → 5.x, PostgreSQL e MariaDB).
PHPUnit — Por Área
| Área | Arquivos | Casos |
|---|---|---|
Web services (tests/external/) |
8 | 53 |
Núcleo (lib_test.php, notas, conclusão, lock, ordenação de integrantes, backup, privacidade) |
7 | 36 |
Relatórios e exportações (tests/controller/) |
2 | 5 |
Saída e app mobile (tests/output/) |
2 | 14 |
API pública (tests/api/) |
1 | 6 |
| Total Geral | 20 | 114 |
vendor/bin/phpunit --testsuite mod_playergroup
Cobertura de linha geral (moodle-coverage, PHPUnit + Xdebug): 80%.
Behat — Testes de Aceitação
| Arquivo de feature | Cenários |
|---|---|
create_group.feature |
2 |
join_group.feature |
2 |
join_protected_group.feature |
3 |
view.feature |
3 |
invite_colleagues.feature |
1 |
view_members.feature |
1 |
| Total | 12 |
php admin/tool/behat/cli/init.php
vendor/bin/behat --tags=@mod_playergroup --profile=chrome
Detalhamento completo teste-a-teste e tabela de cobertura →
🔐 Segurança e Conformidade
- Controle de acesso baseado em capabilities (
mod/playergroup:creategroup,mod/playergroup:view,mod/playergroup:manage,mod/playergroup:manageinvites) - Toda operação de grupo é isolada por instância da atividade — um ID de grupo ou de convite de outra atividade, ou de outro curso, é sempre rejeitado em vez de aceito
- Proteção com
require_sesskey()em todas as operações que alteram estado; as chamadas AJAX são validadas pelo dispatchercore/ajaxdo Moodle - Criar grupo, entrar em grupo e aceitar convite são serializados por instância da atividade via
\core\lock\lock_config, fechando uma corrida de verificação-e-ação que de outra forma poderia colocar um estudante em dois grupos ou ultrapassar o limite de integrantes com duas requisições concorrentes - A lista de convidáveis só lista estudantes ativamente matriculados e respeita
moodle/course:viewparticipants, então nunca vira uma rota alternativa para informação de participantes que o curso decidiu esconder dos estudantes - Senhas de grupo são armazenadas com
password_hash()e verificadas compassword_verify(); o hash armazenado nunca é devolvido ao cliente - Excluir a atividade só remove grupos e um agrupamento que ela mesma criou — nunca um agrupamento pré-existente (ou os outros grupos dele) que o professor tenha apontado a atividade a usar
- Compatível com a API externa do Moodle
- Implementação completa da Privacy API — exportação e exclusão de dados suportadas
- Suporte a backup e restauração, incluindo remapeamento seguro de IDs numa duplicação ou restauração de curso
📄 Licença
Este projeto é licenciado sob a GNU General Public License v3 (GPLv3).
Copyright: 2026 Jean Lúcio