Fóruns

Resultados da busca: 15

Os seguintes termos da busca se encontram apenas no código HTML desta mensagem: mdl_course_completions

Odon,

Clique aqui uma olhada na linsta de comandos sql que gera esse resultado. Também pode acessar o post 
Verificar se o aluno completou o curso no Moodle com comando SQL

Uma outra alternativa é você usar o relatório gerado pelo MReport

Vaje alguns relatórios sobre conclusão gerado pelo MReport:

Prezados,

Boa tarde,

Sou novo aqui na plataforma e também novato na área do moodle, estava em busca de uma consulta que me retornasse alunos com status em um curso, e encontrei neste forum, porém nessa tabela (mdl_course_completions) não retornar registro. navegando na aplicação existe status dos alunos, mas não consegui retornar via SQL, pois conforme informado acima na tabela (mdl_course_completions) não tem registro, Qual seria a outra tabela que poderia me retornar essas informações? Print onde mostra que tem alunos com situações diferentes no curso.

 

 

 

 

Para gerar diretamente na base de dados a lista de alunos que já completaram o curso com comando SQL, basta executa o seguinte camando:

SELECT DISTINCT ue.id,en.courseid AS courseid,u.firstname,u.lastname,u.email,r.name AS rolename,r.shortname AS roleshortname,en.status AS methodstatus,en.enrol AS methodplugin,ue.status AS enrolstatus,ue.timestart,ue.timeend,p.timecompleted,c.fullname AS course, c.id AS courseid   FROM mdl_role_assignments rs INNER JOIN mdl_user u ON u.id=rs.userid INNER JOIN mdl_role r ON rs.roleid=r.id INNER JOIN mdl_context e ON rs.contextid=e.id  INNER JOIN mdl_enrol en ON  e.instanceid=en.courseid  INNER JOIN mdl_user_enrolments ue ON en.id=ue.enrolid  INNER JOIN mdl_course_completions p ON p.course=en.courseid INNER JOIN mdl_course c ON c.id=en.courseid WHERE e.contextlevel=50 AND rs.userid=ue.userid AND   p.userid=rs.userid  AND p.timecompleted > 0  ORDER BY p.timecompleted DESC

 

Vanessa,

Conclusão do curso é controlado na tabela mdl_course_completions e conclusão de atividades na tabela mdl_course_modules_completion são processos separados. Geralmente, se o aluno concluiu o curso na tabela mdl_course_completions se entende que já concluiu as atividades necessárias para tal na tabela mdl_course_modules_completion

Veja como um processo administrativo e não técnico.  Nos desenvolvimento que faço, se concluir o curso, automaticamente dou 100% concluído. 

 

Sobre o comando SQL, veja esse post:

 

https://comunidade.badiu.com.br/mod/forum/discuss.php?d=611&parent=854

Relatório de usuários que concluíram curso no Moodle com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=399

Verificar se o aluno completou o curso no Moodle com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=183


Rastrear progresso / quantidade de atividades no curso do Moodle que o aluno concluiu com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=289

Gerar relatório de concluintes consolidado por atividades de um curso do Moodle com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=593


Mapear controle de progresso de atividade no Moodle com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=36

Listar alunos que concluíram uma atividade do curso do Moodle com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=592

Este post é um atualização do post feito no blogue Moodle SQL em 2010. Alguns comandos foram atualizados para versão mais recente do Moodle.  

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_logstore_standard_log WHERE userid=? AND courseid=?
   
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_grades WHERE userid=?  AND forum IN (SELECT id FROM mdl_forum WHERE 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_assign_submission WHERE userid =? AND assignment IN (SELECT id FROM mdl_assign WHERE course =?)

Apagar nota da tarefa
DELETE FROM mdl_assign_grades WHERE userid =? AND assignment IN (SELECT id FROM mdl_assign WHERE course =?)

Apagar questionário


Apagar nota do questionário
DELETE FROM mdl_quiz_grades WHERE userid =?  AND quiz IN (SELECT id FROM mdl_quiz WHERE course =?)

Apagar as tentativas
DELETE FROM mdl_quiz_attempts WHERE userid =?  AND quiz IN (SELECT id FROM mdl_quiz WHERE course =?)

Tem mais informação no questionário ainda a ser excluído. Basta vasculhar as tabelas e mapear onde há campo userid.

Apagar conclusão de atividades do curso
DELETE FROM  mdl_course_modules_completion  WHERE userid =?  AND coursemoduleid IN (SELECT id FROM mdl_course_modules WHERE course =?)

Apagar conclusão do curso
DELETE FROM mdl_course_completions WHERE userid =?  AND 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 (parcial).  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.

Luciano,

Para resetar progresso dos alunos, você precisa excluir informação duas tabelas:

  • mdl_course_completions - Registro de alunos que concluiram courso
  • mdl_course_modules_completion - Registro de alunos que concluiram atividades do curso

A exclusão deve ser feita para cada aluno e em cada curso. Para resetar atividades para alunos efetuar novamente, siga a lógica deste post: http://moodlesql.blogspot.com.br/2010/10/apagar-nota-atividades-e-log-do-aluno.html 

Elzilane,

Para filtrar alunos que concluíram o curso numa data recente, basta filtrar a data  na coluna  timecompleted (tabela mdl_course_completion)

Veja exemplo de comando SQL que faz isso

SELECT u.id, u.firstname,u.lastname, u.email,c.timecompleted   FROM mdl_course_completions c INNER JOIN mdl_user u ON c.userid=u.id WHERE  c.timecompleted > 0 AND c.timecompleted > ? AND c.timecompleted <= ? AND c.course=?
Passe data recente em formato timestamp em AND c.timecompleted > ? AND c.timecompleted <= ?


Como informação adicional, no MReport há possibilidade de gerar relatórios como alunos que concluíram, passando parâmetro de data tais como:

  • Alunos concluintes nos últimos 20 minutos ou x horas ou x dias
  • Alunos que concluíram no período x

O relatório de concluintes do MReport tem mais de 40 campos de opções de filtro, além disso, há opção para exportar para excel e agendar para enviar por e-mail diariamente (ou período determinado) a relação de concluintes. Também há opção de disparar mensagem automática aos aluns concluintes.

Segue um conjunto de post com comando SQL que gera lista de alunos que concluíram o curso. 

Relatório de alunos que completaram o curso com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=447

Relatório de usuários que concluíram curso no Moodle com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=399

Listar alunos no Moodle que concluíram o curso pelo rastreamento do progresso com SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=218

Verificar se o aluno completou o curso no Moodle com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=183


Relatório de quantidade (percentagem) de alunos concluinte consolidado por curso do Moodle com comando SQL
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=589

Lista geral dos alunos que concluíram o curso com informação da nota final do curso
https://comunidade.badiu.com.br/mod/forum/discuss.php?d=448

O comando SQL  a seguir permite gerar percentagem comparativa de qual curso mais alunos já concluíram. 

O comando SQL gera uma lista com nome do curso, quantidade de alunos inscritos e quantidade de alunos concluintes. Com essas informações torna possível montar a percentagem de conclusão de alunos em cada curso. 

Se a sua base for muito grande, é recomendado usar paginação e restringir filtro de dados para não travar a base. Para restringir, use no comando WHERE filtro por categoria de curso, por exemplo, para limitar dados.

Comando SQL que gera relatório com a lista de todos os cursos

SELECT c.id,c.fullname,COUNT(DISTINCT ue.id) AS countenrol,(SELECT COUNT(p.id) FROM mdl_course_completions p WHERE p.course=c.id AND p.timecompleted > 0 ) AS countenrolcompleted  FROM mdl_role_assignments rs INNER JOIN mdl_role r ON rs.roleid=r.id INNER JOIN mdl_context e ON rs.contextid=e.id  INNER JOIN mdl_enrol en ON  e.instanceid=en.courseid  INNER JOIN mdl_user_enrolments ue ON en.id=ue.enrolid INNER JOIN mdl_course c ON c.id=en.courseid  WHERE e.contextlevel=50 AND rs.userid=ue.userid AND r.shortname='student' AND en.status=0 AND ue.status=0   GROUP BY c.id,c.fullname

Comando SQL que gera relatório com a lista dos cursos que tiver pelo menos um aluno concluinte 

SELECT c.id,c.fullname,COUNT(DISTINCT ue.id) AS countenrol,(SELECT COUNT(p.id) FROM mdl_course_completions p WHERE p.course=c.id AND p.timecompleted > 0 ) AS countenrolcompleted  FROM mdl_role_assignments rs INNER JOIN mdl_role r ON rs.roleid=r.id INNER JOIN mdl_context e ON rs.contextid=e.id  INNER JOIN mdl_enrol en ON  e.instanceid=en.courseid  INNER JOIN mdl_user_enrolments ue ON en.id=ue.enrolid INNER JOIN mdl_course c ON c.id=en.courseid  WHERE e.contextlevel=50 AND rs.userid=ue.userid AND r.shortname='student' AND en.status=0 AND ue.status=0 AND (SELECT COUNT(p.id) FROM mdl_course_completions p WHERE p.course=c.id AND p.timecompleted > 0 ) > 0   GROUP BY c.id,c.fullname

Caso o cadastro de um usuário estiver duplicado no Moodle, e cada cadastro tem inscrição nos cursos e estiver acessando, a solução seria unificar os cadastros. 

Vamos supor que usuário 1 com id 10 seja o mesmo que usuário 2 com id 11. Neste caso, o processo de unificação requer um trabalho no nível cirúrgico. Ta claro que tou falando do operação em nível de SQL e PHP. 

Bem vamos lá:

Nos comandos SQL  a seguir você substituir id 11 para id 10, ou seja, vai transferir tudo que estiver no usuário 2 usuário 1

1) Unificar inscrição no curso 

UPDATE  mdl_role_assignments SET userid=? WHERE userid=?

2) Unificar status de inscrição  no curso 

UPDATE  mdl_user_enrolments  SET userid=? WHERE userid=?

3) Unificar registro de nota no quadro geral de nota / atividades

UPDATE  mdl_grade_grades  SET userid=? WHERE userid=?


Observação

    A mesma operação deve ser feita no histórico de notas em todas as tabelas dos plugins que têm registro de nota e que registro atividades do aluno como enquete, questionário, fórum etc. 

4) Unificar registro de atividades concluídas

UPDATE  mdl_course_modules_completion  SET userid=? WHERE userid=?

5) Unificar registro de cursos concluídos

UPDATE  mdl_course_completions   SET userid=? WHERE userid=?

5) Unificar registro de log

UPDATE  mdl_course_modules_completion   SET userid=? WHERE userid=?

6) Unificar registro de campos do perfil

UPDATE  mdl_user_info_data   SET userid=? WHERE userid=?

7) Outros

Faça uma mapeamento em todas as tabelas onde tiver coluna userid, processa essa operação. Neste caso o PHP vai ser uma mão na roda. Só apontei exemplos das tabelas mais comuns.

O comando SQL  a seguir gera o seguinte relatório:

  • Relação dos alunos que concluíram os cursos no Moodle, tendo como critério, o rastreamento de conclusão do curso configurado nos cursos;
  • Informação sobre nota final do curso;
  • Informação sobre data de início e término da inscrição, bem como o status de inscrição

 

SELECT rs.id,u.firstname,u.lastname,u.email,u.city,c.id AS courseid,c.fullname AS course,ct.name AS category,r.name AS rolename,r.shortname AS roleshortname,g.finalgrade,i.grademax,g.rawgrademax,g.timecreated,g.timemodified,en.status AS methodstatus,en.enrol AS methodplugin,ue.status AS enrolstatus,ue.timestart,ue.timeend,p.timecompleted AS coursecompletedtime FROM mdl_role_assignments rs INNER JOIN mdl_role r ON rs.roleid=r.id INNER JOIN mdl_user u ON rs.userid=u.id INNER JOIN mdl_context e ON rs.contextid=e.id INNER JOIN mdl_enrol en ON e.instanceid=en.courseid INNER JOIN mdl_course c ON c.id=en.courseid INNER JOIN mdl_course_categories ct ON ct.id=c.category INNER JOIN mdl_user_enrolments ue ON ( en.id=ue.enrolid AND rs.userid=ue.userid ) LEFT JOIN mdl_course_completions p ON (p.course=c.id AND p.userid=rs.userid ) LEFT JOIN mdl_grade_items i ON c.id=i.courseid LEFT JOIN mdl_grade_grades g ON (g.itemid=i.id AND rs.userid=g.userid ) WHERE e.contextlevel=50 AND rs.roleid IN (5) AND (i.itemtype = 'course' OR i.itemtype IS NULL ) AND  en.status = 0 AND p.timecompleted > 0 ORDER BY g.timemodified