Atualizar a data de início da matrícula se estiver vazia pela data do início do curso

Atualizar a data de início da matrícula se estiver vazia pela data do início do curso

por Lino Vaz Moniz -
Número de respostas: 0

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.