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.