Para cancelar a matrícula do aluno/tutor no curso do Moodle é necessário usar o comando DELETE na tabela mdl_role_assignments.
Há duas opções de comando. Primeiro, a mais fácil, pelo parâmetro id da matrícula. A segunda, pelos parâmetros: id do usuário e id do curso.
Cancelando matrícula pelo parâmetro id da matrícula
Como a matricula fica na tabela mdl_role_assignments, cada registro tem um id diferente. Pois, o comando SQL abaixo cancela a matricula de um usuário vinculado em um curso.
DELETE FROM mdl_role_assignments WHERE id=?
Passe o parâmetro id da matrícula no campo id
Cancelando matrícula pelos parâmetros id do usuário e id do curso
Uma matrícula é o vínculo da chave id do usuário da tabela mdl_user e id do curso da tabela mdl_course. Na tabela a matrícula mdl_role_assignments o id do usuário fica no campo userid. O id do curso é representado pelo id do contexto do curso no campo contextid. Então é necessário primeiro recuperar o id do contexto do curso. Esse contexto fica na tabela mdl_context e pode ser recuperada com o seguinte comando SQL:
SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?
No filtro WHERE o campo contextlevel deve ser sempre 50. Isso representa a instancia do contexto do curso. O valor do filtro do campo instanceid deve ser o id do curso.
Então para cancelar uma matrícula, desconhecendo id da matrícula, você precisa passar os parâmetros id do usuário e id do contexto do curso, como mostra o comando abaixo.
DELETE FROM mdl_role_assignments WHERE userid=? AND contextid=?
No filtro WHERE passe o parâmetros id do usuário no campo userid e id do contexto do curso no campo contextid.
Há duas opções de comando. Primeiro, a mais fácil, pelo parâmetro id da matrícula. A segunda, pelos parâmetros: id do usuário e id do curso.
Cancelando matrícula pelo parâmetro id da matrícula
Como a matricula fica na tabela mdl_role_assignments, cada registro tem um id diferente. Pois, o comando SQL abaixo cancela a matricula de um usuário vinculado em um curso.
DELETE FROM mdl_role_assignments WHERE id=?
Passe o parâmetro id da matrícula no campo id
Cancelando matrícula pelos parâmetros id do usuário e id do curso
Uma matrícula é o vínculo da chave id do usuário da tabela mdl_user e id do curso da tabela mdl_course. Na tabela a matrícula mdl_role_assignments o id do usuário fica no campo userid. O id do curso é representado pelo id do contexto do curso no campo contextid. Então é necessário primeiro recuperar o id do contexto do curso. Esse contexto fica na tabela mdl_context e pode ser recuperada com o seguinte comando SQL:
SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?
No filtro WHERE o campo contextlevel deve ser sempre 50. Isso representa a instancia do contexto do curso. O valor do filtro do campo instanceid deve ser o id do curso.
Então para cancelar uma matrícula, desconhecendo id da matrícula, você precisa passar os parâmetros id do usuário e id do contexto do curso, como mostra o comando abaixo.
DELETE FROM mdl_role_assignments WHERE userid=? AND contextid=?
No filtro WHERE passe o parâmetros id do usuário no campo userid e id do contexto do curso no campo contextid.
Outras opções de comando SQL
Entendendo como funciona agora você pode fazer várias outras operações com comando SQL tais como:
Cancelar todas as matriculas de um determinado curso:
DELETE FROM mdl_role_assignments WHERE contextid=?
Cancelar todas as matriculas de um determinado usuário:
DELETE FROM mdl_role_assignments WHERE userid=?
Cancelar todas as matriculas por perfil em um determinado curso:
DELETE FROM mdl_role_assignments WHERE roleid=? AND contextid=?
O valor do campo roleid define o perfil do usuário no curso. Veja a tabela de domínio com valores padrões dos perfis:
1 – Administrator (Administrador)
2 -Course creator (Autor do curso)
3 –Teacher (Tutor)
4 - Non-editing teacher (Tutor sem permissão para edição)
5 – Student (Aluno)
6 –Guest (Visitante)
7 - Authenticated user
Esses valores são padrões da tabela mdl_role
Bem, agora que você já entendeu bem como apagar dados na tabela de matrícula, é necessário registrar que ao remover um registro da matrícula, os registros de log e de nota não serão apagados em cascata. Esses registros não estão vinculados a tabela de matrícula, mas sim ao usuário e ao curso.
Caso você tenha cancelado uma matricula de um aluno e voltar atrás, ou seja, recadastrá-lo novamente todas as informações de notas e de log não serão perdidas, continuarão normalmente.
Veja também:
Matricular Usuário no Curso do Moodle com Comando SQL