Vamos mostrar como excluir os dados em em lote, ou seja, todos os alunos de um determinado curso. Também vamos mostrar como excluir apenas alguns alunos.
O registro da matrícula fica na tabela mdl_role_assignments. O contexto da matrícula fica na tabela mdl_context. Sendo assim, o comando da exclusão deve ser:
SQL para excluir todos os alunos de um curso
DELETE FROM mdl_role_assignments WHERE roleid=5 AND contextid IN (SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?)
SQL para excluir alguns alunos de um curso
DELETE FROM mdl_role_assignments WHERE roleid=5 AND contextid IN (SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?) AND userid IN(?,?,?)
A única diferença do comando anterior é userid IN(?,?,?) que delimita quais alunos devem ser excluídos
Parâmetros
|
Descrição
|
roleid=5
|
Define filtro de exclusão apenas para alunos.
Veja na tabela mdl_role
valor de parâmetro para outros perfis. Por padrão, 5 é o
aluno. Confirme se de fato você está usando 5 para alunos e não
alterou o padrão. Já que está excluindo, todo o cuidado é
pouco.
|
contextlevel=50
|
Especifica que se trata do contexto do curso.
Na tabela de domínio, 50 se refere ao contexto do curso. Dê uma
olhada nesse link:http://docs.moodle.org/dev/Roles_and_modules#Context
|
instanceid=?
|
Aqui passa o id do curso, o qual pretende
excluir os alunos. Esse valor fica na tabela mdl_course.
|
userid
IN(?,?,?)
|
Especifique quais alunos devem ser excluídos.
O id dos alunos deve ser extraído da tabela mdl_user
|
Caso estiver usando a versão 2.x do Moodle, é necessário também apagar os dados da tabela mdl_user_enrolments. Esta tabela foi criada na versão 2 do Moodle. Contêm informações método de inscrição e data de inscrição. O campo enrolid faz ligação com a tabela mdl_enrol. É a chave estrangeira do campo id da tabela mdl_enrol que faz registros dos plugins de inscrição habilitados no curso.
Sql para excluir informações de dados da inscrição de todos os alunos de um curso (apenas para versão 2.x)
DELETE FROM mdl_user_enrolments WHERE enrolid IN (SELECT id FROM mdl_enrol WHERE courseid=?)
Sql para excluir informações de dados da inscrição de alguns os alunos de um curso (apenas para versão 2.x)
DELETE FROM mdl_user_enrolments WHERE enrolid IN (SELECT id FROM mdl_enrol WHERE courseid=?) AND userid IN(?,?,?)
A única diferença do comando anterior é userid IN(?,?,?) que delimita quais alunos devem ser excluídos
Nestes dois últimos comando, ficou claro que deve passar o id do curso no parâmetro courseid=?. O valor desse parâmetro deve ser extraído da tabela mdl_course. Para o parâmetro userid IN(?,?,?) vale a mesma explicação apontada na tabela acima.
Os comandos listados aqui apenas retira o aluno do curso. Cancela a inscrição. Não excluir o histórico do aluno. Caso o aluno venha a ser reinscrito, ele continuará o curso do ponto onde havia parado, ou seja, reaproveita todo o histórico.
Bem, isso é tudo que você precisa saber para excluir alunos de um curso. Agora tome cuidado para não fazer nada errado. Teste primeiro no seu Moodle de desenvolvimento antes de levar para produção. Sempre recomendo ter um clone de produção no ambiente de desenvolvimento. Isso evita prejuízo e falha humanas. Lembre, estamos usando comando DELETE. Você não quer que a equipe pedagógica fique no seu cangote reclamando que o aluno simplesmente sumiu!
Em relação ao código:
ResponderExcluirDELETE FROM mdl_user_enrolments WHERE enrolid IN (SELECT id FROM mdl_enrol WHERE courseid=?)
ele irá apagar as informações de todos os usuário e não somente dos alunos. Como faço pra apagar somente os alunos, uso a verão 2.4.6
Consegui executando o seguinte código:
ExcluirDELETE FROM mdl_user_enrolments WHERE enrolid IN (SELECT id FROM mdl_enrol WHERE courseid=?) AND userid IN (SELECT userid FROM mdl_role_assigments WHERE roleid=5);
Quero saber se é necessário executar esse código e esse abaixo também?
DELETE FROM mdl_role_assignments WHERE roleid=5 AND contextid IN (SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?)
Neuton,
ExcluirÉ necessário sim. O processo de matrícula na versão 2.x do Moodle é alimentada em duas tabelas: mdl_user_enrolments e mdl_role_assignments. Para completar o processo é necessário também excluir a da tabela mdl_role_assignments.
Neuton,
ExcluirPara apagar apenas os usuários com perfil aluno, execute os comandos que passe o parâmetros roleid=5. Os comandos que você está executando no segundo comentário apagam apenas os do perfil aluno.
Fiz os testes e na versão 2.x do Moodle
ExcluirDevo executar primeiro o código da tabela 'mdl_user_enrolments', ele irá apagar os alunos do curso, mas ainda ficara o registro na tabela 'mdl_role_assignments':
DELETE FROM mdl_user_enrolments WHERE enrolid IN (SELECT id FROM mdl_enrol WHERE courseid=?) AND userid IN (SELECT userid FROM mdl_role_assigments WHERE roleid=5);
e depois devo apagar os registro da tabela 'mdl_role_assignments':
DELETE FROM mdl_role_assignments WHERE roleid=5 AND contextid IN (SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?)
Se for feito o inverso os alunos perderão apenas o perfil de estudante mas continuaram no curso, quando tentarmos excluir os dados da tabela 'mdl_user_enrolments' alguns alunos não serão desinscritos.
Neuton,
ExcluirA execução desses dois comandos vai cancelar o registro de inscrição no curso. O usuário perderá o vínculo com o curso. O vínculo no curso requer um determinada perfil que pode ser aluno, tutor etc.
O cancelamento da inscrição não cancela o histórico das atividades realizadas no curso. Caso for reescrito, o usuário pode continuar o curso de onde havia parado.
Estou ciente disso
ExcluirBom dia Lino,
ResponderExcluirExclui um aluno por engano, ele possuía notas e tarefas enviadas nas disciplinas. É possível voltar a referencia deste aluno a essas atividades e participações? Abraços
Moodle IFTM, basta reinscrever o usuário no curso que automaticamente ele retoma suas notas nas atividades
ResponderExcluirMais ele não perde o ID?
ResponderExcluirAo excluir registro de aluno, para recupera-lo, basta reescrevê-lo novamente como você já registrou. A chave da matrícula é a combinação do id do usuário e id do contexto do curso. O id sequencial gerado na tabela de matrícula não tem validade nenhum para a lógica do sistema a não ser indexação de dados. Sendo assim, remover um registro de matrícula não compromete estrutura de dados, ou seja, histórico do aluno no curso.
ExcluirPara entender essa lógica, dê uma olhada nesse post: http://moodlephp.blogspot.com.br/2012/07/arquitetura-do-sistema-moodle.html
Tem como excluir todos os alunos com um só comando para vários cursos pelo id, exemplo tenho 3 curso geografia, historia e letras com alunos diferente em cada curso, queria limpar todos os alunos de todos os curso com um só comando no caso ia só acrescentando o id de cada curso
ResponderExcluir