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

Revision 64, 47.7 KB checked in by niltonneto, 17 years ago (diff)

* empty log message *

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