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

Revision 68, 47.8 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                                if($result['maillists_info'])
804                                        foreach ($result['maillists_info'] as $maillist)
805                                        {
806                                                $result['maillists'][] = $maillist['uidnumber'];
807                                        }
808                               
809                                // Groups
810                                $justthese = array("gidnumber","cn");
811                                $filter="(&(phpgwAccountType=g)(memberuid=".$result['uid']."))";
812                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
813                        ldap_sort($this->ldap, $search, "cn");
814                        $entries = ldap_get_entries($this->ldap, $search);
815                        for ($i=0; $i<$entries['count']; $i++)
816                        {
817                                $result['groups_ldap'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['cn'][0];
818                        }
819                        }
820                }
821                return $result;
822        }
823               
824        function get_user_maillists($mail)
825        {
826                $result = array();
827               
828                //Mostra somente os mailists dos contextos do gerente
829                $justthese = array("uid","mail","uidnumber");
830                $filter="(&(phpgwAccountType=l)(mailforwardingaddress=$mail))";
831               
832                foreach ($this->manager_contexts as $index=>$context)
833                {
834                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
835                        //ldap_sort($this->ldap, $search, "uid");
836                $entries = ldap_get_entries($this->ldap, $search);
837               
838                for ($i=0; $i<$entries['count']; $i++)
839                {
840                                $result[ $entries[$i]['uid'][0] ]['uidnumber']  = $entries[$i]['uidnumber'][0];
841                                $result[ $entries[$i]['uid'][0] ]['uid']                = $entries[$i]['uid'][0];
842                                $result[ $entries[$i]['uid'][0] ]['mail']               = $entries[$i]['mail'][0];
843                               
844                                $a_tmp[] = $entries[$i]['uid'][0];
845                }
846                }
847       
848        if($a_tmp) {
849                natcasesort($a_tmp);
850       
851                foreach ($a_tmp as $uid)
852                {
853                        $return[$uid]['uidnumber']      = $result[$uid]['uidnumber'];
854                                $return[$uid]['uid']            = $result[$uid]['uid'];
855                                $return[$uid]['mail']           = $result[$uid]['mail'];
856                }
857        }       
858                return $return;
859        }
860       
861        function get_group_info($gidnumber)
862        {
863                foreach ($this->manager_contexts as $index=>$context)
864                {
865                        $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
866                        $search = ldap_search($this->ldap, $context, $filter);
867                        $entry = ldap_get_entries($this->ldap, $search);
868                       
869                        if ($entry['count'])
870                        {
871                                //Pega o dn do setor do grupo.
872                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
873                                $sector_dn_array = explode(",", $entry[0]['dn']);
874                                for($i=1; $i<count($sector_dn_array); $i++)
875                                        $sector_dn .= $sector_dn_array[$i] . ',';
876                                //Retira ultimo pipe.
877                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
878               
879                                $result['context']                              = $sector_dn;
880                                $result['cn']                                   = $entry[0]['cn'][0];
881                                $result['description']                  = $entry[0]['description'][0];
882                                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
883                                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
884                                $result['email']                                = $entry[0]['mail'][0];
885               
886                                //MemberUid
887                                for ($i=0; $i<$entry[0]['memberuid']['count']; $i++)
888                                {
889                                        $justthese = array("cn","uid","uidnumber");
890                       
891                                        // Montagem dinamica do filtro
892                                        $filter="(&(phpgwAccountType=u)(|";
893                                        for ($k=0; (($k<10) && ($i<$entry[0]['memberuid']['count'])); $k++)
894                                        {
895                                                $filter .= "(uid=".$entry[0]['memberuid'][$i].")";
896                                                $i++;
897                                        }
898                                        $i--;
899                                        $filter .= "))";
900                       
901                                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
902                                        $user_entry = ldap_get_entries($this->ldap, $search);
903
904                                        for ($j=0; $j<$user_entry['count']; $j++)
905                                        {
906                                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['cn'] = $user_entry[$j]['cn'][0];
907                                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['uidnumber'] = $user_entry[$j]['uidnumber'][0];
908                                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['type'] = 'u';
909                                        }
910                                }
911               
912                                // Checamos e-mails que não fazem parte do expresso.
913                                // Criamos um array temporario
914                                $tmp_array = array();
915                                if($result['memberuid_info'])
916                                        foreach ($result['memberuid_info'] as $uid => $user_data)
917                                        {
918                                                $tmp_array[] = $uid;
919                                        }
920               
921                                if($entry[0]['memberuid']) {
922                                        // Retira o count do array
923                                        array_shift($entry[0]['memberuid']);                                   
924                                        // Vemos a diferença
925                                        $array_diff = array_diff($entry[0]['memberuid'], $tmp_array);
926                                        // Incluimos no resultado                       
927                                        foreach ($array_diff as $index=>$uid)
928                                        {
929                                                $result['memberuid_info'][$uid]['cn'] = $uid;
930                                        }
931                                }
932               
933                                // Samba
934                                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
935                                {
936                                        if ($entry[0]['objectclass'][$i] == 'sambaGroupMapping')
937                                                $result['sambaGroup'] = true;
938
939                                        $a_tmp = explode("-", $entry[0]['sambasid'][0]);
940                                        array_pop($a_tmp);
941                                        $result['sambasid'] = implode("-", $a_tmp);
942                                }
943                                return $result;
944                        }
945                }
946        }       
947       
948        function get_maillist_info($uidnumber)
949        {
950                foreach ($this->manager_contexts as $index=>$context)
951                {
952                        $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
953                        $search = ldap_search($this->ldap, $context, $filter);
954                        $entry = ldap_get_entries($this->ldap, $search);
955                       
956                        if ($entry['count'])
957                        {
958                                //Pega o dn do setor do usuario.
959                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
960                                $sector_dn_array = explode(",", $entry[0]['dn']);
961                                for($i=1; $i<count($sector_dn_array); $i++)
962                                        $sector_dn .= $sector_dn_array[$i] . ',';
963                                //Retira ultimo pipe.
964                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
965                       
966                                $result['context']                              = $sector_dn;
967                                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
968                                $result['uid']                                  = $entry[0]['uid'][0];
969                                $result['cn']                                   = $entry[0]['cn'][0];
970                                $result['mail']                                 = $entry[0]['mail'][0];
971                                $result['accountStatus']                = $entry[0]['accountstatus'][0];
972                                $result['phpgwAccountVisible']  = $entry[0]['phpgwaccountvisible'][0];
973                       
974                                //Members
975                                for ($i=0; $i<$entry[0]['mailforwardingaddress']['count']; $i++)
976                                {
977                                        $justthese = array("cn", "uidnumber", "uid", "phpgwaccounttype", "mail");
978                               
979                                        // Montagem dinamica do filtro
980                                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|";
981                                        for ($k=0; (($k<10) && ($i<$entry[0]['mailforwardingaddress']['count'])); $k++)
982                                        {
983                                                $filter .= "(mail=".$entry[0]['mailforwardingaddress'][$i].")";
984                                                $i++;
985                                        }
986                                        $i--;
987                                        $filter .= "))";
988                               
989                                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
990                                        $user_entry = ldap_get_entries($this->ldap, $search);
991                               
992                                        for ($j=0; $j<$user_entry['count']; $j++)
993                                        {
994                                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['uid'] = $user_entry[$j]['uid'][0];
995                                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['cn'] = $user_entry[$j]['cn'][0];
996                                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['type'] = $user_entry[$j]['phpgwaccounttype'][0];
997                                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['mail'] = $user_entry[$j]['mail'][0];
998                                                $result['members'][] = $user_entry[$j]['uidnumber'][0];
999                                        }
1000                                }
1001
1002                                // Retira o count do array
1003                                array_shift($entry[0]['mailforwardingaddress']);
1004
1005                                // Checamos e-mails que não fazem parte do expresso.
1006                                // Criamos um array temporario
1007                                $tmp_array = array();
1008                                foreach ($result['members_info'] as $uid => $user_data)
1009                                {
1010                                        $tmp_array[] = $user_data['mail'];
1011                                }
1012
1013                                // Vemos a diferença
1014                                $array_diff = array_diff($entry[0]['mailforwardingaddress'], $tmp_array);
1015
1016                                // Incluimos no resultado
1017                                foreach ($array_diff as $index=>$mailforwardingaddress)
1018                                {
1019                                        $result['members_info'][$mailforwardingaddress]['uid'] = $mailforwardingaddress;
1020                                        $result['members_info'][$mailforwardingaddress]['cn'] = 'E-Mail nao encontrado';
1021                                        $result['members_info'][$mailforwardingaddress]['mailforwardingaddress'] = $mailforwardingaddress;
1022                                        $result['members'][] = $mailforwardingaddress;
1023                                }
1024                                return $result;
1025                        }
1026                }
1027        }       
1028
1029        function get_maillist_scl_info($uidnumber)
1030        {
1031                foreach ($this->manager_contexts as $index=>$context)
1032                {
1033                        $filter="(&(phpgwAccountType=l)(uidNumber=$uidnumber))";
1034                        $search = ldap_search($this->ldap, $context, $filter);
1035                        $entry = ldap_get_entries($this->ldap, $search);
1036
1037                        if ($entry['count'])
1038                        {
1039                                //Pega o dn do setor do usuario.
1040                                $entry[0]['dn'] = strtolower($entry[0]['dn']);
1041                                $sector_dn_array = explode(",", $entry[0]['dn']);
1042                                for($i=1; $i<count($sector_dn_array); $i++)
1043                                        $sector_dn .= $sector_dn_array[$i] . ',';
1044                                //Retira ultimo pipe.
1045                                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
1046               
1047                                $result['dn']                                           = $entry[0]['dn'];
1048                                $result['context']                                      = $sector_dn;
1049                                $result['uidnumber']                            = $entry[0]['uidnumber'][0];
1050                                $result['uid']                                          = $entry[0]['uid'][0];
1051                                $result['cn']                                           = $entry[0]['cn'][0];
1052                                $result['mail']                                         = $entry[0]['mail'][0];
1053                                $result['accountStatus']                        = $entry[0]['accountstatus'][0];
1054                                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
1055                                $result['accountRestrictive']           = $entry[0]['accountrestrictive'][0];
1056                                $result['participantCanSendMail']       = $entry[0]['participantcansendmail'][0];
1057               
1058                                //Senders
1059                                for ($i=0; $i<$entry[0]['mailsenderaddress']['count']; $i++)
1060                                {
1061                                        $justthese = array("cn", "uidnumber", "uid", "mail");
1062                                        $filter="(&(phpgwAccountType=u)(mail=".$entry[0]['mailsenderaddress'][$i]."))";
1063                                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1064                                        $user_entry = ldap_get_entries($this->ldap, $search);
1065                       
1066                                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['uid'] = $user_entry[0]['uid'][0];
1067                                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['cn'] = $user_entry[0]['cn'][0];
1068                                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['mail'] = $user_entry[0]['mail'][0];
1069                                        $result['members'][] = $user_entry[0]['uidnumber'][0];
1070                                }
1071                                return $result;
1072                        }
1073                }
1074        }       
1075
1076        function group_exist($gidnumber)
1077        {
1078                $justthese = array("cn");
1079                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1080                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1081                               
1082                $entry = ldap_get_entries($this->ldap, $search);
1083                if ($entry['count'] == 0)
1084                        return false;
1085                else
1086                        return true;
1087        }
1088
1089        function gidnumbers2cn($gidnumbers)
1090        {
1091                $result = array();
1092                if (count($gidnumbers))
1093                {
1094                        $justthese = array("cn");
1095                        $i = 0;
1096                        foreach ($gidnumbers as $gidnumber)
1097                        {
1098                                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1099                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1100                               
1101                                $entry = ldap_get_entries($this->ldap, $search);
1102                                if ($entry['count'] == 0)
1103                                        $result['groups_info'][$i]['cn'] = '_Grupo existe no BD mas não no LDAP';
1104                                else
1105                                        $result['groups_info'][$i]['cn'] = $entry[0]['cn'][0];
1106                                $result['groups_info'][$i]['gidnumber'] = $gidnumber;
1107                       
1108                                /* o gerente pode excluir um grupo de um usuario onde este grupo esta em outra OU ? */
1109                                /* é o mesmo que o manager editar um grupo de outra OU */
1110                                $result['groups_info'][$i]['group_disabled'] = 'true';
1111                                foreach ($this->manager_contexts as $index=>$context)
1112                                {
1113                                        if (strpos(strtolower($entry[0]['dn']), strtolower($context)))
1114                                        {
1115                                                $result['groups_info'][$i]['group_disabled'] = 'false';
1116                                        }
1117                                }
1118
1119                                $i++;
1120                        }
1121                }
1122                return $result;
1123        }
1124
1125        function uidnumber2uid($uidnumber)
1126        {
1127                $justthese = array("uid");
1128                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1129                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1130                $entry = ldap_get_entries($this->ldap, $search);
1131                return $entry[0]['uid'][0];
1132        }
1133
1134        function uidnumber2mail($uidnumber)
1135        {
1136                $justthese = array("mail");
1137                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1138                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1139                $entry = ldap_get_entries($this->ldap, $search);
1140                return $entry[0]['mail'][0];
1141        }
1142
1143       
1144        function change_user_context($dn, $newrdn, $newparent)
1145        {
1146                if (!ldap_rename ( $this->ldap, $dn, $newrdn, $newparent, true ))
1147                {
1148                        $return['status'] = false;
1149                        $return['msg'] = 'Erro em ldap_funcitons->change_user_context: ' . ldap_error($this->ldap);
1150                }
1151                else
1152                        $return['status'] = true;
1153               
1154                return $return;
1155        }
1156       
1157        function replace_user_attributes($dn, $ldap_mod_replace)
1158        {
1159                if (!@ldap_mod_replace ( $this->ldap, $dn, $ldap_mod_replace ))
1160                {
1161                        $return['status'] = false;
1162                        $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldap);
1163                }
1164                else
1165                        $return['status'] = true;
1166               
1167                return $return;
1168        }
1169       
1170        function add_user_attributes($dn, $ldap_add)
1171        {
1172                if (!@ldap_mod_add ( $this->ldap, $dn, $ldap_add ))
1173                {
1174                        $return['status'] = false;
1175                        $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldap);
1176                }
1177                else
1178                        $return['status'] = true;
1179               
1180                return $return;
1181        }
1182       
1183        function remove_user_attributes($dn, $ldap_remove)
1184        {
1185                if (!@ldap_mod_del ( $this->ldap, $dn, $ldap_remove ))
1186                {
1187                        $return['status'] = false;
1188                        $return['msg'] = 'Erro em ldap_funcitons->remove_user_attributes: ' . ldap_error($this->ldap);
1189                }
1190                else
1191                        $return['status'] = true;
1192               
1193                return $return;
1194        }
1195       
1196        function set_user_password($uid, $password)
1197        {
1198                $justthese = array("userPassword");
1199                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1200                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1201            $entry = ldap_get_entries($this->ldap, $search);
1202                $dn = $entry[0]['dn'];
1203                $userPassword = $entry[0]['userpassword'][0];
1204                $ldap_mod_replace['userPassword'] = $password;
1205                $this->replace_user_attributes($dn, $ldap_mod_replace);
1206                return $userPassword;
1207        }
1208       
1209        function delete_user($user_info)
1210        {
1211                // Verifica acesso do gerente (OU) ao tentar deletar um usuário.
1212                $manager_access = false;
1213                foreach ($this->manager_contexts as $index=>$context)
1214                {
1215                        if ( (strpos(strtolower($user_info['context']), strtolower($context))) || (strtolower($user_info['context']) == strtolower($context)) )
1216                        {
1217                                $manager_access = true;
1218                                break;
1219                        }
1220                }
1221                if (!$manager_access)
1222                {
1223                        $return['status'] = false;
1224                        $return['msg'] .= 'Você não tem acesso para deletar este usuário.';
1225                        return $return;
1226                }
1227               
1228                $return['status'] = true;
1229               
1230                // GROUPS
1231                $attrs = array();
1232                $attrs['memberUid'] = $user_info['uid'];
1233                if (count($user_info['groups_info']))
1234                {
1235                        foreach ($user_info['groups_info'] as $group_info)
1236                        {
1237                                $gidnumber = $group_info['gidnumber'];
1238                                $justthese = array("dn");
1239                                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1240                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1241                        $entry = ldap_get_entries($this->ldap, $search);
1242                                $dn = $entry[0]['dn'];
1243                       
1244                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
1245                                {
1246                                        $return['status'] = false;
1247                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap);
1248                                }
1249                        }
1250                }
1251                       
1252                // MAILLISTS
1253                $attrs = array();
1254                $attrs['mailForwardingAddress'] = $user_info['mail'];
1255                if (count($user_info['maillists_info']))
1256                {
1257                        foreach ($user_info['maillists_info'] as $maillists_info)
1258                        {
1259                                $uidnumber = $maillists_info['uidnumber'];
1260                                $justthese = array("dn");
1261                                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1262                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1263                        $entry = ldap_get_entries($this->ldap, $search);
1264                                $dn = $entry[0]['dn'];
1265                       
1266                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
1267                                {
1268                                        $return['status'] = false;
1269                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
1270                                }
1271                        }
1272                }
1273                       
1274                // UID
1275                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
1276                if (!@ldap_delete($this->ldap, $dn))
1277                {
1278                        $return['status'] = false;
1279                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
1280                }
1281               
1282                return $return;
1283        }
1284       
1285        function delete_maillist($uidnumber)
1286        {
1287                $return['status'] = true;
1288               
1289                $justthese = array("dn");
1290                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1291                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1292                $entry = ldap_get_entries($this->ldap, $search);
1293                $dn = $entry[0]['dn'];
1294               
1295                if (!@ldap_delete($this->ldap, $dn))
1296                {
1297                        $return['status'] = false;
1298                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
1299                }
1300               
1301                return $return;
1302        }
1303
1304        function delete_group($gidnumber)
1305        {
1306                $return['status'] = true;
1307               
1308                $justthese = array("dn");
1309                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1310                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1311                $entry = ldap_get_entries($this->ldap, $search);
1312                $dn = $entry[0]['dn'];
1313               
1314                if (!@ldap_delete($this->ldap, $dn))
1315                {
1316                        $return['status'] = false;
1317                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
1318                }
1319               
1320                return $return;
1321        }
1322
1323        function check_access_to_renamed($uid)
1324        {
1325                $justthese = array("dn");
1326                $filter="(&(phpgwAccountType=u)(uid=$uid))";
1327               
1328                foreach ($this->manager_contexts as $index=>$context)
1329                {
1330                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
1331                        $entry = ldap_get_entries($this->ldap, $search);
1332                        if ($entry['count'])
1333                                return true;
1334                }
1335            return false;
1336        }
1337       
1338        function rename_uid($uid, $new_uid)
1339        {
1340                $return['status'] = true;
1341               
1342                $justthese = array("dn");
1343                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1344                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1345            $entry = ldap_get_entries($this->ldap, $search);
1346                $dn = $entry[0]['dn'];
1347               
1348                $explode_dn = ldap_explode_dn($dn, 0);
1349                $rdn = "uid=" . $new_uid;
1350
1351                $parent = array();
1352                for ($j=1; $j<(count($explode_dn)-1); $j++)
1353                        $parent[] = $explode_dn[$j];
1354                $parent = implode(",", $parent);
1355               
1356                $return['new_dn'] = $rdn . ',' . $parent;
1357                       
1358                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
1359                {
1360                        $return['status'] = false;
1361                        $return['msg'] .= 'Erro em ldap_funcitons->rename_uid: ' . ldap_error($this->ldap);
1362                }
1363               
1364                //Grupos
1365                $justthese = array("dn");
1366                $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";
1367                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1368            $entry = ldap_get_entries($this->ldap, $search);
1369        $array_mod_add['memberUid'] = $new_uid;
1370        $array_mod_del['memberUid'] = $uid;
1371
1372            for ($i=0; $i<=$entry['count']; $i++)
1373            {
1374                $dn = $entry[$i]['dn'];
1375                @ldap_mod_add ( $this->ldap, $dn,  $array_mod_add);
1376                @ldap_mod_del ( $this->ldap, $dn,  $array_mod_del);
1377            }
1378                return $return;
1379        }
1380
1381        function rename_cn($cn, $new_cn)
1382        {
1383                $return['status'] = true;
1384               
1385                $justthese = array("dn");
1386                $filter="(&(phpgwAccountType=g)(uid=".$cn."))";
1387                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1388            $entry = ldap_get_entries($this->ldap, $search);
1389                $dn = $entry[0]['dn'];
1390               
1391                $explode_dn = ldap_explode_dn($dn, 0);
1392                $rdn = "cn=" . $new_cn;
1393
1394                $parent = array();
1395                for ($j=1; $j<(count($explode_dn)-1); $j++)
1396                        $parent[] = $explode_dn[$j];
1397                $parent = implode(",", $parent);
1398               
1399                $return['new_dn'] = $rdn . ',' . $parent;
1400                       
1401                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
1402                {
1403                        $return['status'] = false;
1404                }
1405               
1406                return $return;
1407        }
1408       
1409        function exist_sambadomains($contexts, $sambaDomainName)
1410        {
1411                $justthese = array("dn");
1412                $filter="(&(objectClass=sambaDomain)(sambaDomainName=$sambaDomainName))";
1413               
1414                foreach ($contexts as $index=>$context)
1415                {
1416                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
1417                    $entry = ldap_get_entries($this->ldap, $search);
1418           
1419                        if ($entry['count'])
1420                                return true;
1421                }
1422                return false;
1423        }
1424       
1425        // Primeiro nilvel de organização.
1426        function exist_sambadomains_in_context($params)
1427        {
1428                $dn = $GLOBALS['phpgw_info']['server']['ldap_context'];
1429                $array_dn = ldap_explode_dn ( $dn, 0 );
1430               
1431                $context = $params['context'];
1432                $array_context = ldap_explode_dn ( $context, 0 );
1433               
1434                // Pego o setor no caso do contexto ser um sub-setor.
1435                if (($array_dn['count']+1) < ($array_context['count']))
1436                {
1437                        // inverto o array_dn para poder retirar o count
1438                        $array_dn_reverse  = array_reverse ( $array_dn, false );
1439                       
1440                        //retiro o count
1441                        array_pop($array_dn_reverse);
1442                       
1443                        //incluo o setor no dn
1444                        array_push ( $array_dn_reverse,  $array_context[ $array_context['count'] - 1 - $array_dn['count']]);
1445                       
1446                        // Volto a ordem natural
1447                        $array_dn  = array_reverse ( $array_dn_reverse, false );
1448                       
1449                        // Implodo
1450                        $context = implode ( ",", $array_dn );
1451                }
1452               
1453                $justthese = array("dn","sambaDomainName");
1454                $filter="(objectClass=sambaDomain)";
1455                $search = ldap_list($this->ldap, $context, $filter, $justthese);
1456            $entry = ldap_get_entries($this->ldap, $search);
1457           
1458            for ($i=0; $i<$entry['count']; $i++)
1459            {
1460                        $return['sambaDomains'][$i] = $entry[$i]['sambadomainname'][0];
1461            }
1462           
1463                if ($entry['count'])
1464                        $return['status'] = true;
1465                else
1466                        $return['status'] = false;
1467                       
1468                return $return;
1469        }
1470       
1471        function add_sambadomain($sambadomainname, $sambasid, $context)
1472        {
1473                $result = array();
1474               
1475                $dn                                                             = "sambaDomainName=$sambadomainname,$context";
1476                $entry['sambaSID']                                      = $sambasid;
1477                $entry['objectClass']                           = 'sambaDomain';
1478                $entry['sambaAlgorithmicRidBase']       = '1000';
1479                $entry['sambaDomainName']                       = $sambadomainname;
1480               
1481                if (!@ldap_add ( $this->ldap, $dn, $entry ))
1482                {
1483                        $return['status'] = false;
1484                        $return['msg'] = "Erro na funcao ldap_functions->add_sambadomain ($dn).\nRetorno do servidor: " . ldap_error($this->ldap);
1485                }
1486                else
1487                        $return['status'] = true;
1488               
1489                return $return;
1490        }
1491       
1492        function delete_sambadomain($sambadomainname)
1493        {
1494                $return['status'] = true;
1495                $filter="(sambaDomainName=$sambadomainname)";
1496                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter);
1497            $entry = ldap_get_entries($this->ldap, $search);
1498         
1499                if ($entry['count'] != 0)
1500            {
1501                        $dn = $entry[0]['dn'];
1502                       
1503                        if (!@ldap_delete($this->ldap, $dn))
1504                        {
1505                                $return['status'] = false;
1506                                $return['msg'] .= "Erro em ldap_funcitons->delete_sambadomain ($sambadomainname).\nRetorno do servidor: " . ldap_error($this->ldap);
1507                        }
1508            }
1509           
1510                return $return;
1511        }
1512}
1513?>
Note: See TracBrowser for help on using the repository browser.