terça-feira, 15 de fevereiro de 2011

Integração do Moodle com Sistema Acadêmico

    A integração do Moodle com o sistema acadêmico é um dos maiores desafios dos desenvolvedores do Moodle. A integração é um trabalho de sincronização de dados entre os dois sistemas.
    A sincronização  consiste em mapear um par corresponde de cada registro nos dois sistemas. Digamos assim, que cada registro no sistema acadêmico deve ter uma cópia no sistema do Moodle ou vice-versa.
    A maioria das desmandas de integração visam integrar os seguintes dados:
  • Usuário
  • Curso;
  • Disciplina;
  • Matrícula;
  • Nota.

    No processo de sincronização que visa integração de dois sistemas é necessário definir qual sistema é mestre e qual é escrava. A mestre funciona como base oficial de dados. A escrava é o sistema de espelhamento, ou seja, apenas recebe a  cópia dos dados do sistema mestre. A entrada de dados deve ser processada no sistema mestre e depois replicada no escravo.

    O sistema acadêmico geralmente é o mestre e o Moodle é escravo  no que tange ao gerenciamento do usuário, curso, disciplina e matrícula. Já para o processamento de notas, ocorre o inverso. Isso porque a nota é gerada no Moodle e depois é exportada para o sistema acadêmico.

    O processo de integração torna-se muito complicado, se não impossível, caso não haja uma padronização. Por exemplo, se a entrada de dados sobre o usuário e a  matrícula pode ser feita tanto no Moodle quanto no sistema acadêmico, a sincronização torna mais difícil de ser automatizada. Torna quase impossível caso não houver uma padronização das chaves de identificação dos registros.

    Bem, até agora já deve ter ficado claro como deve ser a logística da integração.  Agora partindo para implementação, no que tange ao Moodle, podemos seguir dois caminhos:
  • Usar API do Moodle
  • Usar comandos SQL

O uso do API do Moodle possibilita efetuar integração em alto nível na camada da aplicação. Isso requer a programação em PHP.  Web service do Moodle é uma boa alternativa. Possibilita implementação independente da linguagem de programação.

    O uso do SQL é uma alternativa mais eficaz uma vez que possibilita fazer as coisas em baixo nível, diretamente na camada de banco de dados. Essa alternativa requer conhecer bem  a estrutura do banco de dados do Moodle. A implementação pode ser feita em qualquer linguagem de programação. Neste caso, o sistema acadêmico, sendo mestre no processo de integração,  pode implementar módulos que acessam o Moodle diretamente no banco de dados e processa replicação, ou seja exportação de dados.
   
    Caso tenha interesse em conhecer a estrutura do banco de dados do Moodle, acesse os link indicados a baixo. Esses links não explicam diretamente todos os comandos SQL que você precisa para fazer integração, no entanto, lhe auxiliam em conhecer a estrutura e organização das tabelas do Moodle.

Cadastrar Usuário no Moodle pelo Comando SQL
http://moodlesql.blogspot.com/2010/07/cadastrar-usuario-no-moodle-pelo.html

Criar Curso no Moodle com Comando SQL
http://moodlesql.blogspot.com/2010/09/criar-curso-no-moodle-com-comando-sql.html


Organização do Curso no Moodle e Estrutura da Base de Dados. Diferença do Linguajar Acadêmico e Corporativo
http://moodlesql.blogspot.com/2010/08/organizacao-do-curso-no-moodle-e.html

Matricular Usuário no Curso do Moodle com Comando SQL
http://moodlesql.blogspot.com/2010/07/matricular-usuario-no-curso-do-moodle.html

Relatório Completo de Nota de um Curso no Moodle com Comando SQL
http://moodlesql.blogspot.com/2011/01/relatorio-completo-de-nota-de-um-curso.html

Padronização das tabelas do Banco de Dados do Moodle
http://moodlesql.blogspot.com/2010/09/padronizacao-das-tabelas-do-banco-de.html
   
    Agora faça o planejamento de trabalho, escolha o modelo de implementação e bota mão na massa, não  na sopa de letrinhas do código e faça boa integração. 

quarta-feira, 9 de fevereiro de 2011

Consultar Quantidade de Visita (Login) do Usuário no Moodle com Comando SQL

Para montar um relatório sobe a quantidade de vezes que o usuário entrou, ou seja, logou no ambiente do Moodle, é necessário fazer uma consulta diretamente no banco de dados. Isso porque a interface que o Moodle disponibiliza ainda não oferece esse tipo de informação.

A informação sobre a quantidade de visita fica na tabela de log. Aqui entendemos a quantidade de visita diferente da quantidade de acesso. A visita se refere ao número de vezes que o usuário entrou no Moodle usando login e senha. A quantidade de acesso é o número de cliques ou de páginas que acessou dentro do Moodle.
A consulta dever ser feita na tabela mdl_log com filtro no campo action. Segue os comandos SQL.

SQL para extrair quant. de visita por um determina usuário

SELECT COUNT(id) AS qvisita FROM mdl_log WHERE action='login' AND userid=?

Passe o parâmetro id do usuário em userid=?

Essa consulta retorna a quantidade de visita apenas de um determinado usuário.


SQL para extrair lista de quant. de visita de todos os usuários

SELECT u.id, u.firstname, u.lastname, COUNT(l.id) AS qvisita FROM mdl_user u INNER JOIN mdl_log l ON u.id = l.userid WHERE action='login' GROUP BY u.id, u.firstname, u.lastname ORDER BY COUNT(l.id) DESC

Essa consulta retorna uma lista de usuário ordenado pela quantidade de visita. Os usuários mais logaram no Moodle aparecem primeiro.


Agora que você já tem o comando SQL, monte o relatório do Moodle usando a linguagem de programação da sua preferência.

Campo mnethostid da Tabela mdl_user do Banco de dados do Moodle

    Muitos desenvolvedores do Moodle levantam a mesma questão: Para que serve o campo mnethostid da tabela de usuário mdl_user do Moodle?

    A resposta é simples. Mas requer algumas horas ou dias de pesquisa devido a  escassa    documentação técnica do Moodle.

    O campo  mnethostid é uma chave estrangeira do campo id da tabela mdl_mnet_host. O nome dessa tabela é resultado da abreviatura de Moodle Network Host.
    Moodle Network é uma funcionalidade  que foi adicionada na versão 1.8 para acesso remoto. Isso possibilita um usuário cadastrado em determinado Moodle acessar outras instâncias do ambiente Moodle. Por isso que na tabela de usuário foi adicionado o campo mnethostid para identificar o host do usuário.

    Por padrão, o primeiro registro lançado na tabela mdl_mnet_host é o host do Moodle local. O valor do campo  mnethostid na tabela mdl_user geralmente é 1 para usuários do Moodle local.

    Quando o usuário for logar diretamente no Moodle, será verificado a combinação de login e senha referente ao host do Moodle local. Com frequência, ocorre a mudança do id do Moodle local ao fazer atualização da versão. Neste caso, os usuários não conseguem logar,   mesmo que o login e a senha estiverem corretos. A  solução é verificar o novo id referente ao host do Moodle local e  atualizar a chave estrangeira no campo mnethostid na tabela de usuário mdl_user. Isso não é feito automaticamente uma vez que o Moodle é deficiente na questão da integridade de chaves primária e   estrangeira.
   
SQL para Extrair id do Host Local do Moodle
Para identificar o id referente ao host do Moodle local, execute  uma das seguintes alternativas de comando SQL:

Alternativa I
SELECT id FROM mdl_mnet_host WHERE wwwroot=?

Passe o parâmetro URL do Moodle em  wwwroot=?

Alternativa II
SELECT value FROM mdl_config WHERE name='mnet_localhost_id' 

    O primeiro comando extrai diretamente da tabela mdl_mnet_host  que é a fonte original de armazenamento dos hosts do Moodle. O segundo comando extrai a cópia do id do host local do Moodle registrada na tabela de configuração mdl_config.

    Quando você faz um cadastro de usuário no Moodle, o valor do campo mnethostid é recuperado da tabela mdl_config na variável mnet_localhost_id.  
    Então se você estiver cadastrando um usuário no Moodle com comando SQL,  o valor do campo   mnethostid deve ser extraído com um dos comandos SQL mencionados acima na alternativa I e II.
   
    Bem, agora você encontrou a resposta que estava procurando. Caso ainda não esteja satisfeito, explore mais a documentação do Moodle. Inicie a pesquisa estudando  a estrutura das tabelas que começam com o prefixo mdl_mnt_*. Certamente vai descobrir muita coisa. Se for fazer isso, não esqueça de me avisar o que descobriu.