source: trunk/expressoAdmin1_2/inc/class.maillist.inc.php @ 23

Revision 23, 14.3 KB checked in by niltonneto, 17 years ago (diff)

* empty log message *

  • Property svn:eol-style set to native
  • Property svn:executable set to *
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_session']['session_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.
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                        // Cria array para incluir no LDAP
64                        $dn = 'uid=' . $params['uid'] . ',' . $params['context'];                       
65                       
66                        $maillist_info = array();
67                        $maillist_info['uid']                                           = $params['uid']; 
68                        $maillist_info['givenName']                                     = 'MailList';
69                        $maillist_info['sn']                                            = $params['uid'];
70                        $maillist_info['cn']                                            = $params['cn'];
71                       
72                        $maillist_info['homeDirectory']                         = '/home/false';
73                        $maillist_info['loginShell']                            = '/bin/false';
74                        $maillist_info['mail']                                          = $params['mail'];
75                        $maillist_info['objectClass'][0]                        = 'posixAccount';
76                        $maillist_info['objectClass'][1]                        = 'inetOrgPerson';
77                        $maillist_info['objectClass'][2]                        = 'shadowAccount';
78                        $maillist_info['objectClass'][3]                        = 'qmailuser';
79                        $maillist_info['objectClass'][4]                        = 'phpgwAccount';
80                        $maillist_info['objectClass'][5]                        = 'top';
81                        $maillist_info['objectClass'][6]                        = 'person';
82                        $maillist_info['objectClass'][7]                        = 'organizationalPerson';                       
83                        $maillist_info['phpgwAccountExpires']           = '-1';
84                        $maillist_info['phpgwAccountType']                      = 'l';
85                        $maillist_info['uidnumber']                                     = $id;
86                        $maillist_info['gidnumber']                                     = '0';
87                        $maillist_info['userPassword']                          = '';
88                        $maillist_info['deliveryMode']                          = 'forwardOnly';
89                       
90                        if ($params['accountStatus'] == 'on')
91                                $maillist_info['accountStatus'] = 'active';
92                       
93                        if ($params['phpgwAccountVisible'] == 'on')
94                                $maillist_info['phpgwAccountVisible'] = '-1';
95                       
96                        foreach($params['members'] as $index=>$uidnumber)
97                        {
98                                $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
99                                $maillist_info['mailForwardingAddress'][] = $mail;
100                                $this->db_functions->write_log("Adicionado usuario $mail a lista ".$params['cn']." no momento da criação",$dn,$uidnumber,'','');
101                        }
102                       
103                        $result = $this->ldap_functions->ldap_add_entry($dn, $maillist_info);
104                        if (!$result['status'])
105                        {
106                                $return['status'] = false;
107                                $return['msg'] .= $result['msg'];
108                        }
109                       
110                        if ($return['status'] == true)
111                        {
112                                $this->db_functions->write_log('Criado lista de email','',$dn,'','');
113                        }
114                       
115                        return $return;
116                }
117               
118                function save($new_values)
119                {
120                        // Verifica o acesso do gerente
121                        if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_maillists'))
122                        {
123                                $return['status'] = false;
124                                $return['msg'] = 'Você não tem acesso para editar listas de email.';
125                                return $return;
126                        }
127
128                        $return['status'] = true;
129                       
130                        //Retira os uids duplicados se existir
131                        $array_tmp = array();
132                        $array_tmp = array_unique($new_values['members']);
133                        $new_values['members'] = $array_tmp;
134                       
135                        $old_values = $this->get_info($new_values['uidnumber'], $new_values['manager_context']);
136                        $diff = array_diff($new_values, $old_values);
137                       
138                        $dn = 'uid=' . $old_values['uid'] . ',' . $old_values['context'];
139                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
140                        // RENAME
141                        if ($diff['context'] || $diff['uid'])
142                        {
143                                $newrdn = 'uid=' . $new_values['uid'];
144                                $newparent = $new_values['context'];
145                                $result =  $this->ldap_functions->change_user_context($dn, $newrdn, $newparent);
146                                if (!$result['status'])
147                                {
148                                        $return['status'] = false;
149                                        $return['msg'] .= $result['msg'];
150                                }
151                                else
152                                {
153                                        $dn = $newrdn . ',' . $newparent;
154                                        $old_dn = $old_values['uid'];
155                                        $this->db_functions->write_log("Renomeado login da lista de $old_dn para $dn",'',$dn,$old_values['uid'],'');
156                                }
157                        }
158                       
159                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
160                        // REPLACE MAIL || CN || SN
161                        if ($new_values['mail'] != $old_values['mail'])
162                        {
163                                $ldap_mod_replace['mail'] = $new_values['mail'];
164                                $this->db_functions->write_log('Modificado email da lista para ' . $new_values['mail'],'',$dn,'','');
165                        }
166                        if ($new_values['cn'] != $old_values['cn'])
167                        {
168                                $ldap_mod_replace['cn'] = $new_values['cn'];
169                                $this->db_functions->write_log("Modificado common name da lista $dn",'',$dn,'','');
170                        }
171                        if ($diff['uid'])
172                        {
173                                $ldap_mod_replace['sn'] = $new_values['uid'];
174                        }
175                       
176                        if (count($ldap_mod_replace))
177                        {
178                                $result = $this->ldap_functions->replace_user_attributes($dn, $ldap_mod_replace);
179                                if (!$result['status'])
180                                {
181                                        $return['status'] = false;
182                                        $return['msg'] .= $result['msg'];
183                                }
184                        }
185                       
186                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
187                        // REMOVE ATTRS
188                        if (($old_values['accountStatus'] == 'active') && ($new_values['accountStatus'] != 'on'))
189                                $ldap_remove['accountStatus']   = array();
190                       
191                        if (($old_values['phpgwAccountVisible'] == '-1') && ($new_values['phpgwAccountVisible'] != 'on'))
192                                $ldap_remove['phpgwAccountVisible']     = array();
193                       
194                        if (count($ldap_remove))
195                        {
196                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
197                                if (!$result['status'])
198                                {
199                                        $return['status'] = false;
200                                        $return['msg'] .= $result['msg'];
201                                }
202                        }
203                       
204                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
205                        // ADD ATTRS
206                        if (($old_values['accountStatus'] != 'active') && ($new_values['accountStatus'] == 'on'))
207                                $ldap_add['accountStatus']      = 'active';
208                       
209                        if (($old_values['phpgwAccountVisible'] != '-1') && ($new_values['phpgwAccountVisible'] == 'on'))
210                                $ldap_add['phpgwAccountVisible'] = '-1';
211                       
212                        if (count($ldap_add))
213                        {
214                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
215                                if (!$result['status'])
216                                {
217                                        $return['status'] = false;
218                                        $return['msg'] .= $result['msg'];
219                                }
220                        }
221                       
222                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
223                        // USERS
224
225                        if (!$new_values['members'])
226                                $new_values['members'] = array();
227                        if (!$old_values['members'])
228                                $old_values['members'] = array();
229
230                        $add_users = array_diff($new_values['members'], $old_values['members']);
231                        $remove_users = array_diff($old_values['members'], $new_values['members']);
232                       
233                        if (count($add_users)>0)
234                        {
235                                $array_emails_add = array();
236                                foreach($add_users as $uidnumber)
237                                {
238                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
239                                        $array_emails_add[] = $mail;
240                                        $this->db_functions->write_log("Adicionado usuario $mail a lista",$dn,$uidnumber,'','');
241                                }
242                                $this->ldap_functions->add_user2maillist($new_values['uidnumber'], $array_emails_add);
243                        }
244                        if (count($remove_users)>0)
245                        {
246                                $array_emails_remove = array();
247                                foreach($remove_users as $uidnumber)
248                                {
249                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
250                                       
251                                        // Não achei o email do usuário no ldap.
252                                        if (empty($mail))
253                                                $mail = $uidnumber;
254                                       
255                                        $array_emails_remove[] = $mail;
256                                        $this->db_functions->write_log("Removido usuario $mail da lista",$dn,$uidnumber,'','');
257                                }
258                                $this->ldap_functions->remove_user2maillist($new_values['uidnumber'], $array_emails_remove);
259                        }
260                       
261                        return $return;
262                }               
263               
264                function save_scl($new_values)
265                {
266                        // Verifica o acesso do gerente
267                        if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_maillists'))
268                        {
269                                $return['status'] = false;
270                                $return['msg'] = 'Você não tem acesso para editar listas de email.';
271                                return $return;
272                        }
273                       
274                        $return['status'] = true;
275
276                        //Retira os uids duplicados se existir
277                        $array_tmp = array();
278                        $array_tmp = array_unique($new_values['members']);
279                        $new_values['members'] = $array_tmp;
280                       
281                        $old_values = $this->get_scl_info($new_values['uidnumber'], $new_values['manager_context']);
282                        $diff = array_diff($new_values, $old_values);
283                        $dn = $old_values['dn'];
284                       
285                        //echo '<pre>';
286                        //print_r($new_values['participantCanSendMail']);
287                        //print_r($old_values['participantCanSendMail']);
288                       
289                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
290                        // ADD ATTRS
291                        if (($new_values['participantCanSendMail'] == 'on') && ($old_values['participantCanSendMail'] == ''))
292                        {
293                                $ldap_add['participantCanSendMail'] = "TRUE";
294                                $this->db_functions->write_log("Ativado participantCanSendMail da SCL da lista de email " . $new_values['mail'],'','','','');
295                        }
296                        if (($new_values['accountRestrictive'] == 'on') && ($old_values['accountRestrictive'] == ''))
297                        {
298                                $ldap_add['accountRestrictive'] = "mailListRestriction";
299                                $ldap_add['accountDeliveryMessage']     = 'OK';
300                                $this->db_functions->write_log("Ativado mailListRestriction da SCL da lista de email " . $new_values['mail'],'','','','');
301                        }
302                        if (count($ldap_add))
303                        {
304                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
305                                if (!$result['status'])
306                                {
307                                        $return['status'] = false;
308                                        $return['msg'] .= $result['msg'];
309                                }
310                        }
311                       
312                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
313                        // REMOVE ATTRS
314                        if (($new_values['participantCanSendMail'] != 'on') && ($old_values['participantCanSendMail'] == 'TRUE'))
315                        {
316                                $ldap_remove['participantCanSendMail']  = array();
317                                $this->db_functions->write_log("Desativado participantCanSendMail da SCL da lista de email " . $new_values['mail'],'','','','');
318                        }
319                        if (($new_values['accountRestrictive'] != 'on') && ($old_values['accountRestrictive'] == 'mailListRestriction'))
320                        {
321                                $ldap_remove['accountRestrictive']      = array();
322                                $ldap_remove['accountDeliveryMessage']  = array();
323                                $this->db_functions->write_log("Desativado restrição (mailListRestriction) da SCL da lista de email " . $new_values['mail'],'','','','');
324                        }
325                        if (count($ldap_remove))
326                        {
327                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
328                                if (!$result['status'])
329                                {
330                                        $return['status'] = false;
331                                        $return['msg'] .= $result['msg'];
332                                }
333                        }
334                       
335                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
336                        // USERS
337
338                        if (!$new_values['members'])
339                                $new_values['members'] = array();
340                        if (!$old_values['members'])
341                                $old_values['members'] = array();
342
343                        $add_users = array_diff($new_values['members'], $old_values['members']);
344                        $remove_users = array_diff($old_values['members'], $new_values['members']);
345                       
346                        if (count($add_users)>0)
347                        {
348                                $array_emails_add = array();
349                                foreach($add_users as $uidnumber)
350                                {
351                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
352                                        $array_emails_add[] = $mail;
353                                        $this->db_functions->write_log("Adicionado usuario $mail a SCL da lista $dn",'',$uidnumber,'','');
354                                }
355                                $result = $this->ldap_functions->add_user2maillist_scl($dn, $array_emails_add);
356                                if (!$result['status'])
357                                {
358                                        $return['status'] = false;
359                                        $return['msg'] .= $result['msg'];
360                                }
361                               
362                        }
363                       
364                        if (count($remove_users)>0)
365                        {
366                                $array_emails_remove = array();
367                                foreach($remove_users as $uidnumber)
368                                {
369                                        $mail = $this->ldap_functions->uidnumber2mail($uidnumber);
370                                        $array_emails_remove[] = $mail;
371                                        $this->db_functions->write_log("Removido usuario $mail da SCP da lista $dn",'',$uidnumber,'','');
372                                }
373                                $result = $this->ldap_functions->remove_user2maillist_scl($dn, $array_emails_remove);
374                                if (!$result['status'])
375                                {
376                                        $return['status'] = false;
377                                        $return['msg'] .= $result['msg'];
378                                }
379                        }
380                       
381                        return $return;
382                }                               
383               
384                function get_info($uidnumber, $context)
385                {
386                        $maillist_info_ldap = $this->ldap_functions->get_maillist_info($uidnumber, $context);
387                        return $maillist_info_ldap;
388                }
389
390                function get_scl_info($uidnumber, $context)
391                {
392                        $maillist_info_ldap = $this->ldap_functions->get_maillist_scl_info($uidnumber, $context);
393                        return $maillist_info_ldap;
394                }
395               
396                function delete($params)
397                {
398                        // Verifica o acesso do gerente
399                        if (!$this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'delete_maillists'))
400                        {
401                                $return['status'] = false;
402                                $return['msg'] = 'Você não tem acesso para excluir listas de email.';
403                                return $return;
404                        }
405
406                        $return['status'] = true;
407
408                        $uidnumber = $params['uidnumber'];
409                        $uid = $this->ldap_functions->uidnumber2uid($uidnumber);
410
411                        //LDAP
412                        $result_ldap = $this->ldap_functions->delete_maillist($uidnumber);
413                        if (!$result_ldap['status'])
414                        {
415                                $return['status'] = false;
416                                $return['msg'] .= $result_ldap['msg'];
417                        }
418                       
419                        if ($return['status'] == true)
420                        {
421                                $this->db_functions->write_log('Deletado lista de email','',$uid,'','');
422                        }
423                       
424                        return $return;
425                }
426               
427        }
428?>
Note: See TracBrowser for help on using the repository browser.