quinta-feira, 19 de agosto de 2010

Cancelar Matrícula no Moodle com Comando SQL


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.

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

2 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Boa tarde meu caro Badiu!!
    Estava olhando o seu post, tentei faze-lo, mas precisamente o item: Cancelando matrícula pelos parâmetros id do usuário e id do curso, contudo o comando não obteve exito no cancelamento do aluno.
    informo que estou usando a ver 3.x do moodle. Realizando este comando na tabela mdl_user_enrolments , eu obtive sucesso, informo tb que as atividades não são perdidas caso tenha que inserir o usuário novamente. Abraços!

    ResponderExcluir