source: trunk/expressoAdmin1_2/inc/class.user.inc.php @ 355

Revision 355, 46.0 KB checked in by niltonneto, 16 years ago (diff)

Alterações do Desenvolvedor.

  • 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 user
18        {
19                var $ldap_functions;
20                var $db_functions;
21                var $imap_functions;
22                var $functions;
23                var $current_config;
24               
25                function user()
26                {
27                        $this->ldap_functions = new ldap_functions;
28                        $this->db_functions = new db_functions;
29                        $this->imap_functions = new imap_functions;
30                        $this->functions = new functions;
31                        $this->current_config = $_SESSION['phpgw_info']['expresso']['expressoAdmin'];
32                }
33               
34                function create($params)
35                {
36                        $return['status'] = true;
37               
38                        // Verifica o acesso do gerente
39                        if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'add_users'))
40                        {
41                                // Adiciona a organização na frente do uid.
42                                if ($this->current_config['expressoAdmin_prefix_org'] == 'true')
43                                {
44                                        $context_dn = ldap_explode_dn(strtolower($GLOBALS['phpgw_info']['server']['ldap_context']), 1);
45                               
46                                        $explode_dn = ldap_explode_dn(strtolower($params['context']), 1);
47                                        $explode_dn = array_reverse($explode_dn);
48                                        //$params['uid'] = $explode_dn[3] . '-' . $params['uid'];
49                                        $params['uid'] = $explode_dn[$context_dn['count']] . '-' . $params['uid'];
50                                }
51                       
52                                // Leio o ID a ser usado na criação do objecto. Esta função já incrementa o ID no BD.
53                                $next_id = ($this->db_functions->get_next_id('accounts'));
54                                if ((!is_numeric($next_id['id'])) || (!$next_id['status']))
55                                {
56                                        $return['status'] = false;
57                                        $return['msg'] = "Problemas obtendo ID do usuário.\n" . $id['msg'];
58                                        return $return;
59                                }
60                                else
61                                {
62                                        $id = $next_id['id'];
63                                }
64                       
65                                // Cria array para incluir no LDAP
66                                $dn = 'uid=' . $params['uid'] . ',' . $params['context'];               
67                       
68                                $user_info = array();
69                                $user_info['accountStatus']                     = $params['accountstatus'] == 1 ? 'active' : 'desactive';
70                                $user_info['cn']                                                = $params['givenname'] . ' ' . $params['sn'];
71                                $user_info['gidNumber']                                 = $params['gidnumber'];
72                                $user_info['givenName']                                 = $params['givenname'];
73                                $user_info['homeDirectory']                             = '/home/' . $params['uid'];
74                                $user_info['mail']                                              = $params['mail'];
75                                $user_info['objectClass'][]                             = 'posixAccount';
76                                $user_info['objectClass'][]                             = 'inetOrgPerson';
77                                $user_info['objectClass'][]                             = 'shadowAccount';
78                                $user_info['objectClass'][]                             = 'qmailuser';
79                                $user_info['objectClass'][]                             = 'phpgwAccount';
80                                $user_info['objectClass'][]                             = 'top';
81                                $user_info['objectClass'][]                             = 'person';
82                                $user_info['objectClass'][]                             = 'organizationalPerson';
83                                $user_info['phpgwAccountExpires']               = '-1';
84                                $user_info['phpgwAccountType']                  = 'u';
85                                $user_info['sn']                                                = $params['sn'];
86                                $user_info['uid']                                               = $params['uid'];
87                                $user_info['uidnumber']                                 = $id;
88                                $user_info['userPassword']                              = '{md5}' . base64_encode(pack("H*",md5($params['password1'])));
89                               
90                                if ($params['passwd_expired'] == '1')
91                                        $user_info['phpgwLastPasswdChange'] = '0';
92                               
93                                // Gerenciar senhas RFC2617
94                                if ($this->current_config['expressoAdmin_userPasswordRFC2617'] == 'true')
95                                {
96                                        $realm          = $this->current_config['expressoAdmin_realm_userPasswordRFC2617'];
97                                        $uid            = $user_info['uid'];
98                                        $password       = $params['password1'];
99                                        $user_info['userPasswordRFC2617'] = $realm . ':      ' . md5("$uid:$realm:$password");
100                                }
101                               
102                                if ($params['phpgwaccountstatus'] == '1')
103                                        $user_info['phpgwAccountStatus'] = 'A';
104                       
105                                if ($params['departmentnumber'] != '')
106                                        $user_info['departmentnumber']  = $params['departmentnumber'];
107                       
108                                if ($params['telephonenumber'] != '')
109                                        $user_info['telephoneNumber']   = $params['telephonenumber'];
110                                               
111                                // Cria user_info no caso de ter alias e forwarding email.
112                                foreach ($params['mailalternateaddress'] as $index=>$mailalternateaddress)
113                                {
114                                        if ($mailalternateaddress != '')
115                                                $user_info['mailAlternateAddress'][] = $mailalternateaddress;
116                                }
117                       
118                                foreach ($params['mailforwardingaddress'] as $index=>$mailforwardingaddress)
119                                {
120                                        if ($mailforwardingaddress != '')
121                                                $user_info['mailForwardingAddress'][] = $mailforwardingaddress;
122                                }
123                               
124                                if ($params['deliverymode'])
125                                        $user_info['deliveryMode'] = 'forwardOnly';
126                       
127                                //Ocultar da pesquisa e do catálogo
128                                if ($params['phpgwaccountvisible'])
129                                        $user_info['phpgwAccountVisible'] = '-1';
130
131                                // Suporte ao SAMBA
132                                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($params['use_attrs_samba'] == 'on'))
133                                {
134                                       
135                                        // Qualquer um que crie um usuário, deve ter permissão para adicionar a senha samba.
136                                        // Verifica o acesso do gerente aos atributos samba
137                                        //if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_sambausers_attributes'))
138                                        //{
139                                                //Verifica se o binario para criar as senhas do samba exite.
140                                                if (!is_file('/home/expressolivre/mkntpwd'))
141                                                {
142                                                        $return['status'] = false;
143                                                        $return['msg'] .= "O arquivo  binário /home/expressolivre/mkntpwd não exite.\\nEle é necessário para a criação das senhas usadas pelo SAMBA.\\nInforme o administrador ExpressoLivre sobre isto.";
144                                                }
145                                                else
146                                                {
147                                                        $user_info['objectClass'][]             = 'sambaSamAccount';
148                                                        $user_info['loginShell']                        = '/bin/bash';
149       
150                                                        $user_info['sambaSID']                          = $params['sambadomain'] . '-' . ((2 * $id)+1000);
151                                                        $user_info['sambaPrimaryGroupSID']      = $params['sambadomain'] . '-' . ((2 * $user_info['gidNumber'])+1001);
152
153                                                        $user_info['sambaAcctFlags']            = $params['sambaacctflags'];
154                       
155                                                        $user_info['sambaLogonScript']          = $params['sambalogonscript'];
156                                                        $user_info['homeDirectory']                     = $params['sambahomedirectory'];
157                       
158                                                        $user_info['sambaLMPassword']           = exec('/home/expressolivre/mkntpwd -L '.$params['password1']);
159                                                        $user_info['sambaNTPassword']           = exec('/home/expressolivre/mkntpwd -N '.$params['password1']);
160                                                        $user_info['sambaPasswordHistory']      = '0000000000000000000000000000000000000000000000000000000000000000';
161                       
162                                                        $user_info['sambaPwdCanChange']         = strtotime("now");
163                                                        $user_info['sambaPwdLastSet']           = strtotime("now");
164                                                        $user_info['sambaPwdMustChange']        = '2147483647';
165                                                }
166                                        //}
167                                }
168                               
169                                // Verifica o acesso do gerente aos atributos corporativos
170                                if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'manipulate_corporative_information'))
171                                {
172                                        foreach ($params as $atribute=>$value)
173                                        {
174                                                $pos = strstr($atribute, 'corporative_information_');
175                                                if ($pos !== false)
176                                                {
177                                                        if ($params[$atribute])
178                                                        {
179                                                                $ldap_atribute = str_replace("corporative_information_", "", $atribute);
180                                                                $user_info[$ldap_atribute] = $params[$atribute];
181                                                        }
182                                                }
183                                        }
184                                }
185                               
186                                $result = $this->ldap_functions->ldap_add_entry($dn, $user_info);
187                                if (!$result['status'])
188                                {
189                                        $return['status'] = false;
190                                        $return['msg'] .= $result['msg'];
191                                }
192                       
193                                // Chama funcao para salvar foto no OpenLDAP.                   
194                                if ( ($_FILES['photo']['name'] != '') && ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users_picture')) )
195                                {
196                                        $result = $this->ldap_functions->ldap_save_photo($dn, $_FILES['photo']['tmp_name']);
197                                        if (!$result['status'])
198                                        {
199                                                $return['status'] = false;
200                                                $return['msg'] .= $result['msg'];
201                                        }
202                                }
203                       
204                                //GROUPS
205                                if ($params['groups'])
206                                {
207                                        foreach ($params['groups'] as $gidnumber)
208                                        {
209                                                $result = $this->ldap_functions->add_user2group($gidnumber, $user_info['uid']);
210                                                if (!$result['status'])
211                                                {
212                                                        $return['status'] = false;
213                                                        $return['msg'] .= $result['msg'];
214                                                }
215                                                $result = $this->db_functions->add_user2group($gidnumber, $id);
216                                                if (!$result['status'])
217                                                {
218                                                        $return['status'] = false;
219                                                        $return['msg'] .= $result['msg'];
220                                                }
221                                        }
222                                }
223                       
224                                // Inclusao do Mail do usuário nas listas de email selecionadas.
225                                if ($params['maillists'])
226                                {
227                                        foreach($params['maillists'] as $uid)
228                        {
229                                                $result = $this->ldap_functions->add_user2maillist($uid, $user_info['mail']);
230                                                if (!$result['status'])
231                                                {
232                                                        $return['status'] = false;
233                                                        $return['msg'] .= $result['msg'];
234                                                }
235                        }
236                                }
237                       
238                                // APPS
239                                if (count($params['apps']))
240                                {
241                                        $result = $this->db_functions->add_id2apps($id, $params['apps']);
242                                        if (!$result['status'])
243                                        {
244                                                $return['status'] = false;
245                                                $return['msg'] .= $result['msg'];
246                                        }
247                                }
248
249                                // Chama funcao para incluir no pgsql as preferencia de alterar senha.
250                                if ($params['changepassword'])
251                                {
252                                        $result = $this->db_functions->add_pref_changepassword($id);
253                                        if (!$result['status'])
254                                        {
255                                                $return['status'] = false;
256                                                $return['msg'] .= $result['msg'];
257                                        }
258                                }                                       
259                                                       
260                                // Chama funcao para criar mailbox do usuario, no imap-cyrus.
261                                $result = $this->imap_functions->create($params['uid'], $params['mailquota']);
262                                if (!$result['status'])
263                                {
264                                        $return['status'] = false;
265                                $return['msg'] .= $result['msg'];
266                                }
267
268                                $this->db_functions->write_log("criado usuario $dn",'','','','');
269                        }
270
271                        return $return;
272                }
273               
274                function save($new_values)
275                {
276                        $return['status'] = true;
277                       
278                        $old_values = $this->get_user_info($new_values['uidnumber']);
279                       
280                        $dn = 'uid=' . $old_values['uid'] . ',' . strtolower($old_values['context']);
281                        $diff = array_diff($new_values, $old_values);
282                       
283                        /*
284                        echo '<pre>';
285                        echo '--- OLD: ';
286                        print_r($old_values);
287                        echo '<br>--- NEW: ';
288                        print_r($new_values);
289                        echo '<br>';
290                        exit;
291                        */
292
293                        $manager_account_lid = $_SESSION['phpgw_session']['session_lid'];
294                        if ((!$this->functions->check_acl($manager_account_lid,'edit_users')) &&
295                                (!$this->functions->check_acl($manager_account_lid,'change_users_password')) &&
296                                (!$this->functions->check_acl($manager_account_lid,'edit_sambausers_attributes')) &&
297                                (!$this->functions->check_acl($manager_account_lid,'manipulate_corporative_information')) &&
298                                (!$this->functions->check_acl($manager_account_lid,'edit_users_phonenumber'))
299                                )
300                        {
301                                $return['status'] = false;
302                                $return['msg'] = 'Você não tem direito de editar informações de usuários.';
303                                return $return;
304                        }
305
306                        // Verifica o acesso do gerente
307                        if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users'))
308                        {
309                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
310                                // Change user organization
311                                if ($diff['context'])
312                                {
313                                        if (strcasecmp($old_values['context'], $new_values['context']) != 0)
314                                        {
315                                                $newrdn = 'uid=' . $new_values['uid'];
316                                                $newparent = $new_values['context'];
317                                                $result =  $this->ldap_functions->change_user_context($dn, $newrdn, $newparent);
318                                                if (!$result['status'])
319                                                {
320                                                        $return['status'] = false;
321                                                        $return['msg'] .= $result['msg'];
322                                                }
323                                                else
324                                                {
325                                                        $dn = $newrdn . ',' . $newparent;
326                                                        $this->db_functions->write_log('alterado contexto do usuario' . $new_values['uid'] . ' de: ' . $old_values['context'] . ' para: ' . $new_values['context'],'',$dn,'','');
327                                                }
328                                        }
329                                }
330                       
331                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
332                                // REPLACE some attributes
333                                if ($diff['givenname'])
334                                {
335                                        $ldap_mod_replace['givenname'] = $new_values['givenname'];
336                                        $ldap_mod_replace['cn'] = $new_values['givenname'] . ' ' . $new_values['sn'];
337                                        $this->db_functions->write_log("alterado givenname do usuario $dn de ".$old_values['givenname']." para ".$new_values['givenname'],'','','','');
338                                }
339                                if ($diff['sn'])
340                                {
341                                        $ldap_mod_replace['sn'] = $new_values['sn'];
342                                        $ldap_mod_replace['cn'] = $new_values['givenname'] . ' ' . $new_values['sn'];
343                                        $this->db_functions->write_log("altera sn do usuario de ".$old_values['sn']." para ".$new_values['sn'],'','','','');
344                                }
345                                if ($diff['mail'])
346                                {
347                                        $ldap_mod_replace['mail'] = $new_values['mail'];
348                                        $this->ldap_functions->replace_user2maillists($new_values['mail'], $old_values['mail']);
349                                        $this->ldap_functions->replace_mail_from_institutional_account($new_values['mail'], $old_values['mail']);
350                                        $this->db_functions->write_log("alterado mail do usuario $dn de " . $old_values['mail'] . " para " . $new_values['mail'],'','','','');
351                                }
352                                /*
353                                if (($diff['mailalternateaddress']) && ($old_values['mailalternateaddress'] != ''))
354                                {
355                                        $ldap_mod_replace['mailalternateaddress'] = $new_values['mailalternateaddress'];
356                                        $this->db_functions->write_log("alterado mailalternateaddress do usuario",'',$dn,'','');
357                                }
358                                if (($diff['mailforwardingaddress']) && ($old_values['mailforwardingaddress'] != ''))
359                                {
360                                        $ldap_mod_replace['mailforwardingaddress'] = $new_values['mailforwardingaddress'];
361                                        $this->db_functions->write_log("alterado mailforwardingaddress do usuario",'',$dn,'','');
362                                }
363                                */
364                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
365                                // Passwd Expired - Com atributo
366                                if (($old_values['passwd_expired'] != '') && ($new_values['passwd_expired'] == '1'))
367                                {
368                                        $ldap_mod_replace['phpgwlastpasswdchange'] = '0';
369                                        $this->db_functions->write_log("Expirado senha do usuário $dn",'','','','');
370                                }
371                        }
372                       
373                        if ( ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users')) ||
374                             ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'change_users_password')) )
375                        {
376                                if ($diff['password1'])
377                                {
378                                        $ldap_mod_replace['userPassword'] = '{md5}' . base64_encode(pack("H*",md5($new_values['password1'])));
379                                       
380                                        // Suporte ao SAMBA
381                                        if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($new_values['userSamba']) && ($new_values['use_attrs_samba'] == 'on'))
382                                        {
383                                                $ldap_mod_replace['sambaLMPassword'] = exec('/home/expressolivre/mkntpwd -L '.$new_values['password1']);
384                                                $ldap_mod_replace['sambaNTPassword'] = exec('/home/expressolivre/mkntpwd -N '.$new_values['password1']);
385                                        }
386                                       
387                                        // Gerenciar senhas RFC2617
388                                        if ($this->current_config['expressoAdmin_userPasswordRFC2617'] == 'true')
389                                        {
390                                                $realm          = $this->current_config['expressoAdmin_realm_userPasswordRFC2617'];
391                                                $uid            = $new_values['uid'];
392                                                $password       = $new_values['password1'];
393                                                $passUserRFC2617 = $realm . ':      ' . md5("$uid:$realm:$password");
394                                               
395                                                if ($old_values['userPasswordRFC2617'] != '')
396                                                        $ldap_mod_replace['userPasswordRFC2617'] = $passUserRFC2617;
397                                                else
398                                                        $ldap_add['userPasswordRFC2617'] = $passUserRFC2617;
399                                        }
400                                       
401                                        $this->db_functions->write_log("alterado password do usuario $dn",'','','','');
402                                }
403                        }
404
405                        if ( ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users')) ||
406                             ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users_phonenumber')) )
407                        {
408                                if (($diff['telephonenumber']) && ($old_values['telephonenumber'] != ''))
409                                {
410                                        $ldap_mod_replace['telephonenumber'] = $new_values['telephonenumber'];
411                                        $this->db_functions->write_log("alterado telephonenumber do usuario $dn de ".$old_values['telephonenumber']." para ".$new_values['telephonenumber'],'','','','');
412                                }
413                        }
414                       
415                        // REPLACE, ADD & REMOVE COPORATIVEs ATRIBUTES
416                        // Verifica o acesso do gerente aos atributos corporativos
417                       
418                        if ( ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users')) ||
419                             ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'manipulate_corporative_information')) )
420                        {
421                                foreach ($new_values as $atribute=>$value)
422                                {
423                                        $pos = strstr($atribute, 'corporative_information_');
424                                        if ($pos !== false)
425                                        {
426                                                $ldap_atribute = str_replace("corporative_information_", "", $atribute);
427                                                // REPLACE ATTRS OF CORPORATIVE
428                                                if (($diff[$atribute]) && ($old_values[$atribute] != ''))
429                                                {
430                                                        $ldap_atribute = str_replace("corporative_information_", "", $atribute);
431                                                        $ldap_mod_replace[$ldap_atribute] = $new_values[$atribute];
432                                                        $this->db_functions->write_log("alterado $ldap_atribute do usuario $dn de ".$old_values[$atribute]." para ".$new_values[$atribute],'','','','');
433                                                }
434                                                //ADD ATTRS OF CORPORATIVE
435                                                elseif (($old_values[$atribute] == '') && ($new_values[$atribute] != ''))
436                                                {
437                                                        $ldap_add[$ldap_atribute] = $new_values[$atribute];
438                                                        $this->db_functions->write_log("adicionado $ldap_atribute ao usuario $dn de ".$old_values[$atribute]." para ".$new_values[$atribute],'','','','');
439                                                }
440                                                //REMOVE ATTRS OF CORPORATIVE
441                                                elseif (($old_values[$atribute] != '') && ($new_values[$atribute] == ''))
442                                                {
443                                                        $ldap_remove[$ldap_atribute] = array();
444                                                        $this->db_functions->write_log("removido $ldap_atribute do usuario $dn de ".$old_values[$atribute]." para ".$new_values[$atribute],'','','','');       
445                                                }
446                                        }
447                                }
448                        }
449                       
450                        //Suporte ao SAMBA
451                        if ( ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users')) ||
452                             ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_sambausers_attributes')) )
453                        {
454                               
455                                if ($diff['gidnumber'])
456                                {
457                                        $ldap_mod_replace['gidnumber'] = $new_values['gidnumber'];
458                                        $this->db_functions->write_log("alterado gidnumber do usuario $dn. De:".$old_values['gidnumber']." Para:".$new_values['gidnumber'],'','','','');
459                                }
460                               
461                                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($new_values['userSamba']) && ($new_values['use_attrs_samba'] == 'on'))
462                                {
463                                        if ($diff['gidnumber'])
464                                        {
465                                                $ldap_mod_replace['sambaPrimaryGroupSID']       = $this->current_config['expressoAdmin_sambaSID'] . '-' . ((2 * $new_values['gidnumber'])+1001);
466                                                $this->db_functions->write_log("alterado sambaPrimaryGroupSID do usuario $dn.",'','','','');
467                                        }
468                                       
469                                        if ($diff['sambaacctflags'])
470                                        {
471                                                $ldap_mod_replace['sambaacctflags'] = $new_values['sambaacctflags'];
472                                                $this->db_functions->write_log("alterado sambaacctflags do usuario $dn",'','','','');
473                                        }
474                                        if ($diff['sambalogonscript'])
475                                        {
476                                                $ldap_mod_replace['sambalogonscript'] = $new_values['sambalogonscript'];
477                                                $this->db_functions->write_log("alterado sambalogonscript do usuario $dn",'','','','');
478                                        }
479                                        if ($diff['sambahomedirectory'])
480                                        {
481                                                $ldap_mod_replace['homedirectory'] = $new_values['sambahomedirectory'];
482                                                $this->db_functions->write_log("alterado homedirectory do usuario $dn",'','','','');
483                                        }
484                                        if ($diff['sambadomain'])
485                                        {
486                                                $ldap_mod_replace['sambaSID']                           = $diff['sambadomain'] . '-' . ((2 * $old_values['uidnumber'])+1000);
487                                                $ldap_mod_replace['sambaPrimaryGroupSID']       = $diff['sambadomain'] . '-' . ((2 * $old_values['gidnumber'])+1001);
488                                                $this->db_functions->write_log("alterado dominio samba do usuario $dn para " . $params['sambadomain'],'','','','');
489                                        }
490                                }
491                        }
492                       
493                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
494                        // ADD or REMOVE some attributes
495                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
496
497                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
498                        // PHOTO
499                        if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users_picture'))
500                        {
501                                if ($new_values['delete_photo'])
502                                {
503                                        $this->ldap_functions->ldap_remove_photo($dn);
504                                        $this->db_functions->write_log("removido jpegphoto do usuario $dn",'','','','');
505                                }
506                                elseif ($_FILES['photo']['name'] != '')
507                                {
508                                       
509                                        if ($_FILES['photo']['size'] > 10000)
510                                        {
511                                                $return['status'] = false;
512                                                $return['msg'] .= 'Foto do usuário não foi salva, pois excede o tamanho máximo de 10 kb.';
513                                        }
514                                        else
515                                        {
516                                                if ($new_values['photo_exist'])
517                                                {
518                                                        $photo_exist = true;
519                                                        $this->db_functions->write_log("substituido jpegphoto do usuario $dn",'','','','');
520                                                }
521                                                else
522                                                {
523                                                        $photo_exist = false;
524                                                        $this->db_functions->write_log("adicionado jpegphoto ao usuario $dn",'','','','');
525                                                }                               
526                                                $this->ldap_functions->ldap_save_photo($dn, $_FILES['photo']['tmp_name'], $new_values['photo_exist'], $photo_exist);
527                                        }
528                                }       
529                        }
530                       
531                        // Verifica o acesso ára adicionar ou remover tais atributos
532                        if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users'))
533                        {
534                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
535                                // TELEPHONE
536                                if (($old_values['telephonenumber'] == '') && ($new_values['telephonenumber'] != ''))
537                                {
538                                        $ldap_add['telephonenumber'] = $new_values['telephonenumber'];
539                                        $this->db_functions->write_log("adicionado telephonenumber ao usuario $dn",'','','','');
540                                }
541                                if (($old_values['telephonenumber'] != '') && ($new_values['telephonenumber'] == ''))
542                                {
543                                        $ldap_remove['telephonenumber'] = array();
544                                        $this->db_functions->write_log("removido telephonenumber do usuario $dn",'','','','');
545                                }
546                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
547                                // Passwd Expired - Sem atributo
548                                if (($old_values['passwd_expired'] == '') && ($new_values['passwd_expired'] == '1'))
549                                {
550                                        $ldap_add['phpgwlastpasswdchange'] = '0';
551                                        $this->db_functions->write_log("Expirado senha do usuário $dn",'','','','');
552                                }
553                                if (($old_values['passwd_expired'] == '0') && ($new_values['passwd_expired'] == ''))
554                                {
555                                        $ldap_remove['phpgwlastpasswdchange'] = array();
556                                        $this->db_functions->write_log("Removido expiração da senha do usuário $dn",'','','','');
557                                }
558                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
559                                // PREF_CHANGEPASSWORD
560                                if (($old_values['changepassword'] == '') && ($new_values['changepassword'] != ''))
561                                {
562                                        $this->db_functions->add_pref_changepassword($new_values['uidnumber']);
563                                        $this->db_functions->write_log("adicionado changepassword ao usuario $dn",'','','','');
564                                }
565                                if (($old_values['changepassword'] != '') && ($new_values['changepassword'] == ''))
566                                {
567                                        $this->db_functions->remove_pref_changepassword($new_values['uidnumber']);
568                                        $this->db_functions->write_log("removido changepassword do usuario $dn",'','','','');
569                                }
570                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
571                                // ACCOUNT STATUS
572                                if (($old_values['phpgwaccountstatus'] == '') && ($new_values['phpgwaccountstatus'] != ''))
573                                {
574                                        $ldap_add['phpgwaccountstatus'] = 'A';
575                                        $this->db_functions->write_log("ativado conta do usuario $dn",'','','','');
576                                }
577                                if (($old_values['phpgwaccountstatus'] != '') && ($new_values['phpgwaccountstatus'] == ''))
578                                {
579                                        $ldap_remove['phpgwaccountstatus'] = array();
580                                        $this->db_functions->write_log("desativado conta do usuario $dn",'','','','');
581                                }
582                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
583                                // ACCOUNT VISIBLE
584                                if (($old_values['phpgwaccountvisible'] == '') && ($new_values['phpgwaccountvisible'] != ''))
585                                {
586                                        $ldap_add['phpgwaccountvisible'] = '-1';
587                                        $this->db_functions->write_log("adicionado phpgwaccountvisible ao usuario $dn",'','','','');
588                                }
589                                if (($old_values['phpgwaccountvisible'] != '') && ($new_values['phpgwaccountvisible'] == ''))
590                                {
591                                        $ldap_remove['phpgwaccountvisible'] = array();
592                                        $this->db_functions->write_log("removido phpgwaccountvisible ao usuario $dn",'','','','');
593                                }
594                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
595                                // Mail Account STATUS
596                                if (($old_values['accountstatus'] == '') && ($new_values['accountstatus'] != ''))
597                                {
598                                        $ldap_add['accountstatus'] = 'active';
599                                        $this->db_functions->write_log("ativado conta de email do usuario $dn",'','','','');
600                                }
601                                if (($old_values['accountstatus'] != '') && ($new_values['accountstatus'] == ''))
602                                {
603                                        $ldap_remove['accountstatus'] = array();
604                                        $this->db_functions->write_log("desativado conta de email do usuario $dn",'','','','');
605                                }
606                                /*
607                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
608                                // MAILALTERNATEADDRESS
609                                if (($old_values['mailalternateaddress'] == '') && ($new_values['mailalternateaddress'] != ''))
610                                {
611                                        $ldap_add['mailalternateaddress'] = $new_values['mailalternateaddress'];
612                                        $this->db_functions->write_log("adicionado mailalternateaddress ao usuario",'',$dn,'','');
613                                }
614                                if (($old_values['mailalternateaddress'] != '') && ($new_values['mailalternateaddress'] == ''))
615                                {
616                                        $ldap_remove['mailalternateaddress'] = array();
617                                        $this->db_functions->write_log("removido mailalternateaddress ao usuario",'',$dn,'','');
618                                }
619                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
620                                // MAILFORWARDINGADDRESS
621                                if (($old_values['mailforwardingaddress'] == '') && ($new_values['mailforwardingaddress'] != ''))
622                                {
623                                        $ldap_add['mailforwardingaddress'] = $new_values['mailforwardingaddress'];
624                                        $this->db_functions->write_log("adicionado mailforwardingaddress ao usuario",'',$dn,'','');
625                                }
626                                if (($old_values['mailforwardingaddress'] != '') && ($new_values['mailforwardingaddress'] == ''))
627                                {
628                                        $ldap_remove['mailforwardingaddress'] = array();
629                                        $this->db_functions->write_log("removido mailforwardingaddress ao usuario",'',$dn,'','');
630                                }
631                                */
632                               
633                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
634                                // MAILALTERNATEADDRESS
635                                if (!$new_values['mailalternateaddress'])
636                                        $new_values['mailalternateaddress'] = array();
637                                if (!$old_values['mailalternateaddress'])
638                                        $old_values['mailalternateaddress'] = array();
639                                $add_mailalternateaddress = array_diff($new_values['mailalternateaddress'], $old_values['mailalternateaddress']);
640                                $remove_mailalternateaddress = array_diff($old_values['mailalternateaddress'], $new_values['mailalternateaddress']);
641                                foreach ($add_mailalternateaddress as $index=>$mailalternateaddress)
642                                {
643                                        if ($mailalternateaddress != '')
644                                        {
645                                                $ldap_add['mailalternateaddress'][] = $mailalternateaddress;
646                                                $this->db_functions->write_log("adicionado mailalternateaddress $mailalternateaddress ao usuario $dn",'',$dn,'','');
647                                        }
648                                }
649                                foreach ($remove_mailalternateaddress as $index=>$mailalternateaddress)
650                                {
651                                        if ($mailalternateaddress != '')
652                                        {
653                                                if ($index !== 'count')
654                                                {
655                                                        $ldap_remove['mailalternateaddress'][] = $mailalternateaddress;
656                                                        $this->db_functions->write_log("removido mailalternateaddress $mailalternateaddress do usuario $dn",'',$dn,'','');
657                                                }
658                                        }
659                                }
660                               
661                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
662                                // MAILFORWARDINGADDRESS
663                                if (!$new_values['mailforwardingaddress'])
664                                        $new_values['mailforwardingaddress'] = array();
665                                if (!$old_values['mailforwardingaddress'])
666                                        $old_values['mailforwardingaddress'] = array();
667                                $add_mailforwardingaddress = array_diff($new_values['mailforwardingaddress'], $old_values['mailforwardingaddress']);
668                                $remove_mailforwardingaddress = array_diff($old_values['mailforwardingaddress'], $new_values['mailforwardingaddress']);
669                                foreach ($add_mailforwardingaddress as $index=>$mailforwardingaddress)
670                                {
671                                        if ($mailforwardingaddress != '')
672                                        {
673                                                $ldap_add['mailforwardingaddress'][] = $mailforwardingaddress;
674                                                $this->db_functions->write_log("adicionado mailforwardingaddress $mailforwardingaddress ao usuario $dn",'',$dn,'','');
675                                        }
676                                }
677                                foreach ($remove_mailforwardingaddress as $index=>$mailforwardingaddress)
678                                {
679                                        if ($mailforwardingaddress != '')
680                                        {
681                                                if ($index !== 'count')
682                                                {
683                                                        $ldap_remove['mailforwardingaddress'][] = $mailforwardingaddress;
684                                                        $this->db_functions->write_log("removido mailforwardingaddress $mailforwardingaddress do usuario $dn",'',$dn,'','');
685                                                }
686                                        }
687                                }
688                               
689                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
690                                // Delivery Mode
691                                if (($old_values['deliverymode'] == '') && ($new_values['deliverymode'] != ''))
692                                {
693                                        $ldap_add['deliverymode'] = 'forwardOnly';
694                                        $this->db_functions->write_log("adicionado forwardOnly ao usuario $dn",'','','','');
695                                }
696                                if (($old_values['deliverymode'] != '') && ($new_values['deliverymode'] == ''))
697                                {
698                                        $ldap_remove['deliverymode'] = array();
699                                        $this->db_functions->write_log("removido forwardOnly ao usuario $dn",'','','','');
700                                }
701                        }
702                       
703                        if ( ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users')) ||
704                             ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'change_users_quote')) )
705                        {
706                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
707                                // MAILQUOTA
708                                if ($diff['mailquota'])
709                                {
710                                        $this->imap_functions->change_user_quota($new_values['uid'], $new_values['mailquota']);
711                                        $this->db_functions->write_log("alterado cota do usuario $dn",'','','','');
712                                }
713                        }
714
715                        if ( ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users')) ||
716                             ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_sambausers_attributes')) )
717                        {
718                                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
719                                // REMOVE ATTRS OF SAMBA
720                                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($new_values['userSamba']) && ($new_values['use_attrs_samba'] != 'on'))
721                                {
722                                        $ldap_remove['objectclass']                     = 'sambaSamAccount';   
723                                        $ldap_remove['loginShell']                              = array();
724                                        $ldap_remove['sambaSID']                                = array();
725                                        $ldap_remove['sambaPrimaryGroupSID']    = array();
726                                        $ldap_remove['sambaAcctFlags']                  = array();
727                                        $ldap_remove['sambaLogonScript']                = array();
728                                        $ldap_remove['sambaLMPassword']                 = array();
729                                        $ldap_remove['sambaNTPassword']                 = array();
730                                        $ldap_remove['sambaPasswordHistory']    = array();
731                                        $ldap_remove['sambaPwdCanChange']               = array();
732                                        $ldap_remove['sambaPwdLastSet']                 = array();
733                                        $ldap_remove['sambaPwdMustChange']              = array();
734                                        $this->db_functions->write_log("removido atributos samba do usuario $dn.",'','','','');
735                                }
736                                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
737                                // ADD ATTRS OF SAMBA
738                                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && (!$new_values['userSamba']) && ($new_values['use_attrs_samba'] == 'on'))
739                                {
740                                        //Verifica se o binario para criar as senhas do samba exite.
741                                        if (!is_file('/home/expressolivre/mkntpwd'))
742                                        {
743                                                $return['status'] = false;
744                                                $return['msg'] .= "O arquivo binário /home/expressolivre/mkntpwd não exite.\\nEle é necessário para a criação das senhas usadas pelo SAMBA.\\nInforme o administrador ExpressoLivre sobre isto.\\n";
745                                        }
746                                        else
747                                        {
748                                                $ldap_add['objectClass'][]                      = 'sambaSamAccount';
749                                                $ldap_mod_replace['loginShell']         = '/bin/bash';
750                                                $ldap_add['sambaSID']                           = $new_values['sambadomain'] . '-' . ((2 * $new_values['uidnumber'])+1000);
751                                                $ldap_add['sambaPrimaryGroupSID']       = $new_values['sambadomain'] . '-' . ((2 * $new_values['gidnumber'])+1001);
752                                                $ldap_add['sambaAcctFlags']                     = $new_values['sambaacctflags'];
753                                                $ldap_add['sambaLogonScript']           = $new_values['sambalogonscript'];
754                                                $ldap_mod_replace['homeDirectory']      = $new_values['sambahomedirectory'];
755                                                $ldap_add['sambaLMPassword']            = exec('/home/expressolivre/mkntpwd -L '.'senha');
756                                                $ldap_add['sambaNTPassword']            = exec('/home/expressolivre/mkntpwd -N '.'senha');
757                                                $ldap_add['sambaPasswordHistory']       = '0000000000000000000000000000000000000000000000000000000000000000';
758                                                $ldap_add['sambaPwdCanChange']          = strtotime("now");
759                                                $ldap_add['sambaPwdLastSet']            = strtotime("now");
760                                                $ldap_add['sambaPwdMustChange'] = '2147483647';
761                                                $this->db_functions->write_log("adicionado atributos samba ao usuario $dn.",'','','','');
762                                        }
763                                }
764                        }
765                       
766                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
767                        // GROUPS
768                        if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users'))
769                        {
770                                if (!$new_values['groups'])
771                                        $new_values['groups'] = array();
772                                if (!$old_values['groups'])
773                                        $old_values['groups'] = array();
774                       
775                                $add_groups = array_diff($new_values['groups'], $old_values['groups']);
776                                $remove_groups = array_diff($old_values['groups'], $new_values['groups']);
777                       
778                                if (count($add_groups)>0)
779                                {
780                                        foreach($add_groups as $gidnumber)
781                                        {
782                                                $this->db_functions->add_user2group($gidnumber, $new_values['uidnumber']);
783                                                $this->ldap_functions->add_user2group($gidnumber, $new_values['uid']);
784                                                $this->db_functions->write_log("adicionado usuario $dn ao grupo $gidnumber.",'','','','');
785                                        }
786                                }
787                               
788                                if (count($remove_groups)>0)
789                                {
790                                        foreach($remove_groups as $gidnumber)
791                                        {
792                                                foreach($old_values['groups_info'] as $group)
793                                                {
794                                                        if (($group['gidnumber'] == $gidnumber) && ($group['group_disabled'] == 'false'))
795                                                        {
796                                                                $this->db_functions->remove_user2group($gidnumber, $new_values['uidnumber']);
797                                                                $this->ldap_functions->remove_user2group($gidnumber, $new_values['uid']);
798                                                                $this->db_functions->write_log("removido usuario $dn do grupo $gidnumber.",'','','','');
799                                                        }
800                                                }
801                                        }
802                                }
803                                /* GIDNUMBER agora é um atributo samba e pode ser alterado por gerentes com este perfil
804                                /*
805                                if ($diff['gidnumber'])
806                                {
807                                        $ldap_mod_replace['gidnumber'] = $new_values['gidnumber'];
808                                        if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($new_values['userSamba']) && ($new_values['use_attrs_samba'] == 'on'))
809                                        {
810                                                $ldap_mod_replace['sambaPrimaryGroupSID']       = $this->current_config['expressoAdmin_sambaSID'] . '-' . ((2 * $new_values['gidnumber'])+1001);
811                                        }
812                                        $this->db_functions->write_log("alterado gidnumber do usuario.",'',$dn,'','');
813                                }
814                                */
815                        }
816                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
817                        // LDAP_MOD_REPLACE
818                        if (count($ldap_mod_replace))
819                        {
820                                $result = $this->ldap_functions->replace_user_attributes($dn, $ldap_mod_replace);
821                                if (!$result['status'])
822                                {
823                                        $return['status'] = false;
824                                        $return['msg'] .= $result['msg'];
825                                }
826                        }
827                       
828                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
829                        // LDAP_MOD_ADD
830                        if (count($ldap_add))
831                        {
832                                echo 'ldap-add<br>';
833                                print_r($ldap_add);
834                                $result = $this->ldap_functions->add_user_attributes($dn, $ldap_add);
835                                if (!$result['status'])
836                                {
837                                        $return['status'] = false;
838                                        $return['msg'] .= $result['msg'];
839                                }
840                        }
841                       
842                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
843                        // LDAP_MOD_REMOVE                     
844                        if (count($ldap_remove))
845                        {
846                                echo 'ldap-remove<br>';
847                                print_r($ldap_remove);
848                                $result = $this->ldap_functions->remove_user_attributes($dn, $ldap_remove);
849                                if (!$result['status'])
850                                {
851                                        $return['status'] = false;
852                                        $return['msg'] .= $result['msg'];
853                                }
854                        }
855                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
856
857
858                        if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'edit_users'))
859                        {
860                                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
861                                // MAILLISTS
862                                if (!$new_values['maillists'])
863                                        $new_values['maillists'] = array();
864                                if (!$old_values['maillists'])
865                                        $old_values['maillists'] = array();
866
867                                $add_maillists = array_diff($new_values['maillists'], $old_values['maillists']);
868                                $remove_maillists = array_diff($old_values['maillists'], $new_values['maillists']);
869                               
870                                if (count($add_maillists)>0)
871                                {
872                                        foreach($add_maillists as $uid)
873                                        {
874                                                $this->ldap_functions->add_user2maillist($uid, $new_values['mail']);
875                                                $this->db_functions->write_log("adicionado usuario $dn a maillist $uid.",'','','','');
876                                        }
877                                }
878                                /*
879                                echo '<pre>';
880                                print_r($old_values['maillists']);
881                                print_r($new_values['maillists']);
882                                */
883                               
884                                if (count($remove_maillists)>0)
885                                {
886                                        foreach($remove_maillists as $uid)
887                                        {
888                                                $this->ldap_functions->remove_user2maillist($uid, $new_values['mail']);
889                                                $this->db_functions->write_log("removido usuario $dn da maillist $uid.",'','','','');
890                                        }
891                                }
892                       
893                                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
894                                // APPS
895                                $new_values2 = array();
896                                $old_values2 = array();
897                                if (count($new_values['apps'])>0)
898                                {
899                                        foreach ($new_values['apps'] as $app=>$tmp)
900                                        {
901                                                $new_values2[] = $app;
902                                        }
903                                }
904                                if (count($old_values['apps'])>0)
905                                {
906                                        foreach ($old_values['apps'] as $app=>$tmp)
907                                        {
908                                                $old_values2[] = $app;
909                                        }
910                                }
911                                $add_apps    = array_flip(array_diff($new_values2, $old_values2));
912                                $remove_apps = array_flip(array_diff($old_values2, $new_values2));
913
914                                if (count($add_apps)>0)
915                                {
916                                        $this->db_functions->add_id2apps($new_values['uidnumber'], $add_apps);
917
918                                        foreach ($add_apps as $app => $index)
919                                                $this->db_functions->write_log("Adicionado aplicativo $app ao usuário $dn",'',$dn,'','');
920                                }
921                                if (count($remove_apps)>0)
922                                {
923                                        //Verifica se o gerente tem acesso a aplicação antes de remove-la do usuario.
924                                        $manager_apps = $this->db_functions->get_apps($_SESSION['phpgw_session']['session_lid']);
925                                       
926                                        foreach ($remove_apps as $app => $app_index)
927                                        {
928                                                if ($manager_apps[$app] == 'run')
929                                                        $remove_apps2[$app] = $app_index;
930                                        }
931                                        $this->db_functions->remove_id2apps($new_values['uidnumber'], $remove_apps2);
932                                       
933                                        foreach ($remove_apps2 as $app => $access)
934                                                $this->db_functions->write_log("Removido aplicativo $app do usuário $dn",'',$dn,'','');
935                                }
936                                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
937                        }                       
938                        return $return;
939                }               
940               
941                function get_user_info($uidnumber)
942                {
943                        $user_info_ldap = $this->ldap_functions->get_user_info($uidnumber);
944                        $user_info_db1 = $this->db_functions->get_user_info($uidnumber);
945                        $user_info_db2 = $this->ldap_functions->gidnumbers2cn($user_info_db1['groups']);
946                        $user_info_imap = $this->imap_functions->get_user_info($user_info_ldap['uid']);
947                        $user_info = array_merge($user_info_ldap, $user_info_db1, $user_info_db2, $user_info_imap);
948                        return $user_info;
949                }
950               
951                function set_user_default_password($params)
952                {
953                        $return['status'] = true;
954                        $uid = $params['uid'];
955                        $defaultUserPassword = '{md5}'.base64_encode(pack("H*",md5($this->current_config['expressoAdmin_defaultUserPassword'])));
956                       
957                        if (!$this->db_functions->default_user_password_is_set($uid))
958                        {
959                                $userPassword = $this->ldap_functions->set_user_password($uid, $defaultUserPassword);
960                                $this->db_functions->set_user_password($uid, $userPassword);
961                        }
962                        else
963                        {
964                                $return['status'] = false;
965                                $return['msg'] = 'Senha default já cadastrada!';
966                        }
967                       
968                        $this->db_functions->write_log("Setado senha default para $uid",'','','','');
969                       
970                        return $return;
971                }
972
973                function return_user_password($params)
974                {
975                        $return['status'] = true;
976                        $uid = $params['uid'];
977                       
978                        if ($this->db_functions->default_user_password_is_set($uid))
979                        {
980                                $userPassword = $this->db_functions->get_user_password($uid);
981                                $this->ldap_functions->set_user_password($uid, $userPassword);
982                        }
983                        else
984                        {
985                                $return['status'] = false;
986                                $return['msg'] = 'Senha default NÃO cadastrada!';
987                        }
988                       
989                        $this->db_functions->write_log("Retornado senha default de $uid",'','','','');
990                       
991                        return $return;
992                }
993               
994                function delete($params)
995                {
996                        $return['status'] = true;
997                       
998                        // Verifica o acesso do gerente
999                        if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'delete_users'))
1000                        {
1001                                $uidnumber = $params['uidnumber'];
1002                                $user_info = $this->get_user_info($uidnumber);
1003                       
1004                                //LDAP
1005                                $result_ldap = $this->ldap_functions->delete_user($user_info);
1006                                if (!$result_ldap['status'])
1007                                {
1008                                        $return['status'] = false;
1009                                        $return['msg'] .= $result_ldap['msg'];
1010                                }
1011                                else
1012                                {
1013                                        //DB
1014                                        $result_db = $this->db_functions->delete_user($user_info);
1015                                        if (!$result_db['status'])
1016                                        {
1017                                                $return['status'] = false;
1018                                                $return['msg'] .= $result_ldap['msg'];
1019                                        }
1020                       
1021                                        //IMAP
1022                                        $result_imap = $this->imap_functions->delete_user($user_info['uid']);
1023                                        if (!$result_imap['status'])
1024                                        {
1025                                                $return['status'] = false;
1026                                                $return['msg'] .= $result_ldap['msg'];
1027                                        }
1028                                        $this->db_functions->write_log('deletado usuario ' . $user_info['uid'],'','','','');
1029                                }
1030                        }
1031                       
1032                        return $return;
1033                }
1034
1035
1036                function rename($params)
1037                {
1038                        $return['status'] = true;
1039                       
1040                        // Verifica acesso do gerente (OU) ao tentar renomear um usuário.                       
1041                        if ( ! $this->ldap_functions->check_access_to_renamed($params['uid']) )
1042                        {
1043                                $return['status'] = false;
1044                                $return['msg'] .= 'Você não tem acesso para deletar este usuário.';
1045                                return $return;
1046                        }
1047
1048                        // Verifica o acesso do gerente
1049                        if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'rename_users'))
1050                        {
1051                                $uid            = $params['uid'];
1052                                $new_uid        = $params['new_uid'];
1053                                $defaultUserPassword = '{md5}'.base64_encode(pack("H*",md5($this->current_config['expressoAdmin_defaultUserPassword'])));
1054                                $defaultUserPassword_plain = $this->current_config['expressoAdmin_defaultUserPassword'];
1055
1056                                $emailadmin_profiles = $this->db_functions->get_sieve_info();
1057                                $sieve_enable = $emailadmin_profiles[0]['imapenablesieve'];
1058                                $sieve_server = $emailadmin_profiles[0]['imapsieveserver'];
1059                                $sieve_port   = $emailadmin_profiles[0]['imapsieveport'];
1060
1061                                $imap_admin             = $_SESSION['phpgw_info']['expresso']['email_server']['imapAdminUsername'];
1062                                $imap_passwd    = $_SESSION['phpgw_info']['expresso']['email_server']['imapAdminPW'];
1063                                $imap_server    = $_SESSION['phpgw_info']['expresso']['email_server']['imapServer'];
1064                                $imap_port              = $_SESSION['phpgw_info']['expresso']['email_server']['imapPort'];
1065                                $imapDelimiter  = $_SESSION['phpgw_info']['expresso']['email_server']['imapDelimiter'];
1066                       
1067                                //Verifica se está sendo usuado cyrus 2.2 ou superior
1068                                $sk = fsockopen ($imap_server,$imap_port);
1069                                $server_resp = fread($sk, 100);
1070                        $tmp = split('v2.', $server_resp);
1071                        $cyrus_version = '2' . $tmp[1][0];
1072                                //$is_cyrus22 = strpos($server_resp, "v2.2");
1073                       
1074                    if ($cyrus_version > '21')
1075                {
1076                                        // Seta senha default
1077                                        $user_password = $this->ldap_functions->set_user_password($uid, $defaultUserPassword);
1078                       
1079                                        // Renomeia UID no openldap
1080                                        $result = $this->ldap_functions->rename_uid($uid, $new_uid);
1081                                        $new_dn = $result['new_dn'];
1082                                        if (!$result['status'])
1083                                        {
1084                                                $return['status'] = false;
1085                                                $return['msg'] .= "\n" . $result['msg'];
1086                                                $return['msg'] .= "\nErro ao renomear usuário no LDAP. Processo abortado.";
1087                                                return $return;
1088                                        }
1089                       
1090                                        // Remove old UID do ldap
1091                                        $user_info_mod_remove['uid'] = $uid;
1092                                        $this->ldap_functions->remove_user_attributes($new_dn, $user_info_mod_remove);
1093                       
1094                                //Renomeia mailbox
1095                        $result = $this->imap_functions->rename_mailbox($uid, $new_uid);
1096                                        if (!$result['status'])
1097                                        {
1098                                                $return['status'] = false;
1099                                                $return['msg'] .= "\n" . $result['msg'];
1100                                                $return['msg'] .= "\nErro ao renomear usuário no Cyrus. Processo abortado.";
1101                                        }
1102                               
1103                                // Renomeia sieve script
1104                                include_once('sieve-php.lib.php');
1105                                $sieve=new sieve($sieve_server, $sieve_port, $new_uid, $defaultUserPassword_plain);
1106                               
1107                                        if ($sieve->sieve_login())
1108                                        {
1109                                                $sieve->sieve_listscripts();
1110                                                $myactivescript=$sieve->response["ACTIVE"];
1111                                                $sieve->sieve_getscript($myactivescript);
1112
1113                                                $script = '';
1114                                                foreach($sieve->response as $result)
1115                                                {
1116                                                        $script .= $result;
1117                                                }
1118
1119                                        $scriptname = $new_uid;
1120                                                if($sieve->sieve_sendscript($new_uid,$script))
1121                                                {
1122                                                        if ($sieve->sieve_setactivescript($new_uid))
1123                                                        {
1124                                                                $sieve->sieve_deletescript($myactivescript);
1125                                                        }
1126                                                }
1127                                                else
1128                                                {
1129                                                        $return['status'] = false;
1130                                                        $return['msg'] .= $result['msg'] . "\nErro ao renomear script sieve, falha no envio do novo script.";
1131                                                }
1132                                                $sieve->sieve_logout();
1133                                        }
1134                                        else
1135                                        {
1136                                                        $return['status'] = false;
1137                                                        $return['msg'] .= $result['msg'] . "\nErro ao renomear script sieve, falha no Login.";
1138                                        }
1139
1140                                        // Retorna senha do usuário
1141                                        $this->ldap_functions->set_user_password($new_uid, $user_password);
1142                       
1143                                        $this->db_functions->write_log("renomeado login do usuario $uid para $new_uid.",'','','','');
1144
1145                                        $return['exec_return'] = "";
1146                    }
1147                        else
1148                        {
1149                                        $return['status'] = false;
1150                                        $return['msg'] .= "A renomeação de usuários só permitida com o cyrus versão 2.2 ou superior,";
1151                                        $return['msg'] .= "\ne com a opção 'allowusermoves: yes' configurado no imapd.conf.";
1152                        }
1153                        return $return;
1154                        }
1155                }
1156               
1157                function write_log_from_ajax($params)
1158                {
1159                        $this->db_functions->write_log($params['_action'],'',$params['userinfo'],'','');
1160                        return true;
1161                }
1162        }
1163?>
Note: See TracBrowser for help on using the repository browser.