Para listar todos os alunos de um curso, filtrando apenas:
- Inscrições não suspensas
- Inscrições com data de início e encerramento dentro de período de validade
- Perfis que podem ser avaliados
- Usuário com cadastro não suspenso, não deletado e confirmado
Execute o seguinte comando SQL:
SELECT DISTINCT u.id AS userid,u.firstname,u.lastname,u.email FROM mdl_role_assignments rs INNER JOIN mdl_user u ON rs.userid=u.id INNER JOIN mdl_context e ON rs.contextid=e.id INNER JOIN mdl_enrol en ON e.instanceid=en.courseid INNER JOIN mdl_user_enrolments ue ON en.id=ue.enrolid WHERE e.contextlevel=50 AND rs.userid=ue.userid AND en.courseid =? AND ue.status = 0 AND en.status = 0 AND u.deleted=0 AND u.confirmed=1 AND u.suspended =0 AND (ue.timestart IS NULL OR ue.timestart = 0 OR ue.timestart <= ? ) AND (ue.timeend IS NULL OR ue.timeend = 0 OR ue.timeend >= ? ) AND rs.roleid IN (SELECT value FROM mdl_config WHERE name = 'gradebookroles')
Passe parâmetro id curso em en.courseid =?
Passe parâmetro data atual em formato timestamp ue.timestart <= ? e ue.timeend >= ?
Se estiver usando PostgreSql, remove a subconsulta. Tire esse parte do comando e executa a parte e passe parâmetro para SQL no rs.roleid.
AND rs.roleid IN (SELECT value FROM mdl_config WHERE name = 'gradebookroles')