segunda-feira, 26 de julho de 2010

Cadastrar Usuário no Moodle pelo Comando SQL

Para cadastrar usuário no Moodle com comando SQL é necessário evitar duplicação de registro no campos email,username. Esses campos devem ter valor único para cada usuário inserido.
A outra recomendação é certificar que os campos confirmed e mnethostid estejam recebendo valar 1. Se tiver valor 0 ou NULL o usuário não consegue logar.
A tabela mdl_user do Moodle tem vários campos. Os mais importantes para cadastrar um usuário são: firstname,lastname,email,username,password,confirmed como mostra o código SQL abaixo.
INSERT INTO mdl_user (firstname,lastname,email,username,password,confirmed,description, mnethostid) VALUES ('Joao','Silva','jsilva@gmail.com','joao',MD5('silva'),1,'Cabra Bom',1);
Execute esse comando no banco de dados e faça um teste. Para verificar se funcionou tudo certinho logue no Moodle:
Login: joao
Senha: silva
Se funcionar é porque deu tudo certo.
Observação:
O campo mnethostid só existe a partir da versão 1.8. Na versão inferior a 1.8 retire esse campo para evitar erro.Caso queira saber para que serve esse campo, esse o  seguinte link: http://moodlesql.blogspot.com/2011/02/campo-mnethostid-da-tabela-mdluser-do.html

40 comentários:

  1. Não sabes a satisfação que tive ao encontrar este Blog. Já está nos favoritos!

    ResponderExcluir
  2. Olá,

    Você sabe me dizer o pq do campo "mnethostid" ter q ser 1?

    ResponderExcluir
  3. Oi Marcela, tudo beleza. Após alguns dias de pesquisa desvendei para que ser o campo mnethostid. Consulte o resultado da pesquisa nesse link: http://moodlesql.blogspot.com/2011/02/campo-mnethostid-da-tabela-mdluser-do.html

    ResponderExcluir
  4. Excelente blog, pioneiro aqui no Brasil. Parabéns!

    ResponderExcluir
  5. Testei no moodle 2.0 e funcionou, porém o sr. Joao ao acessar seu perfil no campo Primeiro acesso: aparece "nunca". ou seja é como se ele nunca tivesse feito o primeiro acesso. isso é bad. alguem sabe como resolver?

    ResponderExcluir
  6. Realmente quando o cadastro do usuário é feito pelo comando SQL a data do primeiro acesso não é registrada. Estou pesquisando porquê isso acontece. Notei que quando faz edição do perfil do usuário esse problema desaparece. Há uma forma alternativa de resolver isso, através de um script PHP que faz a leitura da tabela de log e preenche a data do primeiro acesso. Estou preparando um post sobre isso.

    ResponderExcluir
  7. Parabéns pelo blog, parceiro! É de BSB tbm?! Vamos estreitar os laços. Temos uma consultoria em EaD e demais serviços Web. Conheça: www.facebook.com/consultoria7 E, mais uma vez, parabéns!!! ")

    ResponderExcluir
  8. Eldon,
    Sou sim de BSB. Gostaria de conhecer o vosso trabalho.

    ResponderExcluir
  9. Olá,
    Fiz a importação de usuários de um moodle 1.9, para a versão 2.0, porém as pessoas que tinham permissão de professor e turor no antigo ambiente, continuam tendo nesse novo e eu não encontrei como desvincular isso.
    O que eu preciso saber é:
    Como retirar essa permissão herdada?
    Quais tabelas guardam essas permissão, como apagar?

    Aguardo retorno e dese já agradeço!
    Abraço!

    ResponderExcluir
  10. Marcela,
    As permissões ficam na tabela mdl_capabilities. O que define se o usuário é aluno ou professor é o perfil. Isso é registrado na tabela mdl_role. Por padrão, o código do perfil do professor é 3. A do aluno é 5. O perfil é vinculado ao curso na tabela mdl_role_assignments, mais especificamente no campo roleid. Para entender melhor, dê uma olhada no link: http://moodlesql.blogspot.com/2010/07/matricular-usuario-no-curso-do-moodle.html

    ResponderExcluir
  11. Ola, preciso integrar o moodle em meu site, alguém poderia me ajudar?

    Meu e-mail é scorevirtual@scorevirtual.com.br

    No aguardo.

    Abraço!

    ResponderExcluir
  12. Define o tipo de integração que você precisa fazer. Se no seu site há uma base de dados de usuário, você pode fazer com que os alunos acessem o Moodle usando o login e senha cadastrado na base do seu site. Se o seu site for desenvolvido em Joomla, já existe um plugin que faz a integração com Moodle. Detalhe um pouco mais o que você precisa fazer.

    ResponderExcluir
  13. Show de bola! Só não consegui implementar. Podes me ajudar onde colocaria o SQL de inclusão do aluno no curso, eu estou usando teu user_add.php que inclui o aluno, mas ele não permite inscrição em nenhum curso. Como poderia cadastrar o aluno e já cadastrar em seu sendo que no primeiro acesso já seja direcionado ao seu curso? E quando um aluno tem mais de um curso como inscrevê-lo em vários? Obrigado desde já professor.

    ResponderExcluir
  14. Badiu se consegue me dizer onde eu posso achar um plugin ou então como faço para um usuário logar via facebook em meu moodle e assim que ele logar pelo faceook dele, automaticamente pegar os dados do facebook e gerar um cadastro no moodle associando com a conta dele no facebook para que ele possa se logar diretamente pelo facebook ou pelo usuário e senha do moodle gerados automaticamente que serÕ enviados por e-mail.

    ResponderExcluir
    Respostas
    1. É possível sim integrar o facebook com o Moodle. O sistema de facebook disponibiliza API de desenvolvimento: http://developers.facebook.com

      O nível de integração que você precisa requer que o facebook seja o sistema mestre e o Moodle escrevo, ou seja, o facebook que irá enviar os dados para o Moodle. Como ainda não estudei o API do facebook, não sei que se o API possibilita isso. Vou pesquisar para ver.

      Excluir
  15. Badiu, muito bom seu Blog! Tanto o SQL quanto o PHP. Estava doido procurando estas informações para fazer integração do Moodle com sistemas externos. Ótimo trabalho o seu... Valeu!

    ResponderExcluir
    Respostas
    1. Souza,
      Que bom que o blog está sendo útil para você. Você está integrando o Moodle com qual sistema?

      Excluir
    2. Olá Badiu! Desculpe a demora. Trata-se de um sistema próprio de uma instituição chamado VIDA. Ele tem uma estrutura parecida com a do Moodle: usuários, cursos e inserir usuário nos cursos (matrícula). Eu segui o post anterior que me levou a este, o de Integração, mas acho que há diferença nos procedimentos entre o Moodle 1.9+ para o 2+, pois não roda na hora de inserir o usuário no curso. Vc por acaso sabe como fazer este procedimento com o Moodle 2+?
      De qualquer forma agradeço!

      Excluir
    3. Souza,
      Na versão 2.x do Moodle, a estrutura das tabelas de matrícula mudou. Essa mudança está documentada em um comentário. Clique aqui para ler.

      Excluir
  16. Badiu, muito boa tarde!
    Estou tendo um probleminha e queria saber se você por acaso tem alguma dica que possa me ajudar.

    Faço integração via SQL e gostaria de que no formulário do perfil do aluno, os campos SENHA e USERNAME fossem bloqueados para edição. Para que o aluno não consiga editar sua própria senha ou nome de usuário.

    ResponderExcluir
  17. Júlio,

    No Moodle você pode desabilitar a permissão do aluno para alterar a senha e o perfil. Na edição do perfil, geralmente o campo username não aparece para o aluno, mas sim para usuário admin. Sendo assim, se você desabilitar o aluno para não mudar a senha, o problema estará resolvido. Para isso, siga as instruções nesse post: http://moodleeduc.blogspot.com.br/2011/03/impedir-os-alunos-e-tutores-de-editar-o.html

    Caso queira uma solução radical, altere o código do Moodle. Siga a mesma metodologia apontando nesse post para os campos que queira bloquear: http://moodlephp.blogspot.com.br/2012/05/bloquear-edicao-do-nome-e-sobrenome-dos.html

    ResponderExcluir
  18. Badiu,

    Parabéns o conteúdo do site é indispensável a um admin do Moodle. Show!!

    Eu estou precisando integrar o Moodle a um outro sistema de gerenciamento escolar. Para que os alunos que forem cadastrados no Moodle sejam automaticamente cadastrados no outro sistema.
    Estou pensando que a melhor solução seria criar um novo formulário em PHP, com todos os campos que preciso e fazer INSERT pros 2 bancos. Esta solução é a melhor, o que vc sugeria?

    *Um problema que vejo, são campos do outro software que não existem nativamente no moodle.

    ResponderExcluir
    Respostas
    1. Edilton,
      Para integrar duas ou mais bases de usuário, sugiro você adotar os seguintes procedimento:

      1- Ter uma chave de sincronização. CPF é uma chave ideal.

      2- Ter uma base mestre. Base em que receberá entrada/alteração de dados. Essa base deve ser replicada para base escrava. Em caso de integração do Moodle com um sistema acadêmico, o sistema acadêmico é um candidato potencial para ser a base mestre.

      3- O processo de entrada de dados pode ser feita em um aplicação PHP ou qualquer outra linguagem. Pode até ser um plugin para Moodle.

      4- Para os campos de perfil do usuário que não tem um campo correspondente na base do Moodle, uma boa alternativa é criar campo do perfil do Moodle.

      Excluir
    2. 1 - Irei usar mesmo um validador de CPF que inclusive já é usado no outro sistema... é o primeiro campo a ser preenchido.

      2 - Então vc sugere que o cadastro seja feito no Sistema gestor e duplicado para o moodle, é isso? Não seria interessante um formulário a parte, já que deixarei aberto a cadastro automático e o sistema da escola não permite isso?

      3 - Qual o plugin me recomendaria?

      4 - Se eu criar o formulário e direcionar para a tabela do moodle, ainda assim preciso criar os campos pelo editor do moodle, ou ele consome os dados da tabela automaticamente?

      MUITO OBRIGADO PELA ATENÇÃO!

      OBS.: Estarei no moodlemoot, inclusive me interesso no seu GMoodle.. me parece excelente. :) vou testar poraqui!

      Excluir
    3. Adeilton,

      1- Formulário de cadastro
      O formulário de cadastro pode ser implementado em qualquer lugar. No Moodle, dentro dos sistema acadêmico ou mesmo a parte. Isso não interfere. O fato é que o script do formulário deve ter acesso as duas bases. A lógica do formulário pode implementar autocadastro independente de onde for implementado. O sistema de gestão acadêmico certamente requer que os cadastros sejam homologados. Neste caso, o autocadastro deve ter uma etapa de homologação entes de entrar no Moodle e no sistema acadêmico. Isso é uma questão de definição de requisitos. Se não estiver familiarizado com API do Moodle, sugiro usar um formulário a parte.

      2- Plugin de Cadastro
      Não conheço um plugin de cadastro do Moodle que integra uma base de gestão acadêmica que atenda a sua necessidade. Certamente vai precisar codificar esse formulário seja dentro ou fora do Moodle. Se adotar o Moodle para codificar, use o plugin do tipo local.

      3- Campos do Perfil no Moodle
      Os campos do perfil no Moodle podem ser criados na interface do Moodle. Após isso, mapeie esses campos na base de dados na tabela mdl_user_info_field. Os dados devem ser inseridos na tabela mdl_user_info_data. Tudo isso deve ser feita pela manipulação direta do SQL dentro do script PHP ou qualquer outra linguagem de programação.

      Excluir
  19. Oi Badiu, tudo bem???
    Tenho uma dúvida: se eu utilizar o Mdl_user, para localizar alunos que forem excluídos de um curso, e após isso trocar a variável da coluna "deleted" de 1 para 0, retorna o usuário ao curso e suas notas e atividades produzidas tb???

    ResponderExcluir
    Respostas
    1. Se você rematricular o aluno no curso, ele retorna o curso do ponto onde havia parado. A exclusão da matricula não exclui o histórico do aluno. Isso porque as atividades do aluno são vinculados ao cadastro do usuário e não ao cadastro da matrícula.

      Excluir
  20. Oi Badiu, tudo bem??
    Tô quebrando minha cabeça com a nova senha do 2.5, tô precisando gerar a senha para joga-la na query, mas não tô conseguindo de jeito nenhum. Tem alguma dica que possa me ajudar?
    Abração

    ResponderExcluir
    Respostas
    1. Evandro,
      Eu também estou tendo problema com a senha no 2.5.
      Quando faço um INSERT da senha com MD5 consigo logar no Moodle com a senha criada. Porém, para consultar se a senha existe com SQL não funciona. Estou com uma linha de pesquisa aberta sobre isso. Se alguém souber o segredo, compartilhe.

      Excluir
  21. Mudei o Moodle de servidor Local Web para outro porém os usuários não conseguem logar mais observei as tabelas mdl_user os campos confirmed e mnethostid estão recebendo valor 1 e nada de logar

    ResponderExcluir
    Respostas
    1. Donizete,
      Uma das hipóteses de falha de login após a migração do servidor é que as senhas tenham sido corrompidas durante o processo de de backup e restauração.

      Para verificar isso, tente criar um usuário com comando SQL. Após isso, tente logar com a senha desse usuário. Se funcionar, reforça a hipótese. Neste caso, sugiro as seguintes alternativas:

      1) Refazer o backup. Tentar fazer backup e restauração do banco pela linha de comando e não pela interface gráfica.

      2) Alterar a senha de todos os usuários e forçar a mudança de senha no próximo login

      Observação:
      Se estiver usando versão mais recente do Moodle, veja se não houve alteração na configuração do password salting (hash da senha)

      Excluir
  22. Este comentário foi removido pelo autor.

    ResponderExcluir
  23. Olá!
    Esse tuto se aplica a versão 2.6+?

    ResponderExcluir
    Respostas
    1. Marcelo,
      A tabela mdl_user é que armazena os dados do usuário. Essa tabela praticamente não sofreu alterações na sua estrutura desde a versão 1.6. Claro que a cada nova versão uma nova coluna é adicionada. O layout da tabela não sofreu mudanças significativas que gera incompatibilidade de uma versão para outra como é o caso das tabelas da matrícula.

      Excluir
    2. Muito obrigado por essa. Tenho outra dúvida, onde trabalho, temos uma loja com Magento e a plataforma de aulas com o Moodle, como seria possível eu integrar o cadastro do magento para ser o acesso no moodle.

      Seria até bom, se fosse feito um tutorial, pois eu vi muitas perguntas assim, sem respostas.

      Desde já fico grato pela a atenção.

      Excluir
    3. Marcello,
      Ainda não desenvolvi um projeto de integração entre o Moodle e o Majento. No entanto vou deixar aqui a dica para quem for desenvolver

      1- Sincronização de usuários
      Isso pode ser feito por meio do plugin de autenticação do Moodle. Trata-se do plugin que faz cadastro e login de usuário. Há dois caminhos que podem ser seguidos:

      a) Usar plugin padrão do Moodle que faz autenticação na base de dados externo. Neste caso será necessário criar um view no banco de dados do Majento para o plugin fazer leitura de dados.

      b) Criar um novo plugin de autenticação;

      2) Sincronizar inscrição
      Isso pode ser feito por meio de um plugin de inscrição. Esse plugin deve fazer leitura da base do Majento para verificar se a transação já está concluída para liberar a inscrição no curso. A implementação desse plugin requer uma chave única de sincronização para cada usuário e curso entre os dois sistema.

      Excluir
  24. Há alguma forma de fazer o reset da senha do admin via SQL? Não tenho acesso ao myphpadmin...e estou a versão do ubuntu 10.

    ResponderExcluir
    Respostas
    1. Pintojo,

      Você pode modificara senha pelo comando SQL em algum terminal cliente do servidor do banco. Se você não tiver acesso ao terminal web phpmyadmin, tente acessar o termina sql diretamente no servidor ubuntu.
      Acessando o terminal sql, no banco do moodle, execute o comando especificado nesse link:
      http://moodlesql.blogspot.com.br/2010/08/recuperar-senha-do-administrador-do.html

      Excluir
  25. Baidu...
    Tenho o Moodle vinculado a login via LDAP que fiz com um plugin..
    Queria ver se é possivel com algum script importar os usuarios do AD sem que eles precisem fazer os primeiros acessos ?

    ResponderExcluir