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

Revision 903, 16.0 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 nos setores e depois adiciona os usuarios nas         *
16#*    respectivas listas.                                                   *
17#*    Tambem verifica se o usuario foi recadastrado em outro setor 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/criaListasCorpRHDS.log     *
24#*                                                                          *
25#\**************************************************************************/
26
27
28
29$regionais = array('regspo','regrce','regblm','regfla','regsdr','regcta','regbhe','regrjo','regpae','regbsa');
30
31# Recebe o argumento passado na linha de comando.
32#       $regional = $argv[1];
33
34$retorno=encriptar($pass);
35$senhaCript=$retorno;
36
37
38
39# .
40# .
41function lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript) {
42
43        criaLog("Inicio de rotina de criacao de listas Corporativas --> $regional","corp");
44        $connect=ldap_connect($server,$port);
45
46        ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
47        ldap_bind($connect, $rootdn, $pass);
48
49        $filter="(&(ou=*)(phpgwaccounttype=u)(!(nsaccountlock=true))(accountstatus=active))";
50        $justthese = array("uid","ou","mail","cn");
51
52        $baseBusca = $regional.",".$basedn;
53
54        $sr = @ldap_search($connect, $baseBusca, $filter, $justthese);
55
56        $info = ldap_get_entries($connect, $sr);
57
58        $cont = $info['count'];
59
60
61# Le Ldap, por usuario e cria arquivos com listas e participantes
62        $i = 0;
63        $msg = "Lendo Base Ldap.\n";
64        echo $msg;
65
66        while($i <= ($cont-1)) {
67        echo ".";
68       
69#               echo "\n";
70#               echo "UID usuario - ".$info[$i]['uid'][0]."\n";
71                $j = 0;
72                while($info[$i]['mail'][$j] != "") {
73                        $ou = limpaString(strtolower($info[$i]['ou'][$j])); // Pega o setor cadastrado no RHDS de cada funcionario;
74//                      $ou = limpaString($ou); // Retira os espacos em branco do setor
75//                      $ouTemporario = strtolower($info[$i]['ou'][$j]);
76                        $ouTemp[] = limpaString(strtolower($info[$i]['ou'][$j])); // Pega o setor cadastrado no RHDS de cada funcionario. Sera usado
77                                                                // na inclusao de listas em outras listas;
78                       
79                        if (preg_match("[^/]", $ou)){
80                                $msg = "ERRO CADASTRO SETOR - USUARIO - ";
81                                $teste = 1;
82                                criaLog($msg.$info[$i]['uid'][0]." !!!","corp");
83                        }
84                       
85                        if (preg_match("[/$]", $ou)){
86                                $msg = "ERRO CADASTRO SETOR - USUARIO - ";
87                                $teste = 1;
88                                criaLog($msg.$info[$i]['uid'][0]." !!!","corp");
89                        }
90
91
92                       
93                        $setor = explode("/", $ou); //Separa o setor pelo sinal de barra ("/");
94                        $contSetor = count($setor); //Conta a quantidade de itens gerados pelo explode acima;
95
96
97                        $yTmp1 = substr("$setor[0]", 0, 3); //Pega os três primeiros caracteres do primeiro item do vetor $setor;
98
99                   if($yTmp1 != "pse") { //Verifica de o setor do usuario NAO comeca com PSE;
100
101                        $teste = 0;
102                        if(($contSetor > $maxOU) || ($ou == ""))  { // Verifica se cadastro do setor esta fora do padrao;
103                                $contSetor = $maxOU;
104                                $teste = 1;
105                                criaLog("ERRO CADASTRO SETOR - USUARIO - ".$info[$i]['uid'][0]." !!!","corp");
106                        }
107
108
109                        $w = 0;
110                        while(($w <= ($contSetor - 1)) && ($teste == 0)) { // Enquanto nao chegar ao fim do (tamanho do) setor e setor
111                         // estiver cadastrado dentro do padrao
112
113                                $listaTmp = $listaTmp."-".strtolower($setor[$w]);
114
115                                $listaFinal = "listacorp".$listaTmp; // Monta o nome da lista;
116
117                                $filterGrava = "(uid=$listaFinal)";
118                                $srGrava = @ldap_search($connect, $baseGravacao, $filterGrava);// Verifica se a lista ja esta criada no RHDS;
119                                $contLdap = ldap_count_entries($connect, $srGrava);
120
121
122#Cria Lista na base Ldap
123                               
124                                if(($contLdap == 0) && ($listaFinal != "listacorp-")) { // Se a lista nao existir no RHDS, sera criada;
125
126
127                                        $infoAdicaoLista["objectclass"][0] = "person";
128                                        $infoAdicaoLista["objectclass"][1] = "posixAccount";
129                                        $infoAdicaoLista["objectclass"][2] = "phpgwaccount";
130                                        $infoAdicaoLista["objectclass"][3] = "mailman";
131                                        $infoAdicaoLista["objectclass"][4] = "inetorgperson";
132                                        $infoAdicaoLista["uid"] = "$listaFinal";
133                                        $infoAdicaoLista["mail"] = "$listaFinal"."$dominioLista";
134                                        $infoAdicaoLista["phpgwAccountExpires"] = '-1';
135                                        $infoAdicaoLista["phpgwAccountStatus"] = 'A';
136                                        $infoAdicaoLista["phpgwAccountType"] = "l";
137                                        $infoAdicaoLista["accountStatus"] = "active";
138                                        $infoAdicaoLista["sn"] = "$listaFinal";
139                                        $infoAdicaoLista["cn"] = "$listaFinal";
140                                        $infoAdicaoLista["homeDirectory"] = "/dev/null";
141                                        $infoAdicaoLista["gidNumber"] = "777";
142                                        $infoAdicaoLista["uidNumber"] = "-".Contador();
143                                        $infoAdicaoLista["admLista"] = "$administrador";
144                                        $infoAdicaoLista["listpass"] = "$senhaCript";
145                                        $infoAdicaoLista["defaultmembermoderation"] = "1";
146                                        $dnGravaLista = "uid=$listaFinal".","."$baseGravacao";
147
148                                        $adicaoLdap = ldap_add($connect, $dnGravaLista, $infoAdicaoLista);
149                                }
150                                $w++;
151
152                        //exit;
153                        } //fim do while que cria a lista
154
155                        $dnGravaUsuario = "uid=$listaFinal".","."$baseGravacao";
156
157                        $mailUsuario = $info[$i]['mail'][$j];
158
159                        $filtro = "(mailforwardingaddress=$mailUsuario)";
160                        $soIsso = array("uid");
161                        $srCompara = ldap_search($connect, $baseGravacao, $filtro, $soIsso);
162                        $contsrCompara = ldap_count_entries($connect, $srCompara);
163
164                        $comparaUid = ldap_get_entries($connect, $srCompara);
165
166                        $listaTr = $comparaUid[0]['uid'][0];
167                        $testeTr = strtr($listaTr , '-', '/');
168                        $testeTr = substr($testeTr , 6);
169
170                        $infoDelUsuario["mailforwardingaddress"] = "$mailUsuario";
171
172# Aqui ocorre a verificao se um usuario ja pertence a alguma lista criada
173                        if ($testeTr == $ou) {
174                                if(($testeTr == "") || ($ou == "")) {
175                                        $comentario = "Usuario sem Setor cadastrado - ".$info[$i]['uid'][0]."\n";
176                                        criaLog($comentario,"corp");
177                                }else {
178                                        $comentario = "Usuario ja pertence a uma lista - ".$info[$i]['uid'][0]."\n";
179                                        criaLog($comentario,"corp");
180                                }
181                                $teste = 1;
182                        }elseif(($testeTr != $ou) && ($testeTr != "")) {
183                                $dnModUsuario = "uid=$listaTr".","."$baseGravacao";
184                                $removeUsuLista = ldap_mod_del($connect, $dnModUsuario, $infoDelUsuario);
185                                $nomeUsu = $info[$i]['cn'][0];
186                                criaLog("Verifica troca de setor -> Usuario ".$info[$i]['uid'][0]. " Lista $listaTr","corp");
187                        }
188
189                        $infoAdicaoUsuario["mailforwardingaddress"] = "$mailUsuario";
190
191#Insere usuarios na lista criada
192                        if($teste == 0) {
193                                $addUsuLista = @ldap_mod_add($connect, $dnGravaUsuario, $infoAdicaoUsuario);
194                                criaLog("Usuario ".$info[$i]['uid'][0]." cadastrado na lista $listaFinal.\n","corp");
195                        }else {
196                                criaLog("Usuario ".$info[$i]['uid'][0]." nao adicionado. $comentario.\n","corp");
197                        }
198
199                        $listaTmp = "";
200                        $listaTmp2 = "";
201
202
203                   }else { //Senao, de o setor COMECAR com PSE...
204
205                        $mailUsuario = $info[$i]['mail'][$j];
206
207                        $listaRegPse = "listaregional-" . $setor[0]; //Monta o nome da lista regional PSE;
208                        $listaNacPse = "listanacional-pse"; //Monta o nome da lista nacional PSE;
209
210
211                        $filterRegPse = "(uid=$listaRegPse)";
212                        $srRegPse = @ldap_search($connect, $baseGravacao, $filterRegPse);// Verifica se a lista ja esta criada no RHDS;
213                        $contLdapRegPse = ldap_count_entries($connect, $srRegPse);
214
215                        if($contLdapRegPse == 0) {
216
217                                        $infoAddRegPse["objectclass"][0] = "person";
218                                        $infoAddRegPse["objectclass"][1] = "posixAccount";
219                                        $infoAddRegPse["objectclass"][2] = "phpgwaccount";
220                                        $infoAddRegPse["objectclass"][3] = "mailman";
221                                        $infoAddRegPse["objectclass"][4] = "inetorgperson";
222                                        $infoAddRegPse["uid"] = "$listaRegPse";
223                                        $infoAddRegPse["mail"] = "$listaRegPse"."$dominioLista";
224                                        $infoAddRegPse["phpgwAccountExpires"] = '-1';
225                                        $infoAddRegPse["phpgwAccountStatus"] = 'A';
226                                        $infoAddRegPse["phpgwAccountType"] = "l";
227                                        $infoAddRegPse["accountStatus"] = "active";
228                                        $infoAddRegPse["sn"] = "$listaRegPse";
229                                        $infoAddRegPse["cn"] = "$listaRegPse";
230                                        $infoAddRegPse["homeDirectory"] = "/dev/null";
231                                        $infoAddRegPse["gidNumber"] = "777";
232                                        $infoAddRegPse["uidNumber"] = "-".Contador();
233                                        $infoAddRegPse["admLista"] = "$administrador";
234                                        $infoAddRegPse["listpass"] = "$senhaCript";
235                                        $infoAddRegPse["defaultmembermoderation"] = "1";
236                                        $dnGravaListaRegPse = "uid=$listaRegPse".","."$baseGravacao";
237
238                                        $addLdapRegPse = ldap_add($connect, $dnGravaListaRegPse, $infoAddRegPse);
239//exit;
240                        }else {
241
242                                        $dnGravaListaRegPse = "uid=$listaRegPse".","."$baseGravacao";
243                                        $infoAddUsuRegPse["mailforwardingaddress"] = "$mailUsuario";
244
245                                        $addUsuRegPse = ldap_mod_add($connect, $dnGravaListaRegPse, $infoAddUsuRegPse);
246
247                        }
248
249
250                        $filterNacPse = "(uid=$listaNacPse)";
251                        $srNacPse = @ldap_search($connect, $baseGravacao, $filterNacPse);// Verifica se a lista ja esta criada no RHDS;
252                        $contLdapNacPse = ldap_count_entries($connect, $srNacPse);
253
254                        if($contLdapNacPse == 0) {
255
256                                        $infoAddNacPse["objectclass"][0] = "person";
257                                        $infoAddNacPse["objectclass"][1] = "posixAccount";
258                                        $infoAddNacPse["objectclass"][2] = "phpgwaccount";
259                                        $infoAddNacPse["objectclass"][3] = "mailman";
260                                        $infoAddNacPse["objectclass"][4] = "inetorgperson";
261                                        $infoAddNacPse["uid"] = "$listaNacPse";
262                                        $infoAddNacPse["mail"] = "$listaNacPse"."$dominioLista";
263                                        $infoAddNacPse["phpgwAccountExpires"] = '-1';
264                                        $infoAddNacPse["phpgwAccountStatus"] = 'A';
265                                        $infoAddNacPse["phpgwAccountType"] = "l";
266                                        $infoAddNacPse["accountStatus"] = "active";
267                                        $infoAddNacPse["sn"] = "$listaNacPse";
268                                        $infoAddNacPse["cn"] = "$listaNacPse";
269                                        $infoAddNacPse["homeDirectory"] = "/dev/null";
270                                        $infoAddNacPse["gidNumber"] = "777";
271                                        $infoAddNacPse["uidNumber"] = "-".Contador();
272                                        $infoAddNacPse["admLista"] = "$administrador";
273                                        $infoAddNacPse["listpass"] = "$senhaCript";
274                                        $infoAddNacPse["defaultmembermoderation"] = "1";
275                                        $dnGravaListaNacPse = "uid=$listaNacPse".","."$baseGravacao";
276
277                                        $addLdapNacPse = ldap_add($connect, $dnGravaListaNacPse, $infoAddNacPse);
278//exit;
279                        }else {
280
281                                        $dnGravaListaNacPse = "uid=$listaNacPse".","."$baseGravacao";
282                                        $infoAddUsuNacPse["mailforwardingaddress"] = "$listaRegPse"."$dominioLista";
283
284                                        $addUsuNacPse = ldap_mod_add($connect, $dnGravaListaNacPse, $infoAddUsuNacPse);
285
286                        }
287
288                   }
289
290
291                        $j++;
292
293                } //fim do while dentro do usuario
294
295                $i++;
296
297        } //fim do while externo (usuario por usuario)
298
299
300# Verifica se ja existe uma listacorp-serpro no RHDS;
301        $listaSerpro = "listacorp-serpro";
302        $filterGrava = "(uid=$listaSerpro)";
303//      $justthese = array("uid");//linha nova
304        $srGrava = ldap_search($connect, $baseGravacao, $filterGrava);// Verifica se a lista ja esta criada no RHDS;
305
306        $contListaSerpro = ldap_count_entries($connect, $srGrava);
307
308//      $infoSerpro = ldap_get_entries($connect, $srGrava);
309
310
311        if($contListaSerpro == 0) {
312
313
314
315                $tmp["objectclass"][0] = "person";
316                $tmp["objectclass"][1] = "posixAccount";
317                $tmp["objectclass"][2] = "phpgwaccount";
318                $tmp["objectclass"][3] = "mailman";
319                $tmp["objectclass"][4] = "inetorgperson";
320                $tmp["uid"] = "$listaSerpro";
321                $tmp["mail"] = "$listaSerpro"."$dominioLista";
322                $tmp["phpgwAccountExpires"] = '-1';
323                $tmp["phpgwAccountStatus"] = 'A';
324                $tmp["phpgwAccountType"] = "l";
325                $tmp["accountStatus"] = "active";
326                $tmp["sn"] = "$listaSerpro";
327                $tmp["cn"] = "$listaSerpro";
328                $tmp["homeDirectory"] = "/dev/null";
329                $tmp["gidNumber"] = "777";
330                $tmp["uidNumber"] = "-".Contador();
331                $tmp["admLista"] = "$administrador";
332                $tmp["listpass"] = "$senhaCript";
333                $tmp["defaultmembermoderation"] = "1";
334
335                $dnListaSerpro = "uid=$listaSerpro".","."$baseGravacao";
336                $adicaoListaSerpro = ldap_add($connect, $dnListaSerpro, $tmp);
337        }
338
339// Insere listas dentro de listas, de acordo com a hierarquia no cadastramento do setor do usuario;
340        $result = array_unique($ouTemp);
341        foreach ($result as $value){
342                $setorNovo = explode("/",$value);
343                $posicoes = count($setorNovo);
344//corrigir o caso de tres posicoes quando nao houver usuario na segunda!!
345                if ($posicoes == 3){ // Trata os setores cadastrados com tres niveis (Ex.: SUPTI/TIPAE/TIGTE)
346                        $mailLista = "listacorp-$setorNovo[0]-$setorNovo[1]-$setorNovo[2]$dominioLista";
347                        $msg3 = "Lista gerada";
348                        criaLog("$msg3 -> $mailLista","corp");
349
350                        $listaPai = "listacorp-$setorNovo[0]-$setorNovo[1]";
351                        $dnGravaLista = "uid=$listaPai".","."$baseGravacao";
352                        $infoGravaLista["mailforwardingaddress"] = "$mailLista";
353                        $addListaEmListaPai = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);//Insere o ultimo nivel do vetor $setorNovo no nivel anterior
354
355                        $mailLista = "listacorp-$setorNovo[0]-$setorNovo[1]$dominioLista";
356                        criaLog("$msg3 -> $mailLista","corp");
357                        $listaPai = "listacorp-$setorNovo[0]";
358                        $dnGravaLista = "uid=$listaPai".","."$baseGravacao";
359                        $infoGravaLista["mailforwardingaddress"] = "$mailLista";
360                        $addListaEmListaPai = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);//Insere o ultimo nivel do vetor $setorNovo no nivel anterior
361
362                        $mailLista = "listacorp-$setorNovo[0]$dominioLista";
363                        criaLog("$msg3 -> $mailLista","corp");
364                        $listaPai = "listacorp-serpro";
365                        $dnGravaLista = "uid=$listaPai".","."$baseGravacao";
366                        $infoGravaLista["mailforwardingaddress"] = "$mailLista";
367                        $addListaEmListaSerpro = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);// Insere o nivel 0 do vetor $setorNovo na lista-serpro
368
369                }elseif($posicoes == 2){ // Trata os setores cadastrados com dois niveis (Ex.: SUPTI/TIPAE)
370                        $mailLista = "listacorp-$setorNovo[0]-$setorNovo[1]$dominioLista";
371                        $listaPai = "listacorp-$setorNovo[0]";
372                        $dnGravaLista = "uid=$listaPai".","."$baseGravacao";
373                        $infoGravaLista["mailforwardingaddress"] = "$mailLista";
374                        $addListaEmListaPai = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);//Insere o ultimo nivel do vetor $setorNovo no nivel anterior
375
376                        $mailLista = "listacorp-$setorNovo[0]$dominioLista";
377                        $listaPai = "listacorp-serpro";
378                        $dnGravaLista = "uid=$listaPai".","."$baseGravacao";
379                        $infoGravaLista["mailforwardingaddress"] = "$mailLista";
380                        $addListaEmListaSerpro = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);// Insere o nivel 0 do vetor $setorNovo na lista-serpro
381
382                }else{ // Trata os setores cadastrados com um nivel (Ex.: SUPTI)
383                        if($setorNovo[0] != "") {
384                                $mailLista = "listacorp-$setorNovo[0]$dominioLista";
385                                $listaPai = "listacorp-serpro";
386                                $dnGravaLista = "uid=$listaPai".","."$baseGravacao";
387                                $infoGravaLista["mailforwardingaddress"] = "$mailLista";
388                                $addListaEmListaSerpro = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);// Insere o indice $setorNovo[0] na lista-serpro
389                        }
390                }
391         }
392}
393
394$testeValor = 0;
395
396# Chamada da funcao para inclusao no Mailman
397if ($argv[1] == ""){
398        echo "Favor passar sigla da regional\n\n";
399        echo "todas regspo regrce regblb regfla regsdr regcta regbhe regrjo regpae regbsa\n\n";
400}elseif($argv[1] == "todas"){
401        foreach($regionais as $valor){
402                $msg3 = "\nGerando Lista regional -> $valor";
403                $regional = "ou=".$valor;
404                criaLog($msg3,"corp");
405                echo "$msg3\n";
406                lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript);
407        }
408$testeValor = 1;
409}else{
410        $regional = "ou=".$argv[1];
411        lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript);
412        $testeValor = 1;
413}
414        if($testeValor == 1){
415                $msg2 = "\nListas geradas na base LDAP!!!";
416                echo "$msg2\n";
417                criaLog($msg2,"corp");
418        }
419
420?>
Note: See TracBrowser for help on using the repository browser.