terça-feira, 11 de abril de 2017

Explorar relatório do tutor no Moodle com comando SQL

  Caso você quer explorar relatório de inscrição e acesso dos tutores no Moodle,  consulte os posts publicados na Comunidade Badiu.

Extrair lista de tutores de um curso com comando SQL
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=156

Gerar lista de tutores de todos os cursos do Moodle com comando SQL
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=328

Relatório consolidado de acesso dos tutores no cursos do Moodle com comando SQL
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=329

Gerar relatório de log de acesso dos tutores com comando SQL
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=330

sábado, 18 de março de 2017

Explorando SQL da enquete do Moodle (questionnaire)


    Caso você quer explorar a estrutura do SQL da enquete da Plataforma Moodle, o plugin questionnaire, explore os posts publicados na comunidade Badiu.

Desvendando estrutura das tabelas do plugin questionnaire – enquete do Moodle
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=58

Extrair quantidade de usuários que preencheram a enquete do Moodle com comando SQL
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=69

Listar as questões e alternativas de respostas de uma enquete plugin - questionnaire do Moodle com comando SQL
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=67

Extrair lista de alternativas de resposta de uma questão da enquete - questionnaire do Moodle com comando SQL
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=62

Listar as questões com opção de escolha (objetivas) de uma enquete plugin - questionnaire do Moodle com comando SQL
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=103

Extrair quantidade de resposta atribuída nas questões objetivas de tipo única escolha de uma enquete do Moodle com comando SQL
http://comunidade.badiu.com.br/mod/forum/discuss.php?d=68

 Extrair quantidade de resposta atribuída nas questões objetivas de tipo múltipla escolha de uma enquete do Moodle com comando SQL
 http://comunidade.badiu.com.br/mod/forum/discuss.php?d=75



domingo, 29 de novembro de 2015

Moodle Moot Brasília 2015

E ai galera, só alegria?
Na 11º edição do  Moodle Moot realizado nos dias  27 e 28 de novembro  no UniCEUB - Centro Universitário de Brasília, o final não foi diferente 
Moodle Moot 2013 e Moodle Moot  Maio/2014. A merecida cerveja gelada com a galera da comunidade do Moodle Brasil para fechar o evento foi no Beirute.

Neste evento participei com as seguintes palestras:


Segue um breve resumo de cada Palestra:

 Arquitetura do Banco de Dados do Moodle 3 [Power Point]

Essa palestra teve
por objetivo analisar a arquitetura do banco de dados da versão 3 do Moodle  para verificar se ocorreu alguma mudança de estrutura nas tabelas que constituem o núcleo do sistema.

Rastreamento de conclusão do curso pelo comando SQL/PHP [Power Point]
Essa palestra teve como foco apresentar como efetuar rastreamento de conclusão de curso do Moodle usando comando SQL e programação PHP. Será explorado as tabelas do banco que armazenam informações sobre controle de progresso das atividades e do curso. Será apresentado script PHP que faz leitura sobre o progresso do curso em um plugin de inscrição. Será apresentado a evolução do plugin Badiu Grade Curricular que incorporar a lógica de liberar acesso no curso se o curso pré-requisito tiver sido concluído, com base no critério de rastreamento de conclusão do Moodle 2.

Participo do Moodle Moot desde 2013.  Veja todas palestra que já ministrei no Moodle Moot na comunidade Badiu: http://comunidade.badiu.com.br/mod/forum/discuss.php?d=189
 

Programação completa do Moodle Moot Brasília 2015
Site do Moodle Brasil: http://www.moodlebrasil.org

sábado, 11 de outubro de 2014

Moodle Moot Floripa 2014

E ai galera, só alegria?
Na 8º edição do  Moodle Moot realizado nos dias 9 e 10 de outubro na Universidade Federal de Santa Catarina, o final não foi diferente
Moodle Moot 2013 e Moodle Moot  Maio/2014. A merecida cerveja gelada com a galera da comunidade do Moodle Brasil foi bar chamado Meu Escritório.  

Neste evento participei com as seguintes palestras:


Segue um breve resumo de cada Palestra:

 Arquitetura do Banco de Dados do Moodle [Power Point]

Essa palestra teve por objetivo apresentar as tabelas que fazem parte do core da arquitetura do Moodle. Além disso, abordou as alterações que ocorreram na estrutura do banco na versão 2.7. Também foi abordado as dúvidas mais frequentes dos programadores do Moodle mapeados neste blog.

Desenvolvimento de Plugin de Matrícula para  Moodle 2 [Power Point]

Essa palestra teve como foco apresentar um método de desenvolvimento de plugin para a Plataforma Moodle. Foi mostrado um passo a passo para desenvolver um plugin de inscrição para a versão 2.x do Moodle e que também seja compatível com a versão 2.7 do Moodle. Além disso, foi abordado as regras do framework e estrutura de banco de dados que regem o funcionamento do plugin de inscrição.


Programação completa do Moodle Moot Floripa 2014
Site do Moodle Moot 2014: http://www.moodlebrasil.org

sexta-feira, 30 de maio de 2014

Palestra no Moodle Moot 2014

E ai galera, só alegria?
Novamente estou aqui no Moodle Moot 2014.  Naturalmente, tomei aquela cerva gelada com o pessoal. Não foi diferente do Moodle Moot 2013.

Desta vez participei com as seguintes palestras:


Segue um breve resumo de cada Palestra:

 Monitorar evasão no Moodle com o sistema Badiu GMoodle [Power Point]

O objetivo principal dessa temática  visa apresentar como usar o sistema Badiu GMoodle  para efetuar monitoramento da evasão dos alunos no Moodle com base no indicador de acesso. Monitorar evasão diretamente no Moodle exige um trabalho manual, o que é muito demorado. Com a ferramenta Badiu GMoodle é possível automatizar esse processo, o que  oportuniza tomar medidas preventivas para evitar a evasão.

Criar plugin de Relatório do Moodle [Power Point]


O foco central dessa 
temática  é compartilhar as técnicas e os procedimentos para criar um plugin de relatório seguindo o padrão do framework Moodle. Será apresentado passo a passo para: criar plugin, gerenciar permissão de acesso, configurar pacote de idioma, acessar banco de dados e impressão de dados na tela.  Tudo isso aproveitando o máximo possível da biblioteca de API do Moodle.

Programação completa do Moodle Moot 2014
Site do Moodle Moot 2014: http://www.moodlemoot.com.br/2014

terça-feira, 10 de dezembro de 2013

Desativar data do questionário no Moodle com comando SQL

O objetivo deste post é mostrar como desativar a data de preenchimento do questionário do Moodle com comando SQL.

Na plataforma  Moodle  o questionário pode ser configurado para ser preenchido por um determinado período de tempo. O aluno só consegue iniciar o preenchimento dentro no período que for habilitado.  


Na estrutura da tabela do questionário mdl_quiz os campos que controlam a data de preenchimento são:



  • timeopen – define data de abertura do questionário
  • timeclose - define data de encerramento do questionário

    O valor zero nesses campos significa que a data está desabilitada. Então para desabilitar, basta executar os seguintes comandos:


Desabilitar data de um determinado questionário
UPDATE mdl_quiz SET timeopen=0 AND timeclose=0  WHERE id=?

  Passe o parâmetro id do questionário 
 
Desabilitar data de todos os questionários de um determinado curso
UPDATE mdl_quiz SET timeopen=0 AND timeclose=0  WHERE course=?

Passe o parâmetro id do curso
 
Desabilitar data de todos os questionários  de todos os curso do Moodle
UPDATE mdl_quiz SET timeopen=0 AND  timeclose=0

 
O comando SQL facilita o processos de atualização caso for necessário fazer atualização em lote. Imagina desativar a data de mais de 20 questionário na interface do Moodle! Ninguém merece isso. Vai fundo no SQL  mas com cuidado. Comando errado pode lhe deixar em apuros com a equipe pedagógica.

segunda-feira, 26 de agosto de 2013

Corrigir data de inscrição no Moodle com comando SQL

Neste post vamos mostrar como atualizar o cadastro de matrícula do aluno para inserir a data de inscrição caso estiver faltando.

    A data de inscrição do aluno no curso do Moodle é de extrema importância para gerar relatórios gerenciais. Ainda mais nos cursos em que a inscrição é aberta, ou seja, pode ocorrer a qualquer momento.

     Para computar evasão, a data de inscrição é o ponto de  referência. Pois, a falta desse registro dificulta emissão de relatórios. Por exemplo, há administradores do Moodle que usam sistema Badiu GMoodle para automatizar o cálculo da evasão tendo como regra os alunos que deixaram de acessar o curso durante 15 dias após a data de inscrição. Essa regra não será viável caso não houver registro de quanto o aluno ingressou no curso.

    A data de inscrição pode não ser lançada ou cadastrada de forma errada quando a carga de dados no Moodle vem de um sistema externo. Para corrigir isso, é necessário usar o comando UPDATE na tabela mdl_user_enrolments na versão 2.x e mdl_role_assignments na versão  1.9.

Versão 2.x do Moodle
Para corrigir data inscrição na versão 2.x do Moodle, execute os seguintes comandos SQL:

1° Passo – Recupere método de inscrição do curso
SELECT id FROM mdl_enrol WHERE courseid=? AND enrol=?




Parâmetro
Descrição
courseid=?
Passe o valor do id do curso. Esse valor fica registrado na tabela mdl_course. Trata-se do curso em que se pretende corrigir a data de inscrição
enrol=?
Trata-se do método de inscrição do curso. Na versão 2.x um curso pode ter mais de um método de inscrição. O método padrão é manual. Se for manual o parâmetro deve ficar assim: enrol='manual'


O id retornado pelo SELECT é o método de inscrição. Esse valor deve ser usado para dar entrada de dados na tabela  mdl_user_enrolments no campo enrolid.

2° Passo – Atualizar data de inscrição
 
UPDATE mdl_user_enrolments SET timestart=?,timeend=?,timemodified=? WHERE enrolid=? AND userid=?


Parâmetro
Descrição
timestart=?
Data do início da inscrição em formato timestamp
timeend=?
Data da validade de inscrição em formato timestamp. Use esse campo apenas se houver data de validade da matrícula.
timemodified=?
Data em que a atualização do registro da matrícula foi feita. Também e em formato timestamp.
enrolid=?
Método de inscrição recuperado pelo comando SQL do 1° passo
userid=?
Id do usuário que se pretende alterar a data de inscrição. O valor do id deve ser recuperado na tabela mdl_user


Para ficar mais prático, vamos juntar os dois comandos em um só.  Código abaixo mostra o resultado dessa junção. 

UPDATE mdl_user_enrolments SET timestart=?,timeend=?,timemodified=? WHERE enrolid IN (SELECT id FROM mdl_enrol WHERE courseid=? AND enrol=?)  AND userid=?

A execução desse comando dá o mesmo resultado que os dois comandos anteriores. É mais prático quando se estiver processando SQL na base de forma manual.


Versão 1.9.x do Moodle

Para corrigir data inscrição na versão 1.9.x e também nas versões inferiores 1.8 e 1.7 do Moodle, execute os seguintes comandos SQL:

1° Passo – Recupere o contexto da inscrição

SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?




Parâmetro
Descrição
contextlevel=50
Especifica que se trata do contexto do curso. Na tabela de domínio, 50 se refere ao contexto do curso. Dê uma olhada nesse link:http://docs.moodle.org/dev/Roles_and_modules#Context
instanceid=?
Aqui passa o id do curso, o qual se pretende corrigir a data de inscrição. O valor desse parâmetro deve ser extraído na tabela mdl_course quando o nível do contexto for 50.



2° Passo – Atualizar data de inscrição

UPDATE mdl_role_assignments SET timestart=?,timeend=?,timemodified=? WHERE contextid=? AND userid=?

Para ficar mais prático, vamos juntar os dois comandos em um só.  Código abaixo mostra o resultado dessa junção. 

UPDATE mdl_role_assignments SET timestart=?,timeend=?,timemodified=? WHERE contextid IN (SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?) AND userid=?

A execução desse comando dá o mesmo resultado que os dois comandos anteriores. É mais prático quando se estiver processando SQL na base de forma manual.

    Agora você já sabe como corrigir a sua base de dados. Há um detalhe importante a ser levado em conta  caso a carga no Moodle for feita por um sistema externo. Se a base externa tiver registro da data de ingresso de cada aluno no curso, para automatizar essa informação no Moodle,  é necessário que as duas bases estejam sincronizadas. Ou seja, a base externa deve possuir uma chave de identificação, de forma precisa, de cada registro de usuário e curso no Moodle. Tendo isso,  basta fazer um loop numa rotina de programação, extraindo a data de matrícula de cada aluno no curso e atualizar o Moodle. Não tendo a sincronização, a alternativa  é fazer manualmente.

    Na eventualidade de não ter a base externa, a data de inscrição pode ser atualizada com a data do primeiro acesso do aluno no ambiente do curso. Há uma margem de erro  que deve ser levada em conta uma vez que não necessariamente o aluno  acessou o curso no dia em que foi inscrito.

Comando SQL que extrai o primeiro acesso no curso
SELECT MIN(time) FROM mdl_log WHERE course=?  AND  userid=?

    Essa alternativa atualiza a data de inscrição apenas dos alunos que acessaram o curso. Os que ainda não acessaram vão continuar sem registro da data de ingresso.
   
    Agora tudo que você precisa é solicitar ao seu desenvolvedor que faça uma rotina de programação para corrigir as informações no Moodle. Geralmente você dá conta desse problema quando precisa gerar relatórios que usam a data de inscrição.  



segunda-feira, 12 de agosto de 2013

Excluir alunos do curso do Moodle com comando SQL

Neste post, vamos mostrar como  excluir aluno do ambiente de curso no Moodle  usando comando SQL.  Vamos usar o comando DELETE. Isso é perigoso, uma vez exclui os dados. 
   
    Vamos mostrar como excluir os dados em em lote, ou seja, todos os alunos de um determinado curso. Também vamos mostrar como excluir apenas alguns alunos.

    O registro da  matrícula fica na tabela  mdl_role_assignments. O contexto da matrícula fica na tabela   mdl_context. Sendo assim, o comando da exclusão deve ser:

SQL  para excluir todos os alunos de um curso
DELETE FROM mdl_role_assignments WHERE roleid=5 AND contextid IN (SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?)

SQL  para excluir alguns alunos de um curso
DELETE FROM mdl_role_assignments WHERE roleid=5 AND contextid IN (SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?)  AND userid IN(?,?,?)

A única diferença do comando anterior é userid IN(?,?,?) que delimita quais alunos devem ser excluídos




Parâmetros
Descrição
roleid=5
Define filtro de exclusão apenas para alunos. Veja na tabela mdl_role valor de parâmetro para outros perfis. Por padrão, 5 é o aluno. Confirme se de fato você está usando 5 para alunos e não alterou o padrão. Já que está excluindo, todo o cuidado é pouco.
contextlevel=50
Especifica que se trata do contexto do curso. Na tabela de domínio, 50 se refere ao contexto do curso. Dê uma olhada nesse link:http://docs.moodle.org/dev/Roles_and_modules#Context
instanceid=?
Aqui passa o id do curso, o qual pretende excluir os alunos. Esse valor fica na tabela mdl_course.
userid IN(?,?,?)
Especifique quais alunos devem ser excluídos. O id dos alunos deve ser extraído da tabela mdl_user


Caso estiver usando a versão 2.x do Moodle, é necessário também apagar os dados da tabela mdl_user_enrolments. Esta tabela foi criada na versão 2 do Moodle. Contêm informações método de inscrição e data de inscrição. O campo enrolid faz ligação com a tabela mdl_enrol. É a chave estrangeira do campo id da tabela  mdl_enrol que faz registros dos plugins de inscrição habilitados no curso.

Sql para excluir informações de dados da inscrição de todos os alunos de um curso (apenas para versão 2.x)
 DELETE FROM mdl_user_enrolments WHERE enrolid IN (SELECT id FROM mdl_enrol WHERE  courseid=?)

Sql para excluir informações de dados da inscrição de alguns os alunos de um curso (apenas para versão 2.x)
DELETE FROM mdl_user_enrolments WHERE enrolid IN (SELECT id FROM mdl_enrol WHERE  courseid=?) AND userid IN(?,?,?)

A única diferença do comando anterior é userid IN(?,?,?) que delimita quais alunos devem ser excluídos

Nestes dois últimos comando, ficou claro que deve passar o id do curso no parâmetro  courseid=?. O valor desse parâmetro deve ser extraído da tabela mdl_course. Para o parâmetro userid IN(?,?,?) vale a mesma explicação apontada na tabela acima. 
   
    Os comandos listados aqui apenas retira o aluno do curso. Cancela a inscrição. Não excluir o histórico  do aluno. Caso o aluno venha a ser reinscrito, ele continuará o curso do ponto onde havia parado, ou seja, reaproveita todo o histórico.

    Bem, isso é tudo que você precisa saber para excluir alunos de um curso. Agora tome cuidado para não fazer nada errado. Teste primeiro no seu Moodle de desenvolvimento antes de levar para produção. Sempre recomendo ter um clone de produção no ambiente de desenvolvimento. Isso evita prejuízo e falha humanas. Lembre, estamos usando comando DELETE. Você não quer que a equipe pedagógica fique no seu cangote reclamando que o aluno simplesmente sumiu!

sábado, 25 de maio de 2013

Palestra no Moodle Moot 2013


E ai galera, só alegria?
Participei do evento Moodle Moot 2013 com duas palestras:

Badiu GMoodle - Ferramenta Avançada de Monitoramento e Extração de Relatórios do Moodle
 
Desenvolvimento para Moodle - Estrutura do banco de dados e principais API

Foi uma oportunidade para conhecer alguns seguidores do blog e relaxar com uma cervejinha bem gelada.

Segue um breve resumo de cada Palestra:

 Badiu GMoodle – Ferramenta avançada de monitoramento e extração de relatórios do Moodle 
[Power Point] [Vídeo]

O foco central desta temática foi apresentar uma solução de relatórios para Plataforma Moodle. O Moodle oferece poucas opções de relatórios gerenciais. O sistema Badiu GMoodle é uma ferramenta complementar do Moodle que integra várias instalações do Moodle e oferece relatórios gerenciais. É uma solução que possibilita, além de extração de vários tipos de relatórios, efetua mapeamento automático da evasão e distribuir de relatórios agendados por e-mail. Em suma, é uma ferramenta de monitoramento dos cursos ofertados no Moodle.

Desenvolvimento para Moodle: estrutura do banco de dados e principais API [Power Point] [Vídeo]

O objetivo principal dessa temática foi explorar as dúvidas mais comuns dos desenvolvedores do Moodle mapeados neste blog (Moodle SQL - http://moodlesql.blogspot.com.br ) e no blog Moodle PHP - http://moodlephp.blogspot.com.br. Foi apresentada a arquitetura da Plataforma Moodle, tanto no âmbito da estrutura do banco de dados quanto na camada de aplicação. Além disso, foi apresentado também alguns API que devem nortear o desenvolvimento do Moodle.  Foi abordado exemplos práticos que oportunizam entender como é a arquitetura do Moodle e, ao mesmo tempo, dar respostas às dúvidas mais comuns dos desenvolvedores.

Podemos dizer que o Blog Moodle SQL é filha do projeto Badiu GMoodle. As experiências compartilhadas nesse blog surgiram da linha de pesquisa para implementar o sistema Badiu GMoodle.

Já estou planejando a participação do próximo Moodle Moot. A temática será escolhida a partir das dúvidas mais comuns que surgem no comentário do Blog.

domingo, 26 de fevereiro de 2012

Criar conta de administrador no Moodle 2 com comando SQL

A partir da versão 2 do Moodle, a conta do administrador do sistema é registrada na tabela de configuração, o mdl_config

Até a versão 1.9, o usuário admin criado durante  a instalação era registrado na tabela mdl_role_assignments com perfil administrador no contexto do sistema.  A partir da versão 2, o usuário admin é registrado na tabela de configuração, mdl_config com a chave  siteadmins

A tabela mdl_config armazena a configuração em pares de chave e valor. As chaves são registradas na coluna name e o valor na coluna value. Na coluna name é registrada a chave siteadmins. Na coluna value, o id do usuário admin. Caso haja mais de usuário com perfil de admin, o campo value registra a lista do id de cada usuário separado por vírgula.  

Agora que o mistério já está desvendado, vamos ao comando SQL. Para adicionar um novo usuário com perfil administrador no Moodle 2, siga os seguintes passos:

1° Passo - Cadastre um novo usuário no Moodle. Siga as instruções no link: http://moodlesql.blogspot.com/2010/07/cadastrar-usuario-no-moodle-pelo.html  Caso já tenha o usuário cadastrado, basta recuperar o id na tabela mdl_user. 
    
2° Passo – Recupere o id dos usuários já cadastrados como admin, executando o seguinte comando SQL:

SELECT value FROM mdl_config  WHERE name='siteadmins'
 
Esse comando deve retornar um número ou uma lista de números separados por vírgula. Geralmente retorna o número 2, o id do usuário admin gerado durante a instalação.
 
3° Passo – Atualize a tabela mdl_config, adicionando o novo usuário admin. Atualize com id do novo usuário gerado no 1° passo. O comando de atualização deve adicionar o valor recuperado no 2° passo e ainda adicionar novo id gerado no 1° passo.  Se no 1° passo for gerado ou escolhido o id 10 para ser o novo admin e no 2° passo for retornado número 2, ou seja, o id do usuário admin gerado durante a instalação, a tabela deve ser atualizada adicionando o novo id. Segue comando SQL de atualização:

UPDATE mdl_config  SET value='2,10' WHERE name='siteadmins'
 
Caso esteja se questionando de onde surgiu o parâmetro  value='2,10', é necessário ressaltar que esse valor é dinâmico. Aqui, para efeito de demonstração, partimos do pressuposto de que valor 2 foi gerado no 2° passo e o valor 10 foi gerado no 1° passo. O que importa é o campo value guarda a lista de id dos usuários que são administradores do Moodle, separados por vírgula. 

Bem, isso é tudo que você precisa saber para gerar uma senha de administrador da versão do Moodle 2.0 ou superior por meio de comando SQL. Caso tenha esquecido a senha de admin, aqui está a solução. Agora, proteja bem a senha de acesso do banco de dados. Caso alguém com má intenção tenha acesso à sua base, pode seguir essas dicas para gerar senha de admin e fazer estragos no seu Moodle.

quinta-feira, 22 de dezembro de 2011

Recuperar id do Último Usuário Logado no Moodle


    Para recuperar o id do último usuário que fez login no Moodle, basta fazer uma consulta SQL na tabela de log com o seguinte comando:

SELECT userid FROM mdl_log WHERE action='login' ORDER BY id DESC LIMIT 0,1

Segue a explicação de cada trecho do código:
  • SELECT userid
    Retorna id do usuário no campo userid.
  • FROM mdl_log
    Faz filtro na tabela de log do Moodle.
  •  WHERE action='login'
    Filtra  os registros do log cuja ação for login. Cada vez que um usuário entrar no Moodle, preenchendo o formulário de login e senha, o sistema faz lançamento de um registro  na  tabela de log com a ação login, ou seja, grava o termo login no campo action.
  • ORDER BY id DESC
    Ordena os registro pela ordem decrescente, ou seja, do último para o primeiro.
  • LIMIT 0,1
    Filtra apenas o primeiro registro, isto é, o último usuário que logou no Moodle. Se a sua base de dados for PostgreSQL, substitua esse comando para  LIMIT 1 OFFSET 0. Esse comando pode variar em função do sistema de bando de dados.

    Caso queira saber o nome e o e-mail do usuário que logou por  último, execute o seguinte comando SQL:

SELECT u.id,u.firstname,u.lastname, u.email FROM mdl_log l INNER JOIN mdl_user u ON u.id=l.userid WHERE l.action='login' ORDER BY l.id DESC LIMIT 0,1
   
Esse comando é o mesmo que o anterior. A única diferença que é faz junção com a tabelade usuário para extrair nome e-mail do usuário. 


Os comandos SQL foram testados na base de dado MySQL. Se estiver usando um outro banco de dados, o comando de paginação pode não funcionar. Neste caso, será necessário substituir comando LIMIT pelo comando correspondente do sistema do banco de dados em uso.

domingo, 18 de dezembro de 2011

Recuperar Alunos Excluídos do Curso do Moodle com Comando SQL

As matriculas canceladas nos  cursos do Moodle podem ser recuperadas. Para isso, é necessário fazer uma varredura nos registros de log ou de notas diretamente na base de dados por meio de comando SQL.

Os registros das matrículas podem ser cancelados manual ou automaticamente. Na maioria das vezes, o cancelamento é automático. Isso acontece ao executar o arquivo de cron. A configuração padrão do Moodle exclui todas as matrículas quando:
  • A inscrição no curso tiver a data de validade vencida;
  • O participante (aluno, tutor, autor do curso etc) não acessar o curso durante 120 dias.
A exclusão automática ocorre apenas quando o cron for executado.

Se o cron apagou os alunos matriculados nos cursos, certamente você estará em apuros com a equipe pedagógica. Enquanto não recuperar os dados, certamente alguém  ficará em seu cangote cobrando uma solução.

Se você estiver nessa situação, não caia no desespero. Há uma notícia boa. Quando uma matrícula é excluída, os dados do usuário relativos ao curso (participação no fórum, log, nota etc) não são excluídos. Isso significa que é possível recuperar quem estava matriculado através do rastreamento desses registros. Há dois meios alternativos para fazer isso. O primeiro é o rastreamento da tabela de log mdl_log. O segundo é o rastreamento da tabela de nota mdl_grades_grade ou qualquer outra tabela que registra atividades dos alunos, como tarefa, questionário, fórum etc. 

Vamos apresentar o comando SQL de rastreamento para cada alternativa e, além disso, explorar cada alternativa no que tange a vantagem e desvantagem.
Recuperação de Usuários pela Tabela de Log

Comando SQL

SELECT DISTINCT userid,course FROM mdl_log WHERE userid>0 AND course>0

Esse comando  faz uma consulta na tabela de log e extrai o código de identificação  do usuário e do curso, ou seja, a relação dos usuários que acessaram o curso. 

SELECT DISTINCT u.id,u.firstname,u.lastname, u.email,c.id,c.fullname FROM mdl_log l INNER  JOIN mdl_user u ON u.id=l.userid INNER JOIN mdl_course c ON c.id=l.course
SELECT DISTINCT g.userid i.courseid FROM mdl_grade_grades g INNER JOIN mdl_grade_items i ON g.itemid=i.id WHERE i.courseid>0 AND g.userid>0

Esse comando é o mesmo que o anterior. A única diferença é que ele extrai o nome do usuário e nome do curso que o usuário acessou.


Uma vez identificando os usuários e os cursos acessados, para saber se foram apagados do curso, basta fazer uma consulta na tabela de matrícula para verificar se estão registrados. Caso não estejam, devem ser inseridos. Esse procedimento é mais eficiente se for feito a partir de uma rotina de programação.

Vantagem
  • Os registros da tabela de log  possibilitam recuperar todas as inscrições canceladas, desde que o participante tenha acessado o curso.

Desvantagem
  • Não é possível identificar com exatidão o perfil de inscrição do usuário antes de ser cancelado. Se a inscrição do tutor for cancelada, o registro de log não informa explicitamente que se tratava de um tutor. Isso pode ser mapeado por meio de ações regristradas no log como criar/editar fórum, por exemplo, que são permissões atribuídas ao perfil do tutor.
  • A recuperação contempla todos os usuários que acessaram o curso e não apenas aqueles que estavam inscritos. Por exemplo, o usuário com perfil administrador do Moodle pode acessar todos os cursos. Por outro lado, usuários com permissão em nível de categoria de curso podem acessar qualquer curso vinculado à aquela categoria. A recuperação não diferencia o nível de inscrição do usuário. 
  • Caso o log do Moodle esteja desativado, não será possível rastrear acesso de nenhum usuário.



Recuperação de Usuários pela Tabela de Nota

Aqui vamos fazer o rastreamento a partir dos registros da tabela de nota. O mesmo procedimento pode ser feito a partir dos registros dos alunos em qualquer atividade do Moodle, como participação no fórum, envio de tarefa ou submissão de questionário.

Comando SQL


SELECT DISTINCT g.userid, i.courseid FROM mdl_grade_grades g INNER JOIN mdl_grade_items i ON g.itemid = i.id

Esse comando  faz uma consulta na tabela de nota e extrai o código de identificação  do usuário e do curso, ou seja, a relação dos alunos que foram avaliados.  Esse comando não é válido para as versões anteriores  à 1.9 do Moodle.



 SELECT DISTINCT  u.id,u.firstname,u.lastname, u.email,c.id,c.fullname FROM mdl_grade_grades g INNER JOIN mdl_grade_items i ON g.itemid = i.id INNER  JOIN mdl_user u ON u.id=g.userid  INNER JOIN mdl_course c ON c.id=i.courseid

Esse comando é o mesmo que o anterior. A única diferença é que ele extrai o nome do usuário e nome do curso que o usuário acessou. Também não é válido para as versões anteriores  à 1.9 do Moodle.


Vantagem
  •  Diferente da tabela de log, que registra todos os usuários que acessaram o curso, a tabela de nota registra apenas os alunos avaliados em alguma atividade. Os registros dessa tabela são mais fidedignos, uma vez que garantem que os usuários cadastrados são alunos do curso ou têm perfil equivalente.

Desvantagem
  • Os alunos que ainda não foram avaliados não terão registro na tabela de nota. Isso significa que só é possível recuperar os alunos que tiveram alguma nota registrada.
   
Uma vez rastreado o registro de usuário na tabela de nota, é necessário consultar a tabela de matrícula para verificar se a inscrição foi apagada. Se foi, basta inscrevê-lo novamente.
   
Rotina de Recuperação
Perante a vantagem e desvantagem de cada alternativa, você pode avaliar qual melhor lhe atende em função da configuração do seu curso. De qualquer forma, a recuperação eficiente requer uma rotina de programação que faz cruzamento de informações rastreadas tanto na tabela de log quanto na tabela de nota.

De modo geral, a rotina de programação deve seguir a seguinte lógica:

1- Fazer um rastreamento da relação dos usuários que tiveram algum vínculo com os cursos na tabela de log e de nota;

2- Excluir da relação dos usuários rastreados os que tiverem perfil de administrador em nível do contexto do sistema ou algo equivalente;

3- Verificar se existe registro de inscrição na tabela de matrícula para cada usuário rastreado em nível do contexto do curso, categoria de curso e sistema. Essa operação pode ser executada com o seguintes comandos:
SELECT COUNT(id) FROM mdl_role_assignments WHERE userid=?
Esse comando verifica se o usuário está inscrito em algum curso em qualquer nível.
SELECT COUNT(rs.id) FROM mdl_role_assignments rs INNER JOIN  mdl_context e ON rs.contextid=e.id WHERE e.contextlevel=? AND e.instanceid=? AND rs.userid=?
Esse comando verifica se o usuário está inscrito em algum nível. Segue a tabela de domínio do contexto do Moodle:
10 – Sistema  40 – Categoria de Curso  50- CursoPasse  o valor do contexto no parâmetro  e.contextlevel.
Para ambos os comandos é necessário passar id do usuário no parâmetro userid.

4- Caso não exista nenhum registro de inscrição, significa que a inscrição foi removida pelo cron. Nesse caso, será necessário recuperar o perfil da inscrição por meio de ações na tabela de log. Se o registro for rastreado na tabela de nota, o perfil será de aluno ou algo equivalente.

5- Efetuar inscrição no curso para os usuários cujas inscrições forem canceladas pelo cron. Para isso, consulte o seguinte post: http://moodlesql.blogspot.com/2010/07/matricular-usuario-no-curso-do-moodle.html
Considerações Finais

A recuperação das inscrições canceladas é um trabalho muito minucioso. Cada caso requer um estudo específico. A melhor solução é alterar a configuração padrão do Moodle para não cancelar as inscrições. 

Uma alternativa para mapear os alunos excluídos é usar o GMoodle, um sistema de gestão do Moodle.  Esse sistema faz gerenciamento do status da inscrição. Extrai relatórios não só dos alunos evadidos como também os dos cancelados pelo cron.
   

quinta-feira, 15 de dezembro de 2011

Listar cursos em que o aluno está inscrito com comando SQL

Para extrair a relação dos cursos em que um determinado aluno está inscrito diretamente da base de dados, é necessário recorrer ao comando SQL.

Segue o comando SQL que filtra a relação dos cursos em que um determinado aluno está matriculado:

SELECT c.id,c.fullname     FROM mdl_role_assignments rs INNER JOIN mdl_context e ON rs.contextid=e.id  INNER JOIN  mdl_course c ON c.id = e.instanceid WHERE e.contextlevel=50 AND rs.roleid=5 AND rs.userid=?
 

Esse comando extrai  o id e o nome do curso. É necessário passar o parâmetro do usuário em rs.userid=?. Substitua a interrogação pelo id do usuário.  O camando rs.roleid=5 já define que se trata de um aluno, ou seja, filtre pelo perfil do aluno. Caso queira pesquisar o curso no perfil do  tutor, altere o valor do parâmetro roleid para 3. A alteração ficará assim: rs.roleid=3.
   

Esse comando não lista os cursos cuja inscrição foi feita no contexto do sistema ou da categoria de curso. Esse comando não é válido para as versões do Moodle inferiores à 1.7.

Caso queira listar a relação dos cursos do aluno no ambiente do Moodle, basta criar uma página PHP. Execute o comando SQL,  passe o id do usuário do logado em rs.userid=?. Isso é tudo que você precisa para mostrar ao aluno a relação dos cursos em que ele está inscrito.

terça-feira, 12 de abril de 2011

Extrair o Primeiro Acesso do Aluno no Curso do Moodle com Comando SQL

    Para extrair o primeiro acesso do aluno em um curso do Moodle com comando SQL, basta fazer uma consulta na tabela mdl_log, usando a função MIN do SQL.

    A tabela mdl_log registra todos os cliques que o usuário efetuar no ambiente do Moodle. Para extrair a data do primeiro acesso de um curso, basta efetuar a consulta executando o seguinte comando:

Primeiro acesso de usuário (aluno, tutor etc.) no curso
SELECT MIN(time) FROM mdl_log WHERE userid=? AND course=?
 
Passe o parâmetro id do usuário em userid=?  e  id do curso em course=?

Caso queira extrair uma lista de todos os alunos com a data do primeiro acesso de um determinado curso, execute o seguinte comando SQL:

Primeiro acesso de todos os alunos de um determinado curso

SELECT u.id, u.firstname,u.lastname,MIN(l.time) 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 INNER JOIN mdl_log l ON l.userid=u.id  WHERE e.contextlevel=50 AND rs.roleid=5 AND e.instanceid=? AND l.course=? GROUP BY u.id, u.firstname,u.lastname

Passe o parâmetro  id do curso em e.instanceid=?  e  l.course=?

     A data do primeiro acesso é recuperada na coluna time da tabela mdl_log. Vem em quantidade de segundos. É necessário fazer conversão para entender. Bem, neste caso é hora de usar uma linguagem de programação da  sua preferencia para converter. 


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

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.

terça-feira, 25 de janeiro de 2011

Extrair id da Matrícula do Aluno no Curso do Moodle com Comando SQL

    No Moodle a matrícula dos alunos, tutores, admin e.t.c  é feita na tabela mdl_role_assignments. Cada registro nessa tabela corresponde ao vínculo de um usuário no contexto do sistema, categoria do curso e curso. O id gerado nessa tabela é uma chave única de identificação da matrícula no sistema Moodle.
  
 Para extrair o id da matrícula de um determinado aluno, execute o seguinte comando     SQL:

SELECT rs.id, u.firstname,u.lastname 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=? AND rs.userid=?

Passe o parâmetro id do curso em e.instanceid=? e id do usuário em rs.userid=?. rs.roleid=5 define que será feito filtro por aluno. Caso pretenda extrair pelo perfil do tutor, altere o valor para 3.

Essa consulta extrai os seguintes campos:
  • rs.id - Id da matrícula gerado na tabela mdl_role_assignments
  • u.firstname - Nome do usuário na tabela mdl_user
  • u.lastname - Sobrenome usuário na tabela mdl_user

Para extrair uma lista com  id da matrícula de todos os alunos em um determinado curso, execute o seguinte comando     SQL:

SELECT rs.id, u.firstname,u.lastname 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=?

Passe o parâmetro id do curso em e.instanceid=?. rs.roleid=5 define que será feito filtro por aluno. Caso pretenda extrair lista de tutor, altere o valor para 3.

A única diferença desse comando com a anterior é que o filtro  do usuário rs.userid=? foi retirado do comando WHERE. Os campos retornados são os mesmos da consulta anterior.

Até então já deve ter ficado claro que o  id gerado na tabela mdl_role_assignments é a chave única de inscrição  de cada usuário. Essa chave não é usada como chave estrangeira na tabela de log ou atividades que o aluno faz no curso. Isso porque caso a matrícula for cancelada, essa chave será excluída, as atividades e os  logs gerados não serão apagados em cascata. Os registros do aluno no curso continuam mesmo que a inscrição tenha sido cancelada. 

No sistema de log e atividades feitas pelos participantes do curso, a chave de identificação é a combinação do id do usuário gerado na tabela mdl_user e id do curso gerado na tabela mdl_course.
    Entender como é a estrutura da tabela da matrícula, ou seja, da inscrição dos usuários no curso do Moodle é fundamental para programar o Moodle ou efetuar integração do Moodle com um sistema acadêmico.

sexta-feira, 7 de janeiro de 2011

Mapear Alunos Inscritos nos Cursos do Moodle com Comando SQL

Para  mapear os usuários cadastrados no Moodle que estão inscritos em algum curso com perfil aluno, certamente a soluções é consultar diretamente o banco de dados do Moodle com comando SQL. 

Tabelas
Para fazer esse mapeamento, é necessário fazer a consulta nas seguintes tabelas:
  • mdl_user – Tabela de usuário
  • mdl_role_assignments – Tabela da matrícula, ou seja, da inscrição do usuário no curso
Comando SQL
SELECT DISTINCT  u.id, u.firstname,u.lastname,u.email FROM mdl_role_assignments rs INNER JOIN mdl_user u ON u.id=rs.userid  WHERE rs.roleid=5

Essa consulta filtra  apenas  os alunos. O filtro é feito no comando WHERE rs.roleid=5. Por padrão, 5 é o id do perfil do aluno na tabela mdl_role.  Caso um aluno estiver inscrito em mais de um curso, o comando DISTINCT elimina a duplicação.



Se um usuário tiver perfil de aluno em um curso e administrador em outro ele será incluído na lista. Caso você queira excluir esse tipo de usuário, altere o comando SQL para fazer exclusão dos usuários com perfil de aluno e  administrador compartilhado.  O novo comando ficará assim:
SELECT DISTINCT  u.id, u.firstname,u.lastname,u.email FROM mdl_role_assignments rs INNER JOIN mdl_user u ON u.id=rs.userid  WHERE rs.roleid =5 AND rs.userid NOT IN(SELECT userid FROM mdl_role_assignments WHERE roleid=1)

Foi adicionado a parte do código em destaque que exclua todos os administradores.

A primeira  consulta não  retorna nenhum usuário que não tenha perfil do aluno. A segunda exclui da lista os alunos que  tenham também perfil de administrador.