Este post implementa o código PHP para extrair relatório dos alunos que não acessaram o curso em um determinado intervalo de tempo. Trata-se de codificação PHP do post publicado em Moodle SQL:
http://moodlesql.blogspot.com/2010/12/listar-alunos-que-ainda-nao-acessaram-o.html
Então vamos iniciar os passos da programação.
1° Passo
Importe a biblioteca de funções do Moodle:
require_once("../config.php");
2° Passo
Receba os parâmetros do curso e quantidade de dias pelo método GET:
$curso=$_GET['curso'];
$dia=$_GET['dia'];
if(empty($curso)){echo "Id do curso é um parâmetro obrigatório";exit;}
if(empty($dia)){$dia=7;} //Se o parâmetro dia não for definida, será tomado 7 dia por padrão, ou seja, uma semana.
O parâmetro id do curso define em qual curso deve ser extraído o relatório. O parâmetro quantidade de dia serve para definir o intervalo do tempo em que não ocorreu acesso. Caso nenhum valor for passado, será definido por padrão uma semana, ou seja, 7 dias.
3° Passo
Calcule o período a partir de quantidade de dias.
$data1=$data=time()-($dia*24*60*60); //Calcular data retroativa $data2=$data=time();//Data atual;
A $data1 é a data retroativa, ou seja, a data atual menos a quantidade de dias. A função time() retorna a data atual em segundos. Para saber a data retroativa, basta converter os dias em segundos através do cálculo $dia*24*60*60 ($dia* 24hora *60 minuto *60 segundos ) e subtrair pela data atual.
4° Passo
Fazer consulta no banco de dados
$sql="SELECT u.id, u.firstname,u.lastname,u.email FROM mdl_role_assignments rs INNER JOIN mdl_user u ON u.id=rs.userid INNER JOIN mdl_context e ON rs.contextid=e.id WHERE e.contextlevel=50 AND rs.roleid=5 AND e.instanceid=$curso AND u.id NOT IN (SELECT DISTINCT userid FROM mdl_log WHERE course=$curso AND time >=$data1 AND time <=$data2)";
$usrs=get_records_sql($sql);
Essa consulta retorna a lista dos alunos inscritos no curso que ainda não acessaram o ambiente do curso no intervalo de tempo definido.
5° Passo
Imprimir relatório:
<table border="1">
<tr>
<td><b>Id</b></td>
<td><b>Nome</b></td>
<td><b>E-mail</b></td>
</tr>
<? foreach ($usrs as $usr){
?>
<tr>
<td><?=$usr->id?></td>
<td><?=$usr->firstname ." ".$usr->lastname ?></td>
<td><?=$usr->email?></td>
<?}?>
</table>
O relatório é organizado em uma tabela que com três colunas:
http://moodlesql.blogspot.com/2010/12/listar-alunos-que-ainda-nao-acessaram-o.html
Então vamos iniciar os passos da programação.
1° Passo
Importe a biblioteca de funções do Moodle:
require_once("../config.php");
2° Passo
Receba os parâmetros do curso e quantidade de dias pelo método GET:
$curso=$_GET['curso'];
$dia=$_GET['dia'];
if(empty($curso)){echo "Id do curso é um parâmetro obrigatório";exit;}
if(empty($dia)){$dia=7;} //Se o parâmetro dia não for definida, será tomado 7 dia por padrão, ou seja, uma semana.
O parâmetro id do curso define em qual curso deve ser extraído o relatório. O parâmetro quantidade de dia serve para definir o intervalo do tempo em que não ocorreu acesso. Caso nenhum valor for passado, será definido por padrão uma semana, ou seja, 7 dias.
3° Passo
Calcule o período a partir de quantidade de dias.
$data1=$data=time()-($dia*24*60*60); //Calcular data retroativa $data2=$data=time();//Data atual;
A $data1 é a data retroativa, ou seja, a data atual menos a quantidade de dias. A função time() retorna a data atual em segundos. Para saber a data retroativa, basta converter os dias em segundos através do cálculo $dia*24*60*60 ($dia* 24hora *60 minuto *60 segundos ) e subtrair pela data atual.
4° Passo
Fazer consulta no banco de dados
$sql="SELECT u.id, u.firstname,u.lastname,u.email FROM mdl_role_assignments rs INNER JOIN mdl_user u ON u.id=rs.userid INNER JOIN mdl_context e ON rs.contextid=e.id WHERE e.contextlevel=50 AND rs.roleid=5 AND e.instanceid=$curso AND u.id NOT IN (SELECT DISTINCT userid FROM mdl_log WHERE course=$curso AND time >=$data1 AND time <=$data2)";
$usrs=get_records_sql($sql);
Essa consulta retorna a lista dos alunos inscritos no curso que ainda não acessaram o ambiente do curso no intervalo de tempo definido.
5° Passo
Imprimir relatório:
<table border="1">
<tr>
<td><b>Id</b></td>
<td><b>Nome</b></td>
<td><b>E-mail</b></td>
</tr>
<? foreach ($usrs as $usr){
?>
<tr>
<td><?=$usr->id?></td>
<td><?=$usr->firstname ." ".$usr->lastname ?></td>
<td><?=$usr->email?></td>
<?}?>
</table>
O relatório é organizado em uma tabela que com três colunas:
- Id - Id do aluno na tabela mdl_user
- Nome – Nome do aluno
- E-mail – E-mail do aluno
Código Completo
Até então vimos o código em pedaço. Juntando tudo fica assim:
<?php
require_once("../config.php");
//receber parármetro
$curso=$_GET['curso'];
$dia=$_GET['dia'];
if(empty($curso)){echo "Id do curso é um parâmetro obrigatório";exit;}
if(empty($dia)){$dia=7;} //Se o parâmetro dia não for definida, será tomado 7 dia por padrão, ou seja, uma semana.
//Definir data em quantidade de segundos
$data1=$data=time()-($dia*24*60*60); //Calcular data retroativa a partir da quantidade dias passado no parâmetro
$data2=$data=time();//Data atual;
$sql="SELECT u.id, u.firstname,u.lastname,u.email FROM mdl_role_assignments rs INNER JOIN mdl_user u ON u.id=rs.userid INNER JOIN mdl_context e ON rs.contextid=e.id WHERE e.contextlevel=50 AND rs.roleid=5 AND e.instanceid=$curso AND u.id NOT IN (SELECT DISTINCT userid FROM mdl_log WHERE course=$curso AND time >=$data1 AND time <=$data2)";
$usrs=get_records_sql($sql);
?>
<table border="1">
<tr>
<td><b>Id</b></td>
<td><b>Nome</b></td>
<td><b>E-mail</b></td>
</tr>
<? foreach ($usrs as $usr){
?>
<tr>
<td><?=$usr->id?></td>
<td><?=$usr->firstname ." ".$usr->lastname ?></td>
<td><?=$usr->email?></td>
<?}?>
</table>
Implementar no Moodle
Para executar esse código no Moodle, crie uma pasta denominado _extra dentro da raiz da instalação do Moodle. Em seguida, crie um arquivo denominado user_curso_sapp.php dentro da pasta _extra. Coloque o código php nesse arquivo.
Feito isso, acesse o endereço:
http://[endereço do moodle]/_extra/user_curso_sapp.php?curso=2&dia=10
Download
Se estiver com preguiça de criar o arquivo e digitar o código, faça download desse exemplo. Descompacte o arquivo e cole na pasta _extra na raiz do seu Moodle. Caso a pasta _extra não exista ainda, crie-a. Agora faça o teste.
Esse pode funcionar em qualquer versão do Moodle que use as funções do PDO para manipular a base de dados. Não funciona nas versões inferiores a 1.7 pela incompatibilidade da estrutura das tabelas da matrícula.