domingo, 10 de abril de 2011

Instalar Bloco e Módulo no Moodle

O Procedimento para instalar um bloco ou Módulo no Moodle é muito simples.  A plataforma Moodle é um sistema Modular. A sua distribuição padrão traz um conjunto de blocos, plugins e módulos. Você pode customizar, ampliando as funcionalidades, adicionando novos blocos, módulos e plugins. 

Nesse post, vamos explicar como instalar o bloco GMoodle X-Link. Trata-se de um bloco de publicação de conteúdo HTML que gera link dinâmico. Foi desenvolvido pela empresa Badiu para integrar Moodle com GMoodle – Sistema de Gestão do Moodle. Pode ser utilizado para integrar Moodle com qualquer outro sistema por meio de link. Veja mais detalhes no link: http://moodlephp.blogspot.com/2011/04/gmoodle-x-link-bloco-do-moodle-que-gera.html

O procedimento para instalar o bloco GMoodle X-Link é mesmo para instalar qualquer bloco no Moodle.

1°   Passo – Download
Faça download GMoodle X-Link  de acordo com a versão do seu Moodle

Para Moodle 1.8 e 1.9:
Para Moodle 2.0:
   
    É necessário ressaltar que na versão 2.0 do Moodle a estrutura dos blocos mudou muito. Pois, blocos projetados para versão 1.8 ou 1.9 não funcionam na versão 2.0.

2º  Passo – Descompacte o arquivo

Descompacte o arquivo. Feito isso, certifique há uma pasta gmoodle_xlink. Dentro dessa pasta há os seguintes arquivos/pasta:
  • lang
  • block_gmoodle_xlink.php
  • e.t.c
3° Passo – Coloque o arquivo no sistema do Moodle
Coloque a pasta gmoodle_xlink  dentro da pasta blocks da instalação do Moodle. A pasta blocks fica na raiz da instalação do Moodle. Está  no mesmo nível de hierarquia que as pastas admin,course, mod como mostra a figura a baixo.

Tratando-se da instalação de um módulo, basta colocar dentro da pasta mod. Se for um plugin de autenticação, deve ser colocada dentro da pasta auth. Bem, já deu para notar como é a arquitetura Modular do Moodle.

4° Passo – Instalar no sistema

Logue no Moodle como administrador, clique em  Avisos no bloco de administração do site.

Feito isso, o bloco GMoodle X-Link  será automaticamente detectado. Basta clicar no botão Continuar (versão 1.9) ou Atualizar (Versão 2.0)  no final da tela para finalizar a instalação.

Para instalação de um módulo, vale o mesmo  procedimento. 

5º - Confirmar a Instalação

    Para confirmar que o bloco foi instalado com sucesso, acesse o ambiente do curso ou da página principal do Moodle.  Em seguida, ative a edição. Vá para o lateral da página,  clique na opção para adicionar um bloco. Feito isso, confirme se o bloco GMoodle X-Link aparece na lista dos blocos, como mostra a figura abaixo.


Se aparecer na lista, significa que a instalação foi efetuada com sucesso.  Tratando-se de um módulo, confirme a instalação na opção para adicionar recurso ou atividade.

    Embora focamos na instalação do bloco GMoodle X-Link, o procedimento para instalar um bloco ou módulo é o mesmo. Caso você tenha necessidade de ampliar as funcionalidades do seu Moodle já sabe como proceder. Agora lhe desejo bom trabalho para ampliara as funcionalidades do seu Moodle.

domingo, 20 de março de 2011

Redirecionar Login do Moodle Para Um Sistema Externo

 Quanto o Moodle é integrado com outro sistema, o formulário de login pode ser desativado se os usuários logam no sistema externo e depois acessam o Moodle. Neste caso, o Moodle deve ser customizado para redirecionar à página de login do sistema externo todas as vezes que os usuários clicarem no link Acesso no ambiente do Moodle.

Essa implementação deve ser feita por meio de alteração do código PHP do Moodle.

Para redirecionar o login do Moodle para um sistema externo, siga os seguintes passos:

1° Passo  - Abrir o arquivo que processa o login
    Abra em um editor de texto  o seguinte arquivo: 
    $CFG->wwwroot/login/index.php

2° Passo  - Inserir URL do sistema externo
     No final  do arquivo, antes da linha do código
print_header("$site->...
aproximadamente na linha 319, insera seguinte trecho do código:
header( 'Location: http://NOVO_ENDERECO_LOGIN') ;

Substitua o texto  NOVO_ENDERECO_LOGIN pelo url de login do sistema externo.

Esse trecho do código interrompe e execução e redireciona para o site do  sisteme externo.

3° Passo  - Gravar alteração do arquivo
    Para que a alteração seja efetivada, grave o arquivo. Feito isso, o Moodle redireciona os usuários para logarem em um sistema externo.

    Com essa alteração, o formulário de login do Moodle fica desativada. Esse procedimento é recomendado em caso de integração em que  o sistema externo assume a autenticação dos usuários.

sexta-feira, 18 de março de 2011

Ativar Exibição do Erro no Moodle

    De repente a tela do Moodle fica em branco. O que está acontecendo ninguém sabe. É claro que nos bastidores ocorreu alguma falha. Para descobrir isso, é necessário ativar a exibição do erro. Só assim o programador, desenvolvedor ou webmaster poderá decifrar o que está acontecendo nos bastidores, ou seja, na camada da aplicação ou do do banco de dados.
  
Para ativar a exibição dos erros, siga os seguintes passos:

1°  Passo – Acesse o  Moodle

 Acesse o Moodle com a senha do administrador

2°  Passo – Acesse o Link Debugging
No bloco Administração de site navegue em:

Na versão do  Moodle 2.0:  Development/Debugging

 Na versão do Moodle 1.9 :  Servidor/Debugging

Ao clicar no link Debugging, será exibido um formulário de configuração sobre a exibição do erro.




3°  Passo – Selecione a mensagem de erro a ser exibida
Por padrão, nenhuma mensagem de erro é exibida.  Há vários níveis de exibição. O mais detalhado é a opção desenvolvedor. Se você for programador ou desenvolvedor, ative essa opção.


Bem, isso é tudo que você precisa para saber o que está acontecendo com o seu Moodle por traz dos panos. A exibição de erro não é recomendada em ambiente de produção. Caso tenha que ser feito, ative-a apenas durante o momento  de reparo, assim  causará menos transtorno aos alunos e tutores que poderão ficar mais confuso ainda com as sopas de letrinas.

segunda-feira, 28 de fevereiro de 2011

Cancelar Atualização Obrigatória do Formulário Perfil para Destrancar a Navegar no Moodle

     No sistema Moodle é obrigatório que o perfil do usuário tenha nome, sobrenome e e-mail. Se você desativar a obrigatoriedade deses campos no formulário  de cadastro, ou efetuar inserção SQL diretamente no banco de dados, a navegação no ambiente do Moodle, após o login, fica trancada até o que esses dados sejam atualizados.

    Se você estiver recebendo reclamação dos alunos de que toda as vezes que logam no Moodle aparece o formulário de perfil que os impeçam de acessar o curso enquanto o maldito formulário não for atualizada, fique frio. A solução será desativar a função da biblioteca do Moodle responsável por essa dor cabeça. Então vamos lá, para resolver isso,  siga os seguintes passos:

 1° Passo  - Abrir o arquivo moodlelib.php
    Abra em um editor de texto  o seguinte arquivo:
    $CFG->wwwroot/lib/moodlelib.php


2° Passo  - Localizar  função user_not_fully_set_up
    Localize no arquivo o seguinte código:

function user_not_fully_set_up($user) {
    return ($user->username != 'guest' and (empty($user->firstname) or empty($user->lastname) or empty($user->email) or over_bounce_threshold($user)));
}

Esse código fica normalmente na linha 2330. Define os campos do perfil que são obrigatório.

3° Passo  - Desativar a  função user_not_fully_set_up parcialmente ou  totalmente

a) Parcialmente

Para desativar a função parcialmente, eliminando a obrigatoriedade apenas do sobrenome,  apague o seguinte trecho do código: or empty($user->lastname)
Feito isso, o código ficará assim:

function user_not_fully_set_up($user) {
    return ($user->username != 'guest' and (empty($user->firstname)  or empty($user->email) or over_bounce_threshold($user)));
}

b) Totalmente
    Para desativar a função totalmente, simplesmente substitua toda a linha de código dentro da função 
return false.
Feito isso, o código ficará assim:

function user_not_fully_set_up($user) {
  return false;
}

4° Passo  - Gravar alteração do arquivo moodlelib.php
    Para que a alteração seja efetivada, grave o arquivo. Feito isso, os alunos não terão mais dor de cabeça com o formulário do perfil e você não perderá seu sono pensando em como descascar o abacaxi.

    O ideal é manter a linha de código original desativado com comando de comentário. Isso é importante caso queira voltar para a configuração original depois.
     Foi feito teste disso na versão 1.9.3 e 1.9.7. Tendo em conta  que se trata do padrão básico do Moodle, em tese, isso pode funcionar em qualquer versão seja  1.8 ou 2.0, basta testar.
    É bom lembrar que esse tipo de operação cirúrgica alterar o padrão do Moodle. Sendo assim, ao atualizar o Moodle para a nova versão,  o problema voltará. A solução é alterar novamente o código PHP. 

Veja também
Tornar Campo Sobrenome Opcional no Formulário de Cadastro de Usuário no Moodle

segunda-feira, 31 de janeiro de 2011

Tornar Campo Sobrenome Opcional no Formulário de Cadastro de Usuário no Moodle


Caso você queira customizar o formulário de cadastro de usuário do Moodle para que o campo sobrenome não seja obrigatório, é necessário alterar o código PHP.
    

Observação:
Se estiver usando a verão 2.7 ou  superior, veja atualização desse post no fórum da comunidade Badiu nesse link: http://comunidade.badiu.com.br/mod/forum/discuss.php?d=132


    Para tornar opcional o preenchimento do campo sobrenome, siga os seguintes passos:

1° Passo  - Abrir o arquivo editlib.php

    Abra em um editor de texto o seguinte arquivo:
    $CFG->wwwroot /user/editlib.php

$CFG->wwwroot  se refere ao endereço da pasta em que a aplicação do Moodle está instalado.

2° Passo  - Localizar a  regra do campo sobrenome
    Localize no arquivo o seguinte código:

$mform->addRule('lastname', $strrequired, 'required', null, 'client');

Esse código fica normalmente na linha 97. Define que o campo sobrenome do usuário deve ser preenchido.


3° Passo  - Desativar a  regra do campo sobrenome

    Faça comentário na linha do código que define a regra de obrigatoriedade ou simplesmente apague a linha de código. Se fizer o comentário, a linha de código deve ficar assim:

//$mform->addRule('lastname', $strrequired, 'required', null, 'client');


4° Passo  - Gravar alteração do arquivo editlib.php
    Para que a alteração seja efetivada, grave o arquivo. Feito isso, basta acessar o formulário de cadastro e verificar que o campo sobrenome se tornou opcional.


5° Passo  - Desabilite a obrigatoriedade do sobrenome na biblioteca do sistema
Para evitar que o formulário de perfil tranque a navegação após o login, desabilite o sobrenome na  função  função user_not_fully_set_up. Para isso, siga as instrução no link: http://moodlephp.blogspot.com/2011/02/cancelar-atualizacao-obrigatoria-do.html

    Essa alteração não é recomendado nos campos que são definidos obrigatórios a nível do banco de dados como a caso dos campos  nome e e-mail.

segunda-feira, 13 de dezembro de 2010

Listar Alunos que Ainda não Acessaram o Curso no Moodle num Determinado Período com Programação PHP

    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:
  • 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  &eacute; um par&acirc;metro obrigat&oacute;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.

quarta-feira, 1 de dezembro de 2010

Relatório do Período da Validade da Inscrição no Moodle Filtrado por um Determinado Participante (Aluno/Tutor) com Programação PHP

    Este post apresenta a codificação PHP para extrair um relatório sobre o período da validade de inscrição de um determinado participante (aluno, tutor e.t.c) no Moodle. O código PHP usa as bibliotecas de funções do ambiente do Moodle.

    Esse relatório informa a data de expiração da matrícula de um usuário, ou seja, participante em todos os cursos em que está inscrito.

Para entender as regras de funcionamento sobre o tempo de validade de inscrição no ambiente Moodle leia o seguinte post:  http://moodlesql.blogspot.com/2010/11/desmistificando-periodo-de-inscricao-do.html
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 o parâmetro do usuário passado pelo método GET:

$user=$_GET['user'];
if(empty($user)){echo "Id do usu&aacute;rio  &eacute; um par&acirc;metro obrigat&oacute;rio";exit;}

 Passe o parâmetro com id do usuário que pretenda extrair o relatório. Caso queira saber como encontrar id do curso consulte o post: http://moodlesql.blogspot.com/2010/10/extrair-id-do-usuario-e-do-curso-no.html

3° Passo
Fazer consulta no banco de dados
 
$sql="SELECT c.id,c.fullname, rs.timestart,rs.timeend FROM {$CFG->prefix}course c INNER JOIN {$CFG->prefix}context e ON c.id=e.instanceid INNER JOIN  {$CFG->prefix}role_assignments rs ON e.id=rs.contextid WHERE e.contextlevel=50 AND rs.userid=$user";

$cursos=get_records_sql($sql);


Essa consulta extrai a informações do banco de dados sobre a data inicial e final da validade da inscrição de todos os cursos que o usuário está inscrito.

4° Passo

Imprimir relatório:
     
<table  border="1">
<tr>
<td><b>Id</b></td>
<td><b>Curso</b></td>
<td><b>Data de Inicio</b></td>
<td><b>Data de Finaliza&ccedil;&atilde;o</b></td>
</tr>
<?    foreach ($cursos as $curso){
    //formatar data
    $dataInicio=$curso->timestart;
    if($dataInicio==0){$dataInicio="--";}
    else {$dataInicio=date("d/m/Y",$curso->timestart);}
   
    $dataFim=$curso->timeend;
    if($dataFim==0){$dataFim="--";}
    else {$dataFim=date("d/m/Y",$curso->timeend);}

 ?>
    <tr>
    <td><?=$curso->id?></td>
    <td><?=$curso->fullname?></td>
    <td><?= $dataInicio?></td>
    <td><?=$dataFim?></td>
   
<?}?>
</table>
 O relatório é organizado em uma tabela que com três colunas:
  • Id – Id do curso
  • Curso - Nome do curso
  • Data de Inicio – Data que a inscrição foi feita
  • Data da Finalização – Data final da validade da inscrição.
    A data final da validade da inscrição é a data da inscrição mais os dias da validade da inscrição que é definido no momento do cadastro.

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
    $user=$_GET['user'];
   
    if(empty($user)){echo "Id do usu&aacute;rio  &eacute; um par&acirc;metro obrigat&oacute;rio";exit;}
    
      $sql="SELECT c.id,c.fullname, rs.timestart,rs.timeend FROM {$CFG->prefix}course c INNER JOIN {$CFG->prefix}context e ON c.id=e.instanceid INNER JOIN  {$CFG->prefix}role_assignments rs ON e.id=rs.contextid WHERE e.contextlevel=50 AND rs.userid=$user";
      $cursos=get_records_sql($sql);
   
      ?>
      <table  border="1">
<tr>
<td><b>Id</b></td>
<td><b>Curso</b></td>
<td><b>Data de Inicio</b></td>
<td><b>Data de Finaliza&ccedil;&atilde;o</b></td>
</tr>
<?    foreach ($cursos as $curso){
   
    //formatar data
    $dataInicio=$curso->timestart;
    if($dataInicio==0){$dataInicio="--";}
    else {$dataInicio=date("d/m/Y",$curso->timestart);}
   
    $dataFim=$curso->timeend;
    if($dataFim==0){$dataFim="--";}
    else {$dataFim=date("d/m/Y",$curso->timeend);}

 ?>
    <tr>
    <td><?=$curso->id?></td>
    <td><?=$curso->fullname?></td>
    <td><?= $dataInicio?></td>
    <td><?=$dataFim?></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 participante_curso_pvalidade_inscricao.php dentro da pasta _extra. Coloque o código php nesse arquivo.

Feito isso, acesse o endereço:
http://[endereço do moodle]/_extra/participante_curso_pvalidade_inscricao.php? user=12
Substitua o parâmetro pelo id do usuário


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 código foi testado na versão 1.9.3 mas pode funcionar em qualquer versão do Moodle que use as funções do PDO para manipular a base de dados. Não funciona na versão 1.6 e 2.0
  

Veja Também:

Desmistificando Período de Inscrição do Curso no Moodle com Comando SQL

Relatório do Período da Validade da Inscrição dos Participantes no Curso do Moodle com Programação PHP

Relatório da Configuração do Período da Validade da Inscrição no Curso do Moodle com Programação PHP