quinta-feira, 29 de julho de 2010

Matricular Usuário no Curso do Moodle com Comando SQL

Veja atualização desse post para versão 2.x e 3.x do Moodle na comunidade Badiu no link: http://comunidade.badiu.com.br/mod/forum/discuss.php?d=250
 
A partir da versão 1.7 do Moodle o gerenciamento da matrícula passou a ser feita na tabela mdl_role_assignments. Essa tabela é composta por vários campos. Os campos mais importantes para efetuar a inscrição do usuário no curso são:
roleid – perfil do usuário na tebela mdl_role;
contextid – Contexto curso no tabela mdl_context;
userid - Id do usuário na tabela mdl_user.
Sendo assim, o comando SQL para fazer a matrícula será:
INSERT INTO mdl_role_assignments (roleid,contextid,userid) VALUES (?,?,?)
Até aqui tudo parece moleza. O problema é saber que valores colocar em cada campo. Bem, não desespere, vamos lá.
Valor do campo roleid
O campo roleid define se o usuário a ser cadastrado no curso é aluno, tutor, autor do curso etc. Por padrão, a tabela mdl_role traz 7 perfis cadastrados.
1 – Administrator
2 -Course creator
3 –Teacher (Tutor)
4 - Non-editing teacher
5 – Student (Aluno)
6 –Guest
7 - Authenticated user
Bem roleid já está decifrado. Está claro que deve ser 3 para cadastrar o tutor e 5 para aluno.
Valor do campo contextid
Esse é um pouco chato. Mas vamos lá. Para explicar isso é necessário antes informar que Moodle não segue, a risca, a integridade de dados entre a chave primária e estrangeira. Em alguns casos, usa instanciamento de dados como que se fosse uma programação orientado a objetos. Para decifrar a instancia do curso siga os seguintes passos:
Primeiro Passo
Localize o id do curso que pretenda matricular o aluno. Essa informação está na tabela mdl_course.
Segundo Passo
Extraia o id do contexto do curso na tabela mdl_context executando o seguinte comando SQL:
SELECT id FROM mdl_context WHERE contextlevel=50 AND instanceid=?

No filtro do WHERE, contextlevel deve ser sempre 50. Esse valor é padrão. Representa o instancia do curso. O valor do filtro do campo instanceid deve ser o id do curso extraído no primeiro passo.
O valor retornado da consulta SQL acima será o valor do campo contextid.
Valor do campo userid
Esse valor já é moleza. É o id do usuário na tabela mdl_user. Caso estiver cadastrando um usuário e, em seguida, inscrevê-lo no curo, basta recuperar o id do cadastro recente usando a função SQL LAST ID INSERT. Caso não saiba como cadastrar usuário via comando SQL clique aqui para ver.
Agora que você já tem o valor de todos os campos basta executar o comando SQL:
INSERT INTO mdl_role_assignments (roleid,contextid,userid) VALUES (?,?,?)
Substituído a ? pelos valores correspondentes.

Os comandos descritos neste post só valem para a versão 1.7 a 1.9 do Moodle. Não versão 2.0 houve uma alteração da estrutura das tabelas de matrícula. Para a versão 2.x, siga os procedimentos explicados no comentário: http://moodlesql.blogspot.com/2010/07/matricular-usuario-no-curso-do-moodle.html?showComment=1317436246579#c1869475564775276003

Veja Também
Cadastrar Usuário no Moodle pelo Comando SQL

80 comentários:

  1. Valeu, mas esse context continua ainda uma chatice.

    ResponderExcluir
  2. No moodle 2.0 não funcionou, você sabe dizer o porque?

    ResponderExcluir
  3. Maiotte,
    Na versão 2.0 foi acrescentada duas novas tabelas para inscrição no curso:
    mdl_enrol - Tipo de inscrição no curso
    mdl_user_enrolments – Dados da inscrição do usuário

    ResponderExcluir
  4. Cara, eu fiz alguns testes no 2.0 inclusive relacionando as tabelas mdl_enrol e mdl_user_enrolments.

    Aparece o usuário como cadastrado na discioplina, porém ele não fica como matriculado.

    Você saberia dizer o que poderia ser?

    Abraço.

    ResponderExcluir
  5. Eric, Eu estava com o mesmo problema, e so na tabela user_enrolments, colocar zero no campo timeend

    att,

    ResponderExcluir
  6. Para matricular o aluno no curso na versão 2.0 do Moodle, é necessário seguir os seguintes passos:

    1- Recupere a chave da modalidade da matrícula do curso usando o seguinte comando:

    SELECT id FROM mdl_enrol WHERE courseid=? AND enrol='manual'



    2- Inscreve o aluno na tabela mdl_user_enrolments usando o seguinte comando:
    INSERT INTO mdl_user_enrolments (status,enrolid,userid,timestart,timeend,timecreated,timemodified) VALUES (?,?,?,?,?,?,?)



    Obs.: Coloque valor zero para status. Para enrolid, coloque a chave recuperada no passo 1.

    3) Recupere o contexto do curso usando o seguinte comando:
    SELECT id FROM mdl_context WHERE instanceid=? AND contextlevel=50

    Obs.: coloque id do curso no parâmetro instanceid=?


    4) Efetue a matricula no curso usando o comando:
    INSERT INTO mdl_role_assignments (roleid,contextid,userid,timemodified) VALUES (?,?,?,?)

    Já deu para notar que a estrutura da matrícula no Moodle 2.0 é muito diferente. Use esse código que vai funcionar. Copiei o código diretamente do sistema GMoodle. Assim que eu puder, publicarei um post explicando em detalhe passo a passo.

    ResponderExcluir
    Respostas
    1. Badiu,
      Quando eu faço este comando, o usuário que eu pretendo inscrever/ter função de "Estudante", acaba tendo função sobre outro usuário. (em atribuições de papel aparece: Nome de outro usuário <> Estudante). Você saber o porque?

      Excluir
    2. Jacque,
      Não entendi bem a questão que você levantou. Qual comando que você executou e não deu certo?

      Qual passo é que falhou? Para cadastrar aluno, o campo roleid da tabela mdl_role_assignments deve ter valor 5.

      Excluir
    3. Badiu,

      Fiz os passos descritos para a versão: 2.0+ (a minha é 2.4.1)
      Criei um site ficticio na minha máquina, tendo como curseid = 2, usando o primeiro passo, o que me retorna no mdl_enrol é id = 1.

      Realizando o segundo passo:
      Tenho cadastrado 29 alunos ficticios, sendo que 2 deles foram criados através de comando SQL, não tendo nenhuma função designada no site e não estando inscrito em nenhum curso. Para testar criei outro utilizando a linha de comando:
      INSERT INTO mdl_user (firstname,lastname,email,username,password,confirmed,description, mnethostid) VALUES
      ('Jacque','Costa','jcosta@gmail.com','jacque',MD5('costa'),1,'Cabra Bom',1); Tendo id = 30.

      em seguida apliquei o 2 passo:
      INSERT INTO mdl_user_enrolments(status,enrolid,roleid,userid,timestart,timeend,timecreated,timemodified) VALUES (0,1,5,30,1361836800,1361580329,1361917953,2)
      No caso, o usuário não apareceu na tabela do mdl_user_enrolments, então copiei o campo "timestart,timecreated,timeend" de outro usuário, só que ao executar o comando, é apresentado o erro: "#1054 - Unknown column 'roleid' in 'field list'"

      ficando:
      INSERT INTO mdl_user_enrolments(status,enrolid,userid,timestart,timeend,timecreated,timemodified) VALUES (0,1,30,1361836800,1361580329,1361917953,2) deixando como id = 23.

      Seguindo o 3 passo:
      SELECT id FROM mdl_context WHERE instanceid=2 AND contextlevel=50 retornando id = 16

      Seguindo 4 passo:
      INSERT INTO mdl_role_assignments (roleid,contextid,userid,timemodified) VALUES (5,50,30,1361581151)

      Entao loguei com o usuário. E ele não estava inscrito no curso 2, então loguei como administrador para ver os papéis atribuidos ao mesmo, e o que me parece é:
      Atribuições de papel de Jacque Costa
      . Sistema
      Usuário: João Pedro
      Estudante (configurações, ocultar)

      É como se o usuário que eu criei tivesse "controle" de outro usuário.
      Acho que eu devo estar fazendo algum comando errado, você pode me ajudar ou explicar o motivo disto?
      obg.




      Excluir
    4. Badiu,

      Desculpe, descobri onde estava errando, não estava colocando o valor retornado no 3 passo para o 4, o que resultava em uma falha bem "maluca".
      Mas um dúvida, no timeend se eu colocar um valor diferente de 0, o meu usuário terá sua conta 'finalizada' no curso?
      Agradeço por ter respondido ao comentário.

      att

      Excluir
    5. Onde Posso encontrar esse Tutorial? Caso o já tenha feito.

      Vlw!

      Excluir
    6. Marcello,
      Se você está referindo ao tutorial sobre inscrição de aluno na versão 2 do Moodle, dê uma olhada nesse comentário:
      http://moodlesql.blogspot.com/2010/07/matricular-usuario-no-curso-do-moodle.html?showComment=1317436246579#c1869475564775276003

      Excluir
    7. A quem possa interessar...eu testei essa query e funcionou muito bem para versão 1.9.

      INSERT INTO mdl_role_assignments (roleid, contextid, userid, hidden, timestart, timeend, timemodified, modifierid, enrol, sortorder)
      SELECT 5, ctx.id, usr.id, 0, UNIX_TIMESTAMP(NOW()), 0, UNIX_TIMESTAMP(NOW()), 2, 'manual', 0 FROM mdl_context AS ctx
      INNER JOIN mdl_course AS crs ON crs.id = ctx.instanceid
      INNER JOIN mdl_user AS usr ON usr.idnumber =
      WHERE ctx.contextlevel=50 AND crs.shortname IN ()

      Só precisa mudar o e a . :)

      Excluir
    8. Opa...desculpem...corrigindo:

      Só precisa mudar o "usr.idnumber" e inserir uma lista de valores em "crs.shortname IN ()"

      Excluir
  7. Parabéns pelo trabalho que faz Badiu. Estou criando um sistema que faz integração com o Moodle e já encontrei muitas resposta nesse blog.
    Obrigado!

    ResponderExcluir
  8. Thiago, é uma satisfação saber que estou ajudando.

    ResponderExcluir
  9. Bahh.. depois de muito ralar e descobrir na unha esses relacionamentos ae do 2.0, achei esse post!! Bacana, agora já salvei nos meus favoritos e de vez em quando estarei por aqui! Abraço e parabéns pelo trabalho!

    ResponderExcluir
  10. Boa tarde
    Sou administrador de um sistema moodle mais ainda sou pouco fluente sobre ele.
    Estou com o seguinte problema:
    Acessaram o sistema e aparam todos os usuários , tive essa percepção através do banco de dados e para ser mais preciso da tabela "mdl_user"
    estou criando novos usuários mais ao tentar logar recebo a seguinte informação.

    Authentication plugin {$a} not found.

    More information about this error

    gostaria de saber se alguem poderia me ajudar com este drama, desde já agradeço a atenção de todos.

    ResponderExcluir
  11. POPO,
    Dê uma olhada no campo auth da tabela mdl_user. Nesse campo fica registrado qual é o plugin de autenticação que o usuário deve usar ao tentar logar. Por padrão é manual. Verifique que valor que está setado ao usuário que você está tentando logar.

    ResponderExcluir
  12. muito obrigado pela sua resposta meu amigo, estou tentando criar uma coluna agora com este nome pois a que vc disse não se encontrar ela foi excluída.
    só não entendo como a pessoa poderia ter apagado a coluna já que eu troquei a senha do servidor, ela poderia ter apagado através do moodle ?

    ResponderExcluir
  13. POPO,
    O código do Moodle não apagaria uma coluna da tabela que faz parte do core do sistema. Se isso acontecer é uma falha do sistema. É mais provável que tenha ocorrido falha humana.

    ResponderExcluir
  14. Badiu,

    Era o que eu estava exatamente pensando mais o sistema esta hospedado num servido que eu mesmo troquei a senha, você saberia me informa como outra pessoa poderia ter feito isso, pois sinto que todas as vezes que eu ajustar o sistema essa pessoa tentará me prejudicar.
    Obrigado mais uma vez.

    ResponderExcluir
  15. POPO,
    ALTER TABLE mdl_user DROP auth
    A execução desse comando em um terminal SQL ou mesmo via PHP é suficiente para parar o funcionamento do Moodle. Neste caso, é necessário ativar o log do comando SQL no banco de dados para mapear todos os comandos executados. Assim tem como auditar que pode ter acontecido.

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

    ResponderExcluir
  17. Badiu,
    Você saberia informar em qual arquivo do moodle se encontra a senha de conexão ao mysql ?

    Pois descobri que o antigo administrador esta acessando o meu banco de dados direto através do ip dele.

    Gostaria também de saber se é possível solicitar a minha hospedagem a troca do ip do msyql, e se isso prejudicaria o moodle em alguma coisa.

    Desde já agradeço mais uma vez a sua ajuda.

    ResponderExcluir
  18. Boa tarde,

    Gostaria de agradecer a ajuda de todos e especialmente ao Badiu, gostaria também de comunicar o quanto este blog tem sido útil para a solução dos meus problemas com o moodle.

    Consegui solucionar o meu problema de invasão, alterando as configurações do arquivo config.php, agora acredito que eu esteja seguro.

    Mais uma vez obrigado por tudo.

    ResponderExcluir
  19. POPO,
    Para ativar o log do comandos executados no mysql, consulte esse link: http://dev.mysql.com/doc/refman/4.1/pt/update-log.html

    ResponderExcluir
  20. POPO,
    O arquivo que tem as configurações de usuário e senha de acesso ao banco de dados do Moodle é config.php. Esse arquivo fica na raiz de instalação do Moodle. Dê uma olhada no 4° passo desse post http://moodleeduc.blogspot.com/2010/11/mudar-moodle-de-servidor.html. Lá há uma explicação detalhada da configuração desse arquivo.

    ResponderExcluir
  21. Badiu,
    Muito grato foi de grande ajuda o seu link, obrigado pelo empenho em me ajudar.

    ResponderExcluir
  22. Badiu,

    Estou enfrentando o seguinte problema, clico num curso do sistema vejo o conteúdo, mais no momento que escolho um dos links o sistema me passa a seguinte informação:

    Erro ao ler a base de dados
    Outras informações sobre este erro

    O que poderia ser isso ? acredito que mais uma vez o antigo administrador me deixou essa surpresa.

    Gostaria de saber em qual tabela poderia esta a solução para isso, já fiz uma varredura mais não encontro nada.

    Sua dica sobre a exclusão da coluna auth da abela mds_user resolveu meu ultimo problema, acredito que este esteja no mesmo nível mais não encontro a coluna que possivelmente poderia ter sido excluída.

    Mais uma vez agradeço a atenção.

    ResponderExcluir
  23. POPO,
    Qual é link exatamente que quando você clica aparece erro. Neste caso, copie o link e poste aqui para ver para qual recurso o link aponta. Ative o erro do Moodle para nível de desenvolvedor. Siga orientação no post: http://moodlephp.blogspot.com/2011/03/ativar-exibicao-do-erro-no-moodle.html

    ResponderExcluir
  24. Badiu,

    Seguindo o caminho apresentado no link que você colocou, eu não encontro as mesmas opções.

    Os recursos que eu visualizo na opção administração de site são:

    Usuários
    Cursos
    Notas
    Idiomas
    Página principal
    Relatório

    A opção Development/Debugging não aparece, será que o antigo administrador desabilitou ela ? Realmente com este recurso eu vejo que daria uma clareada na minha dificuldade.

    Teria alguma forma de exibi-la ? meu mooodle e o 2.0.

    Agradeço a ajuda com o link.

    ResponderExcluir
  25. Badiu,
    Descobri! não estava habilitado como eu acreditava, olha a mensagem de erro:

    Debug info: Table 'mmidiomas2.mdl_url' doesn't exist
    SELECT cm.*, m.name, md.name AS modname
    FROM mdl_course_modules cm
    JOIN mdl_modules md ON md.id = cm.module
    JOIN mdl_url m ON m.id = cm.instance

    WHERE cm.id = ? AND md.name = ?

    [array (
    0 => 377,
    1 => 'url',
    )]

    Stack trace: •line 391 of /lib/dml/moodle_database.php: dml_read_exception thrown
    •line 794 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
    •line 1265 of /lib/dml/moodle_database.php: call to mysqli_native_moodle_database->get_records_sql()
    •line 1369 of /lib/datalib.php: call to moodle_database->get_record_sql()
    •line 40 of /mod/url/view.php: call to get_coursemodule_from_id()

    o que poderia ser isso ?

    ResponderExcluir
  26. To achando que ele excluiu uma tabela minha se for realmente isso terá como conserta ?

    ResponderExcluir
  27. Graças a Deus e ao Badiu rs, encontrei a solução para o meu problema.

    Vendo o banco de dados do moodle de um amigo encontrei a tabela mdl_url e fiz a criação dela no meu moodle, agora esta tudo funcionando, só vou ter que registrar tudo novamente mais ta ok.

    Preciso agora por fim solucionar o problema com o backup que não estou conseguindo nem criar e nem restaurar.

    Peço ajuda para identificar a tabela que executa essa função, pois acredito que ela já tenha desaparecido.

    Agradeço muito a você Badiu e ao seu super blog.

    ResponderExcluir
  28. Boa tarde,
    Gostaria de saber se alguém já ouviu falar em importação de cursos e usuários diretamente de um arquivo de excel, se já ouviram como se faz?

    Obrigo a todos.

    ResponderExcluir
  29. Jadel,
    É possível importar usuários de um arquivo excel ou cvs e cadastra-los diretamente em um curso no Moodle. Também é possível fazer backup de um curso com usuários e restaurá-los em outro Moodle. Explique com mais detalhe o que você precisa fazer.

    ResponderExcluir
  30. Boa tarde Badiu,
    Eu tenho um novo curso e gostaria de cadastrar os úsuarios de forma mais rapida do que manualmente um de cada vez, pois tenho uma planilha com uns 300 alunos para cadastrar no moodle, soube que é possivel importa a planilha com os usúarios só não sei como.

    ResponderExcluir
  31. Jardel,


    Para cadastrar usuário em massa, siga os seguintes passos:
    1) Gere um arquivo cvs com os dados dos usuários. Esse arquivo deve ter os campos organizados como explica a documentação no link: http://www.teste.moodle.badiu.net/1.9.3/help.php?module=moodle&file=uploadusers2.html&forcelang=

    2) No bloco de admin do Moodle, navegue em Usuários / ► Contas / ► Carregar lista de usuários

    3) Faça upload do arquivo cvs com os dados dos usuários

    ResponderExcluir
  32. Badiu, no meu caso, estou em um script que cria o curso e na sequência matricula os alunos. é nescessário, no meu caso popular a Tabela mdl_enrol com as referências para a tabela de cursos, certo? mas alpem da referencia ao id, aquis outros campos tenho que determinarna hora de salvar esses novos registros? Quais os valores que devo preencher em status,enrol.


    Grato e espero sua resposta o mais cedo possível.
    P.S.: Parabéns pelo BLog, já me ajudou bastante e espero que continue ajudando xD.

    ResponderExcluir
    Respostas
    1. Renato,
      Você está usando a versão 2 do Moodle. Dê uma olhada no comentário desse post da minha autoria publicado no dia 30 de setembro de 2011 19:30

      A solução para a questão que você levantou se encontra lá. Qualquer dúvida, entre em contato novamente

      Excluir
  33. Professor, gostaria de saber como ficaria no código como fizeste o add_user para já inserir o aluno no curso escolhido.
    Já funciona o cadastro do aluno, mas quando acesso ao sistema e tento escolher um curso dá uma mensagem "Não é possível fazer a inscrição neste curso neste momento." O que pode estar havendo, tem a ver com a data do primeiro acesso como li por aqui, podes me ajudar, podemos inclusive como estou implementando isto em um curso ver valores para este tipo de apoio. Aguardo um retorno. Obrigado.

    ResponderExcluir
    Respostas
    1. Maurício,
      Para inscrever usuário no curso, gere um script php que execute esse o comando SQL na sequência como apresenta o post. Dê uma olhada no post http://moodlephp.blogspot.com.br/2010/11/cadastrar-usuario-no-moodle-com.html que mostra como cadastrar usuário no Moodle. Siga a mesma metodologia e adapte o código para executar comandos SQL que efetue a matrícula no curso.
      Quanto você refere que não consegue efetuar inscrição no curso, você está usando interface gráfica do Moodle?

      Se não tiver experiência com script PHP e precisar de uma consultoria mais aprofundada entre em contato pelo e-mail: linovazmoniz@gmail.com

      Excluir
  34. Badiu, primeiramente, parabéns pelo trabalho com o moodle. A ferramenta é bem ampla e é preciso dedicação para se aprofundar.

    Gostaria de te perguntar o seguinte: Estou integrando o Moodle 2.3 a um sistema legado de educação via SQL. Ao integrar a matrícula, quando vou inserir os dados na tabela [mdl_role_assignments], tenho que atribuir algum valor específico aos campos [component] e [itemid]?? Caso eu atribua component = '---' e [itemid] = 0 posso ter algum problema com a matrícula?

    Outra pergunta, quando quero cancelar ou trancar uma matrícula de um aluno, posso usar o campo [status] da [mdl_user_enrolments]?? Senão, como eu posso trancar uma matrícula? e qual o motivo de você ter dito acima que deve se atribuir valor 0 (zero) ao campo [status]?

    Muitíssimo obrigado e sucesso nos seus objetivos! Você é referência no assunto!!

    ResponderExcluir
    Respostas
    1. Júlio,

      É uma satisfação saber que você é leitor do blog.

      Na estruturara da base do Moodle já notei que a versão 2.x do Moodle há status da matrícula. Porém, ainda não estudei a utilidade do campo status na tabela mdl_user_enrolments. Sei que ao colocar valor zero funciona normalmente. Ficar lhe devendo isso.

      O campo component na tabela mdl_role_assignments também ainda não sei para que serve. O valor vazio é padrão e funciona.

      Também ainda não sei para que serve o campo itemid na tabela mdl_role_assignments. Sei que o valor zero é o padrão e funciona.

      Vou pesquisar para que serve esses campos. Assim que eu tiver resultado lhe informo.

      Para cancelar ou trancar uma matrícula, a alternativa que vejo é excluir o registro na tabela mdl_role_assignments. Quanto a isso, sugiro a leitura do post Arquitetura do sistema Moodle

      Excluir
  35. Badiu,

    bom dia e obrigada pelas dicas.

    Eu já tenho um sitema integrado, o aluno faz uma inscrição num site e já cai direto no moodle, tudo matriculado, seguindo todas as dicas colocadas aqui.

    Esse processo sempre funcinou normalmente, mas de uns tempos pra cá, aparece uma mensagem "Você não pode se matricular neste curso", se o aluno logar logo após a inscrição. Depois de um tempo, mais ou menos 2h, ele consegue. Entrei na matrícula do aluno e vi que assim que o cadastro é feito é como se ficasse desabilitado, esperando uma aprovação, que depois de um tempo é liberada automaticamente.

    Você já viu isso? Sabe como solucionar? a impressão que tenho é que foi mexida alguma regra mo ambiente, mas pelo que sei nada foi mexido.

    Desde ja obrigada.

    Aguardo seu retorno!
    Carine Pereira - carinewh@hotmail.com

    ResponderExcluir
    Respostas
    1. Carine,

      Se o aluno não consegue se inscrever no curso, a hipótese mais provável é que a falha esteja na regra do plugin de inscrição. O processo de inscrição no curso do Moodle é separado do processo de cadastro. Processo de cadastro do usuaŕio é gerenciado pelo plugin de autenticação. Já o processo de inscrição no curso é gerenciado pelo plugin de inscrição, o enrol. Para examinar essa falha, sugiro você adotar os seguintes procedimentos:

      1- Verifique qual plugin de inscrição no curso está sendo usado
      2- Verifique a configuração desse plugin
      3- Altere o plugin de inscrição e veja se funciona


      De modo geral, o problema deve estar com plugin de inscrição. Possivelmente o plugin de inscrição está usando algum requisito do processo de matrícula.

      Excluir
  36. Badiu,

    descobri! O problema era no banco, que acredito que por causa do horário de verão estava gravando duas horas a mais no campo timestart da tabela mdl_user_enrolments.

    De qualquer forma, obrigada.

    Carine

    ResponderExcluir
    Respostas
    1. e como resolveu?
      joao victor
      joaovictorvocal@gmail.com

      Excluir
  37. Badiu,
    Estou tento problemas com a linha de código que você mostrou nos comentários do Moodle 2.0, não estou conseguindo fazer o 2 passo. Poderia me ajudar?

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

    ResponderExcluir
  39. Olá Badiu,

    Estou fazendo uma integração de um sistema externo (em asp) com o moodle 1.9 e suas dicas foram sensacionais. Utilizei o tutorial todo. No caso da matricula de um aluno em um curso que tenha um código de acesso, O aluno é matriculado mas o sistema pede o código no primeiro login (password da tabela mdl_course), saberias onde posso contornar isso para que o aluno faça login sem este pedido de código? Só falta isso...

    Obrigado,

    ResponderExcluir
    Respostas
    1. Jan,
      Se na tela é solicitada o código de inscrição, certamente a matrícula não foi feita antes. Sugiro que você faça uma a seguinte verificação:
      1- Faça a inscrição no curso pelo sistema extorno.
      2- Acesse a base de dados e verifique se não ocorreu falha. Para isso verifique se foi dado carga na tabela mdl_role_assignments. Verifique se o id do usuário está nessa tabela vinculado ao contexto do curso como mostra o comando INSERT no post: http://moodlesql.blogspot.com.br/2010/07/matricular-usuario-no-curso-do-moodle.html

      3- Se exista o cadastro, verifique a data de início da inscrição.
      Possivelmente a falha está em algumas dessas etapas.

      Excluir
  40. Lino, eu executei os comandos sql, as matriculas aparecem na tabela user_enrolments, mas quando acesso o curso pela interface adm do moodle os novos alunos incluidos nao são listados. o que acontece?
    versão moodle 2.5.

    ahh e parabens pelo blog, referencia no assunto. parabens msmo.

    ResponderExcluir
  41. Lino, você já testou usar os webservices do moodle?

    Eu pretendia usar a função enrol_manual_enrol_users do webservice para criar o vinculo entre aluno e o curso. Mas ele retorna um erro sem sentido... queria tentar achar alguem que tenha conseguido utilizar

    meu código https://github.com/guilhermebferreira/moodlerest/blob/master/enrol_users.php

    ResponderExcluir
    Respostas
    1. Ainda não usei webservice do Moodle. Gosto tanto do banco que ainda não parei para estudar webservice. Vou iniciar os estudos sobre isso. Dê uma olhada no material da palestra do Daniel no Moodle Mot 2013. De repente encontre algo que possa lhe auxiliar.

      Excluir
    2. O artigo ensina a colocar suas próprias funções como webservice do moodle.

      Vou avaliar se é viável fazer isso com as minhas.

      Obrigado, não sabia desse evento.

      Excluir
    3. O artigo ensina os passos para disponibilizar um novo webservice no moodle.

      Mas, pelo menos no exemplo do artigo, as ações(consultas e inserts) são feitas usando as funções do moodle.


      Para converter esse metodo de matricular o aluno no curso para webservice, primeiro teria que descobrir como manipular pelo moodle os objetos envolvido na operação...

      ou então descobrir como executar uma query pelo moodle...

      Excluir
  42. Gostaria de desinscrever usuários de um curso.
    Seria possível fazer este processo em massa? Ou seja, utilizando um arquivo CSV?

    ResponderExcluir
  43. Preciso saber como popular a tabela mdl_enrol. Pode me passar um exemplo de comando INSERT dessa tabela que está vazia no meu banco?
    Desde já agradeço...

    ResponderExcluir
    Respostas
    1. Charles,
      A tabela mdl_enrol é alimentada pela Plataforma Moodle quando um plugin é ativado no ambiente de um determina curso. Essa tabela é composta por 35 campos. Certamente nem todos precisam ser preenchidos. Ainda não gerei um INSERT nessa tabela. Ainda não tive essa necessidade. Há alternativa de conseguir exemplo de comando INSERT pelo log do banco. Para isso, siga os seguintes passos:
      1) Ative o log de INSERT no banco de dados;
      2) Ative um método de inscrição em um determinado curso;
      3) Va no log do banco de dados, localize comando INSERT INTO mdl_enrol e veja comando completo de inserção.

      Excluir
  44. Excelente post! Me poupou horas de trabalho! Parabéns Dr. Badiu!

    ResponderExcluir
  45. Prezado Badiu, você sabe me dizer em qual tabela consigo encontrar o campo que guarda a data que o aluno foi cadastrado no moodle?

    ResponderExcluir
    Respostas
    1. Adriana,
      A data de inscrição no curso no Moodle fica no campo timestar da tabela mdl_user_enrolments a partir da versão 2.* do Moodle.
      Dê uma olhada nesse link: http://moodlesql.blogspot.com/2013/08/corrigir-data-de-inscricao-no-moodle.html

      Se você precisa da data que o usuário foi cadastrado no Moodle, veja na coluna timecreated da tabela mdl_user isso a partir da versão 2 também.

      Excluir
  46. Desculpe se o que vou perguntar não está no local adequado.

    Gostaria de saber onde encontro a informação sobre o pólo do aluno, bem como as trocas de e-mail realizadas entre alunos(se de fato existe isso no moodle), a frequência de acesso no ambiente e o acesso aos materiais disponibilizados em áreas de conteúdo ou biblioteca virtual (caso exista no moodle).

    Desde já agradeço pela colaboração.

    Atenciosamente, Francisco.

    ResponderExcluir
    Respostas
    1. Francisco,
      Segue observação sobre cada item

      1) A troca de mensagem de e-mail não fica registrado no Moodle já que o e-mail é um recurso externo ao ambiente do Moodle. Se o aluno usar mensagem internas, você pode rastrear no banco. Para isso, leia o post: http://moodlesql.blogspot.com.br/2010_10_01_archive.html

      2) Quanto a frequência de acesso, no Moodle não há essa informação delapidada. O que existe é o log de acesso. Esse post vai lhe ajudar a explorar a tabela de log.
      http://moodlesql.blogspot.com.br/2010/11/relatorio-de-acesso-no-moodle-por.html
      Também sugiro a leitura desse post http://gmoodle.blogspot.com.br/2013/02/indicadores-de-monitoramento-de-acesso.html que aborda indicadores de monitoramento do Moodle. Esse monitoramento é feito lendo a tabela de log.

      3) Qualquer dúvida, me dá um feedback.

      Excluir
  47. Muito grato foi de grande ajuda o seu link, obrigado pelo empenho em me ajudar.
    curso sql

    ResponderExcluir
  48. E para matricular o usuário pelo console não tem como ?

    ResponderExcluir
  49. E para matricular o usuário pelo console não tem como ?

    ResponderExcluir
    Respostas
    1. Alou Maicon,
      Não entendi bem a sua questão. Você está referindo cadastrar via linha de comando? Explique a sua necessidade, fica mais fácil de entender.

      Excluir
  50. Badiu,

    Trabalho com o moodle na versão 3.0, e não conseguir efetuar a matrícula de usuários em curso via SQL.
    Lembrando que os usuários já estão cadastrados na base de dados.
    Fiz os seguintes procedimentos:
    Insert nas tabelas: mdl_user_enrolments,mdl_role_assignments

    Porém, não obtive sucesso na matrícula do usuário ao curso.
    Uma outra alternativa que fiz, foi a importação de grupo via arquivo "*.csv".

    ResponderExcluir
    Respostas
    1. Bruno, para processar a inscrição no curso do Moodle com SQL a partir da versão 2, consulte o post na comunidade Badiu no link http://comunidade.badiu.com.br/mod/forum/discuss.php?d=250

      Excluir
  51. Obrigado Badiu...deu certo.
    Você por acaso já tentou realizar inscrição via arquivo *.csv ?

    ResponderExcluir
    Respostas
    1. Marcelo já fiz a inscrição via arquivo *.csv, funciona perfeitamente, você só precisa definir corretamente os campos na primeira linha do arquivo.

      Excluir
  52. Marcelo,
    Ainda não fiz inscrição via CSV. Geralmente uso grupo cohort para facilitar o processo.

    ResponderExcluir
  53. Bom dia!

    O admin foi deletado, por isso, preciso criai um novo admin, como faço? Você tem o manual?
    Falei com você por email, mas você enviou o manual de incrisção de aluno.
    Ariana Morgado: email: morgado.ariana@gmail.com

    ResponderExcluir