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

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