quarta-feira, 9 de fevereiro de 2011

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.

3 comentários:

  1. Entao no meu caso como na instalacao eu ja determino que nao e local host e sim coloco o id do bd nesse caso deveria funcionar com o mesmo id do bd. Certo?

    ResponderExcluir
  2. Amei encontrar este blog. Obrigada! Estou tendo dificuldade em criar no excel, a função createpassord para que o moodle crie a senha e envie mensagem para o aluno com os dados do login tal como ocorre quando insiro um a um os alunos dentro do moodle... Podes me ajudar? Agradeço desde já e de coração!

    ResponderExcluir
    Respostas
    1. Alou tudo bem?
      É uma satisfação saber que gostou do blog.

      Você está tentado dar carga no Moodle pelo arquivo csv?
      Se for, estude essa documentação:

      https://docs.moodle.org/22/en/Upload_users#Valid_upload_file_for_testing

      Depois dá o feedback do resultado.

      Excluir