Boa tarde. Preciso implementar uma solução que, quando o aluno for se cadastrar, o Moodle verifique na base se há registros daquele CPF. Já foi implementado (pelo programador que trabalhava antes) a verificação se o CPF é válido. O Moodle faz a verificação se o usuário e o e-mail já existem, gostaria de fazer o mesmo para o CPF. Aguardo retorno e agradeço pela antenção
já descobri como faz, se alguém precisar, só perguntar.
Comportilha a informação então aí.
Eu apenas aproveitei um trecho de código do próprio Moodle.
Essa alteração foi feita com o intuito de o aluno não criar mais de um usuário com o mesmo CPF. Essa alteração foi feita no formulário de inscrição do aluno.
No arquivo signup_form.php, adicionei o seguinte código, que peguei da regra de não se ter o mesmo nome de usuário:
if (record_exists('user_info_data', 'data', $data['profile_field_cpf'])) {
$errors['profile_field_cpf'] = 'CPF já consta no sistema';
}
E é isso, simples e funcional. O que acontece é o mesmo de se já existe o usuário, aparece um texto em vermelho avisando que já existe.
[]s,
Heitor
Não seria mais fácil utilizar o CPF como nome de usuário?
Seria mais fácil sim, porém a plataforma é de um cliente da empresa onde trabalho e foi solicitação deles não utilizar CPF como usuário, e, como sabem, cliente tem razão né.
Com certeza, e pagando bem, que mal tem?
Eu só fiz a observação porque quando algum cliente vem com uma demanda mirabolante, eu penso em todas as formas que ela vai dar errado. Nessa caso do cpf, como você disse, é para evitar que o cara faça dois registros, porém, o maldito usuário pode colocar um cpf falso e pronto, está feito o cadastro.
Sim, usuário é complicado. Mas ao se inscrever na plataforma ele faz um contrato com a empresa gerente da plataforma (nosso cliente) no qual o aluno confirma a veracidade dos dados ali descritos, e no caso de utilização de dados fictícios para o registro ela é punida e responde a processo de falcidade ideológica. Esse contrato força o usuário a utilizar seus dados verídicos, mas, como antes não havia um tratamento de excessão como este do CPF, eles utilizavam várias vezes o mesmo, somente mudando o nome de usuário. Agora, para criar mais de um usuário só utilizando CPF falso, mas isso pode acarretar em processo. Lidar com isso é bem complicado.
Ol@,
Acredito que sim: https://github.com/willianmano/moodle-profilefield_cpf + https://servicos.serpro.gov.br/api-gov/consulta-cpf.html
Abraços,
--
Gleidson Medeiros
linkedin.com/in/gleidsonlm
e a alteração no formulario como ficou? em relação a inserção do campo CPF.
Ficou exatamente como antes, um formulário de entrada de dados,pois campo CPF foi adicionado pelo próprio Moodle. O que mudou foi que, quando o aluno digita um número de CPF já existente no banco de dados, exibe uma mensagem semelhante a de "Nome de usuário já existe" em vermelho, só que neste caso ficou "CPF já existe", não exatamente nessas palavras
Olá Heitor,
Você disse que no seu moodle o programador antigo implementou uma forma de verificar se o CPF é válido. Essa verificação é feita no formulário de cadastro de usuário mesmo?
Você poderia compartilhar essa implementação? Se não puder, pode pelo menos dar uma idéia de como o programador aplicou a função de validação no formulário de cadastro?
Obrigado!
OLá Leonardo, desculpe a demora, fazia tempo que não entrava no fórum e não vi a notificação por e-mail de sua postagem.
A verificação é feita sim no formulário de inscrição do aluno, e foi implementada da seguinte maneira:
* No arquivo /lib/weblib.php, foi adicionada a seguinte função:
function valida_cpf($cpf) {
if(!is_numeric($cpf)) {
return false;
}
if( ($cpf == '11111111111') || ($cpf == '22222222222') || ($cpf == '33333333333') || ($cpf == '44444444444') || ($cpf == '55555555555') || ($cpf == '66666666666') || ($cpf == '77777777777') || ($cpf == '88888888888') || ($cpf == '99999999999') || ($cpf == '00000000000') ) {
return false;
}
$dv_informado = substr($cpf, 9,2);
for($i=0; $i<=8; $i++) {
$digito[$i] = substr($cpf, $i,1);
}
$posicao = 10;
$soma = 0;
for($i=0; $i<=8; $i++) {
$soma = $soma + $digito[$i] * $posicao;
$posicao = $posicao - 1;
}
$digito[9] = $soma % 11;
if($digito[9] < 2) {
$digito[9] = 0;
} else {
$digito[9] = 11 - $digito[9];
}
$posicao = 11;
$soma = 0;
for ($i=0; $i<=9; $i++) {
$soma = $soma + $digito[$i] * $posicao;
$posicao = $posicao - 1;
}
$digito[10] = $soma % 11;
if ($digito[10] < 2) {
$digito[10] = 0;
}
else {
$digito[10] = 11 - $digito[10];
}
$dv = $digito[9] * 10 + $digito[10];
if ($dv != $dv_informado) {
return false;
}
return true;
}
*No arquivo /login/signup_form.php, abaixo da função validation($data, $files), ele adicionou o seguinte código:
$cpf = ereg_replace("[^0-9]", "", $data['profile_field_balaocpf']);
$valido = valida_cpf($cpf);
if ($valido != 1) {
$errors['profile_field_balaocpf'] = get_string('cpfinvalido');
}
e é isso, caso o CPF seja inválido, quando se clica em cadastrar usuário, se mantém na página e aparece sobre o campo CPF um contorno vermelho e o texto de O CPF inserido é inválido
Olá, tentei usar esse código, mas é detectado um erro, tem algum lugar específico para colocar o trecho de código na página singup_form.php ?
Não seria mais adequado criar um novo plugin de campo (User Profile Field) com base em um existente?
http://docs.moodle.org/dev/User_profile_fields
Semana que vem posso dar uma olhada, se eu puder ajudar.
Abraços.
Na verdade, a outra forma que tentei foi criando um novo campo direto no código do formulário e mandando pra função de validar. Até aí funcionou, mas não há como editar o perfil pois provavelmente ele não foi armazenado no banco de dados, e se foi, não sei como buscá-lo.
$mform->addElement('text', 'cpf', 'CPF', 'maxlength="14" size="25"');
$mform->setType('cpf', PARAM_NOTAGS); //não sei se o parâmetro é o correto
$mform->addRule('cpf', 'Está faltando o CPF', null, 'server');
e mando pra função:
if (valida_cpf($data['cpf']) != 1) {
$errors['cpf'] = 'CPF inválido';
}
Gostaria de saber como posso guardar a info no banco de dados.
Isso Carlos Delfino, profile fields é a solução, segue a página de como criar um
http://docs.moodle.org/26/en/User_profile_fields
Alterar o código fonte do moodle core nunca é uma boa ideia, para fazer upgrade de versão sempre dá dor de cabeça !
Uma duvida sobre essa validação..
Ela apenas verifica se o CPF ja esta cadastrado em sua base? ou
A validação é se o CPF realmente existe?
Obrigado.
Ola , eu sei que ja faz tempo que foi postado essa informação, em todo caso eu estou iniciando agora com o Moodle e gostaria de saber qual o caminho para acessar esse arquivo: /lib/weblib.php para inserir o código que o Heitor disponibilizou.
grato
Heitor uma outra opção mais adequada é criar um "custon field" e coloca-lo como obrigatório e único.