terça-feira, 15 de maio de 2012

Bloquear Edição do Nome e Sobrenome dos Usuários Cadastrados no Moodle pelo Código PHP


Caso você queira impedir que o nome e o sobrenome dos usuários sejam alterados após o cadastro, é necessário desativar esses campos na configuração do plugin de autenticação ou  fazer um hacker no código do core do Moodle. O caminho mais indicado é usar interface de configuração do Moodle. Aqui demonstraremos como fazer isso via código PHP. 

Para bloquear a edição dos  campos nome e sobrenome no formulário de edição pelo código PHP, siga os seguintes passos:


1° Passo  - Abrir o arquivo editlib.php
    Abra em um editor de texto o seguinte arquivo:
    $CFG->wwwroot /user/editlib.php
$CFG->wwwroot  se refere ao endereço da pasta em que a aplicação do Moodle está instalada.

2° Passo  - Inserir função de bloqueio edição
    Insira o código abaixo em qualquer parte do arquivo editlib.php. Preferencialmente coloque antes da função useredit_shared_definition. Essa função fica geralmente na linha 70 na versão 1.9  e 80 na versão 2.x.

function readonly_form_element(){
   if(has_capability('moodle/user:create',

    get_context_instance(CONTEXT_SYSTEM)))  return ' ';
  else return ' READONLY ';
 }


Essa função retorna o string READONLY apenas para usuários que não têm permissão de cadastrar usuário. O perfil de aluno e tutor não tem essa permissão. Já o perfil Administrador tem. O string READONLY é um código HTML que impede o campo do formulário de ser editado.
 

3° Passo  - Localizar o campo nome e sobrenome do formulário de cadastro/edição
    O código que gera campo de nome e sobrenome no formulário de cadastro/edição do usuário fica dentro da função useredit_shared_definition. Nessa função, localize os seguintes trechos do código:

if (fullname($nameordercheck) == 'b a' ) {  // See MDL-4325
        $mform->addElement('text', 'lastname',  get_string('lastname'),  'maxlength="100" size="30"');


        $mform->addElement('text', 'firstname', get_string('firstname'), 'maxlength="100" size="30"');


    } else {
        $mform->addElement('text', 'firstname', get_string('firstname'), 'maxlength="100" size="30"');

        $mform->addElement('text', 'lastname',  get_string('lastname'),  'maxlength="100" size="30"');
    }



4° Passo  -  Desativar a edição dos campos nome o sobrenome

    No final de cada linha de código que começa com $mform->addElement...  adicione a função readonly_form_element()definida no passo 2. Feito isso, o trecho do código deve ficar assim:
    if (fullname($nameordercheck) == 'b a' ) {  // See MDL-4325
        $mform->addElement('text', 'lastname',  get_string('lastname'),  'maxlength="100" size="30"'.readonly_form_element());

        $mform->addElement('text', 'firstname', get_string('firstname'), 'maxlength="100" size="30"'.readonly_form_element());

    } else {
        $mform->addElement('text', 'firstname', get_string('firstname'), 'maxlength="100" size="30"'.readonly_form_element());

        $mform->addElement('text', 'lastname',  get_string('lastname'),  'maxlength="100" size="30"'.readonly_form_element());
    }


Ao adicionar a função, o HTML gerado terá o código  READONLY para os usuários que não têm permissão de adicionar novos usuários no Moodle tais como aluno e tutor.  Estes não conseguirão editar os campos nome e sobrenome ao modificar o perfil no Moodle.
 

4° Passo  - Gravar alteração do arquivo editlib.php
    Para que a alteração seja efetivada, grave o arquivo. Feito isso, basta acessar o formulário de edição do perfil  com a senha do aluno ou do tutor para verificar se os campos nome e sobrenome estão bloqueados para edição. Confirme também que esses mesmos campos não estão bloqueados para edição ao acessar o Moodle com a senha do  administrador.  


    Esse procedimento é um hacker do código, ou seja, altera o código padrão do Moodle. Em caso de atualização, esse código será perdido. Para manter, é necessário seguir os mesmos procedimentos após a atualização da versão.

28 comentários:

  1. É fácil para o usuário bullar esta configuração. Isso apenas desativa a edição do formulário.

    ResponderExcluir
    Respostas
    1. Isso mesmo Eduardo.
      Esse post http://moodleeduc.blogspot.com.br/2012/06/bloquear-edicao-dos-campos-do-perfil-do.html explica como fazer isso na interface do Moodle sem a necessidade de alterar o código fonte.

      Excluir
    2. Badiu
      Estou com 2 pequenos problemas.

      A 1°:

      Como faço para modificar a regra da senha quando é para cadastrar o usuario que tem q ter ao menos 8 caracteres, ao menos 1 dígito(s), ao menos 1 letra(s) minúscula(s), ao menos 1 letra(s) maiúscula(s), ao menos 1 caracater(es) não alfanumérico.

      Quero que fique a criterio do usuario. por ex: Poder cadastrar so com os digitos!. e ser no minimo 6 caracteres

      A 2 duvida:

      Como tirar a edição de pagina para os usuarios ?
      deixar so para o administrador?

      Excluir
    3. Eliezer,
      bom dia. Tudo bem?

      Segue a resposta de cada questão.

      1) Para mudar a regra de política de senha, siga os seguintes passos:

      a. Acesso o Moodle com a senha de admin
      b. Vá no bloco de administração do site
      c. Navegue em Segurança /Políticas do site
      d. Localize as opções de Política de senha e altere as configurações


      2) Desabilitar edição

      A edição no moodle por padrão não vem habilitado para aluno e tutor sem edição no ambiente do curso. Para habilitar ou desabilitar edição é necessário modificar a as permissões de cada perfil no painel gerenciamento de perfil no seguinte menu:

      Administração do site / ► Usuários / ► Permissões / ► Definir funções

      Excluir
    4. Badiu tudo ótimo!
      Muito obrigado pela ajuda!

      Conseguir resolver o problema da senhas.

      Em relação ao segundo problema não seria exatamente isso. Seria aquele botão de edição de pagina, que quando o usuario clica pode mover os blocos do lado esquerdo, centro, lado direito entende ? eu queria deixar essa opção somente para o administrador. utilizo a versão 2.1.3.

      Só mais uma coisa, utilizo um tema que mostra a foto do usuario em todas as paginas junto com seu username, ao clicar em cima da foto ele mostra o perfil. To querendo que ao clicar apareça a opção de trocar fotos. Localizei a pagina php referente para trocar o link, mas não localizo o link do File Picker
      que fica na area de acresentar usuario onde tem o botão "escolha um aquivo" para ser adicionado a imagem do perfil.

      Excluir
    5. Eliezer,
      Sobre a questão de edição de página, o botão de edição existe na página do curso e no gerenciamento da página principal do Moodle.

      1- Vocês está referindo a qual ambiente de página?

      2- Qual é o perfil do usuário que ao logar, o botão de edição aparece?

      Me passa essas informações para poder lhe orientar melhor.

      Quanto a questão de mudar a foto do perfil, você pretende que ao clicar no link da foto seja exibida a opção de troca de foto e não a página do perfil?
      Na página do perfil, se o usuário clicar e em editar perfil, lá há opção para mudar a foto. Me explica melhor o que você precisa. Em todo caso, se pretende mudar o link da foto de página de perfil para uma outra página que possibilita alterar a foto diretamente, vai precisar customizar o tema.

      Excluir
    6. Badiu,

      O botão de edição que eu falo, é aquele que aparece na "Minha pagina inicial" onde aparece as listas dos cursos. Lá tem o botão "Editar essa pagina", que quando aperto posso mover os blocos ou deletar ou acrescentar novos blocos. Eu queria tirar somente esse botão "Editar esta página" para que os estudantes não remova o bloco sem querer e depois não consigo mais voltar ao padrão. o botão "Edite esta página" é diferente do "Ativar edição". Mas acho que estou resolvendo deixa-lo e criar um tutorial caso aconteça isso.

      Em relação a foto.

      É isso mesmo, quando ao clicar na foto do perfil quero que seja exibida a opção de trocar foto. as mesma que tem Em "Modificar Perfil" que tem um botão que abre o File Picker para alterar a foto.

      Eu não conseguir achar o link desse botão para exibir a opção de trocar foto. o que eu fiz foi redirecionar com uma ancora para a pagina de "Modificar perfil" para mostrar direto a opção de Imagem do Usuário.

      Mas seria melhor se ao clicar na foto aparecesse o File Picker.

      Excluir
    7. Eliezer,

      Para desativar a edição de página para alunos, verifica que se a permissão moodle/site:manageblocks está desabilitado para o perfil do aluno. Se estiver habilitado, desative.

      Se a foto é exibida pelo thema, a alteração do link requer mudar o código fonte o tema.

      Excluir
    8. Badiu,

      Vlw pela ajuda!

      Conseguir resolver.

      Excluir
  2. Olá Badiu, obrigado pela dica, muito útil, mas os perfis do meu moodle tem campos adicionais que foram criados pelo próprio moodle, e por isso eles não aparecem na editlib.php, sabes como posso fazer para deixar esses campos readonly tb ? Obrigado

    ResponderExcluir
  3. Tiagoalam,

    Para bloquear os campos do perfil gerados pelo formulário do Moodle, siga os seguintes passos:

    1) Entre no Moodle com senha de admin

    2) No bloco de administração do site, navegue em:
    Usuários ► Contas ► Campos de perfil do usuário

    3) Clique no ícone de edição do campo que pretende bloquear edição. Feito isso, será aberto o formulário de edição do campo.

    4) Localize a configuração:
    Este campo está trancado?
    e marque a opção sim para essa configuração. Feito isso, o campo fica bloqueado para usuário editar. Porém, o administrador consegue editar.

    ResponderExcluir
    Respostas
    1. Bom dia Badiu... talvez esse tópico não seja o mais apropriado... qualquer coisa, por favor, remova este comentário para um lugar melhor...

      Fui pegar para traduzir algumas strings....para melhorar nossa tradução e traduzir alguns termos que ainda não foram traduzidos no moodle 2.4

      Todavia, ao acessar a Personalização do idioma... me deparei com o seguinte errinho:

      http://prntscr.com/nf7bb

      Mesmo tentando personalizar o en , acontece isso.

      Estou pesquisando bastante para aprender a resolver meus problemas. Uma boa dica para quem quiser aprender sobre tradução:

      https://docs.google.com/presentation/d/1_qfdoacvhvYDDDW_cuVjt23kPZ3uL4wdSkRiAvstldQ/edit?pli=1#slide=id.p

      E então... alguém tem o remédio para esse problema? pois está dando erro no acesso ao bd para personalização do idioma.

      Outro detalhe foi que... fiz um teste... fui na pasta lang e o idioma pt_br não estava lá... então exclui o idioma pt no moodle... tudo ficou em inglês... fui novamente no próprio moodle, e pedi para puxar a tradução do pt_br (pacote) http://prntscr.com/nf857

      Então.. fui na pasta lang no moodle... ai vem a surpresa... lá não tinha nenhuma pasta... Então fui no site oficial, baixei a pasta pt_br, descompactei e mandei para a pasta lang (via FTP).

      Refiz o processo na personalização de idioma... não deu em nada.

      Refiz o processo de exclusão do pacote de idioma pt_br ... Aew sim, deletou a pata pt_br do diretório lang.

      Alguém aqui conhece o caminho para resolver este impasse? Estou querendo traduzir algumas strings, mas esse problema me atrapalha.

      Detalhe... em um moodle teste, consegui com sucesso acessar a personalização do idioma. Observe: http://prntscr.com/nf8gw

      Ah, meu moodle é o 2.4

      Abçs

      Excluir
    2. Italo,
      A hipótese mais provável desse tipo de falha deve ser falta de permissão de escrita na pasta lang. Veja se o apache está com permissão de escrita na pasta lang do Moodle. Compare a permissão na instalação do Moodle que deu certo com a que não deu certo.

      Excluir
  4. Consegui resolver... Compartilho aqui a solução:

    Então... o erro era esse:

    http://prntscr.com/nf7bb

    Eu puxei as tabelas

    mdl_tool_customlang

    mdl_tool_customlang_components

    de um moodle sadio, e mandei para o moodle doente. Tentei resolver via transplante de tabelas.

    Só que não deu certo.

    Desfiz o transplante, e voltei os arquivos de origem.

    Li com calma o debug... Vi que tinha um erro no plugin que instalei: type question music

    São estes:

    https://moodle.org/plugins/search.php?s=music

    Eu iria utilizá-los para formular questões musicais.. massss...

    Desabilitei e exclui os plugins acima...

    E o processo da personalização do idioma prosseguiu.

    ResponderExcluir
  5. olá prof.º boa tarde,
    ja faz tempo que estou tentando alterar no nome "Sobrenome" para "série / disciplina" no formalario de castrato e não sei se esta na tradução ou no codigo php, gostaria de sua ajuda se possivel para tira essa duvida, desde ja agradeço sua atenção.

    ResponderExcluir
  6. Edno,
    Os textos do sistema Moodle podem ser alterados no pacote idioma. Para isso, siga os seguintes passos:

    a) Acesse o Moodle com a senha de admin

    b) No bloco de administração do site, navegue em: Idioma/Personalização de idioma

    c) Escolha pacote de idioma

    d) Localize o string e faça alteração

    ResponderExcluir
    Respostas
    1. Ola prof.º boa tarde diante da sua dica encontrei no moodle 1.9.16 a seguintes opções na administrações do site;
      busquei nos arquivos.php da tradução, e não encontrei, será que tem um arquivo especifico que não encontrei na busca? desde já agradeço sua ajuda, pois estamos usando o moodle em uma escola pública do ceara para defesa do tempo pedagógico.

      passo encontrado no moodle
      Idioma
      Edição de idiomas
      Editar as expressões
      pt_br_utf8_local/(arquivo.php)

      Excluir
    2. isso no formulario de cadastro, grato por sua atenção

      Excluir
    3. Edno,
      Se você for editar o arquivo php de idioma, tente localizar na pasta MOODLEDATA. Os textos relativos ao core do sistema como formulário de cadastro do usuário geralmente ficam no arquivo moodle.php no pacote de idiomas.

      Excluir
    4. Excelente, professor valeu a dica ajudou por demais, verifique a permissão para edição do arquivo estava protegido, por isso não estava dando certo, estou muito grato por sua ajuda, e pode contar comigo...

      Excluir
    5. Uma dúvida... que estou lutando para dirimir já faz 1 semana... Como eu faço para bloquear ou desabilitar o "exportar" "questões do arquivo no Banco de Questões? Situação prática... na instituição, o professor tem acesso a um banco de questões e pediram para que esse banco ficasse disponível apenas para uso no curso (não pode ocorrer download das questões em um arquivo).. Como fazer isso? Fui no papel dos perfils.. não encontro esta função para desabilitar... já desabilitei download do curso (que pode puxar as questões), mas desabilitar a função Exportar lá no Banco de Questões, não encontro .. uso o moodle 2.6... Muito obrigado Grande Badiu..

      Excluir
    6. Italo,
      Para desabilitar o processo de exportação de questões sugiro você seguir os seguintes procedimentos:

      1) Desabilitar permissão

      a) Identifique o arquivo php que é executado quando o usuário clicar no link exportar;

      b) Acesse o servidor e abra esse arquivo;

      c) Localize no arquivo ou nos arquivos php importados nele a palavra chave capability ou require_capability ou has_capability;

      d) Ao localizar, veja qual é a chave de permissão que possibilita realizar essa operação;

      e) Ao localizar a chave de permissão, acesse o sistema de permissão e localize por essa chave para desativar.


      2) Hacker no código

      Se a alternativa 1) não der certo, vamos para solução cirúrgica. Confesso que adoro essa parte. Para isso siga os seguintes passos:

      a) Identifique o arquivo php que é executado quando o usuário clicar no link exportar.

      b) Acesse o servidor e abra esse arquivo;

      c) Localize a função que gera o link e desative ou bloqueie a execução se o perfil for do professor.

      Excluir
  7. Olá Badiu... muito obrigado! grande abraço! =)

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

    ResponderExcluir
  9. Boa tarde,

    Podem me ajudar? Estou querendo proibir alteração dos campos nome, sobrenome e email somente pra um perfil, o estudante, por exemplo. Mexendo na autenticação, ele proibe pra todos os perfis. Como posso fazer pra proibir somente pra um perfil?

    ResponderExcluir
    Respostas
    1. Thayana,
      Para desabilitar permissão de editar o perfil para um único usuário, é um procedimento que nunca testei. Sugiro você efetuar o seguinte teste. Se der certo nos avise.

      1) Crie um perfil específico, ou seja, um role

      2) Desative a permissão de editar perfil desse role

      3) Vincule o usuário que não deve editar o perfil nesse role

      4) Esse role deve sobrescrever o role usuário autenticado que controla a permissão de edição de perfil http://moodleeduc.blogspot.com.br/2011/03/impedir-os-alunos-e-tutores-de-editar-o.html. Esse é o ponto central da pesquisa.

      Excluir
  10. Como eu posso configurar o moodle para que no cadastro o nome e sobrenome tenha todas as letras convertidas para maiúsculas?

    ResponderExcluir
    Respostas
    1. Gleison,
      Há duas alternativas para modificar a funcionalidade do Moodle. Veja isso nesse link:
      http://comunidade.badiu.com.br/mod/forum/discuss.php?d=216
      Se for fazer hacker no código, mapeie o ponto do código do Moodle que captura os parâmetros e faça modificação. Se for usar proxy de código, copie só a função que faça isso em um outro arquivo. Desvie o URL com o thema.

      Excluir