source: companies/serpro/expressoAdmin1_2/inc/class.maillist.inc.php @ 903

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

Importacao inicial do Expresso do Serpro

Line 
1<?php
2        /**********************************************************************************\
3        * Expresso Administraᅵᅵo                                                                                          *
4        * by Joao Alfredo Knopik Junior (joao.alfredo@gmail.com, jakjr@celepar.pr.gov.br) *
5        * --------------------------------------------------------------------------------*
6        *  This program is free software; you can redistribute it and/or modify it                *
7        *  under the terms of the GNU General Public License as published by the                  *
8        *  Free Software Foundation; either version 2 of the License, or (at your                 *
9        *  option) any later version.                                                                                                     *
10        \**********************************************************************************/
11       
12        include_once('class.ldap_functions.inc.php');
13        include_once('class.db_functions.inc.php');
14        include_once('class.imap_functions.inc.php');
15        include_once('class.functions.inc.php');
16       
17        class maillist
18        {
19                var $ldap_functions;
20                var $db_functions;
21                var $imap_functions;
22                var $functions;
23                var $current_config;
24               
25               
26                function maillist()
27                {
28                        $this->ldap_functions = new ldap_functions;
29                        $this->db_functions = new db_functions;
30                        $this->imap_functions = new imap_functions;
31                        $this->functions = new functions;
32                        $this->current_config = $_SESSION['phpgw_info']['expresso']['expressoAdmin'];
33                }
34               
35                function validate_fields($params)
36                {
37                        return $this->ldap_functions->validate_fields_maillist($params);
38                }
39               
40                function create($params)
41                {
42                        // Verifica o acesso do gerente
43                        if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'add_maillists'))
44                        {
45                                $return['status'] = false;
46                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para adicionar listas de email.';
47                                return $return;
48                        }
49                       
50                        $return['status'] = true;
51                       
52                        //Retira os uids duplicados se existir
53                        $array_tmp = array();
54                        $array_tmp = array_unique($params['members']);
55                        $params['members'] = $array_tmp;
56                       
57                                // Pega ID do BD e incrementa de 1 (vai ser o uidnumber da lista)
58                        $id = (($this->db_functions->get_next_id()) + 1);
59                       
60                        // Incrementa o id no BD.
61                        $this->db_functions->increment_id($id,'accounts');
62
63                        //DN do repositorio das listas de e-mail; usado para gravacao de listas manuais
64                        $dnListas = $GLOBALS['phpgw_info']['server']['dn_listas'];
65                        //Dominio do servidor de listas; usado na composicao do endereco de e-mail das listas
66                        $dominioListas = $GLOBALS['phpgw_info']['server']['dominio_listas'];
67
68                        // Cria array para incluir no LDAP
69                        //$dn = 'uid=' . $params['uid'] . ',' . $params['context'];
70                        $dn = 'uid=' . $params['uid'] . ',' . $dnListas;
71                       
72                        $maillist_info = array();
73                        $maillist_info['uid']                                   = $params['uid']; 
74                        $maillist_info['givenName']                             = 'MailList';
75                        $maillist_info['sn']                                    = $params['uid'];
76                        $maillist_info['cn']                                    = $params['uid'];
77                       
78                        $maillist_info['homeDirectory']                         = '/home/false';
79                        $maillist_info['loginShell']                            = '/bin/false';
80                        $maillist_info['mail']                                  = $params['uid'] . "@" . $GLOBALS['phpgw_info']['server']['dominio_listas'];
81                        $maillist_info['description']                           = $params['description'];
82                       
83                        $expressoAdmin                                          = $GLOBALS['phpgw_info']['server']['header_admin_user'];
84                        //Obtem uidnumber baseado no uid do usuario expresso-admin
85                        $admUidnumber                                           = $this->ldap_functions->uid2uidnumber($expressoAdmin);
86                        //Obten email baseado no uidnumber do usuario expresso-admin
87                        $adminlista                                             = $this->ldap_functions->uidnumber2mail($admUidnumber);
88
89                        //Pega o id do usuario atual da sessao
90                        $usuarioAtual                                           = $_SESSION['phpgw_info']['expresso']['user']['account_lid'];
91                        //Pega o uidnumber do usuario atual
92                        $uidUsuarioAtual                                        = $this->ldap_functions->uid2uidnumber($usuarioAtual);
93                        //Pega o email do usuario atual
94                        $mailUsuarioAtual                                       = $this->ldap_functions->uidnumber2mail($uidUsuarioAtual);
95
96                        //adiciona o expresso-admin como administrador padrao da lista no campo admlista
97                        $adm_info['admlista'][0]                                = $adminlista;
98                        //adiciona o usuario corrente como administrador da lista
99                        $adm_info['admlista'][1]                                = $mailUsuarioAtual;
100
101                        //verifica se o usuario logado (corrente) eh igual ao administrador padrao (expresso-admin)
102                        if($adm_info['admlista'][0] == $adm_info['admlista'][1]) {
103                                $maillist_info['admlista'][0] = $adm_info['admlista'][0];
104                        }else {
105                                $maillist_info['admlista'][0] = $adm_info['admlista'][0];
106                                $maillist_info['admlista'][1] = $adm_info['admlista'][1];
107                        }
108
109
110//                      $maillist_info['userPassword']                          = '{md5}' . base64_encode(pack("H*",md5($params['userPassword'])));
111//Modifica a geracao de senha pro mailman
112                        $senhaCripto                                            = $params['listPass'];
113                        $maillist_info['listPass']                              = encriptar($senhaCripto);
114                        //$maillist_info['listPass']                            = 'senha';
115                        $maillist_info['objectClass'][0]                        = 'posixAccount';
116                        $maillist_info['objectClass'][1]                        = 'inetOrgPerson';
117                        $maillist_info['objectClass'][2]                        = 'shadowAccount';
118                        //$maillist_info['objectClass'][3]                      = 'qmailuser';
119                        $maillist_info['objectClass'][3]                        = 'phpgwAccount';
120                        $maillist_info['objectClass'][4]                        = 'top';
121                        $maillist_info['objectClass'][5]                        = 'person';
122                        $maillist_info['objectClass'][6]                        = 'organizationalPerson';               
123                        $maillist_info['objectClass'][7]                        = 'mailman';           
124                        //$maillist_info['phpgwAccountExpires']                 = '-1';
125                        //$maillist_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '-1';
126                        if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']))
127                                        {
128                                        $maillist_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '-1';
129                                        }
130                                else
131                                        {
132                                        $maillist_info['phpgwaccountexpires'] = '-1';
133                                        }
134                        $maillist_info['phpgwAccountType']                      = 'l';
135                        $maillist_info['phpgwAccountStatus']                    = 'A';
136                        $maillist_info['uidnumber']                             = $id;
137                        $maillist_info['gidnumber']                             = '0';
138                        $maillist_info['deliveryMode']                          = 'forwardOnly';
139                       
140                        if ($params['accountStatus'] == 'on')
141                                $maillist_info['accountStatus'] = 'active';
142                       
143                        if ($params['phpgwAccountVisible'] == 'on')
144                                $maillist_info['phpgwAccountVisible'] = '-1';
145
146                        if ($params['defaultMemberModeration'] == 'on')
147                                $maillist_info['defaultMemberModeration'] = '1';
148
149                        foreach($params['members'] as $index=>$uidnumber)
150                        {
151                                $this->db_functions->write_log($params['context'],",",$params['cn']);
152                                $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
153
154                                //Este if foi adicionado para tratar a situacao de uma lista ser criada com usuario(s) externo(s)
155                                if($mail == '')
156                                {
157                                        //adiciona ao vetor o(s) usuario(s) externo(s)
158                                        $maillist_info['mailForwardingAddress'][] = $uidnumber;
159                                } else{
160                                        //adiciona ao vetor o(s) usuario(s) exitente(s) no RHDS
161                                        $maillist_info['mailForwardingAddress'][] = $mail;
162                                }
163
164                                //$maillist_info['mailForwardingAddress'][] = $mail;
165                                $this->db_functions->write_log("Adicionado usuario $mail a lista ".$params['cn']." no momento da criaᅵᅵo",$dn,$uidnumber,'','');
166                        }
167                        $result = $this->ldap_functions->ldap_add_entry($dn, $maillist_info);                   
168
169                        if (!$result['status'])
170                        {
171                                $return['status'] = false;
172                                $return['msg'] .= $result['msg'];
173                        }
174                       
175                        if ($return['status'] == true)
176                        {
177                                $this->db_functions->write_log('Criado lista de email','',$dn,'','');
178                        }
179                       
180                        return $return;
181                }
182               
183                function save($new_values)
184                {
185                        // Verifica o acesso do gerente
186                        if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_maillists'))
187                        {
188                                $return['status'] = false;
189                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para editar listas de email.';
190                                return $return;
191                        }
192
193                        if ($params['accountAdm'] == 'on'){
194                                $teste = 'A';
195                                $return['msg'] = '$teste';
196                        }
197
198                        $return['status'] = true;
199                       
200                        //Retira os uids duplicados se existir
201                        $array_tmp = array();
202                        $array_tmp = array_unique($new_values['members']);
203                        $new_values['members'] = $array_tmp;
204                       
205                        $old_values = $this->get_info($new_values['uidnumber'], $new_values['manager_context']);
206                        $diff = array_diff($new_values, $old_values);
207                       
208                        $dn = 'uid=' . $old_values['uid'] . ',' . $old_values['context'];
209                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
210                        // RENAME
211/*                      if ($diff['context'] || $diff['uid'])
212                        {
213                                $newrdn = 'uid=' . $new_values['uid'];
214                                $newparent = $new_values['context'];
215                                $result =  $this->ldap_functions->change_user_context($dn, $newrdn, $newparent);
216                                if (!$result['status'])
217                                {
218                                        $return['status'] = false;
219                                        $return['msg'] .= $result['msg'];
220                                }
221                                else
222                                {
223                                        $dn = $newrdn . ',' . $newparent;
224                                        $old_dn = $old_values['uid'];
225                                        $this->db_functions->write_log("Renomeado login da lista de $old_dn para $dn",'',$dn,$old_values['uid'],'');
226                                }
227                        }*/
228                       
229                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
230                        // REPLACE MAIL || CN || SN
231                        if ($new_values['mail'] != $old_values['mail'])
232                        {
233                                $ldap_mod_replace['mail'] = $new_values['mail'];
234                                $this->db_functions->write_log('Modificado email da lista para ' . $new_values['mail'],'',$dn,'','');
235                        }
236
237                        if ($new_values['listPass'] != $old_values['listPass'])
238                        {
239//                              $tmpPassword     = '{md5}' . base64_encode(pack("H*",md5($new_values['userPassword'])));
240                                $senhaCripto     = $new_values['listPass'];
241                                $tmpPassword     = encriptar($senhaCripto);
242                                $ldap_mod_replace['listPass'] = $tmpPassword;
243                                $this->db_functions->write_log('Modificado senha da lista para ' . $tmpPassword ,'',$dn,'','');
244                        }
245
246                        if ($new_values['cn'] != $old_values['cn'])
247                        //if ($diff['uid'])
248                        {
249                                $ldap_mod_replace['cn'] = $new_values['uid'];
250                                $ldap_mod_replace['sn'] = $new_values['uid'];
251                //              $ldap_mod_replace['uid'] = $new_values['uid'];
252                                $this->db_functions->write_log("Modificado common name da lista $dn",'',$dn,'','');
253                        }
254                       
255        /*              if ($diff['sn'])
256                        {
257                                $ldap_mod_replace['uid'] = $new_values['uid'];
258                        }
259        */             
260                        if (count($ldap_mod_replace))
261                        {
262                                $result = $this->ldap_functions->replace_user_attributes($dn, $ldap_mod_replace);
263                                if (!$result['status'])
264                                {
265                                        $return['status'] = false;
266                                        $return['msg'] .= $result['msg'];
267                                }
268                        }
269                       
270                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
271                        // REMOVE ATTRS
272                        if (($old_values['accountStatus'] == 'active') && ($new_values['accountStatus'] != 'on'))
273                                $ldap_remove['accountStatus']   = array();
274                       
275                        if (($old_values['defaultMemberModeration'] == '1') && ($new_values['defaultMemberModeration'] != 'on'))
276                                $ldap_remove['defaultMemberModeration']   = array();           
277
278                               
279                        if (($old_values['phpgwAccountVisible'] == '-1') && ($new_values['phpgwAccountVisible'] != 'on'))
280                                $ldap_remove['phpgwAccountVisible']     = array();
281                       
282                        if (count($ldap_remove))
283                        {
284                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
285                                if (!$result['status'])
286                                {
287                                        $return['status'] = false;
288                                        $return['msg'] .= $result['msg'];
289                                }
290                        }
291                       
292                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
293                        // ADD ATTRS
294                        if (($old_values['accountStatus'] != 'active') && ($new_values['accountStatus'] == 'on'))
295                                $ldap_add['accountStatus']      = 'active';
296
297                        if (($old_values['defaultMemberModeration'] != '1') && ($new_values['defaultMemberModeration'] == 'on'))
298                                $ldap_add['defaultMemberModeration']      = '1';       
299                       
300               
301                        if (($old_values['phpgwAccountVisible'] != '-1') && ($new_values['phpgwAccountVisible'] == 'on'))
302                                $ldap_add['phpgwAccountVisible'] = '-1';
303                       
304                        if (count($ldap_add))
305                        {
306                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
307                                if (!$result['status'])
308                                {
309                                        $return['status'] = false;
310                                        $return['msg'] .= $result['msg'];
311                                }
312                        }
313                       
314                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
315                        // USERS
316
317                        if (!$new_values['members'])
318                                $new_values['members'] = array();
319                        if (!$old_values['members'])
320                                $old_values['members'] = array();
321
322                        $add_users = array_diff($new_values['members'], $old_values['members']);
323
324                        $remove_users = array_diff($old_values['members'], $new_values['members']);
325                       
326                        if (count($add_users)>0)
327                        {
328                                $array_emails_add = array();
329                                foreach($add_users as $uidnumber)
330                                {
331                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
332
333                                        //caso nao exista o e-mail do usuario informado (usuario externo);
334                                        if(empty($mail)){
335                                                $mail = $uidnumber;
336                                        }
337
338                                        $array_emails_add[] = $mail;
339                                        $this->db_functions->write_log("Adicionado usuario $mail $teste a lista",$dn,$uidnumber,'','');
340                                }
341                                        $this->ldap_functions->add_user2maillist($new_values['uidnumber'], $array_emails_add);
342                        }
343                        if (count($remove_users)>0)
344                        {
345                                $array_emails_remove = array();
346                                foreach($remove_users as $uidnumber)
347                                {
348                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
349                                       
350                                        //caso nao exista o e-mail do usuario informado (usuario externo);
351                                        if (empty($mail))
352                                                $mail = $uidnumber;
353                                       
354                                        $array_emails_remove[] = $mail;
355                                        $this->db_functions->write_log("Removido usuario $mail da lista",$dn,$uidnumber,'','');
356                                }
357                                $this->ldap_functions->remove_user2maillist($new_values['uidnumber'], $array_emails_remove);
358                                $this->ldap_functions->remove_user2maillist_adm($new_values['uidnumber'], $array_emails_remove);
359
360                        }
361                       
362                        return $return;
363                }
364
365                function save_adm($new_values) // Funcao usada para salvar alteracoes de administradores de listas
366                {
367                        // Verifica o acesso do gerente
368                                if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'adm_maillists'))
369                        {
370                                $return['status'] = false;
371                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para editar listas de email.';
372                                return $return;
373                        }
374
375                        $return['status'] = true;
376                       
377                        //Retira os uids duplicados se existir
378                        $array_tmp = array();
379                        $array_tmp = array_unique($new_values['members']);
380                        $new_values['members'] = $array_tmp;
381                       
382                        $old_values = $this->get_adm_info($new_values['uidnumber'], $new_values['manager_context']);
383                        $diff = array_diff($new_values, $old_values);
384                       
385                        $dn = 'uid=' . $old_values['uid'] . ',' . $old_values['context'];
386                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
387                        // RENAME
388                /*      if ($diff['context'] || $diff['uid'])
389                        {
390                                $newrdn = 'uid=' . $new_values['uid'];
391                                $newparent = $new_values['context'];
392                                $result =  $this->ldap_functions->change_user_context($dn, $newrdn, $newparent);
393                                if (!$result['status'])
394                                {
395                                        $return['status'] = false;
396                                        $return['msg'] .= $result['msg'];
397                                }
398                                else
399                                {
400                                        $dn = $newrdn . ',' . $newparent;
401                                        $old_dn = $old_values['uid'];
402                                        $this->db_functions->write_log("Renomeado login da lista de $old_dn para $dn",'',$dn,$old_values['uid'],'');
403                                }
404                        }
405                */     
406                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
407                        // REPLACE MAIL || CN || SN
408                /*      if ($new_values['mail'] != $old_values['mail'])
409                        {
410                                $ldap_mod_replace['mail'] = $new_values['mail'];
411                                $this->db_functions->write_log('Modificado email da lista para ' . $new_values['mail'],'',$dn,'','');
412                        }
413
414                        if ($new_values['userPassword'] != $old_values['userPassword'])
415                        {
416                                $tmpPassword     = '{md5}' . base64_encode(pack("H*",md5($new_values['userPassword'])));
417                                $ldap_mod_replace['userPassword'] = $tmpPassword;
418                                $this->db_functions->write_log('Modificado senha da lista para ' . $tmpPassword ,'',$dn,'','');
419                        }
420
421                        if ($new_values['cn'] != $old_values['cn'])
422                        {
423                                $ldap_mod_replace['cn'] = $new_values['cn'];
424                                $this->db_functions->write_log("Modificado common name da lista $dn",'',$dn,'','');
425                        }
426                       
427                        if ($diff['uid'])
428                        {
429                                $ldap_mod_replace['sn'] = $new_values['uid'];
430                        }
431                       
432                        if (count($ldap_mod_replace))
433                        {
434                                $result = $this->ldap_functions->replace_user_attributes($dn, $ldap_mod_replace);
435                                if (!$result['status'])
436                                {
437                                        $return['status'] = false;
438                                        $return['msg'] .= $result['msg'];
439                                }
440                        }
441                */     
442                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
443                        // REMOVE ATTRS
444                /*      if (($old_values['accountStatus'] == 'active') && ($new_values['accountStatus'] != 'on'))
445                                $ldap_remove['accountStatus']   = array();
446                       
447                        if (($old_values['phpgwAccountVisible'] == '-1') && ($new_values['phpgwAccountVisible'] != 'on'))
448                                $ldap_remove['phpgwAccountVisible']     = array();
449                       
450                        if (count($ldap_remove))
451                        {
452                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
453                                if (!$result['status'])
454                                {
455                                        $return['status'] = false;
456                                        $return['msg'] .= $result['msg'];
457                                }
458                        }
459                */     
460                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
461                        // ADD ATTRS
462                        if (($old_values['accountStatus'] != 'active') && ($new_values['accountStatus'] == 'on'))
463                                $ldap_add['accountStatus']      = 'active';
464                       
465                        if (($old_values['phpgwAccountVisible'] != '-1') && ($new_values['phpgwAccountVisible'] == 'on'))
466                                $ldap_add['phpgwAccountVisible'] = '-1';
467                       
468                        if (count($ldap_add))
469                        {
470                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
471                                if (!$result['status'])
472                                {
473                                        $return['status'] = false;
474                                        $return['msg'] .= $result['msg'];
475                                }
476                        }
477                       
478                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
479                        // USERS
480
481                        if (!$new_values['members'])
482                                $new_values['members'] = array();
483                        if (!$old_values['members'])
484                                $old_values['members'] = array();
485
486                        $add_users = array_diff($new_values['members'], $old_values['members']);
487
488                        $remove_users = array_diff($old_values['members'], $new_values['members']);
489                       
490                        if (count($add_users)>0)
491                        {
492                                $array_emails_add = array();
493                                foreach($add_users as $uidnumber)
494                                {
495                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
496                                        $array_emails_add[] = $mail;
497                                        $this->db_functions->write_log("Adicionado usuario $mail $teste a lista",$dn,$uidnumber,'','');
498                                }
499                                        $this->ldap_functions->add_user2maillist_adm($new_values['uidnumber'], $array_emails_add);
500                        }
501                        if (count($remove_users)>0)
502                        {
503                                $array_emails_remove = array();
504                                foreach($remove_users as $uidnumber)
505                                {
506                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
507                                       
508                                        // Nï¿œo achei o email do usuï¿œrio no ldap.
509                                        if (empty($mail))
510                                                $mail = $uidnumber;
511                                       
512                                        $array_emails_remove[] = $mail;
513                                        $this->db_functions->write_log("Removido usuario $mail da lista",$dn,$uidnumber,'','');
514                                }
515                                $this->ldap_functions->remove_user2maillist_adm($new_values['uidnumber'], $array_emails_remove);
516
517                        }
518                       
519                        return $return;
520                }               
521
522               
523                function save_scl($new_values)
524                {
525                        // Verifica o acesso do gerente
526                        if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_maillists'))
527                        {
528                                $return['status'] = false;
529                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para editar listas de email.';
530                                return $return;
531                        }
532                       
533                        $return['status'] = true;
534
535                        //Retira os uids duplicados se existir
536                        $array_tmp = array();
537                        $array_tmp = array_unique($new_values['members']);
538                        $new_values['members'] = $array_tmp;
539                       
540                        $old_values = $this->get_scl_info($new_values['uidnumber'], $new_values['manager_context']);
541                        $diff = array_diff($new_values, $old_values);
542                        $dn = $old_values['dn'];
543                       
544                        //echo '<pre>';
545                        //print_r($new_values['participantCanSendMail']);
546                        //print_r($old_values['participantCanSendMail']);
547                       
548                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
549                        // ADD ATTRS
550                        if (($new_values['participantCanSendMail'] == 'on') && ($old_values['participantCanSendMail'] == ''))
551                        {
552                                $ldap_add['participantCanSendMail'] = "TRUE";
553                                $this->db_functions->write_log("Ativado participantCanSendMail da SCL da lista de email " . $new_values['mail'],'','','','');
554                        }
555                        if (($new_values['accountRestrictive'] == 'on') && ($old_values['accountRestrictive'] == ''))
556                        {
557                                $ldap_add['accountRestrictive'] = "mailListRestriction";
558                                $ldap_add['accountDeliveryMessage']     = 'OK';
559                                $this->db_functions->write_log("Ativado mailListRestriction da SCL da lista de email " . $new_values['mail'],'','','','');
560                        }
561                        if (count($ldap_add))
562                        {
563                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
564                                if (!$result['status'])
565                                {
566                                        $return['status'] = false;
567                                        $return['msg'] .= $result['msg'];
568                                }
569                        }
570                       
571                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
572                        // REMOVE ATTRS
573                        if (($new_values['participantCanSendMail'] != 'on') && ($old_values['participantCanSendMail'] == 'TRUE'))
574                        {
575                                $ldap_remove['participantCanSendMail']  = array();
576                                $this->db_functions->write_log("Desativado participantCanSendMail da SCL da lista de email " . $new_values['mail'],'','','','');
577                        }
578                        if (($new_values['accountRestrictive'] != 'on') && ($old_values['accountRestrictive'] == 'mailListRestriction'))
579                        {
580                                $ldap_remove['accountRestrictive']      = array();
581                                $ldap_remove['accountDeliveryMessage']  = array();
582                                $this->db_functions->write_log("Desativado restriᅵᅵo (mailListRestriction) da SCL da lista de email " . $new_values['mail'],'','','','');
583                        }
584                        if (count($ldap_remove))
585                        {
586                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
587                                if (!$result['status'])
588                                {
589                                        $return['status'] = false;
590                                        $return['msg'] .= $result['msg'];
591                                }
592                        }
593                       
594                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
595                        // USERS
596
597                        if (!$new_values['members'])
598                                $new_values['members'] = array();
599                        if (!$old_values['members'])
600                                $old_values['members'] = array();
601
602                        $add_users = array_diff($new_values['members'], $old_values['members']);
603                        $remove_users = array_diff($old_values['members'], $new_values['members']);
604                       
605                        if (count($add_users)>0)
606                        {
607                                $array_emails_add = array();
608                                foreach($add_users as $uidnumber)
609                                {
610                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
611                                        $array_emails_add[] = $mail;
612                                        $this->db_functions->write_log("Adicionado usuario $mail a SCL da lista $dn",'',$uidnumber,'','');
613                                }
614                                $result = $this->ldap_functions->add_user2maillist_scl($dn, $array_emails_add);
615                                if (!$result['status'])
616                                {
617                                        $return['status'] = false;
618                                        $return['msg'] .= $result['msg'];
619                                }
620                               
621                        }
622                       
623                        if (count($remove_users)>0)
624                        {
625                                $array_emails_remove = array();
626                                foreach($remove_users as $uidnumber)
627                                {
628                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
629                                        $array_emails_remove[] = $mail;
630                                        $this->db_functions->write_log("Removido usuario $mail da SCP da lista $dn",'',$uidnumber,'','');
631                                }
632                                $result = $this->ldap_functions->remove_user2maillist_scl($dn, $array_emails_remove);
633                                if (!$result['status'])
634                                {
635                                        $return['status'] = false;
636                                        $return['msg'] .= $result['msg'];
637                                }
638                        }
639                       
640                        return $return;
641                }                               
642               
643                function get_info($uidnumber, $context)
644                {
645                        $maillist_info_ldap = $this->ldap_functions->get_maillist_info($uidnumber, $context);
646                        return $maillist_info_ldap;
647                }
648
649                function get_adm_info($uidnumber, $context) //Funcao que usa get_adm_maillist_info para trazer dados dos administradores
650                                                            // de listas;
651                {
652                        $maillist_info_ldap = $this->ldap_functions->get_adm_maillist_info($uidnumber, $context);
653                        return $maillist_info_ldap;
654                }
655
656
657                function get_scl_info($uidnumber, $context)
658                {
659                        $maillist_info_ldap = $this->ldap_functions->get_maillist_scl_info($uidnumber, $context);
660                        return $maillist_info_ldap;
661                }
662               
663                function delete($params)
664                {
665                        // Verifica o acesso do gerente
666                        if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'delete_maillists'))
667                        {
668                                $return['status'] = false;
669                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para excluir listas de email.';
670                                return $return;
671                        }
672
673                        $return['status'] = true;
674
675                        $uidnumber = $params['uidnumber'];
676                        $uid = $this->ldap_functions->uidnumber2uid($uidnumber);
677
678                        //LDAP
679                        $result_ldap = $this->ldap_functions->delete_maillist($uidnumber);
680                        if (!$result_ldap['status'])
681                        {
682                                $return['status'] = false;
683                                $return['msg'] .= $result_ldap['msg'];
684                        }
685                       
686                        if ($return['status'] == true)
687                        {
688                                $this->db_functions->write_log('Deletado lista de email','',$uid,'','');
689                        }
690                       
691                        return $return;
692                }               
693               
694                //Rotina que visa atualizar o Mailman com base na criaᅵᅵo de nova lista no RHDS, em tempo real
695                //Utiliza socket para disparar um HTTP Post remoto
696                function synchronize_mailman($dados_lista){
697                        //porta do servidor de acesso via rede
698                        $porta_mailman = $GLOBALS['phpgw_info']['server']['porta_mailman'];
699                        //endereï¿œo IP do servidor mailman
700                        $host_mailman = $GLOBALS['phpgw_info']['server']['host_mailman'];
701                        //endereco da URL para o script PHP que faz a atualizacao no recurso remoto
702                        //$url_mailman = '/servidor-listas/mailman_request.php';
703                        $url_mailman = $GLOBALS['phpgw_info']['server']['url_mailman'];
704                        //o nome da lista passado como parametro no array associativo (algo tipo "uid=lista-X")
705                        $lista_mailman = $dados_lista['uid'];
706                        $op_mailman = $dados_lista['op'];
707                       
708                        if(strlen($lista_mailman) <= 0){
709                                $msg_socket = "[ERROSOCKET00] " . date("d/m/Y-G:i:s") . " -[".$_SERVER['REMOTE_ADDR']."]"."-[".$_SERVER['REQUEST_URI']."]"."-[".$_SERVER['SCRIPT_NAME']."]:"." Sincronismo MailMan-RHDS falhou ao adicionar nova lista: Motivo= nome da lista(\"$lista_mailman\") invalido.";
710                                $retorno['status'] = false;
711                                $retorno['msg'] = $msg_socket;
712                                //Grava no logger o erro
713                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
714                        return $retorno;                               
715                        }
716                       
717                        //Cria o socket TCP/IP
718                        $socket = socket_create(AF_INET, SOCK_STREAM, 0);
719                       
720                        $retorno['status'] = true;
721                       
722                        //Em caso de erro, retorna um vetor serializado contendo (falso, string erro)
723                        if ($socket < 0) {
724                                $msg_socket = "[ERROSOCKET01] " . date("d/m/Y-G:i:s") . " -[".$_SERVER['REMOTE_ADDR']."]"."-[".$_SERVER['REQUEST_URI']."]"."-[".$_SERVER['SCRIPT_NAME']."]:"." Sincronismo MailMan-RHDS falhou ao adicionar nova lista: php socket_create() falhou. Motivo= " . socket_strerror($socket);;
725                                $retorno['status'] = false;
726                                $retorno['msg'] = $msg_socket;
727                                //Grava no logger o erro
728                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
729                        return $retorno;
730                        }
731                       
732                        //Estabelece a conexï¿œo com o recurso
733                        $resultado = socket_connect($socket, $host_mailman, $porta_mailman);
734                       
735                        //Em caso de erro, retorna um vetor serializado contendo (falso, string erro)
736                        if ($resultado < 0) {
737                                $msg_socket = "[ERROSOCKET02] " .date("d/m/Y-G:i:s") . " -[".$_SERVER['REMOTE_ADDR']."]"."-[".$_SERVER['REQUEST_URI']."]"."-[".$_SERVER['SCRIPT_NAME']."]:"." Sincronismo MailMan-RHDS falhou ao adicionar nova lista: php socket_connect() [$resultado] falhou. Motivo=  " . socket_strerror($resultado);
738                                $retorno['status'] = false;
739                                $retorno['msg'] = $msg_socket;
740                                //Grava no logger o erro
741                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
742                        return $retorno;                               
743                        }                       
744                       
745                        //Envia o dado "lid", contendo o nome da lista recebido como parametro da funcao, e "op=1" (nova lista)
746                        $post_lista = "uid=".$lista_mailman."&op=".$op_mailman;
747                       
748                        //Define o tipo de mensagem que vai ser disparada via socket: no caso, um HTTP Post
749                        $dados_envio_socket = "POST $url_mailman HTTP/1.0\r\n";
750                        $dados_envio_socket .= "Host: $host_mailman\r\n";
751                        $dados_envio_socket .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html,text/plain;\r\n";
752                        $dados_envio_socket .= "Accept-Charset: ISO-8859-1,utf-8;\r\n";
753                        $dados_envio_socket .= "Accept-Language: pt-br,en-us,en;\r\n";
754                        $dados_envio_socket .= "Content-Type: application/x-www-form-urlencoded\r\n";
755                        $dados_envio_socket .= "Connection: close\r\n";
756                        $dados_envio_socket .= "Content-Length: " . strlen($post_lista) . "\r\n";
757                        $dados_envio_socket .= "\r\n";
758                        $dados_envio_socket .= "$post_lista\r\n";
759                       
760                        //String que contï¿œm a saï¿œda do processamento remoto
761                        $dados_saida_socket = '';
762                       
763                        //Efetiva os dados de entrada para o processamento no socket remoto
764                        if (socket_write ($socket, $dados_envio_socket, strlen($dados_envio_socket))){
765                                while ($leitura_socket  = socket_read($socket, 2048)) {
766                                $dados_saida_socket .= $leitura_socket;
767                                }
768                        }
769                        else{
770                                $msg_socket = "[ERROSOCKET03] " .date("d/m/Y-G:i:s") . " -[".$_SERVER['REMOTE_ADDR']."]"."-[".$_SERVER['REQUEST_URI']."]"."-[".$_SERVER['SCRIPT_NAME']."]:"." Sincronismo MailMan-RHDS falhou ao adicionar nova lista: php socket_write() [$dados_envio_socket] falhou. Motivo=  " . socket_strerror(socket_last_error());
771                                $retorno['status'] = false;
772                                $retorno['msg'] = $msg_socket;
773                                //Grava no logger o erro
774                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
775                        return $retorno;                                       
776                        }
777                       
778                        //Captura a partir da string total da resposta do socket, a secᅵᅵo serializada a ser tratada
779                        $vet_dados_saida = explode('@@', $dados_saida_socket);
780                        if(count($vet_dados_saida[1]) > 0){
781                                $dados_serializados_saida = unserialize($vet_dados_saida[1]);
782                        }
783                        else{
784                                $msg_socket = "[ERROSOCKET04] " .date("d/m/Y-G:i:s") . " -[".$_SERVER['REMOTE_ADDR']."]"."-[".$_SERVER['REQUEST_URI']."]"."-[".$_SERVER['SCRIPT_NAME']."]:"." Sincronismo MailMan-RHDS falhou ao adicionar nova lista: php resposta do socket nula/invalida. Conteudo=  " . $dados_saida_socket;
785                                $retorno['status'] = false;
786                                $retorno['msg'] = $msg_socket;
787                                //Grava no logger o erro
788                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
789                                return $retorno;
790                        }
791
792                        //Encerra a conexï¿œo com o recurso remoto
793                        socket_close($socket); 
794                       
795                        //Retorna um array contendo (true, dados serializados de processamento remoto)
796                        return $dados_serializados_saida;               
797                }
798                //Usada para fazer rebind em caso de escrita em slave (quando volta uma referral)
799        }
800?>
Note: See TracBrowser for help on using the repository browser.