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