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

Revision 903, 27.6 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                        //Modifica a geracao de senha pro mailman
111                        $senhaCripto                                            = $params['listPass'];
112                        $maillist_info['listPass']                              = encriptar($senhaCripto);
113                        //$maillist_info['listPass']                            = 'senha';
114                        $maillist_info['objectClass'][0]                        = 'posixAccount';
115                        $maillist_info['objectClass'][1]                        = 'inetOrgPerson';
116                        $maillist_info['objectClass'][2]                        = 'shadowAccount';
117                        //$maillist_info['objectClass'][3]                      = 'qmailuser';
118                        $maillist_info['objectClass'][3]                        = 'phpgwAccount';
119                        $maillist_info['objectClass'][4]                        = 'top';
120                        $maillist_info['objectClass'][5]                        = 'person';
121                        $maillist_info['objectClass'][6]                        = 'organizationalPerson';               
122                        $maillist_info['objectClass'][7]                        = 'mailman';           
123                        //$maillist_info['phpgwAccountExpires']                 = '-1';
124                        //$maillist_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '-1';
125                        if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']))
126                                        {
127                                        $maillist_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '-1';
128                                        }
129                                else
130                                        {
131                                        $maillist_info['phpgwaccountexpires'] = '-1';
132                                        }
133                        $maillist_info['phpgwAccountType']                      = 'l';
134                        $maillist_info['phpgwAccountStatus']                    = 'A';
135                        $maillist_info['uidnumber']                             = $id;
136                        $maillist_info['gidnumber']                             = '0';
137                        $maillist_info['deliveryMode']                          = 'forwardOnly';
138                       
139                        if ($params['accountStatus'] == 'on')
140                                $maillist_info['accountStatus'] = 'active';
141                       
142                        if ($params['phpgwAccountVisible'] == 'on')
143                                $maillist_info['phpgwAccountVisible'] = '-1';
144
145                        if ($params['defaultMemberModeration'] == 'on')
146                                $maillist_info['defaultMemberModeration'] = '1';
147
148                        foreach($params['members'] as $index=>$uidnumber)
149                        {
150                                $this->db_functions->write_log($params['context'],",",$params['cn']);
151                                $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
152
153                                //Este if foi adicionado para tratar a situacao de uma lista ser criada com usuario(s) externo(s)
154                                if($mail == '')
155                                {
156                                        //adiciona ao vetor o(s) usuario(s) externo(s)
157                                        $maillist_info['mailForwardingAddress'][] = $uidnumber;
158                                } else{
159                                        //adiciona ao vetor o(s) usuario(s) exitente(s) no RHDS
160                                        $maillist_info['mailForwardingAddress'][] = $mail;
161                                }
162
163                                //$maillist_info['mailForwardingAddress'][] = $mail;
164                                $this->db_functions->write_log("Adicionado usuario $mail a lista ".$params['cn']." no momento da criaᅵᅵo",$dn,$uidnumber,'','');
165                        }
166                        $result = $this->ldap_functions->ldap_add_entry($dn, $maillist_info);                   
167
168                        if (!$result['status'])
169                        {
170                                $return['status'] = false;
171                                $return['msg'] .= $result['msg'];
172                        }
173                       
174                        if ($return['status'] == true)
175                        {
176                                $this->db_functions->write_log('Criado lista de email','',$dn,'','');
177                        }
178                       
179                        return $return;
180                }
181               
182                function save($new_values)
183                {
184                        // Verifica o acesso do gerente
185        /*              if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_maillists'))
186                        {
187                                $return['status'] = false;
188                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para editar listas de email.';
189                                return $return;
190                        }
191*/
192                        if ($params['accountAdm'] == 'on'){
193                                $teste = 'A';
194                                $return['msg'] = '$teste';
195                        }
196
197                        $return['status'] = true;
198                       
199                        //Retira os uids duplicados se existir
200                        $array_tmp = array();
201                        $array_tmp = array_unique($new_values['members']);
202                        $new_values['members'] = $array_tmp;
203                       
204                        $old_values = $this->get_info($new_values['uidnumber'], $new_values['manager_context']);
205                        $diff = array_diff($new_values, $old_values);
206                       
207                        $dn = 'uid=' . $old_values['uid'] . ',' . $old_values['context'];
208                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
209                        // RENAME
210/*                      if ($diff['context'] || $diff['uid'])
211                        {
212                                $newrdn = 'uid=' . $new_values['uid'];
213                                $newparent = $new_values['context'];
214                                $result =  $this->ldap_functions->change_user_context($dn, $newrdn, $newparent);
215                                if (!$result['status'])
216                                {
217                                        $return['status'] = false;
218                                        $return['msg'] .= $result['msg'];
219                                }
220                                else
221                                {
222                                        $dn = $newrdn . ',' . $newparent;
223                                        $old_dn = $old_values['uid'];
224                                        $this->db_functions->write_log("Renomeado login da lista de $old_dn para $dn",'',$dn,$old_values['uid'],'');
225                                }
226                        }*/
227                       
228                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
229                        // REPLACE MAIL || CN || SN
230                        if ($new_values['mail'] != $old_values['mail'])
231                        {
232                                $ldap_mod_replace['mail'] = $new_values['mail'];
233                                $this->db_functions->write_log('Modificado email da lista para ' . $new_values['mail'],'',$dn,'','');
234                        }
235
236                        if ($new_values['listPass'] != $old_values['listPass'])
237                        {
238//                              $tmpPassword     = '{md5}' . base64_encode(pack("H*",md5($new_values['userPassword'])));
239                                $senhaCripto     = $new_values['listPass'];
240                                $tmpPassword     = encriptar($senhaCripto);
241                                $ldap_mod_replace['listPass'] = $tmpPassword;
242                                $this->db_functions->write_log('Modificado senha da lista para ' . $tmpPassword ,'',$dn,'','');
243                        }
244
245                        if ($new_values['cn'] != $old_values['cn'])
246                        //if ($diff['uid'])
247                        {
248                                $ldap_mod_replace['cn'] = $new_values['uid'];
249                                $ldap_mod_replace['sn'] = $new_values['uid'];
250                //              $ldap_mod_replace['uid'] = $new_values['uid'];
251                                $this->db_functions->write_log("Modificado common name da lista $dn",'',$dn,'','');
252                        }
253                       
254        /*              if ($diff['sn'])
255                        {
256                                $ldap_mod_replace['uid'] = $new_values['uid'];
257                        }
258        */             
259                        if (count($ldap_mod_replace))
260                        {
261                                $result = $this->ldap_functions->replace_user_attributes($dn, $ldap_mod_replace);
262                                if (!$result['status'])
263                                {
264                                        $return['status'] = false;
265                                        $return['msg'] .= $result['msg'];
266                                }
267                        }
268                       
269                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
270                        // REMOVE ATTRS
271                        if (($old_values['accountStatus'] == 'active') && ($new_values['accountStatus'] != 'on'))
272                                $ldap_remove['accountStatus']   = array();
273                       
274                        if (($old_values['defaultMemberModeration'] == '1') && ($new_values['defaultMemberModeration'] != 'on'))
275                                $ldap_remove['defaultMemberModeration']   = array();           
276
277                               
278                        if (($old_values['phpgwAccountVisible'] == '-1') && ($new_values['phpgwAccountVisible'] != 'on'))
279                                $ldap_remove['phpgwAccountVisible']     = array();
280                       
281                        if (count($ldap_remove))
282                        {
283                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
284                                if (!$result['status'])
285                                {
286                                        $return['status'] = false;
287                                        $return['msg'] .= $result['msg'];
288                                }
289                        }
290                       
291                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
292                        // ADD ATTRS
293                        if (($old_values['accountStatus'] != 'active') && ($new_values['accountStatus'] == 'on'))
294                                $ldap_add['accountStatus']      = 'active';
295
296                        if (($old_values['defaultMemberModeration'] != '1') && ($new_values['defaultMemberModeration'] == 'on'))
297                                $ldap_add['defaultMemberModeration']      = '1';       
298                       
299               
300                        if (($old_values['phpgwAccountVisible'] != '-1') && ($new_values['phpgwAccountVisible'] == 'on'))
301                                $ldap_add['phpgwAccountVisible'] = '-1';
302                       
303                        if (count($ldap_add))
304                        {
305                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
306                                if (!$result['status'])
307                                {
308                                        $return['status'] = false;
309                                        $return['msg'] .= $result['msg'];
310                                }
311                        }
312                       
313                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
314                        // USERS
315
316                        if (!$new_values['members'])
317                                $new_values['members'] = array();
318                        if (!$old_values['members'])
319                                $old_values['members'] = array();
320
321                        $add_users = array_diff($new_values['members'], $old_values['members']);
322
323                        $remove_users = array_diff($old_values['members'], $new_values['members']);
324                       
325                        if (count($add_users)>0)
326                        {
327                                $array_emails_add = array();
328                                foreach($add_users as $uidnumber)
329                                {
330                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
331
332                                        //caso nao exista o e-mail do usuario informado (usuario externo);
333                                        if(empty($mail)){
334                                                $mail = $uidnumber;
335                                        }
336
337                                        $array_emails_add[] = $mail;
338                                        $this->db_functions->write_log("Adicionado usuario $mail $teste a lista",$dn,$uidnumber,'','');
339                                }
340                                        $this->ldap_functions->add_user2maillist($new_values['uidnumber'], $array_emails_add);
341                        }
342                        if (count($remove_users)>0)
343                        {
344                                $array_emails_remove = array();
345                                foreach($remove_users as $uidnumber)
346                                {
347                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
348                                       
349                                        //caso nao exista o e-mail do usuario informado (usuario externo);
350                                        if (empty($mail))
351                                                $mail = $uidnumber;
352                                       
353                                        $array_emails_remove[] = $mail;
354                                        $this->db_functions->write_log("Removido usuario $mail da lista",$dn,$uidnumber,'','');
355                                }
356                                $this->ldap_functions->remove_user2maillist($new_values['uidnumber'], $array_emails_remove);
357                                $this->ldap_functions->remove_user2maillist_adm($new_values['uidnumber'], $array_emails_remove);
358
359                        }
360                       
361                        return $return;
362                }
363
364                function save_adm($new_values) // Funcao usada para salvar alteracoes de administradores de listas
365                {
366                        // Verifica o acesso do gerente
367        /*                      if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'adm_maillists'))
368                        {
369                                $return['status'] = false;
370                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para editar listas de email.';
371                                return $return;
372                        }
373*/
374                        $return['status'] = true;
375                       
376                        //Retira os uids duplicados se existir
377                        $array_tmp = array();
378                        $array_tmp = array_unique($new_values['members']);
379                        $new_values['members'] = $array_tmp;
380                       
381                        $old_values = $this->get_adm_info($new_values['uidnumber'], $new_values['manager_context']);
382                        $diff = array_diff($new_values, $old_values);
383                       
384                        $dn = 'uid=' . $old_values['uid'] . ',' . $old_values['context'];
385                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
386                        // ADD ATTRS
387                        if (($old_values['accountStatus'] != 'active') && ($new_values['accountStatus'] == 'on'))
388                                $ldap_add['accountStatus']      = 'active';
389                       
390                        if (($old_values['phpgwAccountVisible'] != '-1') && ($new_values['phpgwAccountVisible'] == 'on'))
391                                $ldap_add['phpgwAccountVisible'] = '-1';
392                       
393                        if (count($ldap_add))
394                        {
395                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
396                                if (!$result['status'])
397                                {
398                                        $return['status'] = false;
399                                        $return['msg'] .= $result['msg'];
400                                }
401                        }
402                       
403                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
404                        // USERS
405
406                        if (!$new_values['members'])
407                                $new_values['members'] = array();
408                        if (!$old_values['members'])
409                                $old_values['members'] = array();
410
411                        $add_users = array_diff($new_values['members'], $old_values['members']);
412
413                        $remove_users = array_diff($old_values['members'], $new_values['members']);
414                       
415                        if (count($add_users)>0)
416                        {
417                                $array_emails_add = array();
418                                foreach($add_users as $uidnumber)
419                                {
420                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
421                                        $array_emails_add[] = $mail;
422                                        $this->db_functions->write_log("Adicionado usuario $mail $teste a lista",$dn,$uidnumber,'','');
423                                }
424                                        $this->ldap_functions->add_user2maillist_adm($new_values['uidnumber'], $array_emails_add);
425                        }
426                        if (count($remove_users)>0)
427                        {
428                                $array_emails_remove = array();
429                                foreach($remove_users as $uidnumber)
430                                {
431                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
432                                       
433                                        // Nï¿œo achei o email do usuï¿œrio no ldap.
434                                        if (empty($mail))
435                                                $mail = $uidnumber;
436                                       
437                                        $array_emails_remove[] = $mail;
438                                        $this->db_functions->write_log("Removido usuario $mail da lista",$dn,$uidnumber,'','');
439                                }
440                                $this->ldap_functions->remove_user2maillist_adm($new_values['uidnumber'], $array_emails_remove);
441
442                        }
443                       
444                        return $return;
445                }               
446
447               
448                function save_scl($new_values)
449                {
450                        // Verifica o acesso do gerente
451        /*              if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_maillists'))
452                        {
453                                $return['status'] = false;
454                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para editar listas de email.';
455                                return $return;
456                        }
457        */             
458                        $return['status'] = true;
459
460                        //Retira os uids duplicados se existir
461                        $array_tmp = array();
462                        $array_tmp = array_unique($new_values['members']);
463                        $new_values['members'] = $array_tmp;
464                       
465                        $old_values = $this->get_scl_info($new_values['uidnumber'], $new_values['manager_context']);
466                        $diff = array_diff($new_values, $old_values);
467                        $dn = $old_values['dn'];
468                       
469                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
470                        // ADD ATTRS
471                        if (($new_values['participantCanSendMail'] == 'on') && ($old_values['participantCanSendMail'] == ''))
472                        {
473                                $ldap_add['participantCanSendMail'] = "TRUE";
474                                $this->db_functions->write_log("Ativado participantCanSendMail da SCL da lista de email " . $new_values['mail'],'','','','');
475                        }
476                        if (($new_values['accountRestrictive'] == 'on') && ($old_values['accountRestrictive'] == ''))
477                        {
478                                $ldap_add['accountRestrictive'] = "mailListRestriction";
479                                $ldap_add['accountDeliveryMessage']     = 'OK';
480                                $this->db_functions->write_log("Ativado mailListRestriction da SCL da lista de email " . $new_values['mail'],'','','','');
481                        }
482                        if (count($ldap_add))
483                        {
484                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
485                                if (!$result['status'])
486                                {
487                                        $return['status'] = false;
488                                        $return['msg'] .= $result['msg'];
489                                }
490                        }
491                       
492                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
493                        // REMOVE ATTRS
494                        if (($new_values['participantCanSendMail'] != 'on') && ($old_values['participantCanSendMail'] == 'TRUE'))
495                        {
496                                $ldap_remove['participantCanSendMail']  = array();
497                                $this->db_functions->write_log("Desativado participantCanSendMail da SCL da lista de email " . $new_values['mail'],'','','','');
498                        }
499                        if (($new_values['accountRestrictive'] != 'on') && ($old_values['accountRestrictive'] == 'mailListRestriction'))
500                        {
501                                $ldap_remove['accountRestrictive']      = array();
502                                $ldap_remove['accountDeliveryMessage']  = array();
503                                $this->db_functions->write_log("Desativado restriᅵᅵo (mailListRestriction) da SCL da lista de email " . $new_values['mail'],'','','','');
504                        }
505                        if (count($ldap_remove))
506                        {
507                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
508                                if (!$result['status'])
509                                {
510                                        $return['status'] = false;
511                                        $return['msg'] .= $result['msg'];
512                                }
513                        }
514                       
515                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
516                        // USERS
517
518                        if (!$new_values['members'])
519                                $new_values['members'] = array();
520                        if (!$old_values['members'])
521                                $old_values['members'] = array();
522
523                        $add_users = array_diff($new_values['members'], $old_values['members']);
524                        $remove_users = array_diff($old_values['members'], $new_values['members']);
525                       
526                        if (count($add_users)>0)
527                        {
528                                $array_emails_add = array();
529                                foreach($add_users as $uidnumber)
530                                {
531                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
532                                        $array_emails_add[] = $mail;
533                                        $this->db_functions->write_log("Adicionado usuario $mail a SCL da lista $dn",'',$uidnumber,'','');
534                                }
535                                $result = $this->ldap_functions->add_user2maillist_scl($dn, $array_emails_add);
536                                if (!$result['status'])
537                                {
538                                        $return['status'] = false;
539                                        $return['msg'] .= $result['msg'];
540                                }
541                               
542                        }
543                       
544                        if (count($remove_users)>0)
545                        {
546                                $array_emails_remove = array();
547                                foreach($remove_users as $uidnumber)
548                                {
549                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
550                                        $array_emails_remove[] = $mail;
551                                        $this->db_functions->write_log("Removido usuario $mail da SCP da lista $dn",'',$uidnumber,'','');
552                                }
553                                $result = $this->ldap_functions->remove_user2maillist_scl($dn, $array_emails_remove);
554                                if (!$result['status'])
555                                {
556                                        $return['status'] = false;
557                                        $return['msg'] .= $result['msg'];
558                                }
559                        }
560                       
561                        return $return;
562                }                               
563               
564                function get_info($uidnumber, $context)
565                {
566                        $maillist_info_ldap = $this->ldap_functions->get_maillist_info($uidnumber, $context);
567                        return $maillist_info_ldap;
568                }
569
570                function get_adm_info($uidnumber, $context) //Funcao que usa get_adm_maillist_info para trazer dados dos administradores
571                                                            // de listas;
572                {
573                        $maillist_info_ldap = $this->ldap_functions->get_adm_maillist_info($uidnumber, $context);
574                        return $maillist_info_ldap;
575                }
576
577
578                function get_scl_info($uidnumber, $context)
579                {
580                        $maillist_info_ldap = $this->ldap_functions->get_maillist_scl_info($uidnumber, $context);
581                        return $maillist_info_ldap;
582                }
583               
584                function delete($params)
585                {
586                        // Verifica se usuario atual pertence ao grupo listAdmin para
587                        // ter permissao de excluir a lista de email
588                        $usuarioAtual = $_SESSION['phpgw_info']['expresso']['user']['account_lid'];
589                        if ($this->ldap_functions->is_user_listAdmin($usuarioAtual) != 1)
590                        {
591                                $return['status'] = false;
592                                $return['msg'] .= 'Vocï¿œ nï¿œo tem acesso para excluir listas de email.';
593                                $return['msg'] .= ' - oi';
594                                return $return;
595                        }
596
597                        $return['status'] = true;
598
599                        $uidnumber = $params['uidnumber'];
600                        $uid = $this->ldap_functions->uidnumber2uid($uidnumber);
601
602                        //LDAP
603                        $result_ldap = $this->ldap_functions->delete_maillist($uidnumber);
604                        if (!$result_ldap['status'])
605                        {
606                                $return['status'] = false;
607                                $return['msg'] .= $result_ldap['msg'];
608                        }
609                       
610                        if ($return['status'] == true)
611                        {
612                                $this->db_functions->write_log('Deletado lista de email','',$uid,'','');
613                        }
614                       
615                        return $return;
616                }               
617               
618                //Rotina que visa atualizar o Mailman com base na criaᅵᅵo de nova lista no RHDS, em tempo real
619                //Utiliza socket para disparar um HTTP Post remoto
620                function synchronize_mailman($dados_lista){
621                        //porta do servidor de acesso via rede
622                        $porta_mailman = $GLOBALS['phpgw_info']['server']['porta_mailman'];
623                        //endereï¿œo IP do servidor mailman
624                        $host_mailman = $GLOBALS['phpgw_info']['server']['host_mailman'];
625                        //endereco da URL para o script PHP que faz a atualizacao no recurso remoto
626                        //$url_mailman = '/servidor-listas/mailman_request.php';
627                        $url_mailman = $GLOBALS['phpgw_info']['server']['url_mailman'];
628                        //o nome da lista passado como parametro no array associativo (algo tipo "uid=lista-X")
629                        $lista_mailman = $dados_lista['uid'];
630                        $op_mailman = $dados_lista['op'];
631                       
632                        if(strlen($lista_mailman) <= 0){
633                                $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.";
634                                $retorno['status'] = false;
635                                $retorno['msg'] = $msg_socket;
636                                //Grava no logger o erro
637                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
638                        return $retorno;                               
639                        }
640                       
641                        //Cria o socket TCP/IP
642                        $socket = socket_create(AF_INET, SOCK_STREAM, 0);
643                       
644                        $retorno['status'] = true;
645                       
646                        //Em caso de erro, retorna um vetor serializado contendo (falso, string erro)
647                        if ($socket < 0) {
648                                $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);;
649                                $retorno['status'] = false;
650                                $retorno['msg'] = $msg_socket;
651                                //Grava no logger o erro
652                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
653                        return $retorno;
654                        }
655                       
656                        //Estabelece a conexï¿œo com o recurso
657                        $resultado = socket_connect($socket, $host_mailman, $porta_mailman);
658                       
659                        //Em caso de erro, retorna um vetor serializado contendo (falso, string erro)
660                        if ($resultado < 0) {
661                                $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);
662                                $retorno['status'] = false;
663                                $retorno['msg'] = $msg_socket;
664                                //Grava no logger o erro
665                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
666                        return $retorno;                               
667                        }                       
668                       
669                        //Envia o dado "lid", contendo o nome da lista recebido como parametro da funcao, e "op=1" (nova lista)
670                        $post_lista = "uid=".$lista_mailman."&op=".$op_mailman;
671                       
672                        //Define o tipo de mensagem que vai ser disparada via socket: no caso, um HTTP Post
673                        $dados_envio_socket = "POST $url_mailman HTTP/1.0\r\n";
674                        $dados_envio_socket .= "Host: $host_mailman\r\n";
675                        $dados_envio_socket .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html,text/plain;\r\n";
676                        $dados_envio_socket .= "Accept-Charset: ISO-8859-1,utf-8;\r\n";
677                        $dados_envio_socket .= "Accept-Language: pt-br,en-us,en;\r\n";
678                        $dados_envio_socket .= "Content-Type: application/x-www-form-urlencoded\r\n";
679                        $dados_envio_socket .= "Connection: close\r\n";
680                        $dados_envio_socket .= "Content-Length: " . strlen($post_lista) . "\r\n";
681                        $dados_envio_socket .= "\r\n";
682                        $dados_envio_socket .= "$post_lista\r\n";
683                       
684                        //String que contï¿œm a saï¿œda do processamento remoto
685                        $dados_saida_socket = '';
686                       
687                        //Efetiva os dados de entrada para o processamento no socket remoto
688                        if (socket_write ($socket, $dados_envio_socket, strlen($dados_envio_socket))){
689                                while ($leitura_socket  = socket_read($socket, 2048)) {
690                                $dados_saida_socket .= $leitura_socket;
691                                }
692                        }
693                        else{
694                                $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());
695                                $retorno['status'] = false;
696                                $retorno['msg'] = $msg_socket;
697                                //Grava no logger o erro
698                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
699                        return $retorno;                                       
700                        }
701                       
702                        //Captura a partir da string total da resposta do socket, a secᅵᅵo serializada a ser tratada
703                        $vet_dados_saida = explode('@@', $dados_saida_socket);
704                        if(count($vet_dados_saida[1]) > 0){
705                                $dados_serializados_saida = unserialize($vet_dados_saida[1]);
706                        }
707                        else{
708                                $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;
709                                $retorno['status'] = false;
710                                $retorno['msg'] = $msg_socket;
711                                //Grava no logger o erro
712                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
713                                return $retorno;
714                        }
715
716                        //Encerra a conexï¿œo com o recurso remoto
717                        socket_close($socket); 
718                       
719                        //Retorna um array contendo (true, dados serializados de processamento remoto)
720                        return $dados_serializados_saida;               
721                }
722                //Usada para fazer rebind em caso de escrita em slave (quando volta uma referral)
723        }
724?>
Note: See TracBrowser for help on using the repository browser.