Esse post mostra um script PHP que faz correção da data de início e término da matrícula no Moodle caso estiverem vazias.
O script tem as seguintes funcionalidades:
- Contar quantidade de inscrição sem registro de data de início;
- Contar quantidade de inscrição sem registro de data de encerramento;
- Preencher data de início de inscrição, caso estiver vazio, com a data de cadastro da inscrição;
- Preencher data de término de inscrição, caso estiver vazio, com a data de inscrição adicionando X quantidade de dias;
Esse script é composto por uma biblioteca de funções e código que invoca essa biblioteca. Todo esse código está no arquivo enrol_changedate.php
Antes de mostrar o funcionamento, vou explicar os trechos do código mais importantes.
Apresentação do código
Importa biblioteca geral do Moodle
require_once("../config.php");
Instancia a classe da biblioteca
$badiuecd=new badiu_enrol_changedate();
Recebe parâmetros do HTTP querystring .
$limit= optional_param('limit',500,PARAM_INT);
$dayadd= optional_param('dayadd', 90,PARAM_INT);
$exec= optional_param('exec', NULL,PARAM_TEXT);
O parâmetro limit especifica quantidade máximo de registro a ser processado. Caso não for definido, assume o valor 500 por padrão;
O parâmetro dayadd especifica quantidade de dias que deve ser adicionado a data início de inscrição para calcular a data de encerramento. Se a data de inscrição for 10/7/2017 e esse parâmetro for definido com valor 10, a data de término da inscrição será 20/07/2017. Caso nenhum valor for definido, o valor padrão será 90 dias;
O parâmetro exec especifica qual função dever ser executado. Deve receber os seguintes valores:
filltimestart – Com esse valor, executa a função que preenche data de início da inscrição que estiver vazia, copiando data de cadastro da inscrição;
if($exec=='filltimestart'){$filltimestart=$badiuecd->fill_empty_timestart_with_timecreated($limit);}
filltimeend – Com esse valor, executa a função que preenche data de término inscrição que estiver vazia, copiando data de inicio da inscrição adicionado os dias configurados no parâmetro dayadd;
if($exec=='filltimeend'){$filltimemend=$badiuecd->fill_empty_timeend_with_timestart($dayadd,$limit);}
A saída de dados mostra a quantidade de matrícula sem data de início e término de inscrição. Além disso, mostra quantidade de alteração que foi feita em função do valor passado no parâmetro exec.
echo "<br>Total de inscricao sem data de inicio: $emptytimestart";
echo "<br>Total de inscricao sem data de encerramento: $emptytimeend";
if($exec=='filltimestart'){echo "<br>Total de inscricao com data de inicio alterado para data de cadastro: $filltimestart";}
if($exec=='filltimeend'){echo "<br>Total de inscricao com data de encerramento alterado em $dayadd dias a partir da data de inicio: $filltimemend";}
Segue o código da biblioteca
class badiu_enrol_changedate { public function count_empty_timestart() { global $CFG,$DB; $sql="SELECT COUNT(id) AS countrecord FROM {$CFG->prefix}user_enrolments WHERE timestart =0 "; $r=$DB->get_record_sql($sql); return $r->countrecord; } public function get_enrol_timecreated_empty_timestart($limit=500) { global $CFG,$DB; $sql="SELECT id,timecreated FROM {$CFG->prefix}user_enrolments WHERE timestart = 0 "; $rows=$DB->get_records_sql($sql,null,0, $limit); return $rows; } public function fill_empty_timestart_with_timecreated($limit=500) { global $CFG,$DB; $enerols=$this->get_enrol_timecreated_empty_timestart($limit); $result=0; foreach ($enerols as $enrol) { $timestart=$enrol->timecreated; $id=$enrol->id; $sql = "UPDATE {$CFG->prefix}user_enrolments SET timestart=$timestart WHERE id = $id "; $r= $DB->execute($sql); if($r){$result++;} } return $result; } public function count_empty_timeend() { global $CFG,$DB; $sql="SELECT COUNT(id) AS countrecord FROM {$CFG->prefix}user_enrolments WHERE timeend =0"; $r=$DB->get_record_sql($sql); return $r->countrecord; } public function get_enrol_timestart_empty_timeend($limit=500) { global $CFG,$DB; $sql="SELECT id,timestart FROM {$CFG->prefix}user_enrolments WHERE timestart > 0 AND timeend = 0 "; $rows=$DB->get_records_sql($sql,null,0, $limit); return $rows; } public function fill_empty_timeend_with_timestart($dayadd=90,$limit=500) { global $CFG,$DB; $enerols=$this->get_enrol_timestart_empty_timeend($limit); $result=0; foreach ($enerols as $enrol) { $timeend=$enrol->timestart+($dayadd*86400); $id=$enrol->id; $sql = "UPDATE {$CFG->prefix}user_enrolments SET timeend=$timeend WHERE id = $id "; $r= $DB->execute($sql); if($r){$result++;} } return $result; } }
Instalação do script
Para rodar esse scritp no seu Moodle. Siga os seguintes passos:
1) Faça download do scritp enrol_changedate.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/enrol_changedate.php
Esse url não altera nenhuma data. Só faz diagnostico se tem registro de inscrição com data de início e termino vazio
MOODLE_URL /_extra/enrol_changedate.php?exec= filltimestart&limit=100
Esse url passa o parâmetro para executar correção da data de início de inscrição. Ajuste o valor limit em função da quantidade de registro que tem para ser corrigido. Não é recomendável colocar valor alto.
MOODLE_URL /_extra/enrol_changedate.php?exec=filltimeend&limit=100 &dayadd=120
Esse url passa o parâmetro para executar correção da data de encerramento de inscrição. Ajusta o valor limit em função da quantidade de registro que tem para ser corrigido. Não é recomendável colocar valor alto. Ajusta o valor dayadd de acordo com a data encerramento que deseja configurar para cada aluno. Lembre que esse valor adicionar número de dias que a matrícula deve ser expirada contando a partir da data de início da matrícula.
Esse script não funciona na versão 1.9 do Moodle. Funciona na versão 2 e 3. O teste foi feito na versão 3. Antes de usar, leia com cuidado a documentação. Não há opção de desafazer alteração feita no banco por esse nesse script. Esse script só funciona se a data de início ou término de inscrição estiverem vazias. Não execute esse script se não tiver certeza do que está fazendo.