source: trunk/expressoAdmin1_2/inc/class.ldap_functions.inc.php @ 208

Revision 208, 53.6 KB checked in by niltonneto, 16 years ago (diff)

Alterações do mantenedor do módulo.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
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
7function 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 $ldap;
18        var $current_config;
19        var $functions;
20        var $manager_contexts;
21       
22        function ldap_functions(){
23                $GLOBALS['phpgw_info']['server'] = $_SESSION['phpgw_info']['expresso']['server'];
24                $this->current_config = $_SESSION['phpgw_info']['expresso']['expressoAdmin'];
25                $common = new common();
26                $this->ldap = $common->ldapConnect();
27               
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        }
32       
33        /* ldap connection following referals and using Contac Center config*/
34        function ldapMasterConnect()
35        {
36                if ( (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server'])) && ($ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host'])) )
37                {
38                        ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
39                        ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
40                        ldap_set_rebind_proc($ldap_connection, ldapRebind);
41                        if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
42                        {
43                                if ( ! ldap_bind($ldap_connection, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']) )
44                                {
45                                        echo 'retornou false1';
46                                        return false;
47                                }
48                        }
49                        return $ldap_connection;
50                }
51                else
52                {
53                        $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
54                        if ($ldap_connection)
55                        {
56                                ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);
57                                ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
58                                if ( ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']) )
59                                        return $ldap_connection;
60                        }
61                }
62               
63                return false;
64        }
65               
66        function validate_fields($params)
67        {
68                /* ldap connection following referals and using Contac Center config*/
69                if (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server']))
70                {
71                        $ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
72                        if ($ldap_connection)
73                        {
74                                ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
75                                ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
76                               
77                                if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
78                                        ldap_bind($ldap_connection, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']);
79                                $context = $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['dn'];
80                        }
81                        else
82                        {
83                                $result['status'] = false;
84                                $result['msg'] = 'Falha na conexao com o ldap.';
85                                return $result;
86                        }
87                }
88                else
89                {
90                        $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
91                        ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);
92                        ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
93                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);
94                        $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
95                }
96               
97                $result['status'] = true;
98               
99                $params = unserialize($params['attributes']);
100                $type = $params['type'];
101                $uid = $params['uid'];
102                $mail = $params['mail'];
103                $mailalternateaddress = $params['mailalternateaddress'];
104                               
105                if ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])
106                {
107                        $result['status'] = false;
108                        $result['msg'] = 'Este LOGIN não pode ser usado pois é uma conta de sistema.';
109                        return $result;
110                }
111               
112                if (($type == 'create_user') || ($type == 'rename_user'))
113                {
114                        if ($this->current_config['expressoAdmin_prefix_org'] == 'true')
115                        {
116                                //Obtenho UID sem a organização. Na criação o uid já vem sem a organização
117                                $tmp_uid_without_org = split("-", $params['uid']);
118                                $tmp_reverse_uid_without_org = array_reverse($tmp_uid_without_org);
119                                array_pop($tmp_reverse_uid_without_org);
120                                $uid_without_org = implode("-", $tmp_reverse_uid_without_org);
121                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(uid=$uid)(uid=$uid_without_org)))";
122                        }
123                        else
124                        {
125                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";
126                        }
127                        /*
128                        //UID
129                        if (($type == 'rename_user') && ($this->current_config['expressoAdmin_prefix_org'] == 'true'))
130                        {
131                                //Obtenho UID sem a organização. Na criação o uid já vem sem a organização
132                                $tmp_uid_without_org = split("-", $params['uid']);
133                                $tmp_reverse_uid_without_org = array_reverse($tmp_uid_without_org);
134                                array_pop($tmp_reverse_uid_without_org);
135                                $uid_without_org = implode("-", $tmp_reverse_uid_without_org);
136                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(uid=$uid)(uid=$uid_without_org)))";
137                        }
138                        else
139                        {
140                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";
141                        }
142                        */
143                       
144                        $justthese = array("uid", "mail", "cn");
145                        $search = ldap_search($ldap_connection, $context, $filter, $justthese);
146                        $count_entries = ldap_count_entries($ldap_connection,$search);
147                        if ($count_entries > 0)
148                        {
149                                $entries = ldap_get_entries($ldap_connection, $search);
150                               
151                                for ($i=0; $i<$entries['count']; $i++)
152                                {
153                                        $users .= $entries[$i]['cn'][0] . ' - ' . $entries[$i]['mail'][0] . "\n";
154                                }
155                               
156                                $result['status'] = false;
157                                $result['msg'] = "LOGIN já está sendo utilizado por:\n" . $users;
158                                return $result;
159                        }
160
161                        // GRUPOS
162                        $filter = "(&(phpgwAccountType=g)(cn=$uid))";
163                        $justthese = array("cn");
164                        $search = ldap_search($ldap_connection, $context, $filter, $justthese);
165                        $count_entries = ldap_count_entries($ldap_connection,$search);
166                        if ($count_entries > 0)
167                        {
168                                $result['status'] = false;
169                                $result['msg'] = 'LOGIN do usuário já esta sendo usado por um grupo.';
170                                return $result;
171                        }
172                       
173                       
174                        // UID em outras organizações, pesquiso apenas na maquina local e se utilizar prefix_org
175                        if ($this->current_config['expressoAdmin_prefix_org'] == 'true')
176                        {
177                                $ldap_connection2 = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
178                                ldap_set_option($ldap_connection2,LDAP_OPT_PROTOCOL_VERSION,3);
179                                ldap_set_option($ldap_connection2, LDAP_OPT_REFERRALS, false);
180                                ldap_bind($ldap_connection2, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);
181                                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
182                               
183                                //Obtenho UID sem a organização
184                                /*
185                                $tmp_uid_without_org = split("-", $params['uid']);
186                                if (count($tmp_uid_without_org) < 2)
187                                {
188                                        $result['status'] = false;
189                                        $result['msg'] = 'Novo login sem organização.';
190                                        return $result;
191                                }
192                                $tmp_reverse_uid_without_org = array_reverse($tmp_uid_without_org);
193                                array_pop($tmp_reverse_uid_without_org);
194                                $uid_without_org = implode("-", $tmp_reverse_uid_without_org);
195                                */
196                               
197                                $filter = "(ou=*)";
198                                $justthese = array("ou");
199                                $search = ldap_list($ldap_connection2, $context, $filter, $justthese);
200                                $entries = ldap_get_entries($ldap_connection2   ,$search);
201                               
202                                foreach ($entries as $index=>$org)
203                                {
204                                        $organization = $org['ou'][0];
205                                        $organization = strtolower($organization);
206                               
207                                        $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$organization-$uid))";
208                                       
209                                        $justthese = array("uid");
210                                        $search = ldap_search($ldap_connection2, $context, $filter, $justthese);
211                                        $count_entries = ldap_count_entries($ldap_connection2,$search);
212                                        if ($count_entries > 0)
213                                        {
214                                                $result['status'] = false;
215                                                $result['msg'] = 'LOGIN já esta sendo usado por outro usuário em outra organização.';
216                                                ldap_close($ldap_connection2);
217                                                return $result;
218                                        }
219                                }
220                                ldap_close($ldap_connection2);
221                        }
222                }
223               
224                if ($type == 'rename_user')
225                {
226                        return $result;
227                }
228               
229                // MAIL
230                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
231                $justthese = array("mail", "uid");
232                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
233                $entries = ldap_get_entries($ldap_connection,$search);
234                if ($entries['count'] == 1){
235                        if ($entries[0]['uid'][0] != $uid){
236                                $result['status'] = false;
237                                $result['msg'] = 'E-MAIL está sendo usado por 1 usuário: ' . $entries[0]['uid'][0];
238                                //ldap_close($ldap_connection);
239                                return $result;
240                        }
241                }
242                else if ($entries['count'] > 1){
243                        $result['status'] = false;
244                        $result['msg'] = 'E-MAIL está sendo usado por 2 ou mais usuários.';
245                        //ldap_close($ldap_connection);
246                        return $result;
247                }
248               
249                // MAILAlternateAddress
250                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mailalternateaddress)(mailalternateaddress=$mailalternateaddress)))";
251                $justthese = array("mail", "uid");
252                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
253                $entries = ldap_get_entries($ldap_connection,$search);
254                if ($entries['count'] == 1){
255                        if ($entries[0]['uid'][0] != $uid){
256                                $result['status'] = false;
257                                $result['msg'] = "E-MAIL alternativo está sendo usado por 1 usuário: " . $entries[0]['uid'][0];
258                                //ldap_close($ldap_connection);
259                                return $result;
260                        }
261                }
262                else if ($entries['count'] > 1){
263                        $result['status'] = false;
264                        $result['msg'] = 'E-MAIL alternativo está sendo usado por 2 ou mais usuários.';
265                        return $result;
266                }
267
268                return $result;
269        }
270       
271        function validate_fields_group($params)
272        {
273                /* ldap connection following referals and using Contac Center config*/
274                if (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server']))
275                {
276                        $ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
277                        if ($ldap_connection)
278                        {
279                                ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
280                                ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
281                                if ( ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
282                                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'], $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw']);
283                                $context = $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['dn'];
284                        }
285                        else
286                        {
287                                $result['status'] = false;
288                                $result['msg'] = 'Falha na conexao com o ldap.';
289                                return $result;
290                        }
291                }
292                else
293                {
294                        $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
295                        ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);
296                        ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
297                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);
298                        $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
299                }
300
301                $cn = $params['cn'];
302                $result['status'] = true;
303               
304                if ($_SESSION['phpgw_info']['expresso']['global_denied_groups'][$cn])
305                {
306                        $result['status'] = false;
307                        $result['msg'] = 'Este nome de grupo não pode ser usado pois é um grupo de sistema.';
308                        return $result;
309                }
310               
311                // CN
312                $filter = "(&(phpgwAccountType=g)(cn=$cn))";
313                $justthese = array("cn");
314                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
315                $count_entries = ldap_count_entries($ldap_connection,$search);
316                if ($count_entries > 0)
317                {
318                        $result['status'] = false;
319                        $result['msg'] = 'NOME do grupo já está sendo usado.';
320                        return $result;
321                }
322               
323                // UID
324                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$cn))";
325                $justthese = array("uid");
326                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
327                $count_entries = ldap_count_entries($ldap_connection,$search);
328                if ($count_entries > 0)
329                {
330                        $result['status'] = false;
331                        $result['msg'] = 'NOME do grupo já esta sendo usado por um usuário.';
332                        return $result;
333                }
334               
335                return $result;
336        }
337       
338        function validate_fields_maillist($params)
339        {
340                /* ldap connection following referals and using Contac Center config*/
341                if (is_array($_SESSION['phpgw_info']['expresso']['cc_ldap_server']))
342                {
343                        $ldap_connection = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
344                        if ($ldap_connection)
345                        {
346                                ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
347                                ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
348                                if ( ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
349                                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['acc'], $GLOBALS['phpgw_info']['expresso']['cc_ldap_server']['pw']);
350                                $context = $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['dn'];
351                        }
352                        else
353                        {
354                                $result['status'] = false;
355                                $result['msg'] = 'Falha na conexao com o ldap.';
356                                return $result;
357                        }
358                }
359                else
360                {
361                        $ldap_connection = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
362                        ldap_set_option($ldap_connection,LDAP_OPT_PROTOCOL_VERSION,3);
363                        ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, true);
364                        ldap_bind($ldap_connection, $GLOBALS['phpgw_info']['server']['ldap_root_dn'], $GLOBALS['phpgw_info']['server']['ldap_root_pw']);
365                        $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
366                }
367               
368                $uid = $params['uid'];
369                $mail = $params['mail'];
370                $result['status'] = true;
371               
372                if ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])
373                {
374                        $result['status'] = false;
375                        $result['msg'] = 'Este LOGIN não pode ser usado pois é uma conta de sistema.';
376                        return $result;
377                }
378               
379                // UID
380                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
381                $justthese = array("uid");
382                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
383                $count_entries = ldap_count_entries($ldap_connection,$search);
384                if ($count_entries > 0)
385                {
386                        $result['status'] = false;
387                        $result['msg'] = 'LOGIN da lista já está sendo usado.';
388                        return $result;
389                }
390               
391                // MAIL
392                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
393                $justthese = array("mail");
394                $search = ldap_search($ldap_connection, $context, $filter, $justthese);
395                $count_entries = ldap_count_entries($ldap_connection,$search);
396                if ($count_entries > 0)
397                {
398                        $result['status'] = false;
399                        $result['msg'] = 'E-MAIL da lista já está sendo usado.';
400                        return $result;
401                }
402               
403                return $result;
404        }
405
406        //Busca usuários de um contexto e já retorna as options do select;
407        function get_available_users($params)
408        {
409                $context = $params['context'];
410                $recursive = $params['recursive'];
411                $justthese = array("cn", "uidNumber");
412                $filter="(phpgwAccountType=u)";
413               
414                if ($recursive == 'true')
415                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
416                else
417                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
418       
419        $entries = ldap_get_entries($this->ldap, $groups_list);
420       
421                for ($i=0; $i<$entries["count"]; $i++){
422                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
423                }
424                       
425                if (count($u_tmp))
426                        natcasesort($u_tmp);
427
428                $i = 0;
429                $users = array();
430                       
431                if (count($u_tmp))
432                {
433                        foreach ($u_tmp as $uidnumber => $cn)
434                        {
435                                $options .= "<option value=$uidnumber>$cn</option>";
436                        }
437                        unset($u_tmp);
438                }
439
440        return $options;
441        }
442
443        //Busca usuários de um contexto e já retorna as options do select;
444        /*
445        function get_available_users_and_maillist($params)
446        {
447                $context = $params['context'];
448                $recursive = $params['recursive'];
449                $justthese = array("cn", "uidNumber");
450                $filter="(|(phpgwAccountType=u)(phpgwAccountType=l))";
451               
452                if ($recursive == 'true')
453                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
454                else
455                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
456       
457        $entries = ldap_get_entries($this->ldap, $groups_list);
458       
459                for ($i=0; $i<$entries["count"]; $i++){
460                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
461                }
462                       
463                if (count($u_tmp))
464                        natcasesort($u_tmp);
465
466                $i = 0;
467                $users = array();
468                       
469                if (count($u_tmp))
470                {
471                        foreach ($u_tmp as $uidnumber => $cn)
472                        {
473                                $options .= "<option value=$uidnumber>$cn</option>";
474                        }
475                        unset($u_tmp);
476                }
477
478        return $options;
479        }
480        */
481
482        //Busca usuários e listas de um contexto e já retorna as options do select;
483        function get_available_users_and_maillist($params)
484        {
485                $context = $params['context'];
486                $recursive = $params['recursive'];
487               
488                //Usado para retirar a própria lista das possibilidades de inclusão.
489                $denied_uidnumber = $params['denied_uidnumber'];
490               
491                $justthese = array("cn", "uidNumber", "mail");
492               
493                $users_filter="(phpgwAccountType=u)";
494                $lists_filter = $denied_uidnumber == '' ? "(phpgwAccountType=l)" : "(&(phpgwAccountType=l)(!(uidnumber=$denied_uidnumber)))";
495               
496                $users = Array();
497                $lists = Array();               
498
499                /* folling referral connection */
500                $ldap_conn_following_ref = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
501                if ($ldap_conn_following_ref)
502                {
503                        ldap_set_option($ldap_conn_following_ref, LDAP_OPT_PROTOCOL_VERSION, 3);
504                        ldap_set_option($ldap_conn_following_ref, LDAP_OPT_REFERRALS, 1);
505
506                        if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
507                                ldap_bind($ldap_conn_following_ref, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']);
508                }
509                else
510                        return false;
511
512                if ($recursive == 'true')
513                {
514                        $lists_search = ldap_search($ldap_conn_following_ref, $context, $lists_filter, $justthese);
515                        $users_search = ldap_search($ldap_conn_following_ref, $context, $users_filter, $justthese);
516                }
517                else
518                {
519                        $lists_search = ldap_list($ldap_conn_following_ref, $context, $lists_filter, $justthese);
520                        $users_search = ldap_list($ldap_conn_following_ref, $context, $users_filter, $justthese);
521                }
522               
523                /* email lists */
524                $lists_entries = ldap_get_entries($ldap_conn_following_ref, $lists_search);
525               
526                for ($i=0; $i<$lists_entries["count"]; $i++)
527                {
528                        $l_tmp[$lists_entries[$i]["mail"][0]] = $lists_entries[$i]["cn"][0];
529                }
530                       
531                if (count($l_tmp))
532                        natcasesort($l_tmp);
533                       
534                $i = 0;
535                $lists = array();
536               
537                $options .= '<option  value="-1" disabled>------------------------------&nbsp;&nbsp;&nbsp;&nbsp;Listas&nbsp;&nbsp;&nbsp;&nbsp;------------------------------ </option>'."\n";   
538                if (count($l_tmp))
539                {
540                        foreach ($l_tmp as $mail => $cn)
541                        {
542                                $options .= "<option value=$mail>$cn</option>";
543                        }
544                        unset($l_tmp);
545                }
546               
547                /* users */
548                $users_entries = ldap_get_entries($ldap_conn_following_ref, $users_search);
549                for ($i=0; $i<$users_entries["count"]; $i++)
550                {
551                        $u_tmp[$users_entries[$i]["mail"][0]] = $users_entries[$i]["cn"][0];
552                }
553                       
554                if (count($u_tmp))
555                        natcasesort($u_tmp);
556                       
557                $i = 0;
558                $users = array();
559               
560                $options .= '<option  value="-1" disabled>-----------------------------&nbsp;&nbsp;&nbsp;&nbsp;Usuários&nbsp;&nbsp;&nbsp;&nbsp;---------------------------- </option>'."\n";   
561                if (count($u_tmp))
562                {
563                        foreach ($u_tmp as $mail => $cn)
564                        {
565                                $options .= "<option value=$mail class='line-above'>$cn</option>";
566                        }
567                        unset($u_tmp);
568                }
569               
570                ldap_close($ldap_conn_following_ref);
571                return $options;
572        }
573
574        function get_available_groups($params)
575        {
576                $context = $params['context'];
577                $justthese = array("cn", "gidNumber");
578        $groups_list=ldap_list($this->ldap, $context, ("(phpgwAccountType=g)"), $justthese);
579        ldap_sort($this->ldap, $groups_list, "cn");
580       
581        $entries = ldap_get_entries($this->ldap, $groups_list);
582               
583                $options = '';
584                for ($i=0; $i<$entries['count']; $i++)
585                {
586                        $options .= "<option value=" . $entries[$i]['gidnumber'][0] . ">" . $entries[$i]['cn'][0] . "</option>";
587                }
588       
589        return $options;               
590        }
591       
592        function get_available_maillists($params)
593        {
594                if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
595                        return false;
596               
597                $context = $params['context'];
598                $justthese = array("uid","mail","uidNumber");
599        $maillists=ldap_list($ldapMasterConnect, $context, ("(phpgwAccountType=l)"), $justthese);
600        ldap_sort($ldapMasterConnect, $maillists, "uid");
601       
602        $entries = ldap_get_entries($ldapMasterConnect, $maillists);
603       
604                $options = '';                 
605                for ($i=0; $i<$entries['count']; $i++)
606                {
607                        $options .= "<option value=" . $entries[$i]['uid'][0] . ">" . $entries[$i]['uid'][0] . " (" . $entries[$i]['mail'][0] . ")" . "</option>";
608                }
609       
610        ldap_close($ldapMasterConnect);
611        return $options;
612        }
613       
614        function ldap_add_entry($dn, $entry)
615        {
616                $result = array();
617                if (!@ldap_add ( $this->ldap, $dn, $entry ))
618                {
619                        $result['status'] = false;
620                        $result['msg'] = "Erro na funcao ldap_functions->ldap_add_entry ($dn).\nRetorno do servidor:" . ldap_error($this->ldap);
621                }
622                else
623                        $result['status'] = true;
624               
625                return $result;
626        }
627       
628        function ldap_save_photo($dn, $pathphoto, $photo_exist=false)
629        {
630                $fd = fopen($pathphoto, "r");
631                $fsize = filesize($pathphoto);
632                $jpegStr = fread($fd, $fsize);
633                fclose ($fd);
634                $attrs['jpegPhoto'] = $jpegStr;
635                       
636                if ($photo_exist)
637                        $res = @ldap_mod_replace($this->ldap, $dn, $attrs);
638                else
639                        $res = @ldap_mod_add($this->ldap, $dn, $attrs);
640                       
641                if ($res)
642                {
643                        $result['status'] = true;
644                }
645                else
646                {
647                        $result['status'] = false;
648                        $result['msg'] = "Erro na funcao ldap_functions->ldap_save_photo ($dn).\nRetorno do servidor:" . ldap_error($this->ldap);
649                }
650               
651                return $result;
652        }
653       
654        function ldap_remove_photo($dn)
655        {
656                $attrs['jpegPhoto'] = array();
657                $res = ldap_mod_del($this->ldap, $dn, $attrs);
658               
659                if ($res)
660                {
661                        $result['status'] = true;
662                }
663                else
664                {
665                        $result['status'] = false;
666                        $result['msg'] = "Erro na funcao ldap_functions->ldap_remove_photo ($dn).\nRetorno do servidor:" . ldap_error($this->ldap);
667                }
668               
669                return $result;
670        }       
671       
672        // Pode receber tanto um único memberUid quanto um array de memberUid's
673        function add_user2group($gidNumber, $memberUid)
674        {
675                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
676                $justthese = array("dn");
677                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
678                $entry = ldap_get_entries($this->ldap, $search);
679                $group_dn = $entry[0]['dn'];
680                $attrs['memberUid'] = $memberUid;
681               
682                $res = @ldap_mod_add($this->ldap, $group_dn, $attrs);
683               
684                if ($res)
685                {
686                        $result['status'] = true;
687                }
688                else
689                {
690                        $result['status'] = false;
691                        $result['msg'] = "Erro na funcao ldap_functions->add_user2group ($memberUid).\nRetorno do servidor:" . ldap_error($this->ldap);
692                }
693                return $result;
694        }
695       
696        function remove_user2group($gidNumber, $memberUid)
697        {
698                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
699                $justthese = array("dn");
700                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
701                $entry = ldap_get_entries($this->ldap, $search);
702                $group_dn = $entry[0]['dn'];
703                $attrs['memberUid'] = $memberUid;
704                $res = @ldap_mod_del($this->ldap, $group_dn, $attrs);
705               
706                /*echo 'usuarios recebidos para remocao no ldap';
707                echo '<pre>';
708                print_r($memberUid);*/
709               
710                if ($res)
711                {
712                        $result['status'] = true;
713                }
714                else
715                {
716                        $result['status'] = false;
717                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2group ($memberUid).\nRetorno do servidor:" . ldap_error($this->ldap);
718                }
719                return $result;
720        }
721       
722        function add_user2maillist($uid, $mail)
723        {
724                if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
725                {
726                        $result['status'] = false;
727                        $result['msg'] = "Falha de conexão com o openLDAP.\n\nRetorno do servidor:" . ldap_error($ldapMasterConnect);
728                        return $result;
729                }
730                       
731                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
732                $justthese = array("dn");
733                $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
734                $entry = ldap_get_entries($ldapMasterConnect, $search);
735                $group_dn = $entry[0]['dn'];
736                $attrs['mailForwardingAddress'] = $mail;
737                $res = @ldap_mod_add($ldapMasterConnect, $group_dn, $attrs);
738               
739                if ($res)
740                {
741                        $result['status'] = true;
742                }
743                else
744                {
745                        $result['status'] = false;
746                        $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist ($mail).\nRetorno do servidor:" . ldap_error($this->ldap);
747                }
748               
749                ldap_close($ldapMasterConnect);
750                return $result;
751        }
752       
753        function add_user2maillist_scl($dn, $array_emails)
754        {
755                $attrs['mailSenderAddress'] = $array_emails;
756               
757                print_r($attrs);
758               
759                $res = @ldap_mod_add($this->ldap, $dn, $attrs);
760               
761                if ($res)
762                {
763                        $result['status'] = true;
764                }
765                else
766                {
767                        $result['status'] = false;
768                        $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist_scp ($dn).\n\nRetorno do servidor:" . ldap_error($this->ldap);
769                }
770                return $result;
771        }
772
773        function remove_user2maillist($uid, $mail)
774        {
775                if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
776                {
777                        $result['status'] = false;
778                        $result['msg'] = "Falha de conexão com o openLDAP.\n\nRetorno do servidor:" . ldap_error($ldapMasterConnect);
779                        return $result;
780                }
781               
782                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
783                $justthese = array("dn");
784                $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
785                $entry = ldap_get_entries($ldapMasterConnect, $search);
786                $group_dn = $entry[0]['dn'];
787                $attrs['mailForwardingAddress'] = $mail;
788                $res = @ldap_mod_del($ldapMasterConnect, $group_dn, $attrs);
789               
790                if ($res)
791                {
792                        $result['status'] = true;
793                }
794                else
795                {
796                        $result['status'] = false;
797                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist ($mail).\n\nRetorno do servidor:" . ldap_error($this->ldap);
798                }
799                ldap_close($ldapMasterConnect);
800                return $result;
801        }
802
803        function remove_user2maillist_scl($dn, $array_emails)
804        {
805                $attrs['mailSenderAddress'] = $array_emails;
806                $res = @ldap_mod_del($this->ldap, $dn, $attrs);
807               
808                if ($res)
809                {
810                        $result['status'] = true;
811                }
812                else
813                {
814                        $result['status'] = false;
815                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist_scp ($dn).\n\nRetorno do servidor:" . ldap_error($this->ldap);
816                }
817                return $result;
818        }
819
820        function replace_user2maillists($new_mail, $old_mail)
821        {
822                $filter = "(&(phpgwAccountType=l)(mailforwardingaddress=$old_mail))";
823                $justthese = array("dn");
824                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
825                $entries = ldap_get_entries($this->ldap, $search);
826                $result['status'] = true;
827                for ($i=0; $i<$entries['count']; $i++)
828                {
829                        $attrs['mailforwardingaddress'] = $old_mail;
830                        $res1 = @ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs);
831                        $attrs['mailforwardingaddress'] = $new_mail;
832                        $res2 = @ldap_mod_add($this->ldap, $entries[$i]['dn'], $attrs);
833               
834                        if ((!$res1) || (!$res2))
835                        {
836                                $result['status'] = false;
837                                $result['msg'] = "Erro na funcao ldap_functions->replace_user2maillists ($old_mail).\nRetorno do servidor:" . ldap_error($this->ldap);
838                        }
839                }
840               
841                return $result;
842        }
843       
844        function get_user_info($uidnumber)
845        {
846                foreach ($this->manager_contexts as $index=>$context)
847                {
848                        $filter="(&(phpgwAccountType=u)(uidNumber=".$uidnumber."))";
849                        $search = ldap_search($this->ldap, $context, $filter);
850                        $entry = ldap_get_entries($this->ldap, $search);
851                       
852                        if ($entry['count'])
853                        {
854                                //Pega o dn do setor do usuario.
855                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
856                                $sector_dn_array = explode(",", $entry[0]['dn']);
857                                for($i=1; $i<count($sector_dn_array); $i++)
858                                        $sector_dn .= $sector_dn_array[$i] . ',';
859                                //Retira ultimo pipe.
860                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
861               
862                                $result['context']                              = $sector_dn;
863                                $result['uid']                                  = $entry[0]['uid'][0];
864                                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
865                                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
866                                $result['departmentnumber']             = $entry[0]['departmentnumber'][0];
867                                $result['givenname']                    = $entry[0]['givenname'][0];
868                                $result['sn']                                   = $entry[0]['sn'][0];
869                                $result['telephonenumber']              = $entry[0]['telephonenumber'][0];
870                                $result['passwd_expired']               = $entry[0]['phpgwlastpasswdchange'][0];
871                                $result['phpgwaccountstatus']   = $entry[0]['phpgwaccountstatus'][0];
872                                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
873                                $result['accountstatus']                = $entry[0]['accountstatus'][0];
874                                $result['mail']                                 = $entry[0]['mail'][0];
875                                $result['mailalternateaddress'] = $entry[0]['mailalternateaddress'];
876                                $result['mailforwardingaddress']= $entry[0]['mailforwardingaddress'];
877                                $result['deliverymode']                 = $entry[0]['deliverymode'][0];
878                                $result['userPasswordRFC2617']  = $entry[0]['userpasswordrfc2617'][0];
879
880                                //Photo
881                                if ($entry[0]['jpegphoto']['count'] == 1)
882                                        $result['photo_exist'] = 'true';
883               
884                                // Samba
885                                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
886                                {
887                                        if ($entry[0]['objectclass'][$i] == 'sambaSamAccount')
888                                                $result['sambaUser'] = true;
889                                }
890                                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($result['sambaUser']))
891                                {
892                                        $result['sambaaccflags'] = $entry[0]['sambaacctflags'][0];
893                                        $result['sambalogonscript'] = $entry[0]['sambalogonscript'][0];
894                                        $result['homedirectory'] = $entry[0]['homedirectory'][0];
895                                        $a_tmp = explode("-", $entry[0]['sambasid'][0]);
896                                        array_pop($a_tmp);
897                                        $result['sambasid'] = implode("-", $a_tmp);
898                                }
899
900                                // Verifica o acesso do gerente aos atributos corporativos
901                                if ($this->functions->check_acl($_SESSION['phpgw_session']['session_lid'], 'manipulate_corporative_information'))
902                                {
903                                        $result['corporative_information_employeenumber']= $entry[0]['employeenumber'][0];
904                                        $result['corporative_information_cpf']                  = $entry[0]['cpf'][0];
905                                        $result['corporative_information_rg']                   = $entry[0]['rg'][0];
906                                        $result['corporative_information_rguf']                 = $entry[0]['rguf'][0];
907                                }
908                               
909                                // MailLists
910                                $result['maillists_info'] = $this->get_user_maillists($result['mail']);
911                                if($result['maillists_info'])
912                                {
913                                        foreach ($result['maillists_info'] as $maillist)
914                                        {
915                                                $result['maillists'][] = $maillist['uid'];
916                                        }
917                                }
918                               
919                                // Groups
920                                $justthese = array("gidnumber","cn");
921                                $filter="(&(phpgwAccountType=g)(memberuid=".$result['uid']."))";
922                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
923                        ldap_sort($this->ldap, $search, "cn");
924                        $entries = ldap_get_entries($this->ldap, $search);
925                        for ($i=0; $i<$entries['count']; $i++)
926                        {
927                                $result['groups_ldap'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['cn'][0];
928                        }
929                        }
930                }
931                return $result;
932        }
933               
934        function get_user_maillists($mail)
935        {
936                if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
937                        return false;
938               
939                $result = array();
940               
941                //Mostra somente os mailists dos contextos do gerente
942                $justthese = array("uid","mail","uidnumber");
943                $filter="(&(phpgwAccountType=l)(mailforwardingaddress=$mail))";
944               
945                foreach ($this->manager_contexts as $index=>$context)
946                {
947                        $search = ldap_search($ldapMasterConnect, $context, $filter, $justthese);
948                $entries = ldap_get_entries($ldapMasterConnect, $search);
949               
950                for ($i=0; $i<$entries['count']; $i++)
951                {
952                                $result[ $entries[$i]['uid'][0] ]['uid']                = $entries[$i]['uid'][0];
953                                $result[ $entries[$i]['uid'][0] ]['mail']               = $entries[$i]['mail'][0];
954                               
955                                $a_tmp[] = $entries[$i]['uid'][0];
956                }
957                }
958       
959        if($a_tmp) {
960                natcasesort($a_tmp);
961       
962                foreach ($a_tmp as $uid)
963                {
964                                $return[$uid]['uid']            = $result[$uid]['uid'];
965                                $return[$uid]['mail']           = $result[$uid]['mail'];
966                }
967        }
968        ldap_close($ldapMasterConnect);
969                return $return;
970        }
971       
972        function get_group_info($gidnumber)
973        {
974                foreach ($this->manager_contexts as $index=>$context)
975                {
976                        $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
977                        $search = ldap_search($this->ldap, $context, $filter);
978                        $entry = ldap_get_entries($this->ldap, $search);
979                       
980                        if ($entry['count'])
981                        {
982                                //Pega o dn do setor do grupo.
983                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
984                                $sector_dn_array = explode(",", $entry[0]['dn']);
985                                for($i=1; $i<count($sector_dn_array); $i++)
986                                        $sector_dn .= $sector_dn_array[$i] . ',';
987                                //Retira ultimo pipe.
988                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
989               
990                                $result['context']                              = $sector_dn;
991                                $result['cn']                                   = $entry[0]['cn'][0];
992                                $result['description']                  = $entry[0]['description'][0];
993                                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
994                                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
995                                $result['email']                                = $entry[0]['mail'][0];
996               
997                                //MemberUid
998                                for ($i=0; $i<$entry[0]['memberuid']['count']; $i++)
999                                {
1000                                        $justthese = array("cn","uid","uidnumber");
1001                       
1002                                        // Montagem dinamica do filtro
1003                                        $filter="(&(phpgwAccountType=u)(|";
1004                                        for ($k=0; (($k<10) && ($i<$entry[0]['memberuid']['count'])); $k++)
1005                                        {
1006                                                $filter .= "(uid=".$entry[0]['memberuid'][$i].")";
1007                                                $i++;
1008                                        }
1009                                        $i--;
1010                                        $filter .= "))";
1011                       
1012                                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1013                                        $user_entry = ldap_get_entries($this->ldap, $search);
1014
1015                                        for ($j=0; $j<$user_entry['count']; $j++)
1016                                        {
1017                                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['cn'] = $user_entry[$j]['cn'][0];
1018                                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['uidnumber'] = $user_entry[$j]['uidnumber'][0];
1019                                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['type'] = 'u';
1020                                        }
1021                                }
1022               
1023                                // Checamos e-mails que não fazem parte do expresso.
1024                                // Criamos um array temporario
1025                                $tmp_array = array();
1026                                if($result['memberuid_info'])
1027                                        foreach ($result['memberuid_info'] as $uid => $user_data)
1028                                        {
1029                                                $tmp_array[] = $uid;
1030                                        }
1031               
1032                                if($entry[0]['memberuid']) {
1033                                        // Retira o count do array
1034                                        array_shift($entry[0]['memberuid']);
1035                                        // Vemos a diferença
1036                                        $array_diff = array_diff($entry[0]['memberuid'], $tmp_array);
1037                                        // Incluimos no resultado                       
1038                                        foreach ($array_diff as $index=>$uid)
1039                                        {
1040                                                $result['memberuid_info'][$uid]['cn'] = $uid;
1041                                        }
1042                                }
1043               
1044                                // Samba
1045                                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
1046                                {
1047                                        if ($entry[0]['objectclass'][$i] == 'sambaGroupMapping')
1048                                                $result['sambaGroup'] = true;
1049
1050                                        $a_tmp = explode("-", $entry[0]['sambasid'][0]);
1051                                        array_pop($a_tmp);
1052                                        $result['sambasid'] = implode("-", $a_tmp);
1053                                }
1054                                return $result;
1055                        }
1056                }
1057        }       
1058       
1059        function get_maillist_info($uidnumber)
1060        {
1061               
1062                /* folling referral connection */
1063                $ldap_conn_following_ref = ldap_connect($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['host']);
1064                if ($ldap_conn_following_ref)
1065                {
1066                        ldap_set_option($ldap_conn_following_ref, LDAP_OPT_PROTOCOL_VERSION, 3);
1067                        ldap_set_option($ldap_conn_following_ref, LDAP_OPT_REFERRALS, 1);
1068
1069                        if ( ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] != '') && ($_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw'] != '') )
1070                                ldap_bind($ldap_conn_following_ref, $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'], $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['pw']);
1071                }
1072               
1073                foreach ($this->manager_contexts as $index=>$context)
1074                {
1075                        $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
1076                        $search = ldap_search($this->ldap, $context, $filter);
1077                        $entry = ldap_get_entries($this->ldap, $search);
1078                       
1079                        if ($entry['count'])
1080                        {
1081                                //Pega o dn do setor do usuario.
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['uidnumber']                    = $entry[0]['uidnumber'][0];
1091                                $result['uid']                                  = strtolower($entry[0]['uid'][0]);
1092                                $result['cn']                                   = $entry[0]['cn'][0];
1093                                $result['mail']                                 = $entry[0]['mail'][0];
1094                                $result['accountStatus']                = $entry[0]['accountstatus'][0];
1095                                $result['phpgwAccountVisible']  = $entry[0]['phpgwaccountvisible'][0];
1096                       
1097                                //Members
1098                                for ($i=0; $i<$entry[0]['mailforwardingaddress']['count']; $i++)
1099                                {
1100                                        $justthese = array("cn", "uidnumber", "uid", "phpgwaccounttype", "mail");
1101                               
1102                                        // Montagem dinamica do filtro, para nao ter muitas conexoes com o ldap
1103                                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|";
1104                                        for ($k=0; (($k<10) && ($i<$entry[0]['mailforwardingaddress']['count'])); $k++)
1105                                        {
1106                                                $filter .= "(mail=".$entry[0]['mailforwardingaddress'][$i].")";
1107                                                $i++;
1108                                        }
1109                                        $i--;
1110                                        $filter .= "))";
1111                               
1112                                        $search = ldap_search($ldap_conn_following_ref, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1113                                        $user_entry = ldap_get_entries($ldap_conn_following_ref, $search);
1114                                                                       
1115                                        for ($j=0; $j<$user_entry['count']; $j++)
1116                                        {
1117                                                $result['mailForwardingAddress_info'][$user_entry[$j]['mail'][0]]['uid'] = $user_entry[$j]['uid'][0];
1118                                                $result['mailForwardingAddress_info'][$user_entry[$j]['mail'][0]]['cn'] = $user_entry[$j]['cn'][0];
1119                                                $result['mailForwardingAddress_info'][$user_entry[$j]['mail'][0]]['type'] = $user_entry[$j]['phpgwaccounttype'][0];
1120                                                $result['mailForwardingAddress'][] = $user_entry[$j]['mail'][0];
1121                                        }
1122                                }
1123
1124                                // Emails não encontrados no ldap
1125                                array_shift($entry[0]['mailforwardingaddress']); //Retira o count do array
1126                                $missing_emails = array_diff($entry[0]['mailforwardingaddress'], $result['mailForwardingAddress']);
1127                               
1128                                // Incluimos estes no resultado
1129                                foreach ($missing_emails as $index=>$mailforwardingaddress)
1130                                {
1131                                        $result['mailForwardingAddress_info'][$mailforwardingaddress]['uid'] = $mailforwardingaddress;
1132                                        $result['mailForwardingAddress_info'][$mailforwardingaddress]['cn'] = 'E-Mail nao encontrado';
1133                                        $result['mailForwardingAddress'][] = $mailforwardingaddress;
1134                                }
1135                               
1136                                ldap_close($ldap_conn_following_ref);
1137                                return $result;
1138                        }
1139                }
1140        }       
1141
1142        function get_maillist_scl_info($uidnumber)
1143        {
1144                foreach ($this->manager_contexts as $index=>$context)
1145                {
1146                        $filter="(&(phpgwAccountType=l)(uidNumber=$uidnumber))";
1147                        $search = ldap_search($this->ldap, $context, $filter);
1148                        $entry = ldap_get_entries($this->ldap, $search);
1149
1150                        if ($entry['count'])
1151                        {
1152                                //Pega o dn do setor do usuario.
1153                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
1154                                $sector_dn_array = explode(",", $entry[0]['dn']);
1155                                for($i=1; $i<count($sector_dn_array); $i++)
1156                                        $sector_dn .= $sector_dn_array[$i] . ',';
1157                                //Retira ultimo pipe.
1158                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
1159               
1160                                $result['dn']                                           = $entry[0]['dn'];
1161                                $result['context']                                      = $sector_dn;
1162                                $result['uidnumber']                            = $entry[0]['uidnumber'][0];
1163                                $result['uid']                                          = $entry[0]['uid'][0];
1164                                $result['cn']                                           = $entry[0]['cn'][0];
1165                                $result['mail']                                         = $entry[0]['mail'][0];
1166                                $result['accountStatus']                        = $entry[0]['accountstatus'][0];
1167                                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
1168                                $result['accountRestrictive']           = $entry[0]['accountrestrictive'][0];
1169                                $result['participantCanSendMail']       = $entry[0]['participantcansendmail'][0];
1170               
1171                                //Senders
1172                                for ($i=0; $i<$entry[0]['mailsenderaddress']['count']; $i++)
1173                                {
1174                                        $justthese = array("cn", "uidnumber", "uid", "mail");
1175                                        $filter="(&(phpgwAccountType=u)(mail=".$entry[0]['mailsenderaddress'][$i]."))";
1176                                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1177                                        $user_entry = ldap_get_entries($this->ldap, $search);
1178                       
1179                                        $result['senders_info'][$user_entry[0]['mail'][0]]['uid'] = $user_entry[0]['uid'][0];
1180                                        $result['senders_info'][$user_entry[0]['mail'][0]]['cn'] = $user_entry[0]['cn'][0];
1181                                        $result['members'][] = $user_entry[0]['mail'][0];
1182                                }
1183                                return $result;
1184                        }
1185                }
1186        }       
1187
1188        function group_exist($gidnumber)
1189        {
1190                $justthese = array("cn");
1191                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1192                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1193                               
1194                $entry = ldap_get_entries($this->ldap, $search);
1195                if ($entry['count'] == 0)
1196                        return false;
1197                else
1198                        return true;
1199        }
1200
1201        function gidnumbers2cn($gidnumbers)
1202        {
1203                $result = array();
1204                if (count($gidnumbers))
1205                {
1206                        $justthese = array("cn");
1207                        $i = 0;
1208                        foreach ($gidnumbers as $gidnumber)
1209                        {
1210                                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1211                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1212                               
1213                                $entry = ldap_get_entries($this->ldap, $search);
1214                                if ($entry['count'] == 0)
1215                                        $result['groups_info'][$i]['cn'] = '_Grupo existe no BD mas não no LDAP';
1216                                else
1217                                        $result['groups_info'][$i]['cn'] = $entry[0]['cn'][0];
1218                                $result['groups_info'][$i]['gidnumber'] = $gidnumber;
1219                       
1220                                /* o gerente pode excluir um grupo de um usuario onde este grupo esta em outra OU ? */
1221                                /* é o mesmo que o manager editar um grupo de outra OU */
1222                                $result['groups_info'][$i]['group_disabled'] = 'true';
1223                                foreach ($this->manager_contexts as $index=>$context)
1224                                {
1225                                        if (strpos(strtolower($entry[0]['dn']), strtolower($context)))
1226                                        {
1227                                                $result['groups_info'][$i]['group_disabled'] = 'false';
1228                                        }
1229                                }
1230
1231                                $i++;
1232                        }
1233                }
1234                return $result;
1235        }
1236
1237        function uidnumber2uid($uidnumber)
1238        {
1239                $justthese = array("uid");
1240                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1241                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1242                $entry = ldap_get_entries($this->ldap, $search);
1243                return $entry[0]['uid'][0];
1244        }
1245
1246        function uidnumber2mail($uidnumber)
1247        {
1248                $justthese = array("mail");
1249                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1250                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1251                $entry = ldap_get_entries($this->ldap, $search);
1252                return $entry[0]['mail'][0];
1253        }
1254
1255       
1256        function change_user_context($dn, $newrdn, $newparent)
1257        {
1258                if (!ldap_rename ( $this->ldap, $dn, $newrdn, $newparent, true ))
1259                {
1260                        $return['status'] = false;
1261                        $return['msg'] = 'Erro em ldap_funcitons->change_user_context: ' . ldap_error($this->ldap);
1262                }
1263                else
1264                        $return['status'] = true;
1265               
1266                return $return;
1267        }
1268       
1269        function replace_user_attributes($dn, $ldap_mod_replace)
1270        {
1271                if (!@ldap_mod_replace ( $this->ldap, $dn, $ldap_mod_replace ))
1272                {
1273                        $return['status'] = false;
1274                        $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldap);
1275                }
1276                else
1277                        $return['status'] = true;
1278               
1279                return $return;
1280        }
1281       
1282        function add_user_attributes($dn, $ldap_add)
1283        {
1284                if (!@ldap_mod_add ( $this->ldap, $dn, $ldap_add ))
1285                {
1286                        $return['status'] = false;
1287                        $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldap);
1288                }
1289                else
1290                        $return['status'] = true;
1291               
1292                return $return;
1293        }
1294       
1295        function remove_user_attributes($dn, $ldap_remove)
1296        {
1297                if (!@ldap_mod_del ( $this->ldap, $dn, $ldap_remove ))
1298                {
1299                        $return['status'] = false;
1300                        $return['msg'] = 'Erro em ldap_funcitons->remove_user_attributes: ' . ldap_error($this->ldap);
1301                }
1302                else
1303                        $return['status'] = true;
1304               
1305                return $return;
1306        }
1307       
1308        function set_user_password($uid, $password)
1309        {
1310                $justthese = array("userPassword");
1311                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1312                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1313            $entry = ldap_get_entries($this->ldap, $search);
1314                $dn = $entry[0]['dn'];
1315                $userPassword = $entry[0]['userpassword'][0];
1316                $ldap_mod_replace['userPassword'] = $password;
1317                $this->replace_user_attributes($dn, $ldap_mod_replace);
1318                return $userPassword;
1319        }
1320       
1321        function delete_user($user_info)
1322        {
1323                // Verifica acesso do gerente (OU) ao tentar deletar um usuário.
1324                $manager_access = false;
1325                foreach ($this->manager_contexts as $index=>$context)
1326                {
1327                        if ( (strpos(strtolower($user_info['context']), strtolower($context))) || (strtolower($user_info['context']) == strtolower($context)) )
1328                        {
1329                                $manager_access = true;
1330                                break;
1331                        }
1332                }
1333                if (!$manager_access)
1334                {
1335                        $return['status'] = false;
1336                        $return['msg'] .= 'Você não tem acesso para deletar este usuário.';
1337                        return $return;
1338                }
1339               
1340                $return['status'] = true;
1341               
1342                // GROUPS
1343                $attrs = array();
1344                $attrs['memberUid'] = $user_info['uid'];
1345                if (count($user_info['groups_info']))
1346                {
1347                        foreach ($user_info['groups_info'] as $group_info)
1348                        {
1349                                $gidnumber = $group_info['gidnumber'];
1350                                $justthese = array("dn");
1351                                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1352                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1353                        $entry = ldap_get_entries($this->ldap, $search);
1354                                $dn = $entry[0]['dn'];
1355                       
1356                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
1357                                {
1358                                        $return['status'] = false;
1359                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap);
1360                                }
1361                        }
1362                }
1363                       
1364                // MAILLISTS
1365                $attrs = array();
1366                $attrs['mailForwardingAddress'] = $user_info['mail'];
1367               
1368                if (count($user_info['maillists_info']))
1369                {
1370                       
1371                        if ( !$ldapMasterConnect = $this->ldapMasterConnect() )
1372                        {
1373                                $return['status'] = false;
1374                                $return['msg'] .= 'Erro ao conectar ao ldap_master: ' . ldap_error($this->ldap);
1375                                return $return;
1376                        }
1377                       
1378                        foreach ($user_info['maillists_info'] as $maillists_info)
1379                        {
1380                                $uid = $maillists_info['uid'];
1381                                $justthese = array("dn");
1382                                $filter="(&(phpgwAccountType=l)(uid=".$uid."))";
1383                                $search = ldap_search($ldapMasterConnect, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1384                        $entry = ldap_get_entries($ldapMasterConnect, $search);
1385                                $dn = $entry[0]['dn'];
1386                       
1387                                if (!@ldap_mod_del($ldapMasterConnect, $dn, $attrs))
1388                                {
1389                                        $return['status'] = false;
1390                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
1391                                }
1392                        }
1393                        ldap_close($ldapMasterConnect);
1394                }
1395                       
1396                // UID
1397                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
1398                if (!@ldap_delete($this->ldap, $dn))
1399                {
1400                        $return['status'] = false;
1401                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
1402                }
1403               
1404                return $return;
1405        }
1406       
1407        function delete_maillist($uidnumber, $mail)
1408        {
1409                $return['status'] = true;
1410               
1411                $justthese = array("dn");
1412               
1413                // remove listas dentro de listas
1414                $filter="(&(phpgwAccountType=l)(mailForwardingAddress=".$mail."))";
1415                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1416                $entry = ldap_get_entries($this->ldap, $search);
1417                $attrs['mailForwardingAddress'] = $mail;
1418                for ($i=0; $i<=$entry['count']; $i++)
1419            {
1420                        $dn = $entry[$i]['dn'];
1421                @ldap_mod_del ( $this->ldap, $dn,  $attrs);
1422            }
1423               
1424                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1425                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1426                $entry = ldap_get_entries($this->ldap, $search);
1427                $dn = $entry[0]['dn'];
1428               
1429                if (!@ldap_delete($this->ldap, $dn))
1430                {
1431                        $return['status'] = false;
1432                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
1433                }
1434               
1435                return $return;
1436        }
1437
1438        function delete_group($gidnumber)
1439        {
1440                $return['status'] = true;
1441               
1442                $justthese = array("dn");
1443                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1444                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1445                $entry = ldap_get_entries($this->ldap, $search);
1446                $dn = $entry[0]['dn'];
1447               
1448                if (!@ldap_delete($this->ldap, $dn))
1449                {
1450                        $return['status'] = false;
1451                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
1452                }
1453               
1454                return $return;
1455        }
1456
1457        function check_access_to_renamed($uid)
1458        {
1459                $justthese = array("dn");
1460                $filter="(&(phpgwAccountType=u)(uid=$uid))";
1461               
1462                foreach ($this->manager_contexts as $index=>$context)
1463                {
1464                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
1465                        $entry = ldap_get_entries($this->ldap, $search);
1466                        if ($entry['count'])
1467                                return true;
1468                }
1469            return false;
1470        }
1471       
1472        function rename_uid($uid, $new_uid)
1473        {
1474                $return['status'] = true;
1475               
1476                $justthese = array("dn");
1477                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1478                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1479            $entry = ldap_get_entries($this->ldap, $search);
1480                $dn = $entry[0]['dn'];
1481               
1482                $explode_dn = ldap_explode_dn($dn, 0);
1483                $rdn = "uid=" . $new_uid;
1484
1485                $parent = array();
1486                for ($j=1; $j<(count($explode_dn)-1); $j++)
1487                        $parent[] = $explode_dn[$j];
1488                $parent = implode(",", $parent);
1489               
1490                $return['new_dn'] = $rdn . ',' . $parent;
1491                       
1492                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
1493                {
1494                        $return['status'] = false;
1495                        $return['msg'] .= 'Erro em ldap_funcitons->rename_uid: ' . ldap_error($this->ldap);
1496                }
1497               
1498                //Grupos
1499                $justthese = array("dn");
1500                $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";
1501                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1502            $entry = ldap_get_entries($this->ldap, $search);
1503        $array_mod_add['memberUid'] = $new_uid;
1504        $array_mod_del['memberUid'] = $uid;
1505
1506            for ($i=0; $i<=$entry['count']; $i++)
1507            {
1508                $dn = $entry[$i]['dn'];
1509                @ldap_mod_add ( $this->ldap, $dn,  $array_mod_add);
1510                @ldap_mod_del ( $this->ldap, $dn,  $array_mod_del);
1511            }
1512                return $return;
1513        }
1514
1515        function rename_cn($cn, $new_cn)
1516        {
1517                $return['status'] = true;
1518               
1519                $justthese = array("dn");
1520                $filter="(&(phpgwAccountType=g)(uid=".$cn."))";
1521                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1522            $entry = ldap_get_entries($this->ldap, $search);
1523                $dn = $entry[0]['dn'];
1524               
1525                $explode_dn = ldap_explode_dn($dn, 0);
1526                $rdn = "cn=" . $new_cn;
1527
1528                $parent = array();
1529                for ($j=1; $j<(count($explode_dn)-1); $j++)
1530                        $parent[] = $explode_dn[$j];
1531                $parent = implode(",", $parent);
1532               
1533                $return['new_dn'] = $rdn . ',' . $parent;
1534                       
1535                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
1536                {
1537                        $return['status'] = false;
1538                }
1539               
1540                return $return;
1541        }
1542       
1543        function exist_sambadomains($contexts, $sambaDomainName)
1544        {
1545                $justthese = array("dn");
1546                $filter="(&(objectClass=sambaDomain)(sambaDomainName=$sambaDomainName))";
1547               
1548                foreach ($contexts as $index=>$context)
1549                {
1550                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
1551                    $entry = ldap_get_entries($this->ldap, $search);
1552           
1553                        if ($entry['count'])
1554                                return true;
1555                }
1556                return false;
1557        }
1558       
1559        // Primeiro nilvel de organização.
1560        function exist_sambadomains_in_context($params)
1561        {
1562                $dn = $GLOBALS['phpgw_info']['server']['ldap_context'];
1563                $array_dn = ldap_explode_dn ( $dn, 0 );
1564               
1565                $context = $params['context'];
1566                $array_context = ldap_explode_dn ( $context, 0 );
1567               
1568                // Pego o setor no caso do contexto ser um sub-setor.
1569                if (($array_dn['count']+1) < ($array_context['count']))
1570                {
1571                        // inverto o array_dn para poder retirar o count
1572                        $array_dn_reverse  = array_reverse ( $array_dn, false );
1573                       
1574                        //retiro o count
1575                        array_pop($array_dn_reverse);
1576                       
1577                        //incluo o setor no dn
1578                        array_push ( $array_dn_reverse,  $array_context[ $array_context['count'] - 1 - $array_dn['count']]);
1579                       
1580                        // Volto a ordem natural
1581                        $array_dn  = array_reverse ( $array_dn_reverse, false );
1582                       
1583                        // Implodo
1584                        $context = implode ( ",", $array_dn );
1585                }
1586               
1587                $justthese = array("dn","sambaDomainName");
1588                $filter="(objectClass=sambaDomain)";
1589                $search = ldap_list($this->ldap, $context, $filter, $justthese);
1590            $entry = ldap_get_entries($this->ldap, $search);
1591           
1592            for ($i=0; $i<$entry['count']; $i++)
1593            {
1594                        $return['sambaDomains'][$i] = $entry[$i]['sambadomainname'][0];
1595            }
1596           
1597                if ($entry['count'])
1598                        $return['status'] = true;
1599                else
1600                        $return['status'] = false;
1601                       
1602                return $return;
1603        }
1604       
1605        function add_sambadomain($sambadomainname, $sambasid, $context)
1606        {
1607                $result = array();
1608               
1609                $dn                                                             = "sambaDomainName=$sambadomainname,$context";
1610                $entry['sambaSID']                                      = $sambasid;
1611                $entry['objectClass']                           = 'sambaDomain';
1612                $entry['sambaAlgorithmicRidBase']       = '1000';
1613                $entry['sambaDomainName']                       = $sambadomainname;
1614               
1615                if (!@ldap_add ( $this->ldap, $dn, $entry ))
1616                {
1617                        $return['status'] = false;
1618                        $return['msg'] = "Erro na funcao ldap_functions->add_sambadomain ($dn).\nRetorno do servidor: " . ldap_error($this->ldap);
1619                }
1620                else
1621                        $return['status'] = true;
1622               
1623                return $return;
1624        }
1625       
1626        function delete_sambadomain($sambadomainname)
1627        {
1628                $return['status'] = true;
1629                $filter="(sambaDomainName=$sambadomainname)";
1630                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter);
1631            $entry = ldap_get_entries($this->ldap, $search);
1632         
1633                if ($entry['count'] != 0)
1634            {
1635                        $dn = $entry[0]['dn'];
1636                       
1637                        if (!@ldap_delete($this->ldap, $dn))
1638                        {
1639                                $return['status'] = false;
1640                                $return['msg'] .= "Erro em ldap_funcitons->delete_sambadomain ($sambadomainname).\nRetorno do servidor: " . ldap_error($this->ldap);
1641                        }
1642            }
1643           
1644                return $return;
1645        }
1646       
1647        function search_user($params)
1648        {
1649                $search = $params['search'];
1650                $justthese = array("cn","uid", "mail");
1651        $users_list=ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], "(&(phpgwAccountType=u) (|(cn=*$search*)(mail=$search*)) )", $justthese);
1652       
1653        if (ldap_count_entries($this->ldap, $users_list) == 0)
1654        {
1655                $return['status'] = 'false';
1656                $return['msg'] = 'Nenhum resultado encontrado.';
1657                return $return;
1658        }
1659       
1660        ldap_sort($this->ldap, $users_list, "cn");
1661       
1662        $entries = ldap_get_entries($this->ldap, $users_list);
1663               
1664                $options = '';
1665                for ($i=0; $i<$entries['count']; $i++)
1666                {
1667                        $options .= "<option value=" . $entries[$i]['uid'][0] . ">" . $entries[$i]['cn'][0] . " (".$entries[$i]['mail'][0].")" . "</option>";
1668                }
1669       
1670        return $options;               
1671        }
1672       
1673       
1674}
1675?>
Note: See TracBrowser for help on using the repository browser.