Ao receber essa demanda, você fuça um pouco o Moodle e percebe que não existe essa opção de relatório. Mesmo assim a equipe pedagógica fica no seu cangote esperando uma solução.
Neste caso, você não tem outra alternativa que não seja extrair esses dados diretamente da base de dados do Moodle com comando SQL. Para aliviar a sua barra, facilitando algumas dias ou semanas de pesquisa vai aí o macete.
Para consultar os tópicos mais acessados é necessário fazer a junção das seguintes tabelas:
- mdl_forum – Tabela de fórum
- mdl_forum_discussions – Tabela de tópicos
- mdl_modules – Tabela de atividades do curso
- mdl_log – Tabela de log
SELECT d.id,d.name,COUNT(l.info) FROM mdl_forum_discussions d INNER JOIN mdl_forum f on f.id=d.forum INNER JOIN mdl_course_modules cm ON f.id=cm.instance INNER JOIN mdl_modules m ON cm.module=m.id INNER JOIN mdl_log l ON l.cmid=cm.id WHERE f.id=? AND m.name='forum' AND l.module='forum' AND l.action LIKE '%discussion%' AND l.info=d.id GROUP BY d.id,d.name ORDER BY COUNT(l.cmid) DESC
SQL para PostgreSQL
SELECT d.id,d.name,COUNT(l.info) FROM mdl_forum_discussions d INNER JOIN mdl_forum f on f.id=d.forum INNER JOIN mdl_course_modules cm ON f.id=cm.instance INNER JOIN mdl_modules m ON cm.module=m.id INNER JOIN mdl_log l ON l.cmid=cm.id WHERE f.id=? AND m.name='forum' AND l.module='forum' AND l.action LIKE '%discussion%' AND l.info=CAST(d.id as varchar) GROUP BY d.id,d.name ORDER BY COUNT(l.cmid) DESC
O que diferencie os dois comandos SQL é que na consulta para PostgreSQL há conversão d.id para texto com comando CAST: l.info=CAST(d.id as varchar). Isso porque o PostgreSQL não compara campo numérico com texto. Já MySQL é mais tolerante. Tirando isso, o restante do comando é igual.
Essa consulta extrai uma lista com os seguintes campos:
- d.id – Id do tópico
- d.name – Nome do tópico
- COUNT(l.info) – Quantidade de acesso (click) no tópico
Você precisa especificar o id do fórum passando parâmetro em f.id=? logo após o comando WHERE.
Caso não souber o id do fórum, localize na base de dados pelo nome do fórum com o seguinte comando SQL:
SELECT id FROM mdl_forum WHERE name='Nome do Fórum'
Bem, agora que você tem o comando SQL, só falta implementar isso numa linguagem de programação ou então executar a consulta no banco e copiar o dados para excel para montar um gráfico bonito. Assim você dá solução à demanda de forma rápida e ninguém fica no seu cangote.