source: contrib/listAdmin/inc/class.maillist.inc.php @ 3312

Revision 3312, 27.8 KB checked in by rafaelraymundo, 14 years ago (diff)

Ticket #1174 - Disponibilização do módulo de Listas(Mailman)

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.functions.inc.php');
15       
16        class maillist
17        {
18                var $ldap_functions;
19                var $db_functions;
20                var $functions;
21                var $current_config;
22               
23               
24                function maillist()
25                {
26                        $this->ldap_functions = new ldap_functions;
27                        $this->db_functions = new db_functions;
28                        $this->functions = new functions;
29                        $this->current_config = $_SESSION['phpgw_info']['expresso']['listAdmin'];
30                }
31               
32                function validate_fields($params)
33                {
34                        return $this->ldap_functions->validate_fields_maillist($params);
35                }
36               
37                function create($params)
38                {
39                        // Verifica o acesso do gerente
40        /*              if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'add_maillists'))
41                        {
42                                $return['status'] = false;
43                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para adicionar listas de email.';
44                                return $return;
45                        }
46        */             
47
48                        $return['status'] = true;
49                       
50                        //Retira os uids duplicados se existir
51                        $array_tmp = array();
52                        $array_tmp = array_unique($params['members']);
53                        $params['members'] = $array_tmp;
54                       
55                                // Pega ID do BD e incrementa de 1 (vai ser o uidnumber da lista)
56                        $id = (($this->db_functions->get_next_id()) + 1);
57                       
58                        // Incrementa o id no BD.
59                        $this->db_functions->increment_id($id,'accounts');
60
61                        //DN do repositorio das listas de e-mail; usado para gravacao de listas manuais
62                        $dnListas = $this->current_config['dn_listas'];
63                        //Dominio do servidor de listas; usado na composicao do endereco de e-mail das listas
64                        $dominioListas = $this->current_config['dominio_listas'];
65
66                        // Cria array para incluir no LDAP
67                        //$dn = 'uid=' . $params['uid'] . ',' . $params['context'];
68                        $dn = 'uid=' . $params['uid'] . ',' . $dnListas;
69                       
70                        $maillist_info = array();
71                        $maillist_info['uid']                                   = $params['uid']; 
72                        $maillist_info['givenName']                             = 'MailList';
73                        $maillist_info['sn']                                    = $params['uid'];
74                        $maillist_info['cn']                                    = $params['uid'];
75                       
76                        $maillist_info['homeDirectory']                         = '/home/false';
77                        $maillist_info['loginShell']                            = '/bin/false';
78                        $maillist_info['mail']                                  = $params['uid'] . "@" . $dominioListas;
79                        $maillist_info['description']                           = $params['description'];
80                       
81                        $expressoAdmin                                          = $GLOBALS['phpgw_info']['server']['header_admin_user'];
82                        //Obtem uidnumber baseado no uid do usuario expresso-admin
83                        $admUidnumber                                           = $this->ldap_functions->uid2uidnumber($expressoAdmin);
84                        //Obten email baseado no uidnumber do usuario expresso-admin
85                        $adminlista                                             = $this->ldap_functions->uidnumber2mail($admUidnumber);
86
87                        //Pega o id do usuario atual da sessao
88                        $usuarioAtual                                           = $_SESSION['phpgw_info']['expresso']['user']['account_lid'];
89                        //Pega o uidnumber do usuario atual
90                        $uidUsuarioAtual                                        = $this->ldap_functions->uid2uidnumber($usuarioAtual);
91                        //Pega o email do usuario atual
92                        $mailUsuarioAtual                                       = $this->ldap_functions->uidnumber2mail($uidUsuarioAtual);
93
94                        //adiciona o expresso-admin como administrador padrao da lista no campo admlista
95                        $adm_info['admlista'][0]                                = $adminlista;
96//                      system('echo "admlista: '.$GLOBALS['phpgw_info']['server']['header_admin_user'].'">>/tmp/teste.log');
97                        //adiciona o usuario corrente como administrador da lista
98                        $adm_info['admlista'][1]                                = $mailUsuarioAtual;
99
100                        //verifica se o usuario logado (corrente) eh igual ao administrador padrao (expresso-admin)
101                        if($adm_info['admlista'][0] == $adm_info['admlista'][1]) {
102                                $maillist_info['admlista'][0] = $adm_info['admlista'][0];
103                        }else {
104                                $maillist_info['admlista'][0] = $adm_info['admlista'][0];
105                                $maillist_info['admlista'][1] = $adm_info['admlista'][1];
106                        }
107
108
109                        //Modifica a geracao de senha pro mailman
110                        $senhaCripto                                            = $params['listPass'];
111                        $maillist_info['listPass']                              = $senhaCripto;
112//                      system('echo "listPass: '.$senhaCripto.'">>/tmp/teste.log');
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                        $opts = null;
180                        $obj = null;
181                        return $return;
182                }
183               
184                function save($new_values)
185                {
186                        // Verifica o acesso do gerente
187        /*              if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_maillists'))
188                        {
189                                $return['status'] = false;
190                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para editar listas de email.';
191                                return $return;
192                        }
193*/
194                        if ($params['accountAdm'] == 'on'){
195                                $teste = 'A';
196                                $return['msg'] = '$teste';
197                        }
198
199                        $return['status'] = true;
200                       
201                        //Retira os uids duplicados se existir
202                        $array_tmp = array();
203                        $array_tmp = array_unique($new_values['members']);
204                        $new_values['members'] = $array_tmp;
205                       
206                        $old_values = $this->get_info($new_values['uidnumber'], $new_values['manager_context']);
207                        $diff = array_diff($new_values, $old_values);
208                       
209                        $dn = 'uid=' . $old_values['uid'] . ',' . $old_values['context'];
210                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
211                        // RENAME
212/*                      if ($diff['context'] || $diff['uid'])
213                        {
214                                $newrdn = 'uid=' . $new_values['uid'];
215                                $newparent = $new_values['context'];
216                                $result =  $this->ldap_functions->change_user_context($dn, $newrdn, $newparent);
217                                if (!$result['status'])
218                                {
219                                        $return['status'] = false;
220                                        $return['msg'] .= $result['msg'];
221                                }
222                                else
223                                {
224                                        $dn = $newrdn . ',' . $newparent;
225                                        $old_dn = $old_values['uid'];
226                                        $this->db_functions->write_log("Renomeado login da lista de $old_dn para $dn",'',$dn,$old_values['uid'],'');
227                                }
228                        }*/
229                       
230                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
231                        // REPLACE MAIL || CN || SN
232                        if ($new_values['mail'] != $old_values['mail'])
233                        {
234                                $ldap_mod_replace['mail'] = $new_values['mail'];
235                                $this->db_functions->write_log('Modificado email da lista para ' . $new_values['mail'],'',$dn,'','');
236                        }
237
238                        if ($new_values['listPass'] != $old_values['listPass'])
239                        {
240//                              $tmpPassword     = '{md5}' . base64_encode(pack("H*",md5($new_values['userPassword'])));
241                                $senhaCripto     = $new_values['listPass'];
242                                $tmpPassword     = encriptar($senhaCripto);
243                                $ldap_mod_replace['listPass'] = $tmpPassword;
244                                $this->db_functions->write_log('Modificado senha da lista para ' . $tmpPassword ,'',$dn,'','');
245                        }
246
247                        if ($new_values['cn'] != $old_values['cn'])
248                        //if ($diff['uid'])
249                        {
250                                $ldap_mod_replace['cn'] = $new_values['uid'];
251                                $ldap_mod_replace['sn'] = $new_values['uid'];
252                //              $ldap_mod_replace['uid'] = $new_values['uid'];
253                                $this->db_functions->write_log("Modificado common name da lista $dn",'',$dn,'','');
254                        }
255                       
256        /*              if ($diff['sn'])
257                        {
258                                $ldap_mod_replace['uid'] = $new_values['uid'];
259                        }
260        */             
261                        if (count($ldap_mod_replace))
262                        {
263                                $result = $this->ldap_functions->replace_user_attributes($dn, $ldap_mod_replace);
264                                if (!$result['status'])
265                                {
266                                        $return['status'] = false;
267                                        $return['msg'] .= $result['msg'];
268                                }
269                        }
270                       
271                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
272                        // REMOVE ATTRS
273                        if (($old_values['accountStatus'] == 'active') && ($new_values['accountStatus'] != 'on'))
274                                $ldap_remove['accountStatus']   = array();
275                       
276                        if (($old_values['defaultMemberModeration'] == '1') && ($new_values['defaultMemberModeration'] != 'on'))
277                                $ldap_remove['defaultMemberModeration']   = array();           
278
279                               
280                        if (($old_values['phpgwAccountVisible'] == '-1') && ($new_values['phpgwAccountVisible'] != 'on'))
281                                $ldap_remove['phpgwAccountVisible']     = array();
282                       
283                        if (count($ldap_remove))
284                        {
285                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
286                                if (!$result['status'])
287                                {
288                                        $return['status'] = false;
289                                        $return['msg'] .= $result['msg'];
290                                }
291                        }
292                       
293                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
294                        // ADD ATTRS
295                        if (($old_values['accountStatus'] != 'active') && ($new_values['accountStatus'] == 'on'))
296                                $ldap_add['accountStatus']      = 'active';
297
298                        if (($old_values['defaultMemberModeration'] != '1') && ($new_values['defaultMemberModeration'] == 'on'))
299                                $ldap_add['defaultMemberModeration']      = '1';       
300                       
301               
302                        if (($old_values['phpgwAccountVisible'] != '-1') && ($new_values['phpgwAccountVisible'] == 'on'))
303                                $ldap_add['phpgwAccountVisible'] = '-1';
304                       
305                        if (count($ldap_add))
306                        {
307                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
308                                if (!$result['status'])
309                                {
310                                        $return['status'] = false;
311                                        $return['msg'] .= $result['msg'];
312                                }
313                        }
314                       
315                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
316                        // USERS
317
318                        if (!$new_values['members'])
319                                $new_values['members'] = array();
320                        if (!$old_values['members'])
321                                $old_values['members'] = array();
322
323                        $add_users = array_diff($new_values['members'], $old_values['members']);
324
325                        $remove_users = array_diff($old_values['members'], $new_values['members']);
326                       
327                        if (count($add_users)>0)
328                        {
329                                $array_emails_add = array();
330                                foreach($add_users as $uidnumber)
331                                {
332                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
333                                        usleep(100000);
334
335                                        //caso nao exista o e-mail do usuario informado (usuario externo);
336                                        if(empty($mail)){
337                                                $mail = $uidnumber;
338                                        }
339
340                                        $array_emails_add[] = $mail;
341                                        $this->db_functions->write_log("Adicionado usuario $mail $teste a lista",$dn,$uidnumber,'','');
342                                }
343                                        $this->ldap_functions->add_user2maillist($new_values['uidnumber'], $array_emails_add);
344                        }
345                        if (count($remove_users)>0)
346                        {
347                                $array_emails_remove = array();
348                                foreach($remove_users as $uidnumber)
349                                {
350                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
351                                       
352                                        //caso nao exista o e-mail do usuario informado (usuario externo);
353                                        if (empty($mail))
354                                                $mail = $uidnumber;
355                                       
356                                        $array_emails_remove[] = $mail;
357                                        $this->db_functions->write_log("Removido usuario $mail da lista",$dn,$uidnumber,'','');
358                                }
359                                $this->ldap_functions->remove_user2maillist($new_values['uidnumber'], $array_emails_remove);
360                                //$this->ldap_functions->remove_user2maillist_adm($new_values['uidnumber'], $array_emails_remove);
361
362                        }
363                       
364                        return $return;
365                }
366
367                function save_adm($new_values) // Funcao usada para salvar alteracoes de administradores de listas
368                {
369                        // Verifica o acesso do gerente
370        /*                      if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'adm_maillists'))
371                        {
372                                $return['status'] = false;
373                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para editar listas de email.';
374                                return $return;
375                        }
376*/
377                        $return['status'] = true;
378                       
379                        //Retira os uids duplicados se existir
380                        $array_tmp = array();
381                        $array_tmp = array_unique($new_values['members']);
382                        $new_values['members'] = $array_tmp;
383                       
384                        $old_values = $this->get_adm_info($new_values['uidnumber'], $new_values['manager_context']);
385                        $diff = array_diff($new_values, $old_values);
386                       
387                        $dn = 'uid=' . $old_values['uid'] . ',' . $old_values['context'];
388                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
389                        // ADD ATTRS
390                        if (($old_values['accountStatus'] != 'active') && ($new_values['accountStatus'] == 'on'))
391                                $ldap_add['accountStatus']      = 'active';
392                       
393                        if (($old_values['phpgwAccountVisible'] != '-1') && ($new_values['phpgwAccountVisible'] == 'on'))
394                                $ldap_add['phpgwAccountVisible'] = '-1';
395                       
396                        if (count($ldap_add))
397                        {
398                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
399                                if (!$result['status'])
400                                {
401                                        $return['status'] = false;
402                                        $return['msg'] .= $result['msg'];
403                                }
404                        }
405                       
406                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
407                        // USERS
408
409                        if (!$new_values['members'])
410                                $new_values['members'] = array();
411                        if (!$old_values['members'])
412                                $old_values['members'] = array();
413
414                        $add_users = array_diff($new_values['members'], $old_values['members']);
415
416                        $remove_users = array_diff($old_values['members'], $new_values['members']);
417                       
418                        if (count($add_users)>0)
419                        {
420                                $array_emails_add = array();
421                                foreach($add_users as $uidnumber)
422                                {
423                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
424                                        $array_emails_add[] = $mail;
425                                        $this->db_functions->write_log("Adicionado usuario $mail $teste a lista",$dn,$uidnumber,'','');
426                                }
427                                        $this->ldap_functions->add_user2maillist_adm($new_values['uidnumber'], $array_emails_add);
428                        }
429                        if (count($remove_users)>0)
430                        {
431                                $array_emails_remove = array();
432                                foreach($remove_users as $uidnumber)
433                                {
434                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
435                                       
436                                        // Nï¿œo achei o email do usuï¿œrio no ldap.
437                                        if (empty($mail))
438                                                $mail = $uidnumber;
439                                       
440                                        $array_emails_remove[] = $mail;
441                                        $this->db_functions->write_log("Removido usuario $mail da lista",$dn,$uidnumber,'','');
442                                }
443                                $this->ldap_functions->remove_user2maillist_adm($new_values['uidnumber'], $array_emails_remove);
444
445                        }
446                       
447                        return $return;
448                }               
449
450               
451                function save_scl($new_values)
452                {
453                        // Verifica o acesso do gerente
454        /*              if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_maillists'))
455                        {
456                                $return['status'] = false;
457                                $return['msg'] = 'Vocï¿œ nï¿œo tem acesso para editar listas de email.';
458                                return $return;
459                        }
460        */             
461                        $return['status'] = true;
462
463                        //Retira os uids duplicados se existir
464                        $array_tmp = array();
465                        $array_tmp = array_unique($new_values['members']);
466                        $new_values['members'] = $array_tmp;
467                       
468                        $old_values = $this->get_scl_info($new_values['uidnumber'], $new_values['manager_context']);
469                        $diff = array_diff($new_values, $old_values);
470                        $dn = $old_values['dn'];
471                       
472                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
473                        // ADD ATTRS
474                        if (($new_values['participantCanSendMail'] == 'on') && ($old_values['participantCanSendMail'] == ''))
475                        {
476                                $ldap_add['participantCanSendMail'] = "TRUE";
477                                $this->db_functions->write_log("Ativado participantCanSendMail da SCL da lista de email " . $new_values['mail'],'','','','');
478                        }
479                        if (($new_values['accountRestrictive'] == 'on') && ($old_values['accountRestrictive'] == ''))
480                        {
481                                $ldap_add['accountRestrictive'] = "mailListRestriction";
482                                $ldap_add['accountDeliveryMessage']     = 'OK';
483                                $this->db_functions->write_log("Ativado mailListRestriction da SCL da lista de email " . $new_values['mail'],'','','','');
484                        }
485                        if (count($ldap_add))
486                        {
487                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
488                                if (!$result['status'])
489                                {
490                                        $return['status'] = false;
491                                        $return['msg'] .= $result['msg'];
492                                }
493                        }
494                       
495                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
496                        // REMOVE ATTRS
497                        if (($new_values['participantCanSendMail'] != 'on') && ($old_values['participantCanSendMail'] == 'TRUE'))
498                        {
499                                $ldap_remove['participantCanSendMail']  = array();
500                                $this->db_functions->write_log("Desativado participantCanSendMail da SCL da lista de email " . $new_values['mail'],'','','','');
501                        }
502                        if (($new_values['accountRestrictive'] != 'on') && ($old_values['accountRestrictive'] == 'mailListRestriction'))
503                        {
504                                $ldap_remove['accountRestrictive']      = array();
505                                $ldap_remove['accountDeliveryMessage']  = array();
506                                $this->db_functions->write_log("Desativado restriᅵᅵo (mailListRestriction) da SCL da lista de email " . $new_values['mail'],'','','','');
507                        }
508                        if (count($ldap_remove))
509                        {
510                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
511                                if (!$result['status'])
512                                {
513                                        $return['status'] = false;
514                                        $return['msg'] .= $result['msg'];
515                                }
516                        }
517                       
518                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
519                        // USERS
520
521                        if (!$new_values['members'])
522                                $new_values['members'] = array();
523                        if (!$old_values['members'])
524                                $old_values['members'] = array();
525
526                        $add_users = array_diff($new_values['members'], $old_values['members']);
527                        $remove_users = array_diff($old_values['members'], $new_values['members']);
528                       
529                        if (count($add_users)>0)
530                        {
531                                $array_emails_add = array();
532                                foreach($add_users as $uidnumber)
533                                {
534                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
535                                        $array_emails_add[] = $mail;
536                                        $this->db_functions->write_log("Adicionado usuario $mail a SCL da lista $dn",'',$uidnumber,'','');
537                                }
538                                $result = $this->ldap_functions->add_user2maillist_scl($dn, $array_emails_add);
539                                if (!$result['status'])
540                                {
541                                        $return['status'] = false;
542                                        $return['msg'] .= $result['msg'];
543                                }
544                               
545                        }
546                       
547                        if (count($remove_users)>0)
548                        {
549                                $array_emails_remove = array();
550                                foreach($remove_users as $uidnumber)
551                                {
552                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
553                                        $array_emails_remove[] = $mail;
554                                        $this->db_functions->write_log("Removido usuario $mail da SCP da lista $dn",'',$uidnumber,'','');
555                                }
556                                $result = $this->ldap_functions->remove_user2maillist_scl($dn, $array_emails_remove);
557                                if (!$result['status'])
558                                {
559                                        $return['status'] = false;
560                                        $return['msg'] .= $result['msg'];
561                                }
562                        }
563                       
564                        return $return;
565                }                               
566               
567                function get_info($uidnumber, $context)
568                {
569                        $maillist_info_ldap = $this->ldap_functions->get_maillist_info($uidnumber, $context);
570                        return $maillist_info_ldap;
571                }
572
573                function get_adm_info($uidnumber, $context) //Funcao que usa get_adm_maillist_info para trazer dados dos administradores
574                                                            // de listas;
575                {
576                        $maillist_info_ldap = $this->ldap_functions->get_adm_maillist_info($uidnumber, $context);
577                        return $maillist_info_ldap;
578                }
579
580
581                function get_scl_info($uidnumber, $context)
582                {
583                        $maillist_info_ldap = $this->ldap_functions->get_maillist_scl_info($uidnumber, $context);
584                        return $maillist_info_ldap;
585                }
586               
587                function delete($params)
588                {
589                        // Verifica se usuario atual pertence ao grupo de administradores
590                        // de listas para ter permissao de excluir a lista de email
591                        $usuarioAtual = $_SESSION['phpgw_info']['expresso']['user']['account_lid'];
592                        if ($this->ldap_functions->is_user_listAdmin($usuarioAtual) != 1)
593                        {
594                                $return['status'] = false;
595                                $return['msg'] .= 'Vocï¿œ nï¿œo tem acesso para excluir listas de email.';
596                                $return['msg'] .= ' - oi';
597                                return $return;
598                        }
599
600                        $return['status'] = true;
601
602                        $uidnumber = $params['uidnumber'];
603                        $uid = $this->ldap_functions->uidnumber2uid($uidnumber);
604
605                        //LDAP
606                        $result_ldap = $this->ldap_functions->delete_maillist($uidnumber);
607                        if (!$result_ldap['status'])
608                        {
609                                $return['status'] = false;
610                                $return['msg'] .= $result_ldap['msg'];
611                        }
612                       
613                        if ($return['status'] == true)
614                        {
615                                $this->db_functions->write_log('Deletado lista de email','',$uid,'','');
616                        }
617                       
618                        return $return;
619                }               
620               
621                //Rotina que visa atualizar o Mailman com base na criaᅵᅵo de nova lista no RHDS, em tempo real
622                //Utiliza socket para disparar um HTTP Post remoto
623                function synchronize_mailman($dados_lista){
624                        //porta do servidor de acesso via rede
625                        $porta_mailman = $this->current_config['porta_mailman']; //$GLOBALS['phpgw_info']['server']['porta_mailman'];
626                        //endereï¿œo IP do servidor mailman
627                        $host_mailman = $this->current_config['host_mailman']; //$GLOBALS['phpgw_info']['server']['host_mailman'];
628                        //endereco da URL para o script PHP que faz a atualizacao no recurso remoto
629                        //$url_mailman = '/servidor-listas/mailman_request.php';
630                        $url_mailman = $this->current_config['url_mailman']; //$GLOBALS['phpgw_info']['server']['url_mailman'];
631                        //o nome da lista passado como parametro no array associativo (algo tipo "uid=lista-X")
632                        $lista_mailman = $dados_lista['uid'];
633                        $op_mailman = $dados_lista['op'];
634                       
635                        if(strlen($lista_mailman) <= 0){
636                                $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.";
637                                $retorno['status'] = false;
638                                $retorno['msg'] = $msg_socket;
639                                //Grava no logger o erro
640                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
641                        return $retorno;                               
642                        }
643                       
644                        //Cria o socket TCP/IP
645                        $socket = socket_create(AF_INET, SOCK_STREAM, 0);
646                       
647                        $retorno['status'] = true;
648                       
649                        //Em caso de erro, retorna um vetor serializado contendo (falso, string erro)
650                        if ($socket < 0) {
651                                $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);;
652                                $retorno['status'] = false;
653                                $retorno['msg'] = $msg_socket;
654                                //Grava no logger o erro
655                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
656                        return $retorno;
657                        }
658                       
659                        //Estabelece a conexï¿œo com o recurso
660                        $resultado = socket_connect($socket, $host_mailman, $porta_mailman);
661                       
662                        //Em caso de erro, retorna um vetor serializado contendo (falso, string erro)
663                        if ($resultado < 0) {
664                                $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);
665                                $retorno['status'] = false;
666                                $retorno['msg'] = $msg_socket;
667                                //Grava no logger o erro
668                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
669                        return $retorno;                               
670                        }                       
671                       
672                        //Envia o dado "lid", contendo o nome da lista recebido como parametro da funcao, e "op=1" (nova lista)
673                        $post_lista = "uid=".$lista_mailman."&op=".$op_mailman;
674                       
675                        //Define o tipo de mensagem que vai ser disparada via socket: no caso, um HTTP Post
676                        $dados_envio_socket = "POST $url_mailman HTTP/1.0\r\n";
677                        $dados_envio_socket .= "Host: $host_mailman\r\n";
678                        $dados_envio_socket .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html,text/plain;\r\n";
679                        $dados_envio_socket .= "Accept-Charset: ISO-8859-1,utf-8;\r\n";
680                        $dados_envio_socket .= "Accept-Language: pt-br,en-us,en;\r\n";
681                        $dados_envio_socket .= "Content-Type: application/x-www-form-urlencoded\r\n";
682                        $dados_envio_socket .= "Connection: close\r\n";
683                        $dados_envio_socket .= "Content-Length: " . strlen($post_lista) . "\r\n";
684                        $dados_envio_socket .= "\r\n";
685                        $dados_envio_socket .= "$post_lista\r\n";
686                       
687                        //String que contï¿œm a saï¿œda do processamento remoto
688                        $dados_saida_socket = '';
689                       
690                        //Efetiva os dados de entrada para o processamento no socket remoto
691                        if (socket_write ($socket, $dados_envio_socket, strlen($dados_envio_socket))){
692                                while ($leitura_socket  = socket_read($socket, 2048)) {
693                                $dados_saida_socket .= $leitura_socket;
694                                }
695                        }
696                        else{
697                                $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());
698                                $retorno['status'] = false;
699                                $retorno['msg'] = $msg_socket;
700                                //Grava no logger o erro
701                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
702                        return $retorno;                                       
703                        }
704                       
705                        //Captura a partir da string total da resposta do socket, a secᅵᅵo serializada a ser tratada
706                        $vet_dados_saida = explode('@@', $dados_saida_socket);
707                        if(count($vet_dados_saida[1]) > 0){
708                                $dados_serializados_saida = unserialize($vet_dados_saida[1]);
709                        }
710                        else{
711                                $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;
712                                $retorno['status'] = false;
713                                $retorno['msg'] = $msg_socket;
714                                //Grava no logger o erro
715                                $log = `/usr/bin/logger -p local5.notice -t Sinc-Listas-Mailman-RHDS '$msg_socket'`;
716                                return $retorno;
717                        }
718
719                        //Encerra a conexï¿œo com o recurso remoto
720                        socket_close($socket); 
721                       
722                        //Retorna um array contendo (true, dados serializados de processamento remoto)
723                        return $dados_serializados_saida;               
724                }
725                //Usada para fazer rebind em caso de escrita em slave (quando volta uma referral)
726        }
727?>
Note: See TracBrowser for help on using the repository browser.