segunda-feira, 8 de novembro de 2010

Usar Bibliotecas de Funções do Sistema do Moodle para Desenvolvimento

A Plataforma Moodle tem uma excelente biblioteca. Trata-se de um conjunto de funções que compõe o core do sistema. Essas funções são utilizadas para implementar os módulos que compõem a Plataforma. 

O trabalho de desenvolvimento e customização do Moodle se torna muito mais rápido e fácil com o uso dessa biblioteca. 

Toda  biblioteca fica organizada na pasta lib no endereço raiz da instalação do Moodle.  Para torná-la disponível basta incluir o arquivo config.php no   início do arquivo de programação php com o seguinte comando:
 require_once("config.php");
 

Exercício
Para não ficar só na conversa, vamos fazer um exercício.

1°  Passo
Crie uma pasta denominado _extra dentro da raiz da instalação do Moodle. Dentro dessa pasta, crie um arquivo testelib.php. A pasta _extra será o local parta testes todos os exercícios de programação do Moodle. O nome _extra é para não confundir com as outras pastas que são padrões do Moodle.

2° Passo
Coloque o seguinte código no arquivo:

<?php
     require_once("../config.php");
     $sql="SELECT COUNT(id) AS cont FROM  {$CFG->prefix}user ";
     $usr=get_record_sql($sql);
     echo $usr->cont;
?>
3° Passo
Execucte o arquivo no navegador chamando pelo http://[endereço do moodle]/testelib.php
Feito isso, será impresso na tela a quantidade de usuários cadastrados na tabela usuário do Moodle.

Decifrar o Código
    Viu como é moleza. Agora vamos decifrar o código:

Primeira Linha de Código
require_once("config.php");
Esse comando importa as bibliotecas de função e inicializa as variáveis globais e sessão do Moodle.
Observação
Você já deve ter notado que os arquivos config.php e testelib.php estão na mesma pasta,  ou seja, a raiz da instalação do Moodle. Caso você crie uma subpasta teste para colocar o arquivo  testelib.php, altere o endereço de importação do arquivo config.php para require_once("../config.php");

Segunda Linha de Código
$sql="SELECT COUNT(id) AS cont FROM  {$CFG->prefix}user ";
Esse  comando monta SQL para consulta no banco de dados. O comando {$CFG->prefix} indica o prefixo da tabela.

Terceira Linha de Código
$usr=get_record_sql($sql);
Esse linha de comando executa a consulta no banco. Você deve estar perguntando: - Uai cadê o código que faz conexão como o banco? Bem, para sua surpresa, a biblioteca do Moodle cuida disso. Cabe você cuidar apenas da lógica de programação.

Quarta Linha de Código
echo $usr->cont;
Esse comando você já está careca de saber que apenas imprime na tela o resultado da consulta feita no banco.

Download
Se estiver com preguiça de criar o arquivo e digitar o código, faça download  desse exemplo. Descompacte o arquivo testelib.php 
e coloque na pasta raiz do seu Moodle e bom teste.

Bem, é primeiro teste é o nosso alou mundo de programação do Moodle. Mais novidades virão por aí.

37 comentários:

  1. Muito interessante.;D
    Poste mais novidades

    ResponderExcluir
  2. Bem Bacana,

    Estou pesquisando o funcionamento do Moodle, para fazer uma customização, já fiz até algumas coisas de pequena monta. No futuro podemos até trocar umas figurinhas...

    CTRL + D =]

    ResponderExcluir
  3. Anthony,
    Será bacana. Atualmente estou desenvolvimento alguns plugins do Moodle. Podemos compartilhar experiências.

    ResponderExcluir
  4. Olá Anthony e Badiu, também estou pensando em desenvolver um plugin para o moodle, podemos trocar informações? Grato

    ResponderExcluir
  5. Que tipo de plugin você pensa desenvolver?

    ResponderExcluir
  6. Olá amigo, também preciso desenvolver um plugin para o moodle. Poderia me ajudar por favor?
    Estou fazendo isso como meu trabalho de conclusão de curso, estou começando a entender o Moodle agora e preciso terminar em 2 meses.
    Se possível, aguardo contato.
    Poderia me deixar um e-mail ou msn para contato?
    Eu agradeço desde já.

    ResponderExcluir
    Respostas
    1. No Moodle há vários tipos de plugin. Que tipo de plugin você quer fazer?

      Excluir
    2. Então, o propósito do meu plugin é criar "comunidades" mais voltadas para agrupar conhecimento, exemplo, uma comunidade de PHP, em que os alunos, independente do campus, podem entrar e se registrar para trocar conhecimento.
      E eu também terei que criar módulos de cadastro e gerencia de projetos de pesquisa e projetos de extensão. É isso, basicamente. Será que poderia me ajudar?

      Excluir
    3. Para desenvolver para o ambiene do Moodle, o primeiro passo é definir qual tipo de plugin é mais apropriado para o seu projeto.

      Para comunidade me parece que plugin de atividade do curso é mais apropriado. O problema é que esse tipo de plugin fica muito atrelado ao curso. Talvez a solução ideal seria desenvolver um plugin local. A mesma sugestão se aplica ao projeto de pesquisa.

      O plugin local é mais apropriado para versão 2 que é habilitado para acomodar vários plugins locais. Já a versão 1.9 só possibilita ter um plugin local.

      O framework do Moodle é muito voltado para o ambiente de curso. Bem, faça uma pesquisa sobre os tipos de plugins do Moodle para ver qual é mais apropriado. Uma vez definido, crie seu plugin, clonando um do mesmo tipo que já existe e altere a codificação.

      Excluir
  7. Boa noite... Tmb estou tentando desenvolver algo para o moodle como trabalho de conclusão de curso...
    A idéia era desenvolver um repositório para TCCs, do tipo acesso aberto aos TCCs já concluídos e uma parte fechado somente para alunos que estão desenvolvendo e seus orientadores, estou procurando documentação, vc tem algo a me indicar?
    Desde já agradeço
    Jose Carlos

    ResponderExcluir
    Respostas
    1. o que você poderia me aconselhar?
      Fui recentemente ao PHPnRio e me indicaram esse blog... achei bastante coisa interessante!

      Excluir
    2. José Carlos,

      Você pode criar um módulo de atividade do Moodle para gerenciar repositórios de TCCs. Não há uma documentação bem estruturada e detalhada que mostra o passo a passo. Sugiro você consultar o link: http://docs.moodle.org/dev/Activity_modules

      Excluir
    3. obrigado pela resposta... minha idéia inicial seria um sistema externo mas que aproveitasse a estrutura de login do moodle e os perfis de usuários (papéis) já definidos pelo moodle...

      Excluir
    4. Jose Vieira,

      Se você precisa reaproveitar a estrutura de login e sistema de permissão do Moodle em um outro sistema, a solução que vejo é acessar o Moodle diretamente na base de dados a partir de outro sisteme. Neste caso, segue o mapa das tabelas que vai precisar acessar:

      mdl_user – Armazena login e senha do usuário entre outros dados

      mdl_role_assignments – Registra as matriculas nos contextos (sistema, categoria de curso, curso …) o as permissões estão vinculadas a matrícula.

      mdl_role - Registra os papeis

      Excluir
  8. Oi Badiu, tem alguma forma simples de imprimir cursos por categoria em php ? na visão do my cursos..

    ResponderExcluir
    Respostas
    1. Lucas,
      Use a biblioteca do Moodle para montar a lista de cursos por categoria. Para exibir a lista de curso na categoria, ordenando a categoria em forma de árvore, sega os seguintes passos:

      1)Importe a o arquivo de configuração require_once("config.php");

      2)Use a função make_categories_list com o seguinte código:

      $displaylist = array();
      $parentlist = array();
      make_categories_list($displaylist, $parentlist);

      A variável $displaylist retorna um array com id e nome das categorias em forma de árvore separado por barra.

      A variável $parentlist retorna um array com id das categorias e id das categorias pai no nível de hierarquia.

      Para visualizar isso imprima o resultado na tela com os seguintes comandos:

      print_r($displaylist);
      print_r($parentlist);

      3)Use as as variáveis $displaylis e $parentlist para montar a árvore de hierarquia dos cursos.

      Caso queira testar isso, crie um arquivo tree.php e coloque na pasta _extra ou qualquer outra pasta criada dentro da raiz da instalação do Moodle. No arquivo tree.php coloque o seguinte código:

      require("../config.php");
      $displaylist = array();
      $parentlist = array();
      make_categories_list($displaylist, $parentlist);
      print_r($displaylist);
      print_r($parentlist);

      Acesse no navegador http://[endereço do moodle]/_extra/tree.php e veja a estrutura de hierarquia das categorias.

      Excluir
  9. Badiu, eu fiz tudo certo, mas não consegui exibir nada, apenas "nao localiza" a página. Não sei se é pq estou testando em um servidor local, ou se é pq minha versão do moodle é a 2.4.1, mas não deu certo. Você poderia me ajudar?.

    ResponderExcluir
  10. Olá Badiu, a impressão pra mim é essa :
    Array ( [4] => Categoria A [5] => Categoria B ) Array ( )
    tem algum email ou msn ou skype que posso entrar em contato ?

    Muito Obrigado !

    ResponderExcluir
    Respostas
    1. Lucas,
      Essa impressão indica que o id da categoria A é 4 e id da Categoria B 5. O segundo array vazio indica que as categorias A e B não estão vinculados a nenhuma categoria pai. Meu e-mail de contato é: linovazmoniz@gmail.com

      Excluir
  11. Olá,

    Estou tentando executar a query que você passou em um arquivo teste mas está aparecendo tudo em branco como se eu tivesse passado algum código errado para ele, você pode me ajudar?

    Espero resposta,
    Braz Alves

    ResponderExcluir
    Respostas
    1. Se a tela aparece em branco, é sinal que algum erro pode estar ocorrendo. Nessa situação, ative o debug para ver a mensagem de erro. Siga o procedimento no link:

      http://moodlephp.blogspot.com.br/2011/03/ativar-exibicao-do-erro-no-moodle.html

      Evite ativar debug no moodle de produção. Se tiver aluno online, ele vai ver um monte de sopa de letrinhas na tela.

      Excluir
  12. Boa tarde !
    Estou realizando o TCC é decidimos implementar o plugin check list do moodle para ser utilizado para dispositivos móveis . Você tem alguma documentação de apoio para identificar quais ferramentas utilizar .? Você já utilizou a tecnologia phonegap ?? . Bom quando possível me retorne .
    Agradeço a atenção..

    ResponderExcluir
  13. Angela,
    Para desenvolver app ainda estou pesquisando qual é a melhor ferramenta. A minha tendência atual é usar a linguagem nativa de sistema operacional para tirar maior proveito de cada plataforma móvel. Ainda não tenho uma opinião formada.

    ResponderExcluir
  14. Este comentário foi removido pelo autor.

    ResponderExcluir
  15. Oi Badiu,

    Sou iniciante em PHP e Moodle. Fiz o comando no caminho seguinte e ficou em branco:

    http://localhost/moodle/_extra/testelib.php

    Depois, fiz o debugging e deu o seguinte erro:

    Fatal error: Call to undefined function get_record_sql() in C:\xampp\htdocs\moodle\_extra\testelib.php on line 4

    Se possível, dê uma força.

    Grato

    ResponderExcluir
    Respostas
    1. Ribeiro,
      Você deve estar usando a versão 2.x do Moodle
      Se for, chame as funções do banco usando objeto $DB a função get_record_sql($sql); deve ser alterada para $DB->get_record_sql($sql);

      Excluir
    2. Sim, to usando a última versão disponível no momento (2.8.5).

      Antes de tudo, obrigado pela ajuda. Vou testar o que voce disse... mas voce recomendaria instalar uma versão mais antiga? Ou alguma leitura de artigo ou livro?

      Excluir
  16. Ribeiro,
    Recomendo sempre usar a versão mais recente.
    Uso sempre como referência o site https://docs.moodle.org/dev/Main_Page

    ResponderExcluir
    Respostas
    1. Este comentário foi removido pelo autor.

      Excluir
    2. fiz o que vc indicou, daí o arquivo ficou assim:

      get_record_sql($sql);
      echo $usr->cont;
      ?>


      Porém, quando eu ia executar o http://localhost/moodle/_extra/testelib.php ficava em branco... daí eu fiz o debugging e ia executar no navegador e aparece o seguinte:

      Notice: Undefined variable: usr in C:\xampp\htdocs\moodle\_extra\testelib.php on line 5

      Notice: Trying to get property of non-object in C:\xampp\htdocs\moodle\_extra\testelib.php on line 5

      Aparentemente ele não localizou a variável 'usr', mas eu já lancei um aluno fictício com notas e tudo.

      Como disse, meu conhecimento em php é baixo, to começando um curso técnico e to chegando em banco de dados agora. Pode ser uma questão simples, mas estou perdido, Badiu :(

      Excluir
  17. Este comentário foi removido pelo autor.

    ResponderExcluir
    Respostas
    1. Ribeiro,
      Poste aqui o treco do código que está dando erro para analisar.
      Olhando o código, posso ver causa do erro.

      Excluir
  18. Badiu, coloquei o erro acima, é esse aqui:

    Notice: Undefined variable: usr in C:\xampp\htdocs\moodle\_extra\testelib.php on line 5

    Notice: Trying to get property of non-object in C:\xampp\htdocs\moodle\_extra\testelib.php on line 5

    ResponderExcluir
    Respostas
    1. Alou Ribeiro,
      Isso não necessariamente é um erro. O erro é quando aparece fatal error. É difícil analisar assim, sem ver o código. Pode me mandar o código para meu e-mail: linovazmoniz@gmail.com

      Excluir
  19. Opa, tarde galera,recentemente comecei desenvolver um relatório de Log do Moodle,por intervalo de tempo.Gostaria de Help para regra de aceso ao base de dados,segue um exemplos da consulta.
    $sql = "SELECT ACTION, TARGET, USERID,
    TIMECREATED FROM {$CFG->prefix}logstore_standard_log LIMIT 10";
    $start_consulta=get_record_sql($sql)or die("Erro da Consulta");
    /*$resultado = mysql_query($sql) or die("Erro ao tentar cadastra registro");*/

    echo $start_consulta;
    Não retorna nada,gostaria de HELP.

    ResponderExcluir
  20. Sugiro que faça algumas alterações no código:
    1) No comando SQL, adicione a coluna id depois de SELECT. Isso garante que todos os registros serão retornados. Deve ficar assim: SELECT id, action ...

    2) Teste o comando SQL gerado no terminal do banco como PhpMyAdmin para ter certeza que está funcionando;

    3) Como essa consulta retorna mais de um registro, use a função get_records_sql e não get_record_sql

    ResponderExcluir