quinta-feira, 14 de abril de 2011

Extrair o Primeiro Acesso de um Participante no Curso do Moodle com Programação PHP

    Este post apresenta a codificação PHP para extrair a data do primeiro acesso de um participante no curso do Moodle. Será apresentado código tanto para versão 1.9 quanto para versão 2.0 do Moodle. 

    Para explorar um pouco mais o comando SQL que efetiva a consulta do primeiro acesso no banco de dados, consulte o link: http://moodlesql.blogspot.com/2011/04/extrair-o-primeiro-acesso-do-aluno-no.html   

A código apresentado a seguir, faz uma consulta da data do primeiro acesso no banco de dados e imprime na tela.

Então vamos iniciar a programação. Siga os passos a seguir.

1° Passo
Importe a biblioteca de funções do Moodle:

require_once("../config.php");

2° Passo

Receba os parâmetro do id do usuário e id do curso passados pelo método GET:

$user=$_GET['user'];
$course=$_GET['course'];
Faça crítica de dados caso os parâmetros não forem passados:

if(empty($user)){echo "Id do usuário  é um parâmetro obrigatório";exit;}
if(empty($course)){echo "Id do curso  é um parâmetro obrigatório";exit;}

3° Passo

Faça a  consulta no banco de dados:

$sql="SELECT MIN(time) AS firstaccess FROM {$CFG->prefix}log WHERE userid=$user AND course=$course";

Se estiver usando  Moodle 2.0 , use esse código:
$access=$DB->get_record_sql($sql);

Para Moodle 1.9 e demais, use esse código:
$access=get_record_sql($sql);
Já deu para notar que a diferença da versão 1.9 para 2.0 é que as funções de acesso ao banco de dados são invocadas no objeto $DB na versão 2.0. Veja a diferença dos dois códigos destacado pela cor vermelha.

 $access=get_record_sql($sql);
 $access=$DB->get_record_sql($sql);

4° Passo
Imprima a data na tela:

Verifique se o usuário nunca acessou o curso:

if(empty($access->firstaccess)){echo "O usuário ainda não acessou o curso";exit;}
Caso tenha acessado, informe a data:

echo date("d/m/Y H:i",$access->firstaccess);

Código Completo
<?    
require_once("../config.php");
    
     //receber parârmetro
    $user=$_GET['user'];
    $course=$_GET['course'];

    //crítica de dados
     if(empty($user)){echo "Id do usuário  é um parâmetro obrigatório";exit;}
     if(empty($course)){echo "Id do curso  é um parâmetro obrigatório";exit;}
 
 //extrair primeiro acesso
 
 $sql="SELECT MIN(time) AS firstaccess FROM {$CFG->prefix}log WHERE userid=$user AND course=$course";

//para Moodle 2.0
 $access=$DB->get_record_sql($sql);

 //para Moodle 1.9
// $access=get_record_sql($sql);
 
 //mensagem caso ainda não tenha acesado
if(empty($access->firstaccess)){echo "O usuário ainda não acessou o curso";exit;}

//imprimir data
echo date("d/m/Y H:i",$access->firstaccess);
    
?>

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_first_access_course.php dentro dessa pasta. Digite o código php nesse arquivo.

Feito isso, acesse o endereço:
http://[endereço do moodle]/_extra/user_first_access_course.php?user=2&course=1
Substitua os parâmetro pelo id do curso e id do usuário pelos dados da sua pesquisa


Download

Descompacte  o arquivo e cole na pasta _extra na raiz do seu Moodle. Caso essa pasta não exista, crie-a. Agora faça o teste.

Esse código foi testado na versão 2.0 e 1.9.11.  Pode funcionar em qualquer versão do Moodle que use as funções do PDO para manipular a base de dados. Lembrando que nas versões inferiores a 2.0, as funções do acesso ao banco de dados não são invocados por meio de um objeto.
  


5 comentários:

  1. vc saberia me dizer como pegar a ID do usuario q fez o login? ou pegar a id do ultimo usuario logado?

    ResponderExcluir
  2. TecNol,
    Para ver como extrair id do último usuário que logou no Moodle acesse o post http://moodlesql.blogspot.com/2011/12/recuperar-id-do-ultimo-usuario-logado.html
    Caso queira recuperar id da session PHP do usuário logado, na variável global $USER->id

    ResponderExcluir
  3. Bom dia meu coro Badiu!!
    Você poderia me ajudar?
    Estão tentando buscar o primeiro acesso do aluno em cada disciplina já tentei de tudo.. ex:

    SELECT to_char(from_unixtime(MIN(time)),'DD-MM-YYYY HH:MM') as firstaccessd FROM mdl_log WHERE userid=? AND course=?

    Só me retorna o primeiro acesso dele!!!
    desde já agradeço!!

    ResponderExcluir
    Respostas
    1. Marcos,
      Para extrair o primeiro acesso de um usuário nos cursos que já fez acesso, execute o seguinte comando SQL:

      SELECT MIN(time),course FROM mdl_log WHERE userid=6 GROUP BY course

      Excluir