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

Revision 81, 48.1 KB checked in by niltonneto, 17 years ago (diff)

Atualização do CVS Interno com CVS Externo.
Modificações, vide changelog no arquivo changelog.txt ou no site do Expresso.

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