Apagar Nota, Atividades e Log do Aluno no Curso do Moodle com Comando SQL

Apagar Nota, Atividades e Log do Aluno no Curso do Moodle com Comando SQL

por Lino Vaz Moniz -
Número de respostas: 0

Este post é um atualização do post feito no blogue Moodle SQL em 2010. Alguns comandos foram atualizados para versão mais recente do Moodle.  

Ao cancelar a inscrição de um aluno no curso no ambiente Moodle, os registros de na base de dados (atividades realizadas, nota e log) vinculado à matricula   não serão excluídos automaticamente, ou seja, em efeito cascata.  Uma das alternativas para remover os registros órfãos é executar o comando SQL diretamente na base de dados.
  
Para excluir os dados órfãos de uma matricula  no curso  é necessário dois parâmetros:

  • id do curso – Chave de identificação do curso na tabela mdl_course
  • id do usuário - Chave de identificação do curso na tabela mdl_user

Há uma postagem no blogue que explique isso. Clique aqui para ler.


Tendo os parâmetros da chave do curso e do usuário, só resta   apagar os registro com comando DELETE passando os parâmetros da chave do usuário e curso.
Passe o parâmetro da chave do curso em course=?   ou courseid =? e do usuário em userid=?


Apagar Log

DELETE FROM mdl_logstore_standard_log WHERE userid=? AND courseid=?
   
Apagar Notas
DELETE FROM mdl_grade_grades WHERE  userid=? and itemid IN  (SELECT id FROM mdl_grade_items WHERE courseid=?)

    A sub consulta apaga apenas as notas de um determinado curso.
A tabela mdl_grade_grades é o repositório final de notas.


Apagar Atividades


Apagar nota do fórum
DELETE FROM mdl_forum_grades WHERE userid=?  AND forum IN (SELECT id FROM mdl_forum WHERE course=?)

Apagar os comentários

DELETE FROM mdl_forum_posts WHERE userid=?  AND  discussion IN (SELECT id FROM mdl_forum_discussions WHERE course=?)

Não é recomendável apagar os comentários já que os comentários aninhados ficarão órfãos, ou seja, as respostas das respostas.

Apagar tópicos
DELETE  FROM mdl_forum_discussions WHERE userid=? AND course=?

Não é recomendável apagar os tópicos já que os comentários aninhados ficarão órfãos.

Apagar Tarefas

DELETE FROM mdl_assign_submission WHERE userid =? AND assignment IN (SELECT id FROM mdl_assign WHERE course =?)

Apagar nota da tarefa
DELETE FROM mdl_assign_grades WHERE userid =? AND assignment IN (SELECT id FROM mdl_assign WHERE course =?)

Apagar questionário


Apagar nota do questionário
DELETE FROM mdl_quiz_grades WHERE userid =?  AND quiz IN (SELECT id FROM mdl_quiz WHERE course =?)

Apagar as tentativas
DELETE FROM mdl_quiz_attempts WHERE userid =?  AND quiz IN (SELECT id FROM mdl_quiz WHERE course =?)

Tem mais informação no questionário ainda a ser excluído. Basta vasculhar as tabelas e mapear onde há campo userid.

Apagar conclusão de atividades do curso
DELETE FROM  mdl_course_modules_completion  WHERE userid =?  AND coursemoduleid IN (SELECT id FROM mdl_course_modules WHERE course =?)

Apagar conclusão do curso
DELETE FROM mdl_course_completions WHERE userid =?  AND course =?


Para fazer limpeza total, os dados do aluno devem ser removida de todas de todas as atividades instanciadas no curso. Os comandos SQL acima demostrados se restringiram em remover as atividades do fórum, tarefa e questionário (parcial).  Para as demais atividades, siga a mesma lógica. Identifica as tabelas e apague os dados.
Feito isso, todo o histórico do aluno será removida da base de dados. Ao ser reinscrito no curso,  não terá nenhuma nota e nem log de acesso.