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.
Olá, como ficaria esse comando na versão 2.8?
ResponderExcluirPedro,
ExcluirA data de inscrição do aluno no curso na versão 2 mudou de lugar. Agora fica na tabela mdl_user_enrolments são os campos timestart e timeend
Para saber qual curso ao aluno está vinculado, explore a coluna enrolid
Esta coluna é chave estrangeira, faz referencia a chave primária da coluna mdl_enrol que gerencia método de inscrição.
Um aluno pode ter mais de uma inscrição no curso por diferentes métodos. Neste caso terá mais de um lançamento na tabela mdl_user_enrolments. A tabela mdl_role_assignments atualmente só registra o perfil no contexto. Ficou meio duplicado isso na nova versão do Moodle e mais confuso.
Atualmente para tirar data de inscrição, uso a combinação de programação para juntar os dados.
Primeiro tiro a relação dos inscritos na tabela mdl_role_assignments e depois vou procurar a data de cadastro na tabela mdl_user_enrolments fazendo join com a tabela mdl_enrol para filtrar por curso.
Eu também tenho dúvidas de como fazer este filtro de matrículas por data quando tenho 2 matriículas de um mesmo aluno.
ResponderExcluirSe o aluno está no curso1 e cutrso2 no mesmo período, e eu filtro por data as matrículas do curso1 aparece também a matricula do curso2, pois ele busca na tabela "mdl_user_enrolments" campo "timestart" relacionando id_user e acha os 2 registros.
Assim o relatório fica inconsistente.
Segue minha query:
$strSQL = mysql_query ("SELECT
mdl_user_enrolments.userid,
mdl_user_enrolments.timestart,
mdl_user_info_data.fieldid,
mdl_user_info_data.data,
mdl_user.lastname AS SOBRENOME,
mdl_user.firstname AS NOME,
mdl_user.email AS EMAIL,
mdl_course.fullname AS CURSO
FROM mdl_role_assignments
INNER JOIN mdl_user_enrolments on (mdl_role_assignments.userid = mdl_user_enrolments.userid)
INNER JOIN mdl_user_info_data on (mdl_role_assignments.userid = mdl_user_info_data.userid)
INNER JOIN mdl_user on (mdl_role_assignments.userid = mdl_user.id)
INNER JOIN mdl_context on (mdl_role_assignments.contextid = mdl_context.id)
INNER JOIN mdl_course on (mdl_course.id = mdl_context.instanceid)
WHERE
(date(from_unixtime(mdl_user_enrolments.timestart)) >= '$data_inicio') AND
(date(from_unixtime(mdl_user_enrolments.timestart)) <= '$data_final') AND
(mdl_context.contextlevel=50) AND (mdl_role_assignments.roleid=5) AND
(mdl_course.id = '$id_curso') AND
(mdl_user_info_data.fieldid = '26') AND (mdl_user_info_data.data like '%$unidade%') ORDER BY firstname");
como podem ver uso outros filtros pelo campo de cadastro do usuários. Joguei o relatório aqui: http://senaiead.fiepb.org.br/relatorio_completo/
caso queiram ver.
NÃO ENTENDI COMO FAZER O RELACIONAMENTO COM A TABELA MDL_ENROL. :(
Fico grato quem poder ajudar. :D
Adeilton,
ExcluirNo seu comando notei que está faltando INNER JOIN com a tabela mdl_enrol
Trata-se da tabela que especifica qual método de inscrição o aluno está vinculado, e consequentemente o curso que o método está vinculado.
Veja como é a relação:
a) A tabela mdl_enrol registra o método de inscrição. Nessa tabela há a coluna courseid que especifica o curso;
b) Na tabela mdl_user_enrolments a coluna enrolid especifica o método que o usuário foi inscrito. Ao fazer INNER JOIN com a tabela mdl_enrol, facilmente se mapeie para qual curso a inscrição foi feita.
Observação:
A tabela mdl_user_enrolments também registra o curso que o aluno está inscrito por meio do contextid, ou seja, pelo contexto. Ficou um pouco duplicado o registro de matrícula em duas tabelas. Mas para recuperar a data de início e término da matrícula, o cominho é explorar a relação entre as tabelas mdl_user_enrolments e mdl_enrol
Valeu Lino pela informação!!
ExcluirEu adicionei o INNER JOIN da seguinte forma:
INNER JOIN mdl_enrol on (mdl_enrolments.enrolid = mdl_enrol.courseid)
Mas assim não retorna nenhum dado.
Estou tentando esta correção.
Adilton,
ExcluirO comando a seguir lista a data de inscrição dos usuários num determinado curso:
SELECT u.firstname,u.lastname,u.email,ue.timestart, ue.timeend FROM mdl_enrol e INNER JOIN mdl_user_enrolments ue ON e.id=ue.enrolid INNER JOIN mdl_user u ON u.id=ue.userid WHERE e.courseid=?
Passe o parâmetro id do curso em e.courseid=?