Informática Numaboa - Tutoriais e Programação
Manutenção automática da tabela de usuários
Dom 7 Set 2008 19:06 |
- Detalhes
- Categoria: Joomla
- Atualização: Segunda, 02 Julho 2012 19:44
- Autor: vovó Vicki
- Acessos: 5239
Você ativou a opção de confirmação de registros e sua tabela de usuários está entupida de registros não confirmados? Você (assim como eu) se irrita com este lixo ocupando espaço no seu banco de dados? A solução que encontrei talvez não seja das mais elegantes, mas funciona. Talvez também seja uma solução para você
A origem da idéia
Estava patinando com A praga dos registros forçados que, além de perturbarem, estavam inchando as tabelas de usuários registrados. Resolvi o problema da praga e acabei constatando que as tabelas de usuários não só inchavam por conta dos candidatos a "spameiros", mas também por conta de usuários que fornecem endereços de email fictícios, que digitam endereços errados (um monte! se liga pessoal!) ou que simplesmente se esquecem de confirmar seus registros. Por que é que eu deveria guardar tais informações?
Se você leu o artigo sobre "A praga dos registros forçados" então você sabe que fiz um hack no componente com_user para me livrar parcialmente deles. Foi daí que parei para pensar: toda vez que houver uma atualização do Joomla vou ter que me lembrar de "hackear" novamente este componente. Bem, se este é o caso, então vou inserir mais um pouco de código no mesmo arquivo para fazer uma manutenção automática nas tabelas de usuários.
Desrespeitando o padrão MVC (Model-View-Controller) do novo Joomla e só para manter meus "hacks" restritos a um só arquivo, resolvi adicionar mais um pouquinho de código para chegar aonde queria - toda vez que um novo usuário se registrar, fazer uma varredura nas tabelas de usuários e eliminar aqueles que, depois de 15 dias, não tiverem confirmado seus registros. Foi mais simples do que imaginei no início.
O hack
No arquivo controller.php, localizado na pasta /components/com_user/, fica a função register_save(). Procure pelo trecho de código, já no finzinho da função
Logo depois do código acima e antes de
coloque este código:
Inicialmente criamos um objeto database com a função getDBO() do JFactory. Em seguida definimos uma query para selecionar da tabela de usuários todos aqueles que estiverem bloqueados (block=1 significa que não confirmaram seu registro) e cuja data de registro tenha ocorrido há mais de 14 dias. Depois disto, aplicamos a query e armazenamos todos os registros obtidos na variável $rows.
Conhecendo os "infratores", basta trabalhar cada um dos registros com um loop foreach. Usamos a ID do "infrator" ($row->id) e o eliminamos da tabela jos_users e da tabela jos_core_acl_aro.
Duas tabelas? É isto mesmo! Todos os usuários registrados possuem dois registros e ambos precisam ser eliminados.
Mais uma coisinha que aprendi com o tempo
Uma pequena atualização em 19.08.09
Depois de quase um ano usando este hack constatei que a técnica de registro usada pelos espertos de plantão evoluíu. Agora estão conseguindo fazer registros que "dão um nó" na exigência de que sejam ativados (uma medida de segurança mínima num site Joomla). Soma-se a isto uma porção de usuários bem intencionados que fizeram seus registros e os confirmaram, mas que não fizeram nem um único login depois de 30 dias. Apesar de parecer meio draconiano, resolvi eliminá-los também e complementei meu hack com:
Valeu, pessoal. Espero que minha experiência sirva para outros "joomleiros".
Abraços da vó Vicki