Corrigir data de início e término de inscrição no Moodle se estiverem vazias com script PHP

Corrigir data de início e término de inscrição no Moodle se estiverem vazias com script PHP

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

 

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.