Mostrando postagens com marcador Nota. Mostrar todas as postagens
Mostrando postagens com marcador Nota. Mostrar todas as postagens

terça-feira, 4 de janeiro de 2011

Relatório Completo de Nota de um Curso no Moodle com Comando SQL

    Caso você queira extrair um relatório completo de nota que exibe todas as avaliações e a nota final para todos os alunos inscritos no curso, será necessário fazer consultas SQL na camada de base de dados e montar relatório por meio de uma linguagem de programação. Neste post será explorado apenas a parte de consulta ao banco de dados.

Para montar um relatório completo de nota, o procedimento é bem simples. Será explicado por passo.

1º Passo  – Extrair a  lista dos alunos inscritos no curso

Segue o comando SQL que recupere da base de dados todos os alunos matriculados  em um determinado curso.

SELECT u.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=?

Nesse comando, você só precisa passar o parâmetro  e.instanceid que deve ser o id do curso.
Caso  queira entender um pouco mais sobre esse comando clique aqui.

Esse comando retorna da base de dados os seguintes dados:
  • u.id – Id do usuário na tabela mdl_user
  • u.firstname – Nome do usuário
  • u.lastname – Sobrenome do usuário

2º Passo  – Extrair a  lista de todas as avaliações

Para extrair a relação de todos as avaliações de um determinado curso, basta consultar a tabela  mdl_grade_items. Segue o comando SQL:

SELECT id,itemname,itemtype,gradetype,scaleid FROM mdl_grade_items WHERE courseid=?

Passe o parâmetro id do curso em courseid=?

Esta consulta retorna os seguintes dados:
  • id – Id da avaliação
  • itemname – Nome da avaliação
  • itemtype – Tipo da avaliação. Há três tipos padrões: course, mod e manual.
      • course – É uma avaliação do curso, ou seja, a nota final. 
      • mod  - É uma avaliação criada a partir de uma atividade do curso. 
      • manual – É uma avaliação criado manualmente.
  • gradetype – Tipo de nota. Valor padrão: 1 e 2.
      • 1- Indica que a nota numérica.
      • 2 – Indica que a nota não é numérica. Neste caso a nota é definida por                 escala na tabela mdl_scale
  • scaleid – Indica a escala de nota definida na tabela mdl_scale

Caso a nota não for numérica, é necessário recuperar a escala de nota com esse comando.

SELECT scale FROM mdl_scale  WHERE id=?

Substitua o parâmetro id=? pelo valor retornado na coluna scaleid da consulta anterior.

Essa consultar retorna o seguinte dado:
•    scale – Relação da escala de nota separada por vírgula.

3º Passo  – Extrair a  lista de nota de todas as avaliações


    Para extrair uma lista de nota de todas as avaliações de um determinado curso, execute o seguinte comando sql:

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

Passe o parâmetro id do curso em i.courseid=?

4º Passo  –  Montar Layout do relatório
    Agora só falta organizar todos os dados extraídos nas consultas e montar uma tabela de nota com as seguintes colunas:

Nome do Aluno | Avaliação 1|  Avaliação 2 | Avaliação n|  Nota final

Em cada linha da tabela deve ser  impresso o nome do aluno e  a nota da avaliação de forma sincronizada. Essa sincronização pode ser feita através de uma matriz cujo índice é a combinação do id do usuário e id da avaliação. Por exemplo,  idusr/idavaliacao=nota. Isso pode ser facilmente implementada através da linguagem de programação da sua preferência.

Observação

A nota final é a avaliação cujo itemtype é course.
Caso o tipo de nota for escala (gradetype=2), o valor da nota equivale ao índice, ou seja, posição da escala da lista de nota separada por vírgula. Se  o valor da nota for 4, a nota é a quarta  posição da lista. Se a escala for: Péssimo, Ruim, Razoável, Bom, Muito  Bom; a quarta  posição é Bom, pois está será a nota.


Até aqui tudo já deve ter ficado claro como montar um relatório completo de nota. É importante ressaltar que o código SQL para extrair a avaliação e a nota não são compatíveis com a versão do Moodle  inferior a 1.9. O que extrai a lista dos alunos inscritos não é compatível com a versão inferior a 1.7.
   
    Conhecer como funciona a estrutura das tabelas de notas no banco de dados do Moodle, viabiliza a possibilidade de customizar os relatórios bem como a integração do Moodle com outros sistemas. Agora só falta você arregaçar as mangas e iniciar a programação na língua da sua preferência.

domingo, 17 de outubro de 2010

Apagar Nota, Atividades e Log do Aluno no Curso do Moodle com Comando SQL

Ao cancelar a inscrição de um aluno no curso no ambiente Moodle, os registros de na base de dados (atividades realizadas, nota e log) vinculado à matricula   não serão excluídos automaticamente, ou seja, em efeito cascata.  Uma das alternativas para remover os registros órfãos é executar o comando SQL diretamente na base de dados.
  
Para excluir os dados órfãos de uma matricula  no curso  é necessário dois parâmetros:

  • id do curso – Chave de identificação do curso na tabela mdl_course
  • id do usuário - Chave de identificação do curso na tabela mdl_user
Há uma postagem no blogue que explique isso. Clique aqui para ler.


Tendo os parâmetros da chave do curso e do usuário, só resta   apagar os registro com comando DELETE passando os parâmetros da chave do usuário e curso.
Passe o parâmetro da chave do curso em course=?   ou courseid =? e do usuário em userid=?


Apagar Log

DELETE FROM mdl_log WHERE course=? AND userid=?
   
Apagar Notas
DELETE FROM mdl_grade_grades WHERE  userid=? and itemid IN  (SELECT id FROM mdl_grade_items WHERE courseid=?)

    A sub consulta apaga apenas as notas de um determinado curso.
A tabela mdl_grade_grades é o repositório final de notas.


Apagar Atividades

Apagar nota do fórum
DELETE FROM mdl_forum_ratings WHERE post IN (SELECT p.id FROM mdl_forum_posts p INNER JOIN mdl_forum_discussions d ON p.discussion=p.id  WHERE p.userid=? AND d.course=?)

Apagar os comentários

DELETE FROM mdl_forum_posts WHERE userid=?  AND  discussion IN (SELECT id FROM mdl_forum_discussions WHERE course=?)

Não é recomendável apagar os comentários já que os comentários aninhados ficarão órfãos, ou seja, as respostas das respostas.

Apagar tópicos
DELETE  FROM mdl_forum_discussions WHERE userid=? AND course=?

Não é recomendável apagar os tópicos já que os comentários aninhados ficarão órfãos.

Apagar Tarefas

DELETE FROM mdl_assignment_submissions WHERE userid =? AND assignment IN (SELECT id FROM mdl_assignment WHERE course =?)

Ao remover as tarefas, as notas serão removidas automaticamente.


Apagar questionário

Apagar nota final
DELETE FROM mdl_quiz_grades WHERE userid =?  AND quiz IN (SELECT id FROM mdl_quiz WHERE course =?)

Apagar Tentativas de Respostas
DELETE FROM mdl_question_states WHERE  attempt IN (SELECT t.id FROM mdl_quiz_attempts t INNER JOIN  mdl_quiz q  ON t.quiz=q.id WHERE t.userid= ? AND course =?)

Apagar cada tentativa (inclusive a nota final)
DELETE FROM mdl_quiz_attempts WHERE userid =?  AND quiz IN (SELECT id FROM mdl_quiz WHERE course =?)

Para fazer limpeza total, os dados do aluno devem ser removida de todas de todas as atividades instanciadas no curso. Os comandos SQL acima demostrados se restringiram em remover as atividades do fórum, tarefa e questionário.  Para as demais atividades, siga a mesma lógica. Identifica as tabelas e apague os dados.
Feito isso, todo o histórico do aluno será removida da base de dados. Ao ser reinscrito no curso,  não terá nenhuma nota e nem log de acesso.

terça-feira, 27 de julho de 2010

Extrair Lista de Nota de um Aluno no Moodle com Comando SQL

A partir da versão 1.9 do Moodle as notas ficam na tabela mdl_grade_grades. As avaliações na tabela mdl_grade_items. Para extrair uma lista com todas as avaliações feitas por um determinado aluno é necessário fazer junção da tabela como segue o código abaixo.

Código SQL para extrair a lista de nota de um aluno em um determinado curso:
SELECT i.itemname,g.finalgrade FROM mdl_grade_items i INNER JOIN mdl_grade_grades g ON i.id=g.itemid WHERE i.courseid=? AND g.userid=?

Descrição dos campos:
A consulta retorna 2 campos: i.itemname,g.finalgrade
i itemname – Nome da avaliação
g.finalgrade – Nota do a luno

Personalize os parâmetros
i.courseid=? (substitua ? por id do curso )
g.userid=? (substitua ? por id do usuário )

Esse código só exibe as avaliações feitas. As avaliações do curso que o aluno ainda não fez não serão exibidas. Para exibir todas as avaliações, mesmo as que o aluno ainda não fizer, substitua do comando SQL INNER JOIN para LEFT JOIN.
Para versão inferior a 1.9 o comando SQL deve ser outro. Houve muita alteração na tabela de nota a partir da versão 1.9 do Moodle.