source: branches/2.2/expressoAdmin1_2/inc/class.login_algorithm_example.inc.php @ 594

Revision 594, 3.5 KB checked in by niltonneto, 15 years ago (diff)

Resolve #392

  • Property svn:executable set to *
Line 
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?>
Note: See TracBrowser for help on using the repository browser.