source: companies/serpro/expressoAdmin1_2/inc/class.user.inc.php @ 903

Revision 903, 47.6 KB checked in by niltonneto, 15 years ago (diff)

Importacao inicial do Expresso do Serpro

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