source: companies/serpro/scripts-listas/criaListasFuncRHDS.php @ 903

Revision 903, 17.8 KB checked in by niltonneto, 15 years ago (diff)

Importacao inicial do Expresso do Serpro

Line 
1#!/usr/bin/php
2
3
4<?php
5
6require('config.php');
7require('functions.php');
8
9#/**************************************************************************\
10#*                                                                          *
11#* Este script tem duas funcoes: lerRegional() e criaLog().                 *
12#*                                                                          *
13#* -> lerRegional() - le o LDAP/RHDS, usuario por usuario, em busca do      *
14#*    setor cadastrado (atributo OU). A partir dai, gera os nomes das       *
15#*    listas baseados nas funcoes de cada setor e depois adiciona os        *
16#*    usuarios nas respectivas listas.                                      *
17#*    Tambem verifica se o usuario foi recadastrado com outra funcao e caso *
18#*    isto aconteca, remove-o da lista antiga e o adiciona na lista nova.   *
19#*                                                                          *
20#*    Todas estas acoes sao feitas no LDAP/RHDS, depois serao replicadas    *
21#*    para o servidor de listas pelo script sincListasMailManRHDS.php       *
22#*                                                                          *
23#* -> criaLog() - gera o arquivo de log /var/log/criaListasFuncRHDS.log     *
24#*                                                                          *
25#\**************************************************************************/
26
27
28$retorno = encriptar($pass);
29$senhaCript = $retorno;
30
31
32$regionais = array('regspo','regrce','regblm','regfla','regsdr','regcta','regbhe','regrjo','regpae','regbsa');
33
34# Recebe o argumento passado na linha de comando.
35#       $regional = $argv[1];
36
37
38
39
40# .
41# .
42function lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $senhaCript,$listas, $administrador) {
43        criaLog("Inicio de rotina de criacao de listas Funcionais --> $regional","func");
44        echo "\nLendo Base de usuarios -> $regional\n";
45        $connect=ldap_connect($server,$port);
46
47        ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
48        ldap_bind($connect, $rootdn, $pass);
49
50        $filter="(&(ou=*)(phpgwaccounttype=u)(!(nsaccountlock=true))(accountstatus=active))";
51        $justthese = array("uid","ou","mail","cn","usrfuncao");
52
53        $baseBusca = $regional.",".$basedn;
54
55        $sr = ldap_search($connect, $baseBusca, $filter, $justthese);
56
57        $info = ldap_get_entries($connect, $sr);
58        $cont = $info['count'];
59
60#       include('funcoes.php');
61       
62
63/*      $diretores = "DIRETOR";
64        if($listas[$diretores]){
65//              echo $listas[$diretores]."\n";
66        }else {
67//              echo "Nao deu\n";
68        }
69*/
70
71# Le Ldap, por usuario e cria arquivos com listas e participantes
72        $i = 0;
73        while($i <= ($cont-1)) {
74               
75                $mailUsu = $info[$i]['mail'][0];
76                $funcUsu = strtolower($info[$i]['usrfuncao'][0]);//Setor cadastrado no RHDS
77                $nomeUsu = $info[$i]['cn'][0];
78
79                if($funcUsu != "") { //Se funcao do usuario esta cadastrada
80               
81//                      if($funcUsu != "empregado"){ // Se a funcao e direfente de "empregado"
82                       
83                                $temp = $funcUsu;
84                                $funcao = utf8_decode($temp);
85                                $funcListaPai = $funcao;
86                                $funcao = strtr($funcao, " çãáéíó", "-caaeio");
87                       
88//                              echo "Funcao cadastrada -> $funcao\n";
89                               
90                                $funcao = preg_replace('/\(|\)|\{|\}|\[|\]|/','', $funcao);
91
92//                              echo "Funcao cadastrada -> $funcao\n";
93                                $ou = strtolower($info[$i]['ou'][0]);// Pega o setor cadastrado no RHDS de cada funcionario
94//                              echo "OU -> $ou\n";
95
96                                $setorHifen = strtr($ou, '/', '-');//Substitui a "/" pelo "-" no setor
97                                $setor = explode("-", $setorHifen);
98                                $contSetor = count($setor);
99
100
101                                $listaFinal = "listafunc-$setorHifen-$funcao";//Gera uma lista com o setor e a funcao do usuario cadastrada no RHDS(ex: listafunc-supti-tipae-tigte-chefe-de-setor)
102
103                                for($x = 0; $x < $contSetor; $x++) {
104                                        $listaPaiTmp = $listaPaiTmp.$setor[$x-1]."-"; //Seleciona o setor pai p/ gerar a listaFinalPai
105                                }
106
107                                $listaPaiFunc = "listafunc$listaPaiTmp"; //Comeca a montagem da listaFinalPai
108                                $listaFinalPai = "$listaPaiFunc$listas[$funcListaPai]";//Lista do setor "pai" com a funcao "generica" (ex:  listafunc-supti-tipae-chefes)
109                                if ($listas[$funcListaPai] == ""){
110                                        //$listaFinalPai = $listaPaiFunc.$funcao;
111                                        $listaFinalPai = "";
112                                }
113                               
114                                $listaPaiTmp = "";
115
116
117                                // Informacoes que serao utilizadas para buscar a lista em que o usuario esta cadastrado e depois comparar
118                                // com a lista gerada pelo setor + funcao (acima)
119                                @ldap_bind($connect, $rootdn, $pass);
120                                $filtroX = "(&(objectClass=mailman)(mailforwardingaddress=$mailUsu)(uid=listafunc*))";
121                                $justtheseX = array("uid");
122                                $dnX = "$baseGravacao";
123
124                                $result = @ldap_search($connect, $dnX, $filtroX, $justtheseX);//Busca por listas que contenham o usuario especificado em $mailUsu
125
126                                $infoX = @ldap_get_entries($connect, $result);
127//print_r($infoX);
128                                $contX = $infoX['count'];
129                                echo ".";
130//                              echo "Numero de listas com o usuario --> $contX\n";
131
132                                $y = 0;
133                                while($y < $contX){
134                                        $resultListas[] = $infoX[$y]['uid'][0];
135                                        $y++;
136                                }
137
138                                $maiorLista = "";
139                                $menorLista = "";
140
141                                if($contX != 0) {
142                                        foreach($resultListas as $value) {
143//                                              $msg = "ResultListas --> $value\n";
144//                                              criaLog("$msg","func");
145
146                                                if(strlen($value) > strlen($maiorLista)) {
147                                                        $menorLista = $maiorLista;
148                                                        $maiorLista = $value;
149                                                }else {
150                                                        $menorLista = $value;
151                                                }
152                                        }
153                                }
154                               
155//                              echo "Usuario --> $nomeUsu\n";
156//                              echo "Lista Final --> $listaFinal\n";
157//                              echo "Maior Lista --> $maiorLista\n";
158//                              echo "Menor Lista --> $menorLista\n";
159
160                                //$uidLista = $infoX[0]['uid'][0];//UID da lista que contem o usuario especificado
161
162                        if($funcUsu != "empregado"){ // Se a funcao e direfente de "empregado"
163
164                                if(($maiorLista != $listaFinal) && ($maiorLista != "")) {//Se a lista retornada for diferente da lista gerada pelo setor e funcao atuais do usuario e diferente de vazio, significa que o setor cadastrado no RHDS mudou
165
166
167//                                      echo "Entrou na lista != vazio!!!!!!!!!!";
168                                        $dnListaAntiga = "uid=$maiorLista".","."$baseGravacao";
169                                        $delListaAntiga = @ldap_delete($connect, $dnListaAntiga);
170
171                                        $infoDelUsu["mailforwardingaddress"] = "$mailUsu";
172//                                      echo "email -> $mailUsu\n";
173                                        $dnListaPaiAntiga = "uid=$menorLista".","."$baseGravacao";
174                                        $delListaPaiAntiga = @ldap_mod_del($connect, $dnListaPaiAntiga, $infoDelUsu);
175//                                      echo "TUDO DIFERENTE!!!!!!!!!!!!!! $mailUsu\n";
176                       
177                                        $addListaFinal["objectclass"][0] = "person";
178                                        $addListaFinal["objectclass"][1] = "posixAccount";
179                                        $addListaFinal["objectclass"][2] = "phpgwaccount";
180                                        $addListaFinal["objectclass"][3] = "mailman";
181                                        $addListaFinal["objectclass"][4] = "inetorgperson";
182                                        $addListaFinal["uid"] = "$listaFinal";
183                                        $addListaFinal["mail"] = "$listaFinal"."$dominioLista";
184                                        $addListaFinal["phpgwAccountExpires"] = '-1';
185                                        $addListaFinal["phpgwAccountStatus"] = "A";
186                                        $addListaFinal["phpgwAccountType"] = "l";
187                                        $addListaFinal["accountStatus"] = "active";
188                                        $addListaFinal["sn"] = "$listaFinal";
189                                        $addListaFinal["cn"] = "$listaFinal";
190                                        $addListaFinal["homeDirectory"] = "/dev/null";
191                                        $addListaFinal["gidNumber"] = "777";
192                                        $addListaFinal["uidNumber"] = "-".Contador();
193                                        $addListaFinal["admLista"] = "$administrador";
194                                        $addListaFinal["listPass"] = "$senhaCript";
195                                        $addListaFinal["defaultmembermoderation"] = "1";
196
197                                        $addMemberListaFinal["mailforwardingaddress"] = "$mailUsu";
198                                       
199                                        $dnGravaListaFinal = "uid=$listaFinal".","."$baseGravacao";
200                                        $adicaoListaFinal = @ldap_add($connect, $dnGravaListaFinal, $addListaFinal);
201
202
203                                        $adicaoMemberListaFinal = @ldap_mod_add($connect, $dnGravaListaFinal, $addMemberListaFinal);
204
205                                        criaLog("Lista $listaFinal gerada usuario $mailUsu incluido", "func");
206
207                                        $addListaFinalPai["objectclass"][0] = "person";
208                                        $addListaFinalPai["objectclass"][1] = "posixAccount";
209                                        $addListaFinalPai["objectclass"][2] = "phpgwaccount";
210                                        $addListaFinalPai["objectclass"][3] = "mailman";
211                                        $addListaFinalPai["objectclass"][4] = "inetorgperson";
212                                        $addListaFinalPai["uid"] = "$listaFinalPai";
213                                        $addListaFinalPai["mail"] = "$listaFinalPai"."$dominioLista";
214                                        $addListaFinalPai["phpgwAccountExpires"] = '-1';
215                                        $addListaFinalPai["phpgwAccountStatus"] = "A";
216                                        $addListaFinalPai["phpgwAccountType"] = "l";
217                                        $addListaFinalPai["accountStatus"] = "active";
218                                        $addListaFinalPai["sn"] = "$listaFinalPai";
219                                        $addListaFinalPai["cn"] = "$listaFinalPai";
220                                        $addListaFinalPai["homeDirectory"] = "/dev/null";
221                                        $addListaFinalPai["gidNumber"] = "777";
222                                        $addListaFinalPai["uidNumber"] = "-".Contador();
223                                        $addListaFinalPai["admLista"] = "$administrador";
224                                        $addListaFinalPai["listPass"] = "$senhaCript";
225                                        $addListaFinalPai["defaultmembermoderation"] = "1";
226
227                                        $addMemberListaFinalPai["mailforwardingaddress"] = "$mailUsu";
228
229
230
231                                        $dnGravaListaFinalPai = "uid=$listaFinalPai".","."$baseGravacao";
232                                        $adicaoListaFinalPai = @ldap_add($connect, $dnGravaListaFinalPai, $addListaFinalPai);
233
234                                        $adicaoMemberListaFinalPai = @ldap_mod_add($connect, $dnGravaListaFinalPai, $addMemberListaFinalPai);
235                                        criaLog("Lista $listaFinalPai gerada usuario $mailUsu incluido", "func");
236
237                                }elseif(($maiorLista == "") && ($menorLista =="")) {//Se o retorno da busca for vazio para as listas, significa que o usuario ainda nao foi inserido em nenhuma lista, entao elas serao geradas e o(s) participante(s) adicionado(s)
238
239                                        $addListaFinal["objectclass"][0] = "person";
240                                        $addListaFinal["objectclass"][1] = "posixAccount";
241                                        $addListaFinal["objectclass"][2] = "phpgwaccount";
242                                        $addListaFinal["objectclass"][3] = "mailman";
243                                        $addListaFinal["objectclass"][4] = "inetorgperson";
244                                        $addListaFinal["uid"] = "$listaFinal";
245                                        $addListaFinal["mail"] = "$listaFinal"."$dominioLista";
246                                        $addListaFinal["phpgwAccountExpires"] = '-1';
247                                        $addListaFinal["phpgwAccountStatus"] = "A";
248                                        $addListaFinal["phpgwAccountType"] = "l";
249                                        $addListaFinal["accountStatus"] = "active";
250                                        $addListaFinal["sn"] = "$listaFinal";
251                                        $addListaFinal["cn"] = "$listaFinal";
252                                        $addListaFinal["homeDirectory"] = "/dev/null";
253                                        $addListaFinal["gidNumber"] = "777";
254                                        $addListaFinal["uidNumber"] = "-".Contador();
255                                        $addListaFinal["admLista"] = "$administrador";
256                                        $addListaFinal["listPass"] = "$senhaCript";
257                                        $addListaFinal["defaultmembermoderation"] = "1";
258
259                                        $addMemberListaFinal["mailforwardingaddress"] = "$mailUsu";
260
261                                        $dnGravaListaFinal = "uid=$listaFinal".","."$baseGravacao";
262                                        $adicaoListaFinal = @ldap_add($connect, $dnGravaListaFinal, $addListaFinal);
263
264
265                                        $adicaoMemberListaFinal = @ldap_mod_add($connect, $dnGravaListaFinal, $addMemberListaFinal);
266                                        criaLog("Lista $listaFinal gerada usuario $mailUsu incluido", "func");
267
268                                        $addListaFinalPai["objectclass"][0] = "person";
269                                        $addListaFinalPai["objectclass"][1] = "posixAccount";
270                                        $addListaFinalPai["objectclass"][2] = "phpgwaccount";
271                                        $addListaFinalPai["objectclass"][3] = "mailman";
272                                        $addListaFinalPai["objectclass"][4] = "inetorgperson";
273                                        $addListaFinalPai["uid"] = "$listaFinalPai";
274                                        $addListaFinalPai["mail"] = "$listaFinalPai"."$dominioLista";
275                                        $addListaFinalPai["phpgwAccountExpires"] = '-1';
276                                        $addListaFinalPai["phpgwAccountStatus"] = "A";
277                                        $addListaFinalPai["phpgwAccountType"] = "l";
278                                        $addListaFinalPai["accountStatus"] = "active";
279                                        $addListaFinalPai["sn"] = "$listaFinalPai";
280                                        $addListaFinalPai["cn"] = "$listaFinalPai";
281                                        $addListaFinalPai["homeDirectory"] = "/dev/null";
282                                        $addListaFinalPai["gidNumber"] = "777";
283                                        $addListaFinalPai["uidNumber"] = "-".Contador();
284                                        $addListaFinalPai["admLista"] = "$administrador";
285                                        $addListaFinalPai["listPass"] = "$senhaCript";
286                                        $addListaFinalPai["defaultmembermoderation"] = "1";
287
288                                        $addMemberListaFinalPai["mailforwardingaddress"] = "$mailUsu";
289
290
291
292                                        $dnGravaListaFinalPai = "uid=$listaFinalPai".","."$baseGravacao";
293                                        $adicaoListaFinalPai = @ldap_add($connect, $dnGravaListaFinalPai, $addListaFinalPai);
294
295                                        $adicaoMemberListaFinalPai = @ldap_mod_add($connect, $dnGravaListaFinalPai, $addMemberListaFinalPai);
296                                        criaLog("Lista $listaFinalPai gerada usuario $mailUsu incluido", "func");
297
298                                }
299
300                                $teste = 0;
301
302                        }else { //fim do if de " funcUsu != empregado ", agora "funcUsu == empregado" -- Usuario tinha uma funcao e agora
303                                //voltou a ser simplesmente "Empregado"
304
305//                              echo "Funcionario eh --> $funcUsu\n";
306//                              echo "Lista do funcionario --> $maiorLista\n";
307//                              echo "Ou lista do funcionario --> $menorLista\n";
308
309                                $infoDelUsu["mailforwardingaddress"] = "$mailUsu"; //Usuario a ser excluido das listas
310
311//                              echo "Entrou na lista != vazio!!!!!!!!!!";
312
313                                //Exclui da lista funcional "especifica", ex.: listafunc-supti-tipae-tigte-supervisor
314                                $dnListaAntiga = "uid=$maiorLista".","."$baseGravacao";
315                        //      $delListaAntiga = ldap_delete($connect, $dnListaAntiga, $infoDelUsu);
316                                $delListaAntiga = @ldap_delete($connect, $dnListaAntiga);
317
318//                              echo "email -> $mailUsu\n";
319
320                                //Exclui da lista funcional "generica", ex.: listafunc-supti-tipae-supervisores
321                                $dnListaPaiAntiga = "uid=$menorLista".","."$baseGravacao";
322                                //$delListaPaiAntiga = ldap_delete($connect, $dnListaPaiAntiga, $infoDelUsu);
323                                $delListaPaiAntiga = @ldap_mod_del($connect, $dnListaPaiAntiga, $infoDelUsu);
324
325//                              echo "TUDO DIFERENTE!!!!!!!!!!!!!! $mailUsu\n";
326
327                        }
328                        $resultListas = ""; //limpa o vetor com o resultado da busca
329                        $maiorLista = ""; //limpa a variavel para o proximo loop
330                        $menorLista = ""; //limpa a variavel para o proximo loop
331
332//                      $mailUsuario = $info[$i]['mail'][$j];
333
334/*                      $filtro = "(mailforwardingaddress=$mailUsu)";
335                        $soIsso = array("uid");
336                        $srCompara = @ldap_search($connect, $baseGravacao, $filtro, $soIsso);
337
338                        $erro = ldap_errno($connect);
339                        if($erro == "87"){
340                                $msg = "ERRO no campo mail do usuario ->".$info[$i]['uid'][0];
341                                criaLog($msg,"func");
342                                echo "\n$msg\n";
343                        }
344                        $contsrCompara = @ldap_count_entries($connect, $srCompara);
345
346                        $comparaUid = @ldap_get_entries($connect, $srCompara);
347
348                        $listaTr = $comparaUid[0]['uid'][0];
349                        $testeTr = strtr($listaTr , '-', '/');
350                        $testeTr = substr($testeTr , 6);
351
352                        $infoAdicaoUsuario["mailforwardingaddress"] = "$mailUsuario";
353
354                        $listaTmp = "";
355                        $listaTmp2 = "";
356*/
357
358                        //$j++;
359
360                } //fim do if de " funcUsu != "" "
361
362                $i++;
363
364        } //fim do while externo (usuario por usuario)
365
366}
367
368
369
370$testeValor = 0;
371
372# Chamada da funcao para inclusao no Mailman
373if ($argv[1] == ""){
374        echo "Favor passar sigla da regional\n\n";
375        echo "todas regspo regrce regblb regfla regsdr regcta regbhe regrjo regpae regbsa\n";
376
377}elseif($argv[1] == "todas"){
378        foreach($regionais as $valor){
379                $msg3 = "Gerando Lista regional -> $valor";
380                $regional = "ou=".$valor;
381                criaLog($msg3,"func");
382//              echo "$msg3\n";
383                lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $senhaCript, $listas, $administrador);
384
385        }
386        $testeValor = 1;
387}else{
388        $msg3 = "Gerando Lista regional -> $valor";
389        $regional = "ou=".$argv[1];
390        lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $senhaCript, $listas, $administrador);
391        $testeValor = 1;
392        criaLog($msg3,"func");
393//      echo "$msg3\n";
394    }
395        if($testeValor == 1){
396                $msg2 = "\nProcesso geracao de listas funcionais terminado!!!";
397                echo "$msg2\n";
398                criaLog($msg2,"corp");
399        }
400                                                                                       
401?>
Note: See TracBrowser for help on using the repository browser.