[594] | 1 | <?php
|
---|
| 2 | /********************************************************************************************\
|
---|
| 3 | * Expresso Administração *
|
---|
| 4 | * by Diógenes Ribiro Duarte (diogenes.duarte@gmail.com, diogenes.duarte@prodeb.ba.gov.br) *
|
---|
| 5 | * ------------------------------------------------------------------------------------------*
|
---|
| 6 | * This program is free software; you can redistribute it and/or modify it under the terms *
|
---|
| 7 | * of the GNU General Public License as published by the Free Software Foundation; *
|
---|
| 8 | * either version 2 of the License, or (at your option) any later version. *
|
---|
| 9 | \********************************************************************************************/
|
---|
| 10 |
|
---|
| 11 | class login_algorithm_example implements login{
|
---|
| 12 | var $xml_nomes;
|
---|
| 13 | /*var $nomes_comuns;
|
---|
| 14 | var $preposicoes;
|
---|
| 15 | var $sobrenomes_especiais;*/
|
---|
| 16 |
|
---|
| 17 | function login_algorithm_example() {
|
---|
| 18 | $this->xml_nomes = new DOMDocument();
|
---|
| 19 | $this->xml_nomes->load("inc/names.xml");// Carrega o xml antes de iniciar os nomes.
|
---|
| 20 | }
|
---|
| 21 |
|
---|
| 22 | function generate_login($primeiro_nome,$segundo_nome,$conexao_ldap) {
|
---|
| 23 |
|
---|
| 24 | $primeiro_nome_exp = explode("#",$this->formata_frase(strtolower($primeiro_nome)));
|
---|
| 25 | $segundo_nome_exp = explode("#",$this->formata_frase(strtolower($segundo_nome)));
|
---|
| 26 |
|
---|
| 27 | $login = "";
|
---|
| 28 |
|
---|
| 29 | //Tratar primeiro nome...
|
---|
| 30 | $login.=$primeiro_nome_exp[0]; //A primeira parte do primeiro nome é sempre inserida
|
---|
| 31 |
|
---|
| 32 | if(count($primeiro_nome_exp)>1) { //Se houver mais partes...
|
---|
| 33 | if ( ($this->is_nome_comum($primeiro_nome_exp[0]))
|
---|
| 34 | && (!$this->is_preposicao($primeiro_nome_exp[1]))) { //Se a primeira parte do nome for comum e a segunda NÃO for uma preposição...
|
---|
| 35 | $login.=$primeiro_nome_exp[1];
|
---|
| 36 | }
|
---|
| 37 | }
|
---|
| 38 |
|
---|
| 39 | //"." separa o primeiro do segundo nome
|
---|
| 40 | $login.=".";
|
---|
| 41 |
|
---|
| 42 | //Tratar segundo nome...
|
---|
| 43 | if( (!$this->is_sobrenome_especial($segundo_nome_exp[count($segundo_nome_exp)-1]))
|
---|
| 44 | || (count($segundo_nome_exp)==1) )
|
---|
| 45 | $login.=$segundo_nome_exp[count($segundo_nome_exp)-1];
|
---|
| 46 | else {
|
---|
| 47 | $login.=$segundo_nome_exp[count($segundo_nome_exp)-2].
|
---|
| 48 | $segundo_nome_exp[count($segundo_nome_exp)-1];
|
---|
| 49 | }
|
---|
| 50 | return $login;
|
---|
| 51 | }
|
---|
| 52 |
|
---|
| 53 | private function is_nome_comum($nome) {
|
---|
| 54 | $nomes = $this->xml_nomes->getElementsByTagName("nomes");
|
---|
| 55 | foreach($nomes as $node) {
|
---|
| 56 | if($node->getAttribute("tipo") == "nome") {
|
---|
| 57 | foreach($node->getElementsByTagName("nome") as $subnode) {
|
---|
| 58 | if($subnode->nodeValue == $nome)
|
---|
| 59 | return true;
|
---|
| 60 | }
|
---|
| 61 | }
|
---|
| 62 | }
|
---|
| 63 | return false;
|
---|
| 64 | }
|
---|
| 65 |
|
---|
| 66 | private function is_preposicao($preposicao) {
|
---|
| 67 | $nomes = $this->xml_nomes->getElementsByTagName("nomes");
|
---|
| 68 | foreach($nomes as $node) {
|
---|
| 69 | if($node->getAttribute("tipo") == "preposicao") {
|
---|
| 70 | foreach($node->getElementsByTagName("nome") as $subnode) {
|
---|
| 71 | if($subnode->nodeValue == $preposicao)
|
---|
| 72 | return true;
|
---|
| 73 | }
|
---|
| 74 | }
|
---|
| 75 | }
|
---|
| 76 | return false;
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | private function is_sobrenome_especial($sobrenome) {
|
---|
| 80 | $nomes = $this->xml_nomes->getElementsByTagName("nomes");
|
---|
| 81 | foreach($nomes as $node) {
|
---|
| 82 | if($node->getAttribute("tipo") == "sobrenome") {
|
---|
| 83 | foreach($node->getElementsByTagName("nome") as $subnode) {
|
---|
| 84 | if($subnode->nodeValue == $sobrenome)
|
---|
| 85 | return true;
|
---|
| 86 | }
|
---|
| 87 | }
|
---|
| 88 | }
|
---|
| 89 | return false;
|
---|
| 90 | }
|
---|
| 91 |
|
---|
| 92 | //Retira acentos e caracteres especiais, e substitui espaço em branco pelo caracter #.
|
---|
| 93 | private function formata_frase($frase) {
|
---|
| 94 | $frase = ereg_replace("[^a-zA-Z0-9#.]", "",
|
---|
| 95 | strtr($frase, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ",
|
---|
| 96 | "aaaaeeiooouucAAAAEEIOOOUUC#"));
|
---|
| 97 | return $frase;
|
---|
| 98 | }
|
---|
| 99 |
|
---|
| 100 | }
|
---|
| 101 | ?> |
---|