quinta-feira, 29 de julho de 2010

Matricular Usuário no Curso do Moodle com Comando SQL

Veja atualização desse post para versão 2.x e 3.x do Moodle na comunidade Badiu no link: http://comunidade.badiu.com.br/mod/forum/discuss.php?d=250
 
A partir da versão 1.7 do Moodle o gerenciamento da matrícula passou a ser feita na tabela mdl_role_assignments. Essa tabela é composta por vários campos. Os campos mais importantes para efetuar a inscrição do usuário no curso são:
roleid – perfil do usuário na tebela mdl_role;
contextid – Contexto curso no tabela mdl_context;
userid - Id do usuário na tabela mdl_user.
Sendo assim, o comando SQL para fazer a matrícula será:
INSERT INTO mdl_role_assignments (roleid,contextid,userid) VALUES (?,?,?)
Até aqui tudo parece moleza. O problema é saber que valores colocar em cada campo. Bem, não desespere, vamos lá.
Valor do campo roleid
O campo roleid define se o usuário a ser cadastrado no curso é aluno, tutor, autor do curso etc. Por padrão, a tabela mdl_role traz 7 perfis cadastrados.
1 – Administrator
2 -Course creator
3 –Teacher (Tutor)
4 - Non-editing teacher
5 – Student (Aluno)
6 –Guest
7 - Authenticated user
Bem roleid já está decifrado. Está claro que deve ser 3 para cadastrar o tutor e 5 para aluno.
Valor do campo contextid
Esse é um pouco chato. Mas vamos lá. Para explicar isso é necessário antes informar que Moodle não segue, a risca, a integridade de dados entre a chave primária e estrangeira. Em alguns casos, usa instanciamento de dados como que se fosse uma programação orientado a objetos. Para decifrar a instancia do curso siga os seguintes passos:
Primeiro Passo
Localize o id do curso que pretenda matricular o aluno. Essa informação está na tabela mdl_course.
Segundo Passo
Extraia o id do contexto do curso na tabela mdl_context executando o seguinte comando SQL:
SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?

No filtro do WHERE, contextlevel deve ser sempre 50. Esse valor é padrão. Representa o instancia do curso. O valor do filtro do campo instanceid deve ser o id do curso extraído no primeiro passo.
O valor retornado da consulta SQL acima será o valor do campo contextid.
Valor do campo userid
Esse valor já é moleza. É o id do usuário na tabela mdl_user. Caso estiver cadastrando um usuário e, em seguida, inscrevê-lo no curo, basta recuperar o id do cadastro recente usando a função SQL LAST ID INSERT. Caso não saiba como cadastrar usuário via comando SQL clique aqui para ver.
Agora que você já tem o valor de todos os campos basta executar o comando SQL:
INSERT INTO mdl_role_assignments (roleid,contextid,userid) VALUES (?,?,?)
Substituído a ? pelos valores correspondentes.

Os comandos descritos neste post só valem para a versão 1.7 a 1.9 do Moodle. Não versão 2.0 houve uma alteração da estrutura das tabelas de matrícula. Para a versão 2.x, siga os procedimentos explicados no comentário: http://moodlesql.blogspot.com/2010/07/matricular-usuario-no-curso-do-moodle.html?showComment=1317436246579#c1869475564775276003

Veja Também
Cadastrar Usuário no Moodle pelo Comando SQL

terça-feira, 27 de julho de 2010

Extrair Lista de Nota de um Aluno no Moodle com Comando SQL

A partir da versão 1.9 do Moodle as notas ficam na tabela mdl_grade_grades. As avaliações na tabela mdl_grade_items. Para extrair uma lista com todas as avaliações feitas por um determinado aluno é necessário fazer junção da tabela como segue o código abaixo.

Código SQL para extrair a lista de nota de um aluno em um determinado curso:
SELECT i.itemname,g.finalgrade FROM mdl_grade_items i INNER JOIN mdl_grade_grades g ON i.id=g.itemid WHERE i.courseid=? AND g.userid=?

Descrição dos campos:
A consulta retorna 2 campos: i.itemname,g.finalgrade
i itemname – Nome da avaliação
g.finalgrade – Nota do a luno

Personalize os parâmetros
i.courseid=? (substitua ? por id do curso )
g.userid=? (substitua ? por id do usuário )

Esse código só exibe as avaliações feitas. As avaliações do curso que o aluno ainda não fez não serão exibidas. Para exibir todas as avaliações, mesmo as que o aluno ainda não fizer, substitua do comando SQL INNER JOIN para LEFT JOIN.
Para versão inferior a 1.9 o comando SQL deve ser outro. Houve muita alteração na tabela de nota a partir da versão 1.9 do Moodle.

Forçar Alteração de Senha no Moodle com Comando SQL

Na camada de persistência do Moodle, ou seja, na base de dados, há uma tabela com as definições da configuração do usuário. Trata-se da tabela mdl_ user_preferences. Essa tabela é composta por três campos:
  • userid
  • name
  • value
O primeiro campo se refere ao id do usuário na tabela mdl_user. Os dois últimos campos se referem chave e valor da configuração.

A configuração que força usuário a alterar a sua senha é: auth_forcepasswordchange=1. Assim que o usuário fizer o login, automaticamente é levado a alterar a senha. Feita a alteração a configuração será atualizada para auth_forcepasswordchange=0.
Ao fazer o cadastro do usuário via comando SQL, para forçá-lo a alterar a senha no primeiro login, é necessário executar o comando abaixo.

Comando SQL que força alteração de senha:
INSERT INTO mdl_user_preferences(userid,name,value) VALUES(10,'auth_forcepasswordchange', '1')

Nesse exemplo coloquei 10 para userid (id do usuário). Para esse código funcionar, substitua esse valor pelo id verdadeiro do usuário.

segunda-feira, 26 de julho de 2010

Data de inscrição do aluno no curso do Moodle

A data de inscrição do aluno no curso do Moodle fica na tabela mdl_role_assignments no campo timestart. Nos relatórios do Moodle, esse dado não vem. No entanto, pode ser extraída escrevendo comando o SQL como segue exemplo abaixo.

Comando SQL para extrair data de matrícula do aluno no curso:
SELECT u.firstname,u.lastname,rs.timestart FROM mdl_role_assignments rs INNER JOIN mdl_user u ON u.id=rs.userid INNER JOIN mdl_context e ON rs.contextid=e.id WHERE e.contextlevel=50 AND e.instanceid=?

O parâmetro e.instanceid=? deve ser do id do curso. Funciona para versão 1.7 ou superior do Moodle. Para versão 1.6 o comando dever ser outro.

Cadastrar Usuário no Moodle pelo Comando SQL

Para cadastrar usuário no Moodle com comando SQL é necessário evitar duplicação de registro no campos email,username. Esses campos devem ter valor único para cada usuário inserido.
A outra recomendação é certificar que os campos confirmed e mnethostid estejam recebendo valar 1. Se tiver valor 0 ou NULL o usuário não consegue logar.
A tabela mdl_user do Moodle tem vários campos. Os mais importantes para cadastrar um usuário são: firstname,lastname,email,username,password,confirmed como mostra o código SQL abaixo.
INSERT INTO mdl_user (firstname,lastname,email,username,password,confirmed,description, mnethostid) VALUES ('Joao','Silva','jsilva@gmail.com','joao',MD5('silva'),1,'Cabra Bom',1);
Execute esse comando no banco de dados e faça um teste. Para verificar se funcionou tudo certinho logue no Moodle:
Login: joao
Senha: silva
Se funcionar é porque deu tudo certo.
Observação:
O campo mnethostid só existe a partir da versão 1.8. Na versão inferior a 1.8 retire esse campo para evitar erro.Caso queira saber para que serve esse campo, esse o  seguinte link: http://moodlesql.blogspot.com/2011/02/campo-mnethostid-da-tabela-mdluser-do.html