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

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