terça-feira, 11 de novembro de 2014

Tutorial inserindo CPF no cadastro de usuários do Joomla!

Neste tutorial iremos aprender a inserir um campo do tipo CPF no cadastro de usuários do Joomla, sem alterar o código-fonte “kacking”  do componente com_users e usando regras para validação dos dados digitados.
A ação pode ser considerada simples, mas não se deixe enganar, é potencialmente perigosa se você não sabe exatamente o que está ocorrendo durante o processo.

Plugin Usuário - Perfil
O primeiro passo será habilitar o plugin Usuário – Perfil, que é nativo e vem desabilitado por padrão.  Navegue pelo menu superior Extensões -> Gerenciador de Plugins, busque o plugin Usuário -perfil usando o filtro, é um plugin do tipo “user”  e habilite-o.
Cadastro de usuário via front-end
No front-end do site clique na opção de criar uma conta e observe os vários campos que surgiram. No próprio plugin, na aba “Opções Básicas”, podemos escolher quais os campos serão ou não mostrados. No exemplo, deixarei apenas Endereço 1, cidade e CEP. Observe a imagem abaixo. Após configurar o seu plugin Usuário – Perfil, algo parecido deve ser visualizado.
Cadastro modificado
Vamos preencher o cadastro e efetuar o registro de um usuário fictício, o user 1.
Cadastro do user 1 efetuado com sucesso
CRUD efetuado no Registro
Quando efetuamos o cadastro de um usuário em nosso site, algumas ações de CRUD são praticadas contra o banco de dados.Nessa operação,  interagimos com a tabela #__users que será responsável por armazenar no banco de dados, todas as informações do registro.
Com a habilitação do plugin Usuário – Perfil, passamos a utilizar também,  a tabela #__users_profiles que será responsável por armazenar as informações digitadas no formulário do plugin. Através de um relacionamento entre tabelas, a integridade estará garantida e temos certeza que as informações digitadas no form do plugin, pertencem ao mesmo usuário do form de cadastro padrão do Joomla.
Na imagem abaixo temos as tabelas #__users e #__user_profiles que são afetadas no processo.  A tabela #__user_notes é utilizada quando criamos notas para os usuários e não está no escopo deste tutorial.
Tabelas afetadas
Estrutura das Tabelas
Observe a estrutura da tabela #__user_profiles e perceba que o campo user_id armazena o valor do campo id, chave primária (PK),  da tabela #__users.  O campo user_id da tabela #__user_profiles,  é uma chave estrangeira (FK),  responsável pelo relacionamento entre as tabelas.
Estrutura tabela #__user_profiles

Alterando o manifesto xml do plugin
Vamos trabalhar com a inserção do campo CPF antes do campo Endereço 1 do plugin Usuário – Perfil. Logo, iremos customizar o manifesto xml do plugin, que está localizado em seusite/plug-ins/user/profile/profiles/profile.xml
Manifesto.xml

Abra o arquivo na sua IDE preferida e antes do campo address1 insira o campo CPF de acordo com a imagem abaixo.
Inserindo o cpf no manifesto xml
Perceba as características do campo que foi inserido no manifesto xml do plugin Usuário – Perfil.
Campos no XML x Campos na Tabela
A inserção dos campos criados no manifesto xml, na tabela #__user_profiles, é automático facilitando muito a utilização do recurso por usuários leigos. Uma vez criado o novo campo no arquivo xml, o seu identificador único (id) será a (key) do campo profile_key da tabela. Ex: o campo id=cpf do manifesto xml será identificado na tabela #__user_profiles,  por profile.cpf.
Ainda que em um primeiro momento possa parecer um risco à segurança, permitir que o usuário crie qualquer campo no formulário de registro, vale lembrar que o próprio Joomla! possui várias regras de segurança para impedir ataques, por exemplo do tipo SQL INJECTION, muito utilizados em formulários.
Após inserirmos o campo no manifesto xml, devemos voltar ao front-end para cadastrarmos um novo usuário.
Campo cpf sem tradução


Override de Idiomas para as constantes criadas
Perceba que o campo está disponibilizado no formulário, entretanto, falta traduzir a constante e sua descrição. Faremos isso através de “overrides” ou sobreposição de idiomas.
Navegue pelo menu superior Extensões -> Gerenciador de Idiomas -> Sobreposições. No filtro, escolha Português (Brasil) Site e clique no botão novo. Em constante do idioma cole a constante utilizada no description do manifesto xml. Em texto, digite o seu significado. Faça o mesmo processo para o campo label e clique no botão Salvar e Fechar. Este processo deve ser repetido para todas as inserções efetuadas no plugin.
Na imagem abaixo temos a constante traduzida através de override de idioma.
Constante CPF traduzida

Validação e Autenticação de dados digitados
A validação dos dados digitados no novo campo será garantida por regras existentes ou ainda por novas regras inseridas em diretório específico do site. Em nosso exemplo, usaremos uma regra de validação e Autenticação de CPF criada pelo joomleiro Bruno Batista e disponibilizada sob licença GNU/GPL, em https://github.com/joomlapro/joomla-rules/blob/master/cpf.php
O destaque da regra fica por conta da Autenticação do CPF, ou seja, você precisa digitar um CPF verdadeiro para que o cadastro prossiga.

Utilização da regra de Validação e Autenticação de CPF
1)      Copie (ctrl+c) todo o conteúdo do arquivo cpf.php;
2) Abra sua IDE preferida e altere o manifesto xml do plugin Usuário – Perfil, de acordo com o abaixo demonstrado. As alterações estão em vermelho:
<field
name="cpf"
type="text"
class="inputbox cpf"
id="cpf"
validate="cpf"
description="PLG_USER_PROFILE_FIELD_CPF_DESC"
label="PLG_USER_PROFILE_FIELD_CPF_LABEL"
size="14"
maxlength="14"
/>

3)      crie um novo arquivo em branco;
4)      Cole (ctrl+v),  todo o conteúdo copiado anteriormente; e
5)      Salve com o nome de cpf.php em libraries/joomla/form/rules








Regra para validação e autenticação de CPF

Teste de Cadastro com Validação e Autenticação do CPF digitado
No front-end do site tente cadastrar um novo usuário, sem inserir um CPF válido. Experimente utilizar um CPF qualquer, caracteres do tipo “strings” e tudo o mais o que sua imaginação permitir para observar a regra em ação. Para obter êxito no cadastro, o CPF deve existir e ser digitado no formato: 3nr.3nr.3nr-2nr.  Ex:111.111.111-11
Editando o CPF no back-end do site
O último passo é visualizar se o CPF do usuário está disponível no back-end do seu site Joomla.
Acesse o back-end e navegue pelo menu superior Usuários -> Gerenciador de Usuários -> Editar Usuário. Lembre-se de fazer override para a constante do CPF, observando que o escopo agora é administração e não site.
Campo CPF no perfil do usuário

Campo CPF após override de idioma

Nenhum comentário:

Postar um comentário