source: companies/serpro/expressoAdminSerpro/inc/class.ldap_functions.inc.php @ 903

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

Importacao inicial do Expresso do Serpro

Line 
1<?php
2define('PHPGW_INCLUDE_ROOT','../');
3define('PHPGW_API_INC','../phpgwapi/inc');
4include_once(PHPGW_API_INC.'/class.common.inc.php');
5include_once('class.functions.inc.php');
6
7//function ldapRebind($ldap_connection, $ldap_url)
8//{
9//      if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && //($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
10//      {
11//              @ldap_bind($ldap_connection, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], //$_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']);
12//      }
13//}
14
15class ldap_functions
16{
17        var $ldapRead;
18        var $ldapWrite;
19        var $current_config;
20        var $functions;
21        var $manager_contexts;
22
23        function ldap_functions(){
24                $GLOBALS['phpgw_info']['server'] = $_SESSION['phpgw_info']['expresso']['server'];
25                $this->current_config = $_SESSION['phpgw_info']['expresso']['expressoAdmin'];
26                $common = new common();
27                $this->ldapRead = $common->ldapConnect();
28                $this->functions = new functions;
29                $manager_acl = $this->functions->read_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid']);
30                $this->manager_contexts = $manager_acl['contexts'];
31                //Para haver escrita em diretorio escravo eh necessario que se faca login na api com a opcao de seguir referrals. Foi feita aqui a divisao entre escrita e leitura pois a leitura ldap fica bem mais lenta quando configurada para seguir referrals.
32                if($GLOBALS['phpgw_info']['server']['diretorioescravo'])
33                        {
34                        $this->ldapWrite = $common->ldapConnect("","","",true);
35                        }
36                        else
37                        {
38                        $this->ldapWrite = $common->ldapConnect();
39                        }
40        }
41
42        /* ldap connection following referals and using Contac Center config*/
43        function ldapMasterConnect()
44        {
45                if ( (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server'])) && ($ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host'])) )
46                {
47                        ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
48                        ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
49                        //ldap_set_rebind_proc($ldap_connection, ldapRebind);
50                        if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
51                        {
52                                if ( ! ldap_bind($ldap_connection, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']) )
53                                {
54                                        return false;
55                                }
56                        }
57                        return $ldap_connection;
58                }
59                else
60                {
61                        $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
62                        if ($ldap_connection)
63                        {
64                                ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);
65                                ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
66                                if ( ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']) )
67                                        return $ldap_connection;
68                        }
69                }
70
71                return false;
72        }
73
74        function validate_fields($params)
75        {
76                /* ldap connection following referals and using Contac Center config*/
77                if (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server']))
78                {
79                        $ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
80                        if ($ldap_connection)
81                        {
82                                ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
83                                ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
84
85                                if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
86                                        ldap_bind($ldap_connection, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']);
87                                $context = $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['dn'];
88                        }
89                        else
90                        {
91                                $result['status'] = false;
92                                $result['msg'] = 'Falha na conexão com o ldap.';
93                                return $result;
94                        }
95                }
96                else
97                {
98                        $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
99                        ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);
100                        ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
101                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);
102                        $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
103                }
104
105                $result['status'] = true;
106
107                $params = unserialize($params['attributes']);
108                $type = $params['type'];
109                $uid = $params['uid'];
110                $mail = $params['mail'];
111                $mailalternateaddress = $params['mailalternateaddress'];
112
113                if ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])
114                {
115                        $result['status'] = false;
116                        $result['msg'] = 'Este LOGIN não pode ser utilizado pois á uma conta de sistema.';
117                        return $result;
118                }
119
120                if (($type == 'create_user') || ($type == 'rename_user'))
121                {
122                        if ($this->current_config['expressoAdmin_prefix_org'] == 'true')
123                        {
124                                //Obtenho UID sem a organização. Na criação o uid já vem sem a organização
125                                $tmp_uid_without_org = split("-", $params['uid']);
126                                $tmp_reverse_uid_without_org = array_reverse($tmp_uid_without_org);
127                                array_pop($tmp_reverse_uid_without_org);
128                                $uid_without_org = implode("-", $tmp_reverse_uid_without_org);
129                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(uid=$uid)(uid=$uid_without_org)))";
130                        }
131                        else
132                        {
133                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";
134                        }
135                        /*
136                        //UID
137                        if (($type == 'rename_user') && ($this->current_config['expressoAdmin_prefix_org'] == 'true'))
138                        {
139                                //Obtenho UID sem a organizaᅵᅵo. Na criaᅵᅵo o uid jï¿œ vem sem a organizaᅵᅵo
140                                $tmp_uid_without_org = split("-", $params['uid']);
141                                $tmp_reverse_uid_without_org = array_reverse($tmp_uid_without_org);
142                                array_pop($tmp_reverse_uid_without_org);
143                                $uid_without_org = implode("-", $tmp_reverse_uid_without_org);
144                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(uid=$uid)(uid=$uid_without_org)))";
145                        }
146                        else
147                        {
148                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";
149                        }
150                        */
151
152                        $justthese = array("uid", "mail", "cn");
153                        $search = ldap_search($ldap_connection, $context, $filter, $justthese);
154                        $count_entries = ldap_count_entries($ldap_connection,$search);
155                        if ($count_entries > 0)
156                        {
157                                $entries = ldap_get_entries($ldap_connection, $search);
158
159                                for ($i=0; $i<$entries['count']; $i++)
160                                {
161                                        $users .= $entries[$i]['cn'][0] . ' - ' . $entries[$i]['mail'][0] . "\n";
162                                }
163
164                                $result['status'] = false;
165                                $result['msg'] = "LOGIN já está sendo utilizado por:\n" . $users;
166                                return $result;
167                        }
168
169                        // GRUPOS
170                        $filter = "(&(phpgwAccountType=g)(cn=$uid))";
171                        $justthese = array("cn");
172                        $search = ldap_search($ldap_connection, $context, $filter, $justthese);
173                        $count_entries = ldap_count_entries($ldap_connection,$search);
174                        if ($count_entries > 0)
175                        {
176                                $result['status'] = false;
177                                $result['msg'] = 'O LOGIN do usuário já está sendo utilizado por um grupo.';
178                                return $result;
179                        }
180
181
182                        // UID em outras organizaᅵᅵes, pesquiso apenas na maquina local e se utilizar prefix_org
183                        if ($this->current_config['expressoAdmin_prefix_org'] == 'true')
184                        {
185                                $ldap_connection2 = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
186                                ldap_set_option($ldap_connection2,LDAP_OPT_PROTOCOL_VERSION,3);
187                                ldap_set_option($ldap_connection2, LDAP_OPT_REFERRALS, false);
188                                ldap_bind($ldap_connection2, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);
189                                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
190
191                                //Obtenho UID sem a organização
192                                /*
193                                $tmp_uid_without_org = split("-", $params['uid']);
194                                if (count($tmp_uid_without_org) < 2)
195                                {
196                                        $result['status'] = false;
197                                        $result['msg'] = 'Novo login sem organizaᅵᅵo.';
198                                        return $result;
199                                }
200                                $tmp_reverse_uid_without_org = array_reverse($tmp_uid_without_org);
201                                array_pop($tmp_reverse_uid_without_org);
202                                $uid_without_org = implode("-", $tmp_reverse_uid_without_org);
203                                */
204
205                                $filter = "(ou=*)";
206                                $justthese = array("ou");
207                                $search = ldap_list($ldap_connection2, $context, $filter, $justthese);
208                                $entries = ldap_get_entries($ldap_connection2   ,$search);
209
210                                foreach ($entries as $index=>$org)
211                                {
212                                        $organization = $org['ou'][0];
213                                        $organization = strtolower($organization);
214
215                                        $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$organization-$uid))";
216
217                                        $justthese = array("uid");
218                                        $search = ldap_search($ldap_connection2, $context, $filter, $justthese);
219                                        $count_entries = ldap_count_entries($ldap_connection2,$search);
220                                        if ($count_entries > 0)
221                                        {
222                                                $result['status'] = false;
223                                                $result['msg'] = 'O LOGIN já está sendo utilizado por outro usuário em outra organização.';
224                                                ldap_close($ldap_connection2);
225                                                return $result;
226                                        }
227                                }
228                                ldap_close($ldap_connection2);
229                        }
230                }
231
232                if ($type == 'rename_user')
233                {
234                        return $result;
235                }
236
237                // MAIL
238                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
239                $justthese = array("mail", "uid");
240                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
241                $entries = ldap_get_entries($ldap_connection,$search);
242                if ($entries['count'] == 1){
243                        if ($entries[0]['uid'][0] != $uid){
244                                $result['status'] = false;
245                                $result['msg'] = 'O E-MAIL está sendo utilizado por 1 usuário: ' . $entries[0]['uid'][0];
246                                //ldap_close($ldap_connection);
247                                return $result;
248                        }
249                }
250                else if ($entries['count'] > 1){
251                        $result['status'] = false;
252                        $result['msg'] = 'O E-MAIL está sendo utilizado por 2 ou mais usuários.';
253                        //ldap_close($ldap_connection);
254                        return $result;
255                }
256
257                // MAILAlternateAddress
258                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mailalternateaddress)(mailalternateaddress=$mailalternateaddress)))";
259                $justthese = array("mail", "uid");
260                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
261                $entries = ldap_get_entries($ldap_connection,$search);
262                if ($entries['count'] == 1){
263                        if ($entries[0]['uid'][0] != $uid){
264                                $result['status'] = false;
265                                $result['msg'] = "O E-MAIL alternativo está sendo utilizado por 1 usuário: " . $entries[0]['uid'][0];
266                                //ldap_close($ldap_connection);
267                                return $result;
268                        }
269                }
270                else if ($entries['count'] > 1){
271                        $result['status'] = false;
272                        $result['msg'] = 'O E-MAIL alternativo está sendo utilizado por 2 ou mais usuários.';
273                        return $result;
274                }
275
276                return $result;
277        }
278
279        function validate_fields_group($params)
280        {
281                /* ldap connection following referals and using Contac Center config*/
282                if (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server']))
283                {
284                        $ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
285                        if ($ldap_connection)
286                        {
287                                ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
288                                ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
289                                if ( ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
290                                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'], $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw']);
291                                $context = $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['dn'];
292                        }
293                        else
294                        {
295                                $result['status'] = false;
296                                $result['msg'] = 'Falha na conexão com o ldap.';
297                                return $result;
298                        }
299                }
300                else
301                {
302                        $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
303                        ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);
304                        ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
305                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);
306                        $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
307                }
308
309                $cn = $params['cn'];
310                $result['status'] = true;
311
312                if ($_SESSION['phpgw_info']['expresso']['global_denied_groups'][$cn])
313                {
314                        $result['status'] = false;
315                        $result['msg'] = 'O nome de grupo não pode ser utilizado pois é um grupo de sistema.';
316                        return $result;
317                }
318
319                // CN
320                $filter = "(&(phpgwAccountType=g)(cn=$cn))";
321                $justthese = array("cn");
322                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
323                $count_entries = ldap_count_entries($ldap_connection,$search);
324                if ($count_entries > 0)
325                {
326                        $result['status'] = false;
327                        $result['msg'] = 'O NOME do grupo já está sendo utilizado.';
328                        return $result;
329                }
330
331                // UID
332                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$cn))";
333                $justthese = array("uid");
334                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
335                $count_entries = ldap_count_entries($ldap_connection,$search);
336                if ($count_entries > 0)
337                {
338                        $result['status'] = false;
339                        $result['msg'] = 'O NOME do grupo já está sendo utilizado por um usuário.';
340                        return $result;
341                }
342
343                return $result;
344        }
345
346        function validate_fields_maillist($params)
347        {
348                /* ldap connection following referals and using Contac Center config*/
349                if (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server']))
350                {
351                        $ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
352                        if ($ldap_connection)
353                        {
354                                ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
355                                ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
356                                if ( ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
357                                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'], $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw']);
358                                $context = $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['dn'];
359                        }
360                        else
361                        {
362                                $result['status'] = false;
363                                $result['msg'] = 'Falha na conexão com o ldap.';
364                                return $result;
365                        }
366                }
367                else
368                {
369                        $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
370                        ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);
371                        ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
372                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);
373                        $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
374                }
375
376                $uid = $params['uid'];
377                $mail = $params['mail'];
378                $result['status'] = true;
379
380                if ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])
381                {
382                        $result['status'] = false;
383                        $result['msg'] = 'O LOGIN não pode ser utilizado pois é uma conta de sistema.';
384                        return $result;
385                }
386
387                // UID
388                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
389                $justthese = array("uid");
390                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
391                $count_entries = ldap_count_entries($ldap_connection,$search);
392                if ($count_entries > 0)
393                {
394                        $result['status'] = false;
395                        $result['msg'] = 'O LOGIN da lista já está sendo utilizado.';
396                        return $result;
397                }
398
399                // MAIL
400                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
401                $justthese = array("mail");
402                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
403                $count_entries = ldap_count_entries($ldap_connection,$search);
404                if ($count_entries > 0)
405                {
406                        $result['status'] = false;
407                        $result['msg'] = 'O E-MAIL da lista já está sendo utilizado.';
408                        return $result;
409                }
410
411                return $result;
412        }
413
414        //Busca usuários de um contexto e já retorna as options do select;
415        function get_available_users($params)
416        {
417                $context = $params['context'];
418                $recursive = $params['recursive'];
419                $justthese = array("cn", "uidNumber");
420                $filter="(phpgwAccountType=u)";
421
422                if ($recursive == 'true')
423                        $groups_list=ldap_search($this->ldapRead, $context, $filter, $justthese);
424                else
425                $groups_list=ldap_list($this->ldapRead, $context, $filter, $justthese);
426
427        $entries = ldap_get_entries($this->ldapRead, $groups_list);
428
429                for ($i=0; $i<$entries["count"]; $i++){
430                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
431                }
432
433                if (count($u_tmp))
434                        natcasesort($u_tmp);
435
436                $i = 0;
437                $users = array();
438
439                if (count($u_tmp))
440                {
441                        foreach ($u_tmp as $uidnumber => $cn)
442                        {
443                                $options .= "<option value=$uidnumber>$cn</option>";
444                        }
445                        unset($u_tmp);
446                }
447
448        return $options;
449        }
450
451        //Busca usuários de um contexto e já retorna as options do select;
452        /*
453        function get_available_users_and_maillist($params)
454        {
455                $context = $params['context'];
456                $recursive = $params['recursive'];
457                $justthese = array("cn", "uidNumber");
458                $filter="(|(phpgwAccountType=u)(phpgwAccountType=l))";
459
460                if ($recursive == 'true')
461                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
462                else
463                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
464
465        $entries = ldap_get_entries($this->ldap, $groups_list);
466
467                for ($i=0; $i<$entries["count"]; $i++){
468                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
469                }
470
471                if (count($u_tmp))
472                        natcasesort($u_tmp);
473
474                $i = 0;
475                $users = array();
476
477                if (count($u_tmp))
478                {
479                        foreach ($u_tmp as $uidnumber => $cn)
480                        {
481                                $options .= "<option value=$uidnumber>$cn</option>";
482                        }
483                        unset($u_tmp);
484                }
485
486        return $options;
487        }
488        */
489
490        //Busca usuários e listas de um contexto e já retorna as options do select;
491        function get_available_users_and_maillist($params)
492        {
493                $context = $params['context'];
494                $recursive = $params['recursive'];
495
496                //utilizado para retirar a própria lista das possibilidades de inclusão.
497                $denied_uidnumber = $params['denied_uidnumber'];
498
499                $justthese = array("cn", "uidNumber", "mail");
500
501                $users_filter="(phpgwAccountType=u)";
502                $lists_filter = $denied_uidnumber == '' ? "(phpgwAccountType=l)" : "(&(phpgwAccountType=l)(!(uidnumber=$denied_uidnumber)))";
503
504                $users = Array();
505                $lists = Array();
506
507                /* folling referral connection */
508                $ldap_conn_following_ref = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
509                if ($ldap_conn_following_ref)
510                {
511                        ldap_set_option($ldap_conn_following_ref, LDAP_OPT_PROTOCOL_VERSION, 3);
512                        ldap_set_option($ldap_conn_following_ref, LDAP_OPT_REFERRALS, 1);
513
514                        if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
515                                ldap_bind($ldap_conn_following_ref, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']);
516                }
517                else
518                        return false;
519
520                if ($recursive == 'true')
521                {
522                        $lists_search = ldap_search($ldap_conn_following_ref, $context, $lists_filter, $justthese);
523                        $users_search = ldap_search($ldap_conn_following_ref, $context, $users_filter, $justthese);
524                }
525                else
526                {
527                        $lists_search = ldap_list($ldap_conn_following_ref, $context, $lists_filter, $justthese);
528                        $users_search = ldap_list($ldap_conn_following_ref, $context, $users_filter, $justthese);
529                }
530
531                /* email lists */
532                $lists_entries = ldap_get_entries($ldap_conn_following_ref, $lists_search);
533
534                for ($i=0; $i<$lists_entries["count"]; $i++)
535                {
536                        $l_tmp[$lists_entries[$i]["mail"][0]] = $lists_entries[$i]["cn"][0];
537                }
538
539                if (count($l_tmp))
540                        natcasesort($l_tmp);
541
542                $i = 0;
543                $lists = array();
544
545                $options .= '<option  value="-1" disabled>------------------------------&nbsp;&nbsp;&nbsp;&nbsp;Listas&nbsp;&nbsp;&nbsp;&nbsp;------------------------------ </option>'."\n";
546                if (count($l_tmp))
547                {
548                        foreach ($l_tmp as $mail => $cn)
549                        {
550                                $options .= "<option value=$mail>$cn</option>";
551                        }
552                        unset($l_tmp);
553                }
554
555                /* users */
556                $users_entries = ldap_get_entries($ldap_conn_following_ref, $users_search);
557                for ($i=0; $i<$users_entries["count"]; $i++)
558                {
559                        $u_tmp[$users_entries[$i]["mail"][0]] = $users_entries[$i]["cn"][0];
560                }
561
562                if (count($u_tmp))
563                        natcasesort($u_tmp);
564
565                $i = 0;
566                $users = array();
567
568                $options .= '<option  value="-1" disabled>-----------------------------&nbsp;&nbsp;&nbsp;&nbsp;Usuï¿œrios&nbsp;&nbsp;&nbsp;&nbsp;---------------------------- </option>'."\n";
569                if (count($u_tmp))
570                {
571                        foreach ($u_tmp as $mail => $cn)
572                        {
573                                $options .= "<option value=$mail class='line-above'>$cn</option>";
574                        }
575                        unset($u_tmp);
576                }
577
578                ldap_close($ldap_conn_following_ref);
579                return $options;
580        }
581
582        function get_available_groups($params)
583        {
584                $context = $params['context'];
585                $justthese = array("cn", "gidNumber");
586        $groups_list=ldap_search($this->ldapRead, $context, ("(phpgwAccountType=g)"), $justthese);
587        ldap_sort($this->ldapRead, $groups_list, "cn");
588
589        $entries = ldap_get_entries($this->ldapRead, $groups_list);
590
591                $options = '';
592                for ($i=0; $i<$entries['count']; $i++)
593                {
594                        $options .= "<option value=" . $entries[$i]['gidnumber'][0] . ">" . $entries[$i]['cn'][0] . "</option>";
595                }
596
597        return $options;
598        }
599
600        function get_available_maillists($params)
601        {
602                if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
603                        return false;
604
605                $context = $params['context'];
606                $justthese = array("uid","mail","uidNumber");
607        $maillists=ldap_search($ldapMasterConnect, $context, ("(phpgwAccountType=l)"), $justthese);
608        ldap_sort($ldapMasterConnect, $maillists, "uid");
609
610        $entries = ldap_get_entries($ldapMasterConnect, $maillists);
611
612                $options = '';
613                for ($i=0; $i<$entries['count']; $i++)
614                {
615                        $options .= "<option value=" . $entries[$i]['uid'][0] . ">" . $entries[$i]['uid'][0] . " (" . $entries[$i]['mail'][0] . ")" . "</option>";
616                }
617
618        ldap_close($ldapMasterConnect);
619        return $options;
620        }
621
622        function ldap_add_entry($dn, $entry)
623        {
624                $result = array();
625                if (!@ldap_add ( $this->ldapWrite, $dn, $entry ))
626                {
627                        $result['status']               = false;
628                        $result['error_number'] = ldap_errno($this->ldapWrite);
629                        if(ldap_errno($this->ldapWrite) == 50)
630                                {
631                                $result['msg']  = "Não há permissão de escrita no ldap";
632                                }
633                                else
634                                {
635                                $result['msg']  = "Erro na adição do usuário ($dn).
636Retorno do servidor:" . ldap_error($this->ldapWrite);
637                                }
638                }
639                else
640                        $result['status'] = true;
641
642                return $result;
643        }
644
645        function ldap_save_photo($dn, $pathphoto, $photo_exist=false)
646        {
647                $fd = fopen($pathphoto, "r");
648                $fsize = filesize($pathphoto);
649                $jpegStr = fread($fd, $fsize);
650                fclose ($fd);
651                $attrs['jpegPhoto'] = $jpegStr;
652
653                if ($photo_exist)
654                        $res = @ldap_mod_replace($this->ldapWrite, $dn, $attrs);
655                else
656                        $res = @ldap_mod_add($this->ldapWrite, $dn, $attrs);
657
658                if ($res)
659                {
660                        $result['status'] = true;
661                }
662                else
663                {
664                        $result['status'] = false;
665                        $result['msg'] = "Erro na função ldap_functions->ldap_save_photo ($dn).\nRetorno do servidor:" . ldap_error($this->ldapWrite);
666                }
667
668                return $result;
669        }
670
671        function ldap_remove_photo($dn)
672        {
673                $attrs['jpegPhoto'] = array();
674                $res = ldap_mod_del($this->ldapWrite, $dn, $attrs);
675
676                if ($res)
677                {
678                        $result['status'] = true;
679                }
680                else
681                {
682                        $result['status'] = false;
683                        $result['msg'] = "Erro na função ldap_functions->ldap_remove_photo ($dn).\nRetorno do servidor:" . ldap_error($this->ldapWrite);
684                }
685
686                return $result;
687        }
688
689        // Pode receber tanto um único memberUid quanto um array de memberUid's
690        function add_user2group($gidNumber, $memberUid)
691        {
692                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
693                $justthese = array("dn");
694                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
695                $entry = ldap_get_entries($this->ldapRead, $search);
696                $group_dn = $entry[0]['dn'];
697                $attrs['memberUid'] = $memberUid;
698
699                $res = @ldap_mod_add($this->ldapWrite, $group_dn, $attrs);
700
701                if ($res)
702                {
703                        $result['status'] = true;
704                }
705                else
706                {
707                        $result['status'] = false;
708                        $result['msg'] = "Erro na função ldap_functions->add_user2group ($memberUid).\nRetorno do servidor:" . ldap_error($this->ldapWrite);
709                }
710                return $result;
711        }
712
713        function remove_user2group($gidNumber, $memberUid)
714        {
715                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
716                $justthese = array("dn");
717                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
718                $entry = ldap_get_entries($this->ldapRead, $search);
719                $group_dn = $entry[0]['dn'];
720                $attrs['memberUid'] = $memberUid;
721                $res = @ldap_mod_del($this->ldapWrite, $group_dn, $attrs);
722
723                /*echo 'usuarios recebidos para remocao no ldap';
724                echo '<pre>';
725                print_r($memberUid);*/
726
727                if ($res)
728                {
729                        $result['status'] = true;
730                }
731                else
732                {
733                        $result['status'] = false;
734                        $result['msg'] = "Erro na função ldap_functions->remove_user2group ($memberUid).\nRetorno do servidor:" . ldap_error($this->ldapWrite);
735                }
736                return $result;
737        }
738
739        function add_user2maillist($uid, $mail)
740        {
741                if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
742                {
743                        $result['status'] = false;
744                        $result['msg'] = "Falha de conexão com o openLDAP.\n\nRetorno do servidor:" . ldap_error($ldapMasterConnect);
745                        return $result;
746                }
747
748                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
749                $justthese = array("dn");
750                $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
751                $entry = ldap_get_entries($ldapMasterConnect, $search);
752                $group_dn = $entry[0]['dn'];
753                $attrs['mailForwardingAddress'] = $mail;
754                $res = @ldap_mod_add($ldapMasterConnect, $group_dn, $attrs);
755
756                if ($res)
757                {
758                        $result['status'] = true;
759                }
760                else
761                {
762                        $result['status'] = false;
763                        if (ldap_errno($ldapMasterConnect) == '50')
764                        {
765                                $result['msg'] = "Erro na função ldap_functions->add_user2maillist.\n" .
766                                                                 "O usuário utilizado para gravação no LDAP, DEVE ter direito de escrita.\n".
767                                                                 "O usuário " . $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] . " não tem este direito.\n".
768                                                                 "Edite \"Configuração Global do Catálogo\", no módulo Administrador, Catálogo de Endereços e adicione um usuário com direitos de escrita.";
769                        }
770                        else
771                                $result['msg'] = "Erro na função ldap_functions->add_user2maillist.\nRetorno do servidor:" . ldap_error($ldapMasterConnect);
772                }
773
774                ldap_close($ldapMasterConnect);
775                return $result;
776        }
777
778        function add_user2maillist_scl($dn, $array_emails)
779        {
780                $attrs['mailSenderAddress'] = $array_emails;
781
782                print_r($attrs);
783
784                $res = @ldap_mod_add($this->ldapWrite, $dn, $attrs);
785
786                if ($res)
787                {
788                        $result['status'] = true;
789                }
790                else
791                {
792                        $result['status'] = false;
793                        $result['msg'] = "Erro na função ldap_functions->add_user2maillist_scp ($dn).\n\nRetorno do servidor:" . ldap_error($this->ldapWrite);
794                }
795                return $result;
796        }
797
798        function remove_user2maillist($uid, $mail)
799        {
800                if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
801                {
802                        $result['status'] = false;
803                        $result['msg'] = "Falha de conexão com o openLDAP.\n\nRetorno do servidor:" . ldap_error($ldapMasterConnect);
804                        return $result;
805                }
806
807                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
808                $justthese = array("dn");
809                $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
810                $entry = ldap_get_entries($ldapMasterConnect, $search);
811                $group_dn = $entry[0]['dn'];
812                $attrs['mailForwardingAddress'] = $mail;
813                $res = @ldap_mod_del($ldapMasterConnect, $group_dn, $attrs);
814
815                if ($res)
816                {
817                        $result['status'] = true;
818                }
819                else
820                {
821                        $result['status'] = false;
822                        if (ldap_errno($ldapMasterConnect) == '50')
823                        {
824                                $result['msg'] = "Erro na função ldap_functions->add_user2maillist.\n" .
825                                                                 "O usuário utilizado para gravação no LDAP, DEVE ter direito de escrita.\n".
826                                                                 "O usuário " . $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] . " não tem este direito.\n".
827                                                                 "Edite \"Configuração Global do Catálogo\", no módulo Administrador, Catálogo de Endereços e adicione um usuário com direitos de escrita.";
828                        }
829                        else
830                                $result['msg'] = "Erro na função ldap_functions->add_user2maillist.\nRetorno do servidor:" . ldap_error($ldapMasterConnect);
831                }
832                ldap_close($ldapMasterConnect);
833                return $result;
834        }
835
836        function remove_user2maillist_scl($dn, $array_emails)
837        {
838                $attrs['mailSenderAddress'] = $array_emails;
839                $res = @ldap_mod_del($this->ldapWrite, $dn, $attrs);
840
841                if ($res)
842                {
843                        $result['status'] = true;
844                }
845                else
846                {
847                        $result['status'] = false;
848                        $result['msg'] = "Erro na função ldap_functions->remove_user2maillist_scp ($dn).\n\nRetorno do servidor:" . ldap_error($this->ldapWrite);
849                }
850                return $result;
851        }
852
853        function replace_user2maillists($new_mail, $old_mail)
854        {
855                $filter = "(&(phpgwAccountType=l)(mailforwardingaddress=$old_mail))";
856                $justthese = array("dn");
857                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
858                $entries = ldap_get_entries($this->ldapRead, $search);
859                $result['status'] = true;
860                for ($i=0; $i<$entries['count']; $i++)
861                {
862                        $attrs['mailforwardingaddress'] = $old_mail;
863                        $res1 = @ldap_mod_del($this->ldapWrite, $entries[$i]['dn'], $attrs);
864                        $attrs['mailforwardingaddress'] = $new_mail;
865                        $res2 = @ldap_mod_add($this->ldapWrite, $entries[$i]['dn'], $attrs);
866
867                        if ((!$res1) || (!$res2))
868                        {
869                                $result['status'] = false;
870                                $result['msg'] = "Erro na função ldap_functions->replace_user2maillists ($old_mail).\nRetorno do servidor:" . ldap_error($this->ldapWrite);
871                        }
872                }
873
874                return $result;
875        }
876
877        function get_user_uidnumber($uidnumber)
878        {
879
880                $result = false;
881                foreach($this->manager_contexts as $index=>$context)
882                {
883                        $filter="(&(phpgwAccountType=u)(uidNumber=".$uidnumber."))";
884                        $justthese = array('uidnumber');
885
886                        $search = ldap_search($this->ldapRead, $context, $filter, $justthese);
887                        $entry = ldap_get_entries($this->ldapRead, $search);
888
889
890                        if($entry['count'])
891                        {
892                                $result = true;
893                        }
894                }
895
896                return $result;
897
898        }
899
900
901        function get_user_info($uidnumber)
902        {
903                foreach ($this->manager_contexts as $index=>$context)
904                {
905                        //$filter="(&(phpgwAccountType=u)(uidNumber=".$uidnumber."))";
906                        $filter="(&(objectclass=".$GLOBALS['phpgw_info']['server']['atributousuarios'].")(uidNumber=".$uidnumber."))";
907                        //Para alguns atributos do rhds eh necessario determinar explicitamente os atributos retornados.
908                        $justthese = array('objectclass','uid','uidnumber','gidnumber','departmentnumber','givenname','sn','telephonenumber','phpgwlastpasswdchange','phpgwaccountstatus','phpgwaccountvisible','phpgwaccounttype','deliverymode','accountstatus','mail','mailalternateaddress','mailforwardingaddress','deliverymode','userpasswordrfc2617','createtimestamp','jpegphoto','objectclass','sambaacctflags','sambalogonscript','homedirectory','sambasid','employeenumber','cpf','rg','ou','o','l','st','postaladdress','responsavel','phpgwaccountexpires','usrcargo','pager','mobile','description',$GLOBALS['phpgw_info']['server']['atributoexpiracao']);
909                        $search = ldap_search($this->ldapRead, $context, $filter,$justthese);
910                        $entry = ldap_get_entries($this->ldapRead, $search);
911
912                        if ($entry['count'])
913                        {
914                                //Pega o dn do setor do usuario.
915                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
916                                $sector_dn_array = explode(",", $entry[0]['dn']);
917                                for($i=1; $i<count($sector_dn_array); $i++)
918                                        $sector_dn .= $sector_dn_array[$i] . ',';
919                                //Retira ultimo pipe.
920                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
921
922                                $result['context']              = $sector_dn;
923                                $result['uid']                  = $entry[0]['uid'][0];
924                                $result['uidnumber']            = $entry[0]['uidnumber'][0];
925                                $result['gidnumber']            = $entry[0]['gidnumber'][0];
926                                $result['departmentnumber']     = $entry[0]['departmentnumber'][0];
927                                $result['givenname']            = $entry[0]['givenname'][0];
928                                $result['sn']                   = $entry[0]['sn'][0];
929                                $result['telephonenumber']      = $entry[0]['telephonenumber'][0];
930                                $result['passwd_expired']       = $entry[0]['phpgwlastpasswdchange'][0];
931                                $result['phpgwaccountstatus']   = $entry[0]['phpgwaccountstatus'][0];
932                                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
933                                $result['phpgwaccounttype']     = $entry[0]['phpgwaccounttype'][0];
934                                $result['phpgwaccountexpires']  = $entry[0]['phpgwaccountexpires'][0];
935                                $result['deliverymode']         = $entry[0]['deliverymode'][0];
936                                $result['accountstatus']        = $entry[0]['accountstatus'][0];
937                                $result['mail']                 = $entry[0]['mail'][0];
938                                $result['mailalternateaddress'] = $entry[0]['mailalternateaddress'];
939                                $result['mailforwardingaddress']= $entry[0]['mailforwardingaddress'];
940                                $result['deliverymode']         = $entry[0]['deliverymode'][0];
941                                $result['userPasswordRFC2617']  = $entry[0]['userpasswordrfc2617'][0];
942                                $result['createtimestamp']      = $entry[0]['createtimestamp'][0];
943                                $result['atributoexpiracao']    = $entry[0][$GLOBALS['phpgw_info']['server']['atributoexpiracao']][0];
944                                $result['objectclass']          = $entry[0]['objectclass'];
945
946                                //Photo
947                                if ($entry[0]['jpegphoto']['count'] == 1)
948                                        $result['photo_exist'] = 'true';
949
950                                // Samba
951                                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
952                                {
953                                        if ($entry[0]['objectclass'][$i] == 'sambaSamAccount')
954                                                $result['sambaUser'] = true;
955                                }
956                                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($result['sambaUser']))
957                                {
958                                        $result['sambaaccflags'] = $entry[0]['sambaacctflags'][0];
959                                        $result['sambalogonscript'] = $entry[0]['sambalogonscript'][0];
960                                        $result['homedirectory'] = $entry[0]['homedirectory'][0];
961                                        $a_tmp = explode("-", $entry[0]['sambasid'][0]);
962                                        array_pop($a_tmp);
963                                        $result['sambasid'] = implode("-", $a_tmp);
964                                }
965
966                                // Verifica o acesso do gerente aos atributos corporativos
967                                if ($this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'manipulate_corporative_information'))
968                                {
969                                        $result['corporative_information_employeenumber']       = $entry[0]['employeenumber'][0];
970                                        $result['corporative_information_cpf']                  = $entry[0]['cpf'][0];
971                                        $result['corporative_information_rg']                   = $entry[0]['rg'][0];
972                                        $result['corporative_information_ou']                   = $entry[0]['ou'][0];
973                                        $result['corporative_information_o']                    = $entry[0]['o'][0];
974                                //      $result['corporative_information_l']                    = $entry[0]['l'][0];
975                                //      $result['corporative_information_st']                   = $entry[0]['st'][0];
976                                        $result['corporative_information_postaladdress']        = $entry[0]['postaladdress'][0];
977                                        $result['corporative_information_telephonenumber']      = $entry[0]['telephonenumber'][0];
978                                        $result['corporative_information_usrcargo']             = $entry[0]['usrcargo'][0];
979                                        $result['corporative_information_pager']                = $entry[0]['pager'][0];
980                                        $result['corporative_information_mobile']               = $entry[0]['mobile'][0];
981                                        $result['corporative_information_description']  = $entry[0]['description'][0];
982                                        $result['accountOwners']                                = $entry[0]['responsavel'];
983
984                                        //Pega o nome do estado e das cidades daqueles estado no banco de dados
985                                        if($entry[0]['st'][0])
986                                        {
987                                                $state_id = (integer)$entry[0]['st'][0];
988                                                $params['state_id'] = $state_id;
989
990                                                $state = $this->functions->get_states($state_id);
991
992                                                $result['corporative_information_st'] = $state;
993
994                                                if($entry[0]['l'][0])
995                                                {
996                                                        $city_id = (integer)$entry[0]['l'][0];
997                                                        $params['city_id'] = $city_id;
998
999                                                        $city = $this->functions->get_cities($params);
1000
1001                                                        $result['corporative_information_l'] = $city;
1002                                                }
1003
1004                                        }
1005
1006                                }
1007
1008                                // MailLists
1009                                $result['maillists_info'] = $this->get_user_maillists($result['mail']);
1010                                if($result['maillists_info'])
1011                                {
1012                                        foreach ($result['maillists_info'] as $maillist)
1013                                        {
1014                                                $result['maillists'][] = $maillist['uid'];
1015                                        }
1016                                }
1017
1018                                // Groups
1019                                $justthese = array("gidnumber","cn");
1020                                $filter="(&(phpgwAccountType=g)(memberuid=".$result['uid']."))";
1021                                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1022                        ldap_sort($this->ldapRead, $search, "cn");
1023                        $entries = ldap_get_entries($this->ldapRead, $search);
1024                        for ($i=0; $i<$entries['count']; $i++)
1025                        {
1026                                $result['groups_ldap'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['cn'][0];
1027                        }
1028                        }
1029                }
1030                return $result;
1031        }
1032
1033        function get_user_maillists($mail)
1034        {
1035                if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
1036                        return false;
1037
1038                $result = array();
1039
1040                //Mostra somente os mailists dos contextos do gerente
1041                $justthese = array("uid","mail","uidnumber");
1042                $filter="(&(phpgwAccountType=l)(mailforwardingaddress=$mail))";
1043
1044                foreach ($this->manager_contexts as $index=>$context)
1045                {
1046                        $search = ldap_search($ldapMasterConnect, $context, $filter, $justthese);
1047                $entries = ldap_get_entries($ldapMasterConnect, $search);
1048
1049                for ($i=0; $i<$entries['count']; $i++)
1050                {
1051                                $result[ $entries[$i]['uid'][0] ]['uid']                = $entries[$i]['uid'][0];
1052                                $result[ $entries[$i]['uid'][0] ]['mail']               = $entries[$i]['mail'][0];
1053
1054                                $a_tmp[] = $entries[$i]['uid'][0];
1055                }
1056                }
1057
1058        if($a_tmp) {
1059                natcasesort($a_tmp);
1060
1061                foreach ($a_tmp as $uid)
1062                {
1063                                $return[$uid]['uid']            = $result[$uid]['uid'];
1064                                $return[$uid]['mail']           = $result[$uid]['mail'];
1065                }
1066        }
1067        ldap_close($ldapMasterConnect);
1068                return $return;
1069        }
1070
1071        function get_group_info($gidnumber)
1072        {
1073                foreach ($this->manager_contexts as $index=>$context)
1074                {
1075                        $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1076                        $search = ldap_search($this->ldapRead, $context, $filter);
1077                        $entry = ldap_get_entries($this->ldapRead, $search);
1078
1079                        if ($entry['count'])
1080                        {
1081                                //Pega o dn do setor do grupo.
1082                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
1083                                $sector_dn_array = explode(",", $entry[0]['dn']);
1084                                for($i=1; $i<count($sector_dn_array); $i++)
1085                                        $sector_dn .= $sector_dn_array[$i] . ',';
1086                                //Retira ultimo pipe.
1087                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
1088
1089                                $result['context']                              = $sector_dn;
1090                                $result['cn']                                   = $entry[0]['cn'][0];
1091                                $result['description']                  = $entry[0]['description'][0];
1092                                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
1093                                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
1094                                $result['email']                                = $entry[0]['mail'][0];
1095
1096                                //MemberUid
1097                                for ($i=0; $i<$entry[0]['memberuid']['count']; $i++)
1098                                {
1099                                        $justthese = array("cn","uid","uidnumber");
1100
1101                                        // Montagem dinamica do filtro
1102                                        $filter="(&(phpgwAccountType=u)(|";
1103                                        for ($k=0; (($k<10) && ($i<$entry[0]['memberuid']['count'])); $k++)
1104                                        {
1105                                                $filter .= "(uid=".$entry[0]['memberuid'][$i].")";
1106                                                $i++;
1107                                        }
1108                                        $i--;
1109                                        $filter .= "))";
1110
1111                                        $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1112                                        $user_entry = ldap_get_entries($this->ldapRead, $search);
1113
1114                                        for ($j=0; $j<$user_entry['count']; $j++)
1115                                        {
1116                                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['cn'] = $user_entry[$j]['cn'][0];
1117                                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['uidnumber'] = $user_entry[$j]['uidnumber'][0];
1118                                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['type'] = 'u';
1119                                        }
1120                                }
1121
1122                                // Checamos e-mails que não fazem parte do expresso.
1123                                // Criamos um array temporario
1124                                $tmp_array = array();
1125                                if($result['memberuid_info'])
1126                                        foreach ($result['memberuid_info'] as $uid => $user_data)
1127                                        {
1128                                                $tmp_array[] = $uid;
1129                                        }
1130
1131                                if($entry[0]['memberuid']) {
1132                                        // Retira o count do array
1133                                        array_shift($entry[0]['memberuid']);
1134                                        // Vemos a diferenï¿œa
1135                                        $array_diff = array_diff($entry[0]['memberuid'], $tmp_array);
1136                                        // Incluimos no resultado
1137                                        foreach ($array_diff as $index=>$uid)
1138                                        {
1139                                                $result['memberuid_info'][$uid]['cn'] = $uid;
1140                                        }
1141                                }
1142
1143                                // Samba
1144                                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
1145                                {
1146                                        if ($entry[0]['objectclass'][$i] == 'sambaGroupMapping')
1147                                                $result['sambaGroup'] = true;
1148
1149                                        $a_tmp = explode("-", $entry[0]['sambasid'][0]);
1150                                        array_pop($a_tmp);
1151                                        $result['sambasid'] = implode("-", $a_tmp);
1152                                }
1153                                return $result;
1154                        }
1155                }
1156        }
1157
1158        function get_maillist_info($uidnumber)
1159        {
1160
1161                /* folling referral connection */
1162                $ldap_conn_following_ref = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
1163                if ($ldap_conn_following_ref)
1164                {
1165                        ldap_set_option($ldap_conn_following_ref, LDAP_OPT_PROTOCOL_VERSION, 3);
1166                        ldap_set_option($ldap_conn_following_ref, LDAP_OPT_REFERRALS, 1);
1167
1168                        if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
1169                                ldap_bind($ldap_conn_following_ref, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']);
1170                }
1171
1172                foreach ($this->manager_contexts as $index=>$context)
1173                {
1174                        $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
1175                        $search = ldap_search($this->ldapRead, $context, $filter);
1176                        $entry = ldap_get_entries($this->ldapRead, $search);
1177
1178                        if ($entry['count'])
1179                        {
1180                                //Pega o dn do setor do usuario.
1181                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
1182                                $sector_dn_array = explode(",", $entry[0]['dn']);
1183                                for($i=1; $i<count($sector_dn_array); $i++)
1184                                        $sector_dn .= $sector_dn_array[$i] . ',';
1185                                //Retira ultimo pipe.
1186                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
1187
1188                                $result['context']                              = $sector_dn;
1189                                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
1190                                $result['uid']                                  = strtolower($entry[0]['uid'][0]);
1191                                $result['cn']                                   = $entry[0]['cn'][0];
1192                                $result['mail']                                 = $entry[0]['mail'][0];
1193                                $result['accountStatus']                = $entry[0]['accountstatus'][0];
1194                                $result['phpgwAccountVisible']  = $entry[0]['phpgwaccountvisible'][0];
1195
1196                                //Members
1197                                for ($i=0; $i<$entry[0]['mailforwardingaddress']['count']; $i++)
1198                                {
1199                                        $justthese = array("cn", "uidnumber", "uid", "phpgwaccounttype", "mail");
1200
1201                                        // Montagem dinamica do filtro, para nao ter muitas conexoes com o ldap
1202                                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|";
1203                                        for ($k=0; (($k<10) && ($i<$entry[0]['mailforwardingaddress']['count'])); $k++)
1204                                        {
1205                                                $filter .= "(mail=".$entry[0]['mailforwardingaddress'][$i].")";
1206                                                $i++;
1207                                        }
1208                                        $i--;
1209                                        $filter .= "))";
1210
1211                                        $search = ldap_search($ldap_conn_following_ref, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1212                                        $user_entry = ldap_get_entries($ldap_conn_following_ref, $search);
1213
1214                                        for ($j=0; $j<$user_entry['count']; $j++)
1215                                        {
1216                                                $result['mailForwardingAddress_info'][$user_entry[$j]['mail'][0]]['uid'] = $user_entry[$j]['uid'][0];
1217                                                $result['mailForwardingAddress_info'][$user_entry[$j]['mail'][0]]['cn'] = $user_entry[$j]['cn'][0];
1218                                                $result['mailForwardingAddress_info'][$user_entry[$j]['mail'][0]]['type'] = $user_entry[$j]['phpgwaccounttype'][0];
1219                                                $result['mailForwardingAddress'][] = $user_entry[$j]['mail'][0];
1220                                        }
1221                                }
1222
1223                                // Emails não encontrados no ldap
1224                                array_shift($entry[0]['mailforwardingaddress']); //Retira o count do array
1225                                $missing_emails = array_diff($entry[0]['mailforwardingaddress'], $result['mailForwardingAddress']);
1226
1227                                // Incluimos estes no resultado
1228                                foreach ($missing_emails as $index=>$mailforwardingaddress)
1229                                {
1230                                        $result['mailForwardingAddress_info'][$mailforwardingaddress]['uid'] = $mailforwardingaddress;
1231                                        $result['mailForwardingAddress_info'][$mailforwardingaddress]['cn'] = 'E-Mail não encontrado';
1232                                        $result['mailForwardingAddress'][] = $mailforwardingaddress;
1233                                }
1234
1235                                ldap_close($ldap_conn_following_ref);
1236                                return $result;
1237                        }
1238                }
1239        }
1240
1241        function get_maillist_scl_info($uidnumber)
1242        {
1243                foreach ($this->manager_contexts as $index=>$context)
1244                {
1245                        $filter="(&(phpgwAccountType=l)(uidNumber=$uidnumber))";
1246                        $search = ldap_search($this->ldapRead, $context, $filter);
1247                        $entry = ldap_get_entries($this->ldapRead, $search);
1248
1249                        if ($entry['count'])
1250                        {
1251                                //Pega o dn do setor do usuario.
1252                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
1253                                $sector_dn_array = explode(",", $entry[0]['dn']);
1254                                for($i=1; $i<count($sector_dn_array); $i++)
1255                                        $sector_dn .= $sector_dn_array[$i] . ',';
1256                                //Retira ultimo pipe.
1257                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
1258
1259                                $result['dn']                                           = $entry[0]['dn'];
1260                                $result['context']                                      = $sector_dn;
1261                                $result['uidnumber']                            = $entry[0]['uidnumber'][0];
1262                                $result['uid']                                          = $entry[0]['uid'][0];
1263                                $result['cn']                                           = $entry[0]['cn'][0];
1264                                $result['mail']                                         = $entry[0]['mail'][0];
1265                                $result['accountStatus']                        = $entry[0]['accountstatus'][0];
1266                                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
1267                                $result['accountRestrictive']           = $entry[0]['accountrestrictive'][0];
1268                                $result['participantCanSendMail']       = $entry[0]['participantcansendmail'][0];
1269
1270                                //Senders
1271                                for ($i=0; $i<$entry[0]['mailsenderaddress']['count']; $i++)
1272                                {
1273                                        $justthese = array("cn", "uidnumber", "uid", "mail");
1274                                        $filter="(&(phpgwAccountType=u)(mail=".$entry[0]['mailsenderaddress'][$i]."))";
1275                                        $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1276                                        $user_entry = ldap_get_entries($this->ldapRead, $search);
1277
1278                                        $result['senders_info'][$user_entry[0]['mail'][0]]['uid'] = $user_entry[0]['uid'][0];
1279                                        $result['senders_info'][$user_entry[0]['mail'][0]]['cn'] = $user_entry[0]['cn'][0];
1280                                        $result['members'][] = $user_entry[0]['mail'][0];
1281                                }
1282                                return $result;
1283                        }
1284                }
1285        }
1286
1287        function group_exist($gidnumber)
1288        {
1289                $justthese = array("cn");
1290                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1291                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1292
1293                $entry = ldap_get_entries($this->ldapRead, $search);
1294                if ($entry['count'] == 0)
1295                        return false;
1296                else
1297                        return true;
1298        }
1299
1300        function gidnumbers2cn($gidnumbers)
1301        {
1302                $result = array();
1303                if (count($gidnumbers))
1304                {
1305                        $justthese = array("cn");
1306                        $i = 0;
1307                        foreach ($gidnumbers as $gidnumber)
1308                        {
1309                                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1310                                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1311
1312                                $entry = ldap_get_entries($this->ldapRead, $search);
1313                                if ($entry['count'] == 0)
1314                                        $result['groups_info'][$i]['cn'] = '_Grupo existe no BD mas não no LDAP';
1315                                else
1316                                        $result['groups_info'][$i]['cn'] = $entry[0]['cn'][0];
1317                                $result['groups_info'][$i]['gidnumber'] = $gidnumber;
1318
1319                                /* o gerente pode excluir um grupo de um usuario onde este grupo esta em outra OU ? */
1320                                /* ï¿œ o mesmo que o manager editar um grupo de outra OU */
1321                                $result['groups_info'][$i]['group_disabled'] = 'true';
1322                                foreach ($this->manager_contexts as $index=>$context)
1323                                {
1324                                        if (strpos(strtolower($entry[0]['dn']), strtolower($context)))
1325                                        {
1326                                                $result['groups_info'][$i]['group_disabled'] = 'false';
1327                                        }
1328                                }
1329
1330                                $i++;
1331                        }
1332                }
1333                return $result;
1334        }
1335
1336        function uidnumber2uid($uidnumber)
1337        {
1338                $justthese = array("uid");
1339                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1340                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1341                $entry = ldap_get_entries($this->ldapRead, $search);
1342                return $entry[0]['uid'][0];
1343        }
1344
1345        function uidnumber2mail($uidnumber)
1346        {
1347                $justthese = array("mail");
1348                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1349                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1350                $entry = ldap_get_entries($this->ldapRead, $search);
1351                return $entry[0]['mail'][0];
1352        }
1353
1354
1355        function change_user_context($dn, $newrdn, $newparent)
1356        {
1357                if (!ldap_rename ( $this->ldapWrite, $dn, $newrdn, $newparent, true ))
1358                {
1359                        $return['status'] = false;
1360                        $return['msg'] = 'Erro em ldap_funcitons->change_user_context: ' . ldap_error($this->ldapWrite);
1361                }
1362                else
1363                        $return['status'] = true;
1364
1365                return $return;
1366        }
1367
1368        function replace_user_attributes($dn, $ldap_mod_replace)
1369        {
1370                if (!@ldap_mod_replace ( $this->ldapWrite, $dn, $ldap_mod_replace ))
1371                {
1372                        $return['status'] = false;
1373                        $return['error_number'] = ldap_errno($this->ldapWrite);
1374                        $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldapWrite);
1375                }
1376                else
1377                        $return['status'] = true;
1378
1379                return $return;
1380        }
1381
1382        function add_user_attributes($dn, $ldap_add)
1383        {
1384                if (!@ldap_mod_add ( $this->ldapWrite, $dn, $ldap_add ))
1385                {
1386                        $return['status'] = false;
1387                        $return['error_number'] = ldap_errno($this->ldapWrite);
1388                        $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldapWrite);
1389                }
1390                else
1391                        $return['status'] = true;
1392
1393                return $return;
1394        }
1395
1396        function remove_user_attributes($dn, $ldap_remove)
1397        {
1398                if (!@ldap_mod_del ( $this->ldapWrite, $dn, $ldap_remove ))
1399                {
1400                        $return['status'] = false;
1401                        $return['msg'] = 'Erro em ldap_funcitons->remove_user_attributes: ' . ldap_error($this->ldapWrite);
1402                }
1403                else
1404                        $return['status'] = true;
1405
1406                return $return;
1407        }
1408
1409        function set_user_password($uid, $password)
1410        {
1411                $justthese = array("userPassword");
1412                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1413                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1414            $entry = ldap_get_entries($this->ldapRead, $search);
1415                $dn = $entry[0]['dn'];
1416                $userPassword = $entry[0]['userpassword'][0];
1417                $ldap_mod_replace['userPassword'] = $password;
1418                $this->replace_user_attributes($dn, $ldap_mod_replace);
1419                return $userPassword;
1420        }
1421
1422        function delete_user($user_info)
1423        {
1424                // Verifica acesso do gerente (OU) ao tentar excluir um usuário.
1425                $manager_access = false;
1426                // para o caso de usuarios sem email
1427
1428                foreach ($this->manager_contexts as $index=>$context)
1429                {
1430                        if (!$user_info['context'])
1431                                $user_info['context']=$context;
1432                        if ( (strpos(strtolower($user_info['context']), strtolower($context))) || (strtolower($user_info['context']) == strtolower($context)) )
1433                        {
1434                                $manager_access = true;
1435                                break;
1436                        }
1437                }
1438                if (!$manager_access)
1439                {
1440                        $return['status'] = false;
1441                        $return['msg'] .= 'Você não tem acesso para excluir este usuário.';
1442                        return $return;
1443                }
1444                $return['status'] = true;
1445
1446                // GROUPS
1447                $attrs = array();
1448                $attrs['memberUid'] = $user_info['uid'];
1449                ob_start();
1450                if (count($user_info['groups_info']))
1451                {
1452                        foreach ($user_info['groups_info'] as $group_info)
1453                        {
1454                                $gidnumber = $group_info['gidnumber'];
1455                                $justthese = array("dn");
1456                                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1457                                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1458                                $entry = ldap_get_entries($this->ldapRead, $search);
1459                                $dn = $entry[0]['dn'];
1460                                ldap_mod_del($this->ldapWrite, $dn, $attrs);
1461                        }
1462                }
1463                else
1464                {
1465                //caso o usuário só pertença ao gruno no ldap
1466                if (count($user_info['groups_ldap']))
1467                        {
1468                                foreach ($user_info['groups_ldap'] as $gidnumber=>$group_cn)
1469                                {
1470                                        $justthese = array("dn");
1471                                        $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber.")(cn=".$group_cn."))";
1472                                        $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1473                                        $entry = ldap_get_entries($this->ldapRead, $search);
1474                                        $dn = $entry[0]['dn'];
1475                                        ldap_mod_del($this->ldapWrite, $dn, $attrs);
1476                                }
1477                        }
1478                }
1479/*
1480                //INSTITUTIONAL ACCOUNTS
1481                $attrs = array();
1482                $attrs['mailForwardingAddress'] = $user_info['mail'];
1483
1484                $justthese = array("dn");
1485                $filter="(&(phpgwAccountType=i)(mailforwardingaddress=".$user_info['mail']."))";
1486                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1487            $entries = ldap_get_entries($this->ldap, $search);
1488
1489                for ($i=0; $i<$entries['count']; $i++)
1490                {
1491                        if ( !@ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs) )
1492                        {
1493                                $result['status'] = false;
1494                                $result['msg'] = "Erro na função ldap_functions->delete_user, instutional_accounts.\nRetorno do servidor:" . ldap_error($this->ldap);
1495                        }
1496                }
1497
1498                // MAILLISTS
1499                $attrs = array();
1500                $attrs['mailForwardingAddress'] = $user_info['mail'];
1501
1502                if (count($user_info['maillists_info']))
1503                {
1504
1505                        if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
1506                        {
1507                                $return['status'] = false;
1508                                $return['msg'] .= 'Erro ao conectar ao ldap_master: ' . ldap_error($this->ldap);
1509                                return $return;
1510                        }
1511
1512                        foreach ($user_info['maillists_info'] as $maillists_info)
1513                        {
1514                                $uid = $maillists_info['uid'];
1515                                $justthese = array("dn");
1516                                $filter="(&(phpgwAccountType=l)(uid=".$uid."))";
1517                                $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1518                        $entry = ldap_get_entries($ldapMasterConnect, $search);
1519                                $dn = $entry[0]['dn'];
1520
1521                                if (!@ldap_mod_del($ldapMasterConnect, $dn, $attrs))
1522                                {
1523                                        $return['status'] = false;
1524                                        if (ldap_errno($ldapMasterConnect) == '50')
1525                                        {
1526                                                $result['msg'] = "Erro na função ldap_functions->add_user2maillist.\n" .
1527                                                                                 "O usuário utilizado para gravaᅵᅵo no LDAP, DEVE ter direito de escrita.\n".
1528                                                                                 "O usuário " . $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] . " não tem este direito.\n".
1529                                                                                "Edite \"Configuraᅵᅵo Global do Catï¿œlogo\", no mï¿œdulo Administrador, Catï¿œlogo de Endereï¿œos e adicione um usuário com direitos de escrita.";
1530                                        }
1531                                        else
1532                                                $result['msg'] = "Erro na função ldap_functions->add_user2maillist.\nRetorno do servidor:" . ldap_error($ldapMasterConnect);
1533                                }
1534                        }
1535                        ldap_close($ldapMasterConnect);
1536                }
1537*/
1538                // UID
1539                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
1540                if (!ldap_delete($this->ldapWrite, $dn))
1541                {
1542                        $return['status'] = false;
1543                        $return['msg'] .= ldap_error($this->ldapWrite);
1544                }
1545
1546                return $return;
1547        }
1548
1549        function delete_expresso_attributes($user_info)
1550        {
1551                // Verifica acesso do gerente (OU) ao tentar excluir os atributos de um usuario.
1552                $manager_access = false;
1553                foreach ($this->manager_contexts as $index=>$context)
1554                {
1555                        if ( (strpos(strtolower($user_info['context']), strtolower($context))) || (strtolower($user_info['context']) == strtolower($context)) )
1556                        {
1557                                $manager_access = true;
1558                                break;
1559                        }
1560                }
1561                if (!$manager_access)
1562                {
1563                        $return['status'] = false;
1564                        $return['msg'] .= 'Você não tem acesso para excluir este usuário.';
1565                        return $return;
1566                }
1567
1568                $return['status'] = true;
1569
1570                // UID
1571                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
1572
1573                // Removendo atributos do usuario
1574                if($user_info['accountstatus']!='')
1575                        {
1576                        $ldap_remove = array();
1577                        $ldap_remove['accountstatus'] = array();
1578                        if (!ldap_modify ( $this->ldapWrite, $dn, $ldap_remove ))
1579                                {
1580                                $return['status'] = false;
1581                                $return['msg'] .= "Atributo accountstatus ".ldap_error($this->ldapWrite);
1582                                }
1583                        }
1584                if($user_info['phpgwaccountstatus']!='')
1585                        {
1586                        $ldap_remove = array();
1587                        $ldap_remove['phpgwaccountstatus'] = array();
1588                        if (!ldap_modify ( $this->ldapWrite, $dn, $ldap_remove ))
1589                                {
1590                                $return['status'] = false;
1591                                $return['msg'] .= "Atributo phpgwaccountstatus ".ldap_error($this->ldapWrite);
1592                                }
1593                        }
1594                if($user_info['phpgwaccounttype']!='')
1595                        {
1596                        $ldap_remove = array();
1597                        $ldap_remove['phpgwaccounttype'] = array();
1598                        if (!ldap_modify ( $this->ldapWrite, $dn, $ldap_remove ))
1599                                {
1600                                $return['status'] = false;
1601                                $return['msg'] .= "Atributo phpgwaccounttype ".ldap_error($this->ldapWrite);
1602                                }
1603                        }
1604                if($user_info['phpgwaccountvisible']!='')
1605                        {
1606                        $ldap_remove = array();
1607                        $ldap_remove['phpgwaccountvisible'] = array();
1608                        if (!ldap_modify ( $this->ldapWrite, $dn, $ldap_remove ))
1609                                {
1610                                $return['status'] = false;
1611                                $return['msg'] .= "Atributo phpgwaccountvisible ".ldap_error($this->ldapWrite);
1612                                }
1613                        }
1614                if($user_info['phpgwaccountexpires']!='')
1615                        {
1616                        $ldap_remove = array();
1617                        $ldap_remove['phpgwaccountexpires'] = array();
1618                        if (!ldap_modify ( $this->ldapWrite, $dn, $ldap_remove ))
1619                                {
1620                                $return['status'] = false;
1621                                $return['msg'] .= "Atributo phpgwaccountexpires ".ldap_error($this->ldapWrite);
1622                                }
1623                        }
1624                if($user_info['mailalternateaddress'][0]!='')
1625                        {
1626                        $ldap_remove = array();
1627                        $ldap_remove['mailalternateaddress'] = array();
1628                        if (!ldap_modify ( $this->ldapWrite, $dn, $ldap_remove ))
1629                                {
1630                                $return['status'] = false;
1631                                $return['msg'] .= "Atributo mailalternateaddress ".ldap_error($this->ldapWrite);
1632                                }
1633                        }
1634                if($user_info['mailforwardingaddress']!='')
1635                        {
1636                        $ldap_remove = array();
1637                        $ldap_remove['mailforwardingaddress'] = array();
1638                        if (!ldap_modify ( $this->ldapWrite, $dn, $ldap_remove ))
1639                                {
1640                                $return['status'] = false;
1641                                $return['msg'] .= "Atributo mailforwardingaddress ".ldap_error($this->ldapWrite);
1642                                }
1643                        }
1644                if($user_info['deliverymode']!='')
1645                        {
1646                        $ldap_remove = array();
1647                        $ldap_remove['deliverymode'] = array();
1648                        if (!ldap_modify ( $this->ldapWrite, $dn, $ldap_remove ))
1649                                {
1650                                $return['status'] = false;
1651                                $return['msg'] .= "Atributo deliverymode ".ldap_error($this->ldapWrite);
1652                                }
1653                        }
1654                if($user_info['accountOwners']!='')
1655                        {
1656                        $ldap_remove = array();
1657                        $ldap_remove['responsavel'] = array();
1658                        if (!ldap_modify ( $this->ldapWrite, $dn, $ldap_remove ))
1659                                {
1660                                $return['status'] = false;
1661                                $return['msg'] .= "Atributo responsavel ".ldap_error($this->ldapWrite);
1662                                }
1663                        }
1664                //removendo a objectclass phpgwaccount
1665                if($return['status'])
1666                        {
1667                        unset($user_info['objectclass']['count']);
1668                        foreach ($user_info['objectclass'] as $objectClass=>$valor )
1669                                {
1670                                if(($valor!="phpgwaccount"))
1671                                        $objectclassUser['objectclass'][]=$valor;
1672                                }
1673                        if (!ldap_modify ( $this->ldapWrite, $dn, $objectclassUser ))
1674                                {
1675                                $return['status'] = false;
1676                                $return['msg'] .= ldap_error($this->ldapWrite);
1677                                }
1678                        }
1679                return $return;
1680        }
1681        function delete_maillist($uidnumber, $mail)
1682        {
1683                $return['status'] = true;
1684
1685                $justthese = array("dn");
1686
1687                // remove listas dentro de listas
1688                $filter="(&(phpgwAccountType=l)(mailForwardingAddress=".$mail."))";
1689                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1690                $entry = ldap_get_entries($this->ldapRead, $search);
1691                $attrs['mailForwardingAddress'] = $mail;
1692                for ($i=0; $i<=$entry['count']; $i++)
1693            {
1694                        $dn = $entry[$i]['dn'];
1695                @ldap_mod_del ( $this->ldapWrite, $dn,  $attrs);
1696            }
1697
1698                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1699                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1700                $entry = ldap_get_entries($this->ldapRead, $search);
1701                $dn = $entry[0]['dn'];
1702
1703                if (!@ldap_delete($this->ldapWrite, $dn))
1704                {
1705                        $return['status'] = false;
1706                        $return['msg'] .= 'Erro na função ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldapWrite);
1707                }
1708
1709                return $return;
1710        }
1711
1712        function delete_group($gidnumber)
1713        {
1714                $return['status'] = true;
1715
1716                $justthese = array("dn");
1717                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1718                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1719                $entry = ldap_get_entries($this->ldapRead, $search);
1720                $dn = $entry[0]['dn'];
1721
1722                if (!@ldap_delete($this->ldapWrite, $dn))
1723                {
1724                        $return['status'] = false;
1725                        $return['msg'] .= 'Erro na função ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldapWrite);
1726                }
1727
1728                return $return;
1729        }
1730
1731        function check_access_to_renamed($uid)
1732        {
1733                $justthese = array("dn");
1734                $filter="(&(phpgwAccountType=u)(uid=$uid))";
1735
1736                foreach ($this->manager_contexts as $index=>$context)
1737                {
1738                        $search = ldap_search($this->ldapRead, $context, $filter, $justthese);
1739                        $entry = ldap_get_entries($this->ldapRead, $search);
1740                        if ($entry['count'])
1741                                return true;
1742                }
1743            return false;
1744        }
1745
1746        function rename_uid($uid, $new_uid)
1747        {
1748                $return['status'] = true;
1749
1750                $justthese = array("dn");
1751                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1752                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1753            $entry = ldap_get_entries($this->ldapRead, $search);
1754                $dn = $entry[0]['dn'];
1755
1756                $explode_dn = ldap_explode_dn($dn, 0);
1757                $rdn = "uid=" . $new_uid;
1758
1759                $parent = array();
1760                for ($j=1; $j<(count($explode_dn)-1); $j++)
1761                        $parent[] = $explode_dn[$j];
1762                $parent = implode(",", $parent);
1763
1764                $return['new_dn'] = $rdn . ',' . $parent;
1765
1766                if (!@ldap_rename($this->ldapWrite, $dn, $rdn, $parent, false))
1767                {
1768                        $return['status'] = false;
1769                        $return['msg'] .= 'Erro na função ldap_funcitons->rename_uid: ' . ldap_error($this->ldapWrite);
1770                }
1771
1772                //Grupos
1773                $justthese = array("dn");
1774                $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";
1775                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1776            $entry = ldap_get_entries($this->ldapRead, $search);
1777        $array_mod_add['memberUid'] = $new_uid;
1778        $array_mod_del['memberUid'] = $uid;
1779
1780            for ($i=0; $i<=$entry['count']; $i++)
1781            {
1782                $dn = $entry[$i]['dn'];
1783                @ldap_mod_add ( $this->ldapWrite, $dn,  $array_mod_add);
1784                @ldap_mod_del ( $this->ldapWrite, $dn,  $array_mod_del);
1785            }
1786                return $return;
1787        }
1788
1789        function rename_cn($cn, $new_cn)
1790        {
1791                $return['status'] = true;
1792
1793                $justthese = array("dn");
1794                $filter="(&(phpgwAccountType=g)(uid=".$cn."))";
1795                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1796            $entry = ldap_get_entries($this->ldapRead, $search);
1797                $dn = $entry[0]['dn'];
1798
1799                $explode_dn = ldap_explode_dn($dn, 0);
1800                $rdn = "cn=" . $new_cn;
1801
1802                $parent = array();
1803                for ($j=1; $j<(count($explode_dn)-1); $j++)
1804                        $parent[] = $explode_dn[$j];
1805                $parent = implode(",", $parent);
1806
1807                $return['new_dn'] = $rdn . ',' . $parent;
1808
1809                if (!@ldap_rename($this->ldapWrite, $dn, $rdn, $parent, false))
1810                {
1811                        $return['status'] = false;
1812                }
1813
1814                return $return;
1815        }
1816
1817        function exist_sambadomains($contexts, $sambaDomainName)
1818        {
1819                $justthese = array("dn");
1820                $filter="(&(objectClass=sambaDomain)(sambaDomainName=$sambaDomainName))";
1821
1822                foreach ($contexts as $index=>$context)
1823                {
1824                        $search = ldap_search($this->ldapRead, $context, $filter, $justthese);
1825                    $entry = ldap_get_entries($this->ldapRead, $search);
1826
1827                        if ($entry['count'])
1828                                return true;
1829                }
1830                return false;
1831        }
1832
1833        // Primeiro nilvel de organizaᅵᅵo.
1834        function exist_sambadomains_in_context($params)
1835        {
1836                $dn = $GLOBALS['phpgw_info']['server']['ldap_context'];
1837                $array_dn = ldap_explode_dn ( $dn, 0 );
1838
1839                $context = $params['context'];
1840                $array_context = ldap_explode_dn ( $context, 0 );
1841
1842                // Pego o setor no caso do contexto ser um sub-setor.
1843                if (($array_dn['count']+1) < ($array_context['count']))
1844                {
1845                        // inverto o array_dn para poder retirar o count
1846                        $array_dn_reverse  = array_reverse ( $array_dn, false );
1847
1848                        //retiro o count
1849                        array_pop($array_dn_reverse);
1850
1851                        //incluo o setor no dn
1852                        array_push ( $array_dn_reverse,  $array_context[ $array_context['count'] - 1 - $array_dn['count']]);
1853
1854                        // Volto a ordem natural
1855                        $array_dn  = array_reverse ( $array_dn_reverse, false );
1856
1857                        // Implodo
1858                        $context = implode ( ",", $array_dn );
1859                }
1860
1861                $justthese = array("dn","sambaDomainName");
1862                $filter="(objectClass=sambaDomain)";
1863                $search = ldap_list($this->ldapRead, $context, $filter, $justthese);
1864            $entry = ldap_get_entries($this->ldapRead, $search);
1865
1866            for ($i=0; $i<$entry['count']; $i++)
1867            {
1868                        $return['sambaDomains'][$i] = $entry[$i]['sambadomainname'][0];
1869            }
1870
1871                if ($entry['count'])
1872                        $return['status'] = true;
1873                else
1874                        $return['status'] = false;
1875
1876                return $return;
1877        }
1878        function exist_domain_name_sid($sambadomainname, $sambasid)
1879        {
1880                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
1881
1882                $justthese = array("dn","sambaDomainName");
1883                $filter="(&(objectClass=sambaDomain)(sambaSID=$sambasid)(sambaDomainName=$sambadomainname))";
1884                $search = ldap_search($this->ldapRead, $context, $filter, $justthese);
1885            $count_entries = ldap_count_entries($this->ldapRead, $search);
1886
1887            if ($count_entries > 0)
1888                return true;
1889            else
1890                return false;
1891        }
1892
1893        function add_sambadomain($sambadomainname, $sambasid, $context)
1894        {
1895                $result = array();
1896
1897                $dn                                                             = "sambaDomainName=$sambadomainname,$context";
1898                $entry['sambaSID']                                      = $sambasid;
1899                $entry['objectClass']                           = 'sambaDomain';
1900                $entry['sambaAlgorithmicRidBase']       = '1000';
1901                $entry['sambaDomainName']                       = $sambadomainname;
1902
1903                if (!@ldap_add ( $this->ldapWrite, $dn, $entry ))
1904                {
1905                        $return['status'] = false;
1906                        $return['msg'] = "Erro ao adicionar Samba Domain";
1907                }
1908                else
1909                        $return['status'] = true;
1910
1911                return $return;
1912        }
1913
1914        function delete_sambadomain($sambadomainname)
1915        {
1916                $return['status'] = true;
1917                $filter="(sambaDomainName=$sambadomainname)";
1918                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter);
1919            $entry = ldap_get_entries($this->ldapRead, $search);
1920
1921                if ($entry['count'] != 0)
1922            {
1923                        $dn = $entry[0]['dn'];
1924
1925                        if (!@ldap_delete($this->ldapWrite, $dn))
1926                        {
1927                                $return['status'] = false;
1928                                $return['msg'] .= "Erro em ldap_funcitons->delete_sambadomain ($sambadomainname).\nRetorno do servidor: " . ldap_error($this->ldapWrite);
1929                        }
1930            }
1931
1932                return $return;
1933        }
1934
1935        function search_user($params)
1936        {
1937                $search = $params['search'];
1938                $justthese = array("cn","uid", "mail");
1939        $users_list=ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], "(&(phpgwAccountType=u) (|(cn=*$search*)(mail=$search*)) )", $justthese);
1940
1941        if (ldap_count_entries($this->ldapRead, $users_list) == 0)
1942        {
1943                $return['status'] = 'false';
1944                $return['msg'] = 'Nenhum resultado encontrado.';
1945                return $return;
1946        }
1947
1948        ldap_sort($this->ldapRead, $users_list, "cn");
1949
1950        $entries = ldap_get_entries($this->ldapRead, $users_list);
1951
1952                $options = '';
1953                for ($i=0; $i<$entries['count']; $i++)
1954                {
1955                        $options .= "<option value=" . $entries[$i]['uid'][0] . ">" . $entries[$i]['cn'][0] . " (".$entries[$i]['mail'][0].")" . "</option>";
1956                }
1957
1958        return $options;
1959        }
1960
1961        function create_institutional_accounts($params)
1962        {
1963                /* Begin: Access verification */
1964                if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'add_institutional_accounts'))
1965                {
1966                        $return['status'] = false;
1967                        $return['msg'] = $this->functions->lang('You do not have right to create institutional accounts') . ".";
1968                        return $return;
1969                }
1970
1971                $access_granted = false;
1972                foreach ($this->manager_contexts as $idx=>$manager_context)
1973                {
1974                        if (stristr($params['context'], $manager_context))
1975                        {
1976                                $access_granted = true;
1977                                break;
1978                        }
1979                }
1980                if (!$access_granted)
1981                {
1982                        $return['status'] = false;
1983                        $return['msg'] = $this->functions->lang('You do not have access to this organization') . ".";
1984                        return $return;
1985                }
1986                /* End: Access verification */
1987
1988                /* Begin: Validation */
1989                if ( (empty($params['cn'])) || (empty($params['mail'])) )
1990                {
1991                        $result['status'] = false;
1992                        $result['msg']  = $this->functions->lang('Field mail or name is empty');
1993                        return $result;
1994                }
1995
1996                if (! eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $params['mail']) )
1997                {
1998                        $result['status'] = false;
1999                        $result['msg']  = $this->functions->lang('Field mail is not formed correcty') . '.';
2000                        return $result;
2001                }
2002
2003                $uid = 'institutional_account_' . $params['mail'];
2004                $dn = "uid=$uid," . $params['context'];
2005
2006                $filter = "(mail=".$params['mail'].")";
2007                $justthese = array("cn");
2008                $search = @ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
2009                $entries = @ldap_get_entries($this->ldapRead,$search);
2010                if ($entries['count'] != 0)
2011                {
2012                        $result['status'] = false;
2013                        $result['msg'] = $this->functions->lang('Field mail already in use');
2014                        return $result;
2015                }
2016                /* End: Validation */
2017
2018                $info = array();
2019                $info['cn']                                     = $params['cn'];
2020                $info['sn']                                     = $params['cn'];
2021                $info['uid']                            = $uid;
2022                $info['mail']                           = $params['mail'];
2023                $info['phpgwAccountType']       = 'i';
2024                $info['objectClass'][]          = 'inetOrgPerson';
2025                $info['objectClass'][]          = 'phpgwAccount';
2026                $info['objectClass'][]          = 'top';
2027                $info['objectClass'][]          = 'person';
2028                $info['objectClass'][]          = 'qmailUser';
2029                $info['objectClass'][]          = 'organizationalPerson';
2030
2031                if ($params['accountStatus'] == 'on')
2032                {
2033                        $info['accountStatus'] = 'active';
2034                }
2035                if ($params['phpgwAccountVisible'] == 'on')
2036                {
2037                        $info['phpgwAccountVisible'] = '-1';
2038                }
2039
2040                if (!empty($params['owners']))
2041                {
2042                        foreach($params['owners'] as $index=>$uidnumber)
2043                        {
2044                                $info['mailForwardingAddress'][] = $this->uidnumber2mail($uidnumber);
2045                        }
2046                }
2047
2048                $result = array();
2049                if (!@ldap_add ( $this->ldapWrite, $dn, $info ))
2050                {
2051                        $result['status'] = false;
2052                        $result['msg']  = $this->functions->lang('Error in function') . ' ldap_functions->create_institutional_accounts';
2053                        $result['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldapWrite);
2054                }
2055                else
2056                        $result['status'] = true;
2057
2058                return $result;
2059        }
2060
2061
2062        function save_institutional_accounts($params)
2063        {
2064                /* Begin: Access verification */
2065                if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_institutional_accounts'))
2066                {
2067                        $return['status'] = false;
2068                        $return['msg'] = $this->functions->lang('You do not have right to edit institutional accounts') . ".";
2069                        return $return;
2070                }
2071                $access_granted = false;
2072                foreach ($this->manager_contexts as $idx=>$manager_context)
2073                {
2074                        if (stristr($params['context'], $manager_context))
2075                        {
2076                                $access_granted = true;
2077                                break;
2078                        }
2079                }
2080                if (!$access_granted)
2081                {
2082                        $return['status'] = false;
2083                        $return['msg'] = $this->functions->lang('You do not have access to this organization') . ".";
2084                        return $return;
2085                }
2086                /* End: Access verification */
2087
2088                /* Begin: Validation */
2089                if ( (empty($params['cn'])) || (empty($params['mail'])) )
2090                {
2091                        $result['status'] = false;
2092                        $result['msg']  = $this->functions->lang('Field mail or name is empty') . '.';
2093                        return $result;
2094                }
2095
2096                if (! eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $params['mail']) )
2097                {
2098                        $result['status'] = false;
2099                        $result['msg']  = $this->functions->lang('Field mail is not formed correcty') . '.';
2100                        return $result;
2101                }
2102
2103                $uid = 'institutional_account_' . $params['mail'];
2104                $dn = strtolower("uid=$uid," . $params['context']);
2105                $anchor = strtolower($params['anchor']);
2106
2107                $filter = "(mail=".$params['mail'].")";
2108                $justthese = array("cn");
2109                $search = @ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
2110                $entries = @ldap_get_entries($this->ldapRead,$search);
2111
2112                if ( ($entries['count'] > 1) || (($entries['count'] == 1) && ($entries[0]['dn'] != $anchor)) )
2113                {
2114                        $result['status'] = false;
2115                        $result['msg'] = $this->functions->lang('Field mail already in use.');
2116                        return $result;
2117                }
2118                /* End: Validation */
2119
2120                $result = array();
2121                $result['status'] = true;
2122
2123                if ($anchor != $dn)
2124                {
2125                        if (!@ldap_rename($this->ldapWrite, $anchor, "uid=$uid", $params['context'], true))
2126                        {
2127                                $result['status'] = false;
2128                                $result['msg']  = $this->functions->lang('Error in function') . ' ldap_functions->save_institutional_accounts: ldap_rename';
2129                                $result['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldapWrite);
2130                        }
2131                }
2132
2133                $info = array();
2134                $info['cn']                                     = $params['cn'];
2135                $info['sn']                                     = $params['cn'];
2136                $info['uid']                            = $uid;
2137                $info['mail']                           = $params['mail'];
2138
2139                if ($params['accountStatus'] == 'on')
2140                        $info['accountStatus'] = 'active';
2141                else
2142                        $info['accountStatus'] = array();
2143
2144                if ($params['phpgwAccountVisible'] == 'on')
2145                        $info['phpgwAccountVisible'] = '-1';
2146                else
2147                        $info['phpgwAccountVisible'] = array();
2148
2149                if (!empty($params['owners']))
2150                {
2151                        foreach($params['owners'] as $index=>$uidnumber)
2152                        {
2153                                $mailForwardingAddress = $this->uidnumber2mail($uidnumber);
2154                                if ($mailForwardingAddress != '')
2155                                        $info['mailForwardingAddress'][] = $mailForwardingAddress;
2156                        }
2157                }
2158                else
2159                        $info['mailForwardingAddress'] = array();
2160
2161                if (!@ldap_modify ( $this->ldapWrite, $dn, $info ))
2162                {
2163                        $result['status'] = false;
2164                        $result['msg']  = $this->functions->lang('Error in function') . ' ldap_functions->save_institutional_accounts: ldap_modify';
2165                        $result['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldapWrite);
2166                }
2167
2168                return $result;
2169        }
2170
2171        function get_institutional_accounts($params)
2172        {
2173                if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'list_institutional_accounts'))
2174                {
2175                        $return['status'] = false;
2176                        $return['msg'] = $this->functions->lang('You do not have right to list institutional accounts') . ".";
2177                        return $return;
2178                }
2179
2180                $input = $params['input'];
2181                $justthese = array("cn", "mail", "uid");
2182                $trs = array();
2183
2184                foreach ($this->manager_contexts as $idx=>$context)
2185                {
2186                $institutional_accounts = ldap_search($this->ldapRead, $context, ("(&(phpgwAccountType=i)(|(mail=$input*)(cn=*$input*)))"), $justthese);
2187                $entries = ldap_get_entries($this->ldapRead, $institutional_accounts);
2188
2189                        for ($i=0; $i<$entries['count']; $i++)
2190                        {
2191                                $tr = "<tr class='normal' onMouseOver=this.className='selected' onMouseOut=this.className='normal'><td onClick=edit_institutional_account('".$entries[$i]['uid'][0]."')>" . $entries[$i]['cn'][0] . "</td><td onClick=edit_institutional_account('".$entries[$i]['uid'][0]."')>" . $entries[$i]['mail'][0] . "</td><td align='center' onClick=delete_institutional_accounts('".$entries[$i]['uid'][0]."')><img HEIGHT='16' WIDTH='16' src=./expressoAdminSerpro/templates/default/images/delete.png></td></tr>";
2192                                $trs[$tr] = $entries[$i]['cn'][0];
2193                        }
2194                }
2195
2196        $trs_string = '';
2197        if (count($trs))
2198        {
2199                natcasesort($trs);
2200                foreach ($trs as $tr=>$cn)
2201                {
2202                        $trs_string .= $tr;
2203                }
2204        }
2205
2206        $return['status'] = 'true';
2207        $return['trs'] = $trs_string;
2208        return $return;
2209        }
2210
2211        function get_institutional_account_data($params)
2212        {
2213                if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_institutional_accounts'))
2214                {
2215                        $return['status'] = false;
2216                        $return['msg'] = $this->functions->lang('You do not have right to list institutional accounts') . ".";
2217                        return $return;
2218                }
2219
2220                $uid = $params['uid'];
2221                $justthese = array("accountStatus", "phpgwAccountVisible", "cn", "mail", "mailForwardingAddress");
2222
2223        $institutional_accounts = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], ("(&(phpgwAccountType=i)(uid=$uid))"), $justthese);
2224        $entrie = ldap_get_entries($this->ldapRead, $institutional_accounts);
2225
2226                if ($entrie['count'] != 1)
2227                {
2228                        $return['status'] = 'false';
2229                        $return['msg'] = 'Problemas carregando dados.';
2230                }
2231                else
2232                {
2233                        $tmp_user_context = split(",", $entrie[0]['dn']);
2234                        $tmp_reverse_user_context = array_reverse($tmp_user_context);
2235                        array_pop($tmp_reverse_user_context);
2236                        $return['user_context'] = implode(",", array_reverse($tmp_reverse_user_context));
2237
2238                        $return['status'] = 'true';
2239                        $return['accountStatus']                = $entrie[0]['accountstatus'][0];
2240                        $return['phpgwAccountVisible']  = $entrie[0]['phpgwaccountvisible'][0];
2241                        $return['cn']                                   = $entrie[0]['cn'][0];
2242                        $return['mail']                                 = $entrie[0]['mail'][0];
2243
2244                        if ($entrie[0]['mailforwardingaddress']['count'] > 0)
2245                        {
2246                                $a_cn = array();
2247                                for ($i=0; $i<$entrie[0]['mailforwardingaddress']['count']; $i++)
2248                                {
2249                                        $tmp = $this->mailforwardingaddress2uidnumber($entrie[0]['mailforwardingaddress'][$i]);
2250                                        if (!$tmp) {}
2251                                        else
2252                                                $a_cn[$tmp['uidnumber']] = $tmp['cn'];
2253                                }
2254                                natcasesort($a_cn);
2255                                foreach($a_cn as $uidnumber => $cn)
2256                                {
2257                                        $return['owners'] .= '<option value='. $uidnumber .'>' . $cn . '</option>';
2258                                }
2259                        }
2260                }
2261
2262                return $return;
2263        }
2264
2265        function mailforwardingaddress2uidnumber($mail)
2266        {
2267                $justthese = array("uidnumber","cn");
2268        $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], ("(&(phpgwAccountType=u)(mail=$mail))"), $justthese);
2269        $entrie = ldap_get_entries($this->ldapRead, $search);
2270                if ($entrie['count'] != 1)
2271                        return false;
2272                else
2273                {
2274                        $return['uidnumber'] = $entrie[0]['uidnumber'][0];
2275                        $return['cn'] = $entrie[0]['cn'][0];
2276                        return $return;
2277                }
2278        }
2279
2280        function delete_institutional_account_data($params)
2281        {
2282                if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'remove_institutional_accounts'))
2283                {
2284                        $return['status'] = false;
2285                        $return['msg'] = $this->functions->lang('You do not have right to delete institutional accounts') . ".";
2286                        return $return;
2287                }
2288
2289                $uid = $params['uid'];
2290                $return['status'] = true;
2291
2292                $justthese = array("cn");
2293        $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], ("(&(phpgwAccountType=i)(uid=$uid))"), $justthese);
2294        $entrie = ldap_get_entries($this->ldapRead, $search);
2295                if ($entrie['count'] > 1)
2296                {
2297                        $return['status'] = false;
2298                        $return['msg']  = $this->functions->lang('More then one uid was found');
2299                        return $return;
2300                }
2301                if ($entrie['count'] == 0)
2302                {
2303                        $return['status'] = false;
2304                        $return['msg']  = $this->functions->lang('No uid was found');
2305                        return $return;
2306                }
2307
2308                $dn = $entrie[0]['dn'];
2309                if (!@ldap_delete($this->ldapWrite, $dn))
2310                {
2311                        $return['status'] = false;
2312                        $return['msg']  = $this->functions->lang('Error in function') . " ldap_functions->delete_institutional_accounts: ldap_delete";
2313                        $return['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldapWrite);
2314                        return $return;
2315                }
2316
2317                return $return;
2318        }
2319
2320        function replace_mail_from_institutional_account($newMail, $oldMail)
2321        {
2322                $filter = "(&(phpgwAccountType=i)(mailforwardingaddress=$oldMail))";
2323                $justthese = array("dn");
2324                $search = ldap_search($this->ldapRead, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
2325                $entries = ldap_get_entries($this->ldapRead, $search);
2326                $result['status'] = true;
2327                for ($i=0; $i<$entries['count']; $i++)
2328                {
2329                        $attrs['mailforwardingaddress'] = $oldMail;
2330                        $res1 = @ldap_mod_del($this->ldapWrite, $entries[$i]['dn'], $attrs);
2331                        $attrs['mailforwardingaddress'] = $newMail;
2332                        $res2 = @ldap_mod_add($this->ldapWrite, $entries[$i]['dn'], $attrs);
2333
2334                        if ((!$res1) || (!$res2))
2335                        {
2336                                $result['status'] = false;
2337                                $return['msg']  = $this->functions->lang('Error in function') . " ldap_functions->replace_mail_from_institutional_account.";
2338                        }
2339                }
2340
2341                return $result;
2342        }
2343        function search_users_only($params)
2344        {
2345
2346                $context = $params['context'];
2347                $filtro = $params['filtro'];
2348
2349                $justthese = array("cn", "uidNumber", "mail");
2350
2351                $users_filter="(&(phpgwAccountType=u)(phpgwAccountStatus=A)(|(cn=*$filtro*)(mail=*$filtro*)))";
2352
2353                $users = Array();
2354
2355                $users_search = ldap_search($this->ldapRead, $context, $users_filter, $justthese);
2356
2357                $users_entries = ldap_get_entries($this->ldapRead, $users_search);
2358                for ($i=0; $i<$users_entries["count"]; $i++)
2359                        {
2360                        $u_tmp[$users_entries[$i]["uidnumber"][0]] = $users_entries[$i]["cn"][0] . " [" .$users_entries[$i]["mail"][0] . "]";
2361                        }
2362
2363                if(count($u_tmp) == 0)
2364                        {
2365                        $options .= '<option  value="-1" disabled>------&nbsp;&nbsp;&nbsp;USUARIO INVALIDO OU NAO CRIADO NO EXPRESSO&nbsp;&nbsp;&nbsp;------</option>'."\n";
2366                        }
2367
2368                if (count($u_tmp))
2369                        natcasesort($u_tmp);
2370
2371                $i = 0;
2372                $users = array();
2373
2374                $options .= '<option  value="-1" disabled>-----------------------------&nbsp;&nbsp;&nbsp;&nbsp;Usuarios&nbsp;&nbsp;&nbsp;&nbsp;---------------------------- </option>'."\n";
2375                if (count($u_tmp))
2376                {
2377                        foreach ($u_tmp as $uidnumber => $cn)
2378                        {
2379                                $options .= "<option value=$uidnumber class='line-above'>$cn</option>";
2380                        }
2381
2382                        unset($u_tmp);
2383                }
2384
2385                return $options;
2386        }
2387
2388}
2389?>
Note: See TracBrowser for help on using the repository browser.