Este post tem por objetivo mostrar como corrigir a data de início de inscrição dos alunos no curso do Moodle caso estiver vazia.
Se por algum motivo, os alunos no Moodle estiverem com a data de início da matrícula vazia, pode ocorrer inconsistência em gerar relatórios quando se usa algum plugin de relatório como Badiu MReport. Neste casso, é necessário corrigir. Uma forma fácil de fazer isso é usar a data de início do curso como data de início das inscrições.
A seguir estão os comandos SQL necessário para tal operação.
1- Comando SQL
Lista de curso em que existe pelo menos um aluno sem a data de início de inscrição
SELECT DISTINCT c.id,ue.enrolid,c.startdate,c.fullname FROM mdl_enrol e INNER JOIN mdl_course c ON c.id= e.courseid INNER JOIN mdl_user_enrolments ue ON e.id=ue.enrolid WHERE ue.timestart =0 OR ue.timestart IS NULL
Atualizar a data de início da matrícula se estiver vazia pela data do início do curso
UPDATE mdl_user_enrolments SET timestart=? WHERE enrolid=? AND (timestart=0 OR timestart IS NULL)
Passe a data de início da inscrição em timestart=?
Passe id do método do inscrição em enrolid=?
2- Script PHP
Agora que já temos comando SQL, vamos montar um script PHP para executar esses comandos.
Segue a função que gera a lista de cursos em que há data de início da inscrição vazia
function get_courses_withenroltimestartnull() {
global $DB, $CFG;
$sql = "SELECT DISTINCT c.id,ue.enrolid,c.startdate,c.fullname FROM {$CFG->prefix}enrol e INNER JOIN {$CFG->prefix}course c ON c.id= e.courseid INNER JOIN {$CFG->prefix}user_enrolments ue ON e.id=ue.enrolid WHERE ue.timestart =0 OR ue.timestart IS NULL";
$rows = $DB->get_records_sql($sql,null,0,500);
return $rows;
}
Segue a função que que atualiza a data de início do curso
function change_enrolwithnulltimestar($enrolid, $timestart) {
if(empty($enrolid)){return null;}
if(empty($timestart)){return null;}
global $DB, $CFG;
$sql = "UPDATE {$CFG->prefix}user_enrolments SET timestart=$timestart WHERE enrolid=$enrolid AND (timestart=0 OR timestart IS NULL)";
$r = $DB->execute($sql);
return $r;
}
A função a seguir, invoca as duas funções anterior. Faz loop para cada curso retornado na primeira função e, em seguida, processa atualização
function updateall_enrolwithtimestartnull(){
$courses=get_courses_withenroltimestartnull();
$cont=0;
foreach ($courses as $course) {
$result=change_enrolwithnulltimestar($course->enrolid, $course->startdate);
$cont++;
echo "<br />".$course->fullname." - ".$result;
}
echo "<hr> $cont curso processado";
}
3 - Instalação do script no seu Moodle
Para rodar esse scritp no seu Moodle. Siga os seguintes passos:
a) Faça download do update_user_enrolments_timestart.php
2) Na raiz da instalação do seu Moodle, MOODLE_DIR_INSTALL cria uma pasta com nome _extra;
3) Coloque o arquivo que fez download na pasta MOODLE_DIR_INSTALL/_extra
4) Execute no navegador os seguintes url
MOODLE_URL/_extra/update_user_enrolments_timestart.php
Caso algum curso for processado, será exibido o nome do curso. Frente ao nome do curso será impresso o valor retornado pelo SQL. Se for 1 é sinal que SQL foi executado com sucesso.