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

Revision 2, 28.9 KB checked in by niltonneto, 17 years ago (diff)

Removida todas as tags usadas pelo CVS ($Id, $Source).
Primeira versão no CVS externo.

  • 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');
5
6class ldap_functions
7{
8        var $ldap;
9        var $current_config;
10       
11        function ldap_functions(){
12                $GLOBALS['phpgw_info']['server'] = $_SESSION['phpgw_info']['expresso']['server'];
13                $this->current_config = $_SESSION['phpgw_info']['expresso']['expressoAdmin'];
14                $common = new common();
15                $this->ldap = $common->ldapConnect();
16        }
17       
18        function validate_fields($params)
19        {
20                $params = unserialize($params['attributes']);
21                $type = $params['type'];
22                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
23                $uid = $params['uid'];
24                $mail = $params['mail'];
25                $mailalternateaddress = $params['mailalternateaddress'];
26
27                $result['status'] = true;
28               
29                if (($type == 'create_user') || ($type == 'rename_user'))
30                {
31                        // UID
32                        $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";
33                        $justthese = array("uid");
34                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
35                        $count_entries = ldap_count_entries($this->ldap,$search);
36                        if ($count_entries > 0)
37                        {
38                                $result['status'] = false;
39                                $result['msg'] = 'LOGIN já esta sendo usado.';
40                                return $result;
41                        }
42
43                        // GRUPOS
44                        $filter = "(&(phpgwAccountType=g)(cn=$uid))";
45                        $justthese = array("cn");
46                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
47                        $count_entries = ldap_count_entries($this->ldap,$search);
48                        if ($count_entries > 0)
49                        {
50                                $result['status'] = false;
51                                $result['msg'] = 'LOGIN do usuário já esta sendo usado por um grupo.';
52                                return $result;
53                        }
54               
55                        // UID em outras organizações
56                        //Quando tento retirar as organizações pelo expressoAdmin dá este erro.
57                        $filter = "(ou=*)";
58                        $justthese = array("ou");
59                        $search = ldap_list($this->ldap, $context, $filter, $justthese);
60                        $entries = ldap_get_entries($this->ldap,$search);
61                        foreach ($entries as $index=>$org)
62                        {
63                                $organization = $org['ou'][0];
64                                $organization = strtolower($organization);
65                               
66                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$organization-$uid))";
67                                $justthese = array("uid");
68                                $search = ldap_search($this->ldap, $context, $filter, $justthese);
69                                $count_entries = ldap_count_entries($this->ldap,$search);
70                                if ($count_entries > 0)
71                                {
72                                        $result['status'] = false;
73                                        $result['msg'] = 'LOGIN já esta sendo usado por outro usuário em outra organização.';
74                                        return $result;
75                                }
76                        }
77                }
78               
79                if ($type == 'rename_user')
80                {
81                        return $result;
82                }
83               
84                // MAIL
85                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
86                $justthese = array("mail", "uid");
87                $search = ldap_search($this->ldap, $context, $filter, $justthese);
88                $entries = ldap_get_entries($this->ldap,$search);
89                if ($entries['count'] == 1){
90                        if ($entries[0]['uid'][0] != $uid){
91                                $result['status'] = false;
92                                $result['msg'] = 'E-MAIL está sendo usado por 1 usuário: ' . $entries[0]['uid'][0];
93                                //ldap_close($this->ldap);
94                                return $result;
95                        }
96                }
97                else if ($entries['count'] > 1){
98                        $result['status'] = false;
99                        $result['msg'] = 'E-MAIL está sendo usado por de 2 ou mais usuários.';
100                        //ldap_close($this->ldap);
101                        return $result;
102                }
103               
104                // MAILAlternateAddress
105                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mailalternateaddress)(mailalternateaddress=$mailalternateaddress)))";
106                $justthese = array("mail", "uid");
107                $search = ldap_search($this->ldap, $context, $filter, $justthese);
108                $entries = ldap_get_entries($this->ldap,$search);
109                if ($entries['count'] == 1){
110                        if ($entries[0]['uid'][0] != $uid){
111                                $result['status'] = false;
112                                $result['msg'] = "E-MAIL alternativo está sendo usado por 1 usuário: " . $entries[0]['uid'][0];
113                                //ldap_close($this->ldap);
114                                return $result;
115                        }
116                }
117                else if ($entries['count'] > 1){
118                        $result['status'] = false;
119                        $result['msg'] = 'E-MAIL alternativo está sendo usado por 2 ou mais usuários.';
120                        return $result;
121                }
122
123                return $result;
124        }
125       
126        function validate_fields_group($params)
127        {
128                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
129                $cn = $params['cn'];
130                $result['status'] = true;
131               
132                // CN
133                $filter = "(&(phpgwAccountType=g)(cn=$cn))";
134                $justthese = array("cn");
135                $search = ldap_search($this->ldap, $context, $filter, $justthese);
136                $count_entries = ldap_count_entries($this->ldap,$search);
137                if ($count_entries > 0)
138                {
139                        $result['status'] = false;
140                        $result['msg'] = 'NOME do grupo já está sendo usado.';
141                        return $result;
142                }
143               
144                // UID
145                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$cn))";
146                $justthese = array("uid");
147                $search = ldap_search($this->ldap, $context, $filter, $justthese);
148                $count_entries = ldap_count_entries($this->ldap,$search);
149                if ($count_entries > 0)
150                {
151                        $result['status'] = false;
152                        $result['msg'] = 'NOME do grupo já esta sendo usado por um usuário.';
153                        return $result;
154                }
155               
156                return $result;
157        }
158       
159        function validate_fields_maillist($params)
160        {
161                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
162                $uid = $params['uid'];
163                $mail = $params['mail'];
164                $result['status'] = true;
165               
166                // UID
167                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
168                $justthese = array("uid");
169                $search = ldap_search($this->ldap, $context, $filter, $justthese);
170                $count_entries = ldap_count_entries($this->ldap,$search);
171                if ($count_entries > 0)
172                {
173                        $result['status'] = false;
174                        $result['msg'] = 'LOGIN da lista já está sendo usado.';
175                        return $result;
176                }
177               
178                // MAIL
179                /*
180                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
181                $justthese = array("mail");
182                $search = ldap_search($this->ldap, $context, $filter, $justthese);
183                $count_entries = ldap_count_entries($this->ldap,$search);
184                if ($count_entries > 0)
185                {
186                        $result['status'] = false;
187                        $result['msg'] = 'E-MAIL da lista já está sendo usado.';
188                        return $result;
189                }*/
190               
191                return $result;
192        }
193
194        //Busca usuários de um contexto e já retorna as options do select;
195        function get_available_users($params)
196        {
197                $context = $params['context'];
198                $recursive = $params['recursive'];
199                $justthese = array("cn", "uidNumber");
200                $filter="(phpgwAccountType=u)";
201               
202                if ($recursive == 'true')
203                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
204                else
205                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
206       
207        $entries = ldap_get_entries($this->ldap, $groups_list);
208       
209                for ($i=0; $i<$entries["count"]; $i++){
210                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
211                }
212                       
213                if (count($u_tmp))
214                        natcasesort($u_tmp);
215
216                $i = 0;
217                $users = array();
218                       
219                if (count($u_tmp))
220                {
221                        foreach ($u_tmp as $uidnumber => $cn)
222                        {
223                                $options .= "<option value=$uidnumber>$cn</option>";
224                        }
225                        unset($u_tmp);
226                }
227
228        return $options;
229        }
230
231        //Busca usuários de um contexto e já retorna as options do select;
232        function get_available_users_and_maillist($params)
233        {
234                $context = $params['context'];
235                $recursive = $params['recursive'];
236                $justthese = array("cn", "uidNumber");
237                $filter="(|(phpgwAccountType=u)(phpgwAccountType=l))";
238               
239                if ($recursive == 'true')
240                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
241                else
242                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
243       
244        $entries = ldap_get_entries($this->ldap, $groups_list);
245       
246                for ($i=0; $i<$entries["count"]; $i++){
247                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
248                }
249                       
250                if (count($u_tmp))
251                        natcasesort($u_tmp);
252
253                $i = 0;
254                $users = array();
255                       
256                if (count($u_tmp))
257                {
258                        foreach ($u_tmp as $uidnumber => $cn)
259                        {
260                                $options .= "<option value=$uidnumber>$cn</option>";
261                        }
262                        unset($u_tmp);
263                }
264
265        return $options;
266        }
267
268        function get_available_groups($params)
269        {
270                $context = $params['context'];
271                $justthese = array("cn", "gidNumber");
272        $groups_list=ldap_list($this->ldap, $context, ("(phpgwAccountType=g)"), $justthese);
273        ldap_sort($this->ldap, $groups_list, "cn");
274       
275        $entries = ldap_get_entries($this->ldap, $groups_list);
276        return $entries;               
277        }
278       
279        function get_available_maillists($params)
280        {
281                $context = $params['context'];
282                $justthese = array("uid","mail","uidNumber");
283        $maillists=ldap_list($this->ldap, $context, ("(phpgwAccountType=l)"), $justthese);
284        ldap_sort($this->ldap, $maillists, "uid");
285       
286        $entries = ldap_get_entries($this->ldap, $maillists);
287        return $entries;               
288        }
289       
290        function ldap_add_entry($dn, $entry)
291        {
292                $result = array();
293                if (!@ldap_add ( $this->ldap, $dn, $entry ))
294                {
295                        $result['status'] = false;
296                        $result['msg'] = "Erro na funcao ldap_functions->ldap_add_entry ($dn).\nRetorno do servidor:" . ldap_error($this->ldap);
297                }
298                else
299                        $result['status'] = true;
300               
301                return $result;
302        }
303       
304        function ldap_save_photo($dn, $pathphoto, $photo_exist=false)
305        {
306                $fd = fopen($pathphoto, "r");
307                $fsize = filesize($pathphoto);
308                $jpegStr = fread($fd, $fsize);
309                fclose ($fd);
310                $attrs['jpegPhoto'] = $jpegStr;
311                       
312                if ($photo_exist)
313                        $res = @ldap_mod_replace($this->ldap, $dn, $attrs);
314                else
315                        $res = @ldap_mod_add($this->ldap, $dn, $attrs);
316                       
317                if ($res)
318                {
319                        $result['status'] = true;
320                }
321                else
322                {
323                        $result['status'] = false;
324                        $result['msg'] = "Erro na funcao ldap_functions->ldap_save_photo ($dn).\\nRetorno do servidor:" . ldap_error($this->ldap);
325                }
326               
327                return $result;
328        }
329       
330        function ldap_remove_photo($dn)
331        {
332                $attrs['jpegPhoto'] = array();
333                $res = ldap_mod_del($this->ldap, $dn, $attrs);
334               
335                if ($res)
336                {
337                        $result['status'] = true;
338                }
339                else
340                {
341                        $result['status'] = false;
342                        $result['msg'] = "Erro na funcao ldap_functions->ldap_remove_photo ($dn).\\nRetorno do servidor:" . ldap_error($this->ldap);
343                }
344               
345                return $result;
346        }       
347       
348        // Pode receber tanto um único memberUid quanto um array de memberUid's
349        function add_user2group($gidNumber, $memberUid)
350        {
351                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
352                $justthese = array("dn");
353                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
354                $entry = ldap_get_entries($this->ldap, $search);
355                $group_dn = $entry[0]['dn'];
356                $attrs['memberUid'] = $memberUid;
357               
358                /*echo 'usuarios recebidos para adicao no ldap';
359                echo '<pre>';
360                print_r($memberUid);*/
361               
362                $res = @ldap_mod_add($this->ldap, $group_dn, $attrs);
363               
364                if ($res)
365                {
366                        $result['status'] = true;
367                }
368                else
369                {
370                        $result['status'] = false;
371                        $result['msg'] = "Erro na funcao ldap_functions->add_user2group ($memberUid).\\nRetorno do servidor:" . ldap_error($this->ldap);
372                }
373                return $result;
374        }
375       
376        function remove_user2group($gidNumber, $memberUid)
377        {
378                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
379                $justthese = array("dn");
380                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
381                $entry = ldap_get_entries($this->ldap, $search);
382                $group_dn = $entry[0]['dn'];
383                $attrs['memberUid'] = $memberUid;
384                $res = @ldap_mod_del($this->ldap, $group_dn, $attrs);
385               
386                /*echo 'usuarios recebidos para remocao no ldap';
387                echo '<pre>';
388                print_r($memberUid);*/
389               
390                if ($res)
391                {
392                        $result['status'] = true;
393                }
394                else
395                {
396                        $result['status'] = false;
397                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2group ($memberUid).\\nRetorno do servidor:" . ldap_error($this->ldap);
398                }
399                return $result;
400        }
401       
402        function add_user2maillist($uidNumber, $mail)
403        {
404                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
405                $justthese = array("dn");
406                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
407                $entry = ldap_get_entries($this->ldap, $search);
408                $group_dn = $entry[0]['dn'];
409                $attrs['mailForwardingAddress'] = $mail;
410                $res = @ldap_mod_add($this->ldap, $group_dn, $attrs);
411               
412                if ($res)
413                {
414                        $result['status'] = true;
415                }
416                else
417                {
418                        $result['status'] = false;
419                        $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist ($mail).\\nRetorno do servidor:" . ldap_error($this->ldap);
420                }
421                return $result;
422        }
423        function remove_user2maillist($uidNumber, $mail)
424        {
425                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
426                $justthese = array("dn");
427                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
428                $entry = ldap_get_entries($this->ldap, $search);
429                $group_dn = $entry[0]['dn'];
430                $attrs['mailForwardingAddress'] = $mail;
431                $res = @ldap_mod_del($this->ldap, $group_dn, $attrs);
432               
433                if ($res)
434                {
435                        $result['status'] = true;
436                }
437                else
438                {
439                        $result['status'] = false;
440                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist ($mail).\\nRetorno do servidor:" . ldap_error($this->ldap);
441                }
442                return $result;
443        }
444        function replace_user2maillists($new_mail, $old_mail)
445        {
446                $filter = "(&(phpgwAccountType=l)(mailforwardingaddress=$old_mail))";
447                $justthese = array("dn");
448                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
449                $entries = ldap_get_entries($this->ldap, $search);
450                $result['status'] = true;
451                for ($i=0; $i<$entries['count']; $i++)
452                {
453                        $attrs['mailforwardingaddress'] = $old_mail;
454                        $res1 = @ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs);
455                        $attrs['mailforwardingaddress'] = $new_mail;
456                        $res2 = @ldap_mod_add($this->ldap, $entries[$i]['dn'], $attrs);
457               
458                        if ((!$res1) || (!$res2))
459                        {
460                                $result['status'] = false;
461                                $result['msg'] = "Erro na funcao ldap_functions->replace_user2maillists ($old_mail).\\nRetorno do servidor:" . ldap_error($this->ldap);
462                        }
463                }
464               
465                return $result;
466        }
467       
468        function get_user_info($uidnumber, $context)
469        {
470                $filter="(&(phpgwAccountType=u)(uidNumber=".$uidnumber."))";
471                $search = ldap_search($this->ldap, $context, $filter);
472                $entry = ldap_get_entries($this->ldap, $search);
473
474                //Pega o dn do setor do usuario.
475                $entry[0]['dn'] = strtolower($entry[0]['dn']);
476                $sector_dn_array = explode(",", $entry[0]['dn']);
477                for($i=1; $i<count($sector_dn_array); $i++)
478                        $sector_dn .= $sector_dn_array[$i] . ',';
479                //Retira ultimo pipe.
480                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
481               
482                $result['context']                              = $sector_dn;
483                $result['uid']                                  = $entry[0]['uid'][0];
484                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
485                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
486                $result['departmentnumber']             = $entry[0]['departmentnumber'][0];
487                $result['givenname']                    = $entry[0]['givenname'][0];
488                $result['sn']                                   = $entry[0]['sn'][0];
489                $result['telephonenumber']              = $entry[0]['telephonenumber'][0];
490                $result['phpgwaccountstatus']   = $entry[0]['phpgwaccountstatus'][0];
491                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
492                $result['accountstatus']                = $entry[0]['accountstatus'][0];
493                $result['mail']                                 = $entry[0]['mail'][0];
494                $result['mailalternateaddress'] = $entry[0]['mailalternateaddress'][0];
495                $result['mailforwardingaddress']= $entry[0]['mailforwardingaddress'][0];
496                $result['deliverymode']                 = $entry[0]['deliverymode'][0];
497
498                //Photo
499                if ($entry[0]['jpegphoto']['count'] == 1)
500                        $result['photo_exist'] = 'true';
501               
502                // Samba
503                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
504                {
505                        if ($entry[0]['objectclass'][$i] == 'sambaSamAccount')
506                                $result['sambaUser'] = true;
507                }               
508                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($result['sambaUser']))
509                {
510                        $result['sambaaccflags'] = $entry[0]['sambaacctflags'][0];
511                        $result['sambalogonscript'] = $entry[0]['sambalogonscript'][0];
512                        $result['homedirectory'] = $entry[0]['homedirectory'][0];
513                }
514               
515                // MailLists
516                $justthese = array("uid","mail","uidnumber");
517                $filter="(&(phpgwAccountType=l)(mailforwardingaddress=".$result['mail']."))";
518                $search = ldap_search($this->ldap, $context, $filter, $justthese);
519        ldap_sort($this->ldap, $search, "uid");
520        $entries = ldap_get_entries($this->ldap, $search);
521        for ($i=0; $i<$entries['count']; $i++)
522        {
523                $result['maillists_info'][$i]['uidnumber'] = $entries[$i]['uidnumber'][0];
524                $result['maillists_info'][$i]['uid'] = $entries[$i]['uid'][0];
525                $result['maillists_info'][$i]['mail'] = $entries[$i]['mail'][0];
526                $result['maillists'][] = $entries[$i]['uidnumber'][0];
527        }
528       
529                return $result;         
530        }
531       
532        function get_group_info($gidnumber, $context)
533        {
534                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
535                $search = ldap_search($this->ldap, $context, $filter);
536                $entry = ldap_get_entries($this->ldap, $search);
537
538                //Pega o dn do setor do grupo.
539                $entry[0]['dn'] = strtolower($entry[0]['dn']);
540                $sector_dn_array = explode(",", $entry[0]['dn']);
541                for($i=1; $i<count($sector_dn_array); $i++)
542                        $sector_dn .= $sector_dn_array[$i] . ',';
543                //Retira ultimo pipe.
544                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
545               
546                $result['context']                              = $sector_dn;
547                $result['cn']                                   = $entry[0]['cn'][0];
548                $result['description']                  = $entry[0]['description'][0];
549                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
550               
551                //MemberUid
552                for ($i=0; $i<$entry[0]['memberuid']['count']; $i++)
553                {
554                        $justthese = array("cn","uid","uidnumber");
555                        $filter="(&(phpgwAccountType=u)(uid=".$entry[0]['memberuid'][$i]."))";
556                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
557                        $user_entry = ldap_get_entries($this->ldap, $search);
558
559                        if ($user_entry[0]['uid'][0] == '')
560                        {
561                                $result['memberuid_info'][$i]['cn'] = '0-UID NAO EXISTE, corrigir manualmente: ' . $entry[0]['memberuid'][$i];
562                                $result['memberuid_info'][$i]['uid'] = $entry[0]['memberuid'][$i];
563                                $result['memberuid_info'][$i]['uidnumber'] = $entry[0]['memberuid'][$i];
564                        }
565                        else
566                        {
567                                $result['memberuid_info'][$i]['cn'] = $user_entry[0]['cn'][0];
568                                $result['memberuid_info'][$i]['uid'] = $user_entry[0]['uid'][0];
569                                $result['memberuid_info'][$i]['uidnumber'] = $user_entry[0]['uidnumber'][0];
570                        }
571                }
572               
573                // Samba
574                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
575                {
576                        if ($entry[0]['objectclass'][$i] == 'sambaGroupMapping')
577                                $result['sambaGroup'] = true;
578                }
579                return $result;
580        }       
581       
582        function get_maillist_info($uidnumber, $context)
583        {
584                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
585                $search = ldap_search($this->ldap, $context, $filter);
586                $entry = ldap_get_entries($this->ldap, $search);
587
588                //Pega o dn do setor do usuario.
589                $entry[0]['dn'] = strtolower($entry[0]['dn']);
590                $sector_dn_array = explode(",", $entry[0]['dn']);
591                for($i=1; $i<count($sector_dn_array); $i++)
592                        $sector_dn .= $sector_dn_array[$i] . ',';
593                //Retira ultimo pipe.
594                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
595               
596                $result['context']                              = $sector_dn;
597                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
598                $result['uid']                                  = $entry[0]['uid'][0];
599                $result['cn']                                   = $entry[0]['cn'][0];
600                $result['mail']                                 = $entry[0]['mail'][0];
601                $result['mail']                                 = $entry[0]['mail'][0];
602                $result['accountStatus']                = $entry[0]['accountstatus'][0];
603                $result['phpgwAccountVisible']  = $entry[0]['phpgwaccountvisible'][0];
604               
605                //Members
606                for ($i=0; $i<$entry[0]['mailforwardingaddress']['count']; $i++)
607                {
608                        $justthese = array("cn", "uidnumber", "uid");
609                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(mail=".$entry[0]['mailforwardingaddress'][$i]."))";
610                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
611                        $user_entry = ldap_get_entries($this->ldap, $search);
612                       
613                        if ($user_entry['count'] != 0)
614                        {
615                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['uid'] = $user_entry[0]['uid'][0];
616                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['cn'] = $user_entry[0]['cn'][0];
617                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['mailforwardingaddress'] = $entry[0]['mailforwardingaddress'][$i];
618                                $result['members'][] = $user_entry[0]['uidnumber'][0];
619                        }
620                        else
621                        {
622                                $result['members_info'][$entry[0]['mailforwardingaddress'][$i]]['uid'] = $entry[0]['mailforwardingaddress'][$i];
623                                $result['members_info'][$entry[0]['mailforwardingaddress'][$i]]['cn'] = 'E-Mail nao encontrado (' . $entry[0]['mailforwardingaddress'][$i] . ')';
624                                $result['members_info'][$entry[0]['mailforwardingaddress'][$i]]['mailforwardingaddress'] = $entry[0]['mailforwardingaddress'][$i];
625                                $result['members'][] = $entry[0]['mailforwardingaddress'][$i];
626                        }
627                }
628               
629                return $result;
630        }       
631
632        function gidnumbers2cn($gidnumbers, $context)
633        {
634                if (count($gidnumbers))
635                {
636                        $justthese = array("cn");
637                        $i = 0;
638                        foreach ($gidnumbers as $gidnumber)
639                        {
640                                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
641                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
642                               
643                                $entry = ldap_get_entries($this->ldap, $search);
644                                $result['groups_info'][$i]['cn'] = $entry[0]['cn'][0];
645                                $result['groups_info'][$i]['gidnumber'] = $gidnumber;
646                               
647                                if (!strpos(strtolower($entry[0]['dn']), strtolower($context)))
648                                        $result['groups_info'][$i]['group_disabled'] = 'true';
649                                else
650                                        $result['groups_info'][$i]['group_disabled'] = 'false';
651                               
652                                $i++;
653                        }
654                }
655                return $result;
656        }
657
658        function uidnumber2uid($uidnumber)
659        {
660                $justthese = array("uid");
661                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
662                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
663                $entry = ldap_get_entries($this->ldap, $search);
664                return $entry[0]['uid'][0];
665        }
666
667        function uidnumber2mail($uidnumber)
668        {
669                $justthese = array("mail");
670                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
671                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
672                $entry = ldap_get_entries($this->ldap, $search);
673                return $entry[0]['mail'][0];
674        }
675
676       
677        function change_user_context($dn, $newrdn, $newparent)
678        {
679                if (!ldap_rename ( $this->ldap, $dn, $newrdn, $newparent, true ))
680                {
681                        $return['status'] = false;
682                        $return['msg'] = 'Erro em ldap_funcitons->change_user_context: ' . ldap_error($this->ldap);
683                }
684                else
685                        $return['status'] = true;
686               
687                return $return;
688        }
689       
690        function replace_user_attributes($dn, $ldap_mod_replace)
691        {
692                if (!@ldap_mod_replace ( $this->ldap, $dn, $ldap_mod_replace ))
693                {
694                        $return['status'] = false;
695                        $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldap);
696                }
697                else
698                        $return['status'] = true;
699               
700                return $return;
701        }
702       
703        function add_user_attributes($dn, $ldap_add)
704        {
705                if (!@ldap_mod_add ( $this->ldap, $dn, $ldap_add ))
706                {
707                        $return['status'] = false;
708                        $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldap);
709                }
710                else
711                        $return['status'] = true;
712               
713                return $return;
714        }
715       
716        function remove_user_attributes($dn, $ldap_remove)
717        {
718                if (!@ldap_mod_del ( $this->ldap, $dn, $ldap_remove ))
719                {
720                        $return['status'] = false;
721                        $return['msg'] = 'Erro em ldap_funcitons->remove_user_attributes: ' . ldap_error($this->ldap);
722                }
723                else
724                        $return['status'] = true;
725               
726                return $return;
727        }
728       
729        function set_user_password($uid, $password)
730        {
731                $justthese = array("userPassword");
732                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
733                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
734            $entry = ldap_get_entries($this->ldap, $search);
735                $dn = $entry[0]['dn'];
736                $userPassword = $entry[0]['userpassword'][0];
737                $ldap_mod_replace['userPassword'] = $password;
738                $this->replace_user_attributes($dn, $ldap_mod_replace);
739                return $userPassword;
740        }
741       
742        function delete_user($user_info)
743        {
744                $return['status'] = true;
745               
746                // GROUPS
747                $attrs = array();
748                $attrs['memberUid'] = $user_info['uid'];
749                if (count($user_info['groups_info']))
750                {
751                        foreach ($user_info['groups_info'] as $group_info)
752                        {
753                                $gidnumber = $group_info['gidnumber'];
754                                $justthese = array("dn");
755                                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
756                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
757                        $entry = ldap_get_entries($this->ldap, $search);
758                                $dn = $entry[0]['dn'];
759                       
760                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
761                                {
762                                        $return['status'] = false;
763                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap);
764                                }
765                        }
766                }
767                       
768                // MAILLISTS
769                $attrs = array();
770                $attrs['mailForwardingAddress'] = $user_info['mail'];
771                if (count($user_info['maillists_info']))
772                {
773                        foreach ($user_info['maillists_info'] as $maillists_info)
774                        {
775                                $uidnumber = $maillists_info['uidnumber'];
776                                $justthese = array("dn");
777                                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
778                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
779                        $entry = ldap_get_entries($this->ldap, $search);
780                                $dn = $entry[0]['dn'];
781                       
782                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
783                                {
784                                        $return['status'] = false;
785                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
786                                }
787                        }
788                }
789                       
790                // UID
791                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
792                if (!@ldap_delete($this->ldap, $dn))
793                {
794                        $return['status'] = false;
795                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
796                }
797               
798                return $return;
799        }
800       
801        function delete_maillist($uidnumber)
802        {
803                $return['status'] = true;
804               
805                $justthese = array("dn");
806                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
807                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
808                $entry = ldap_get_entries($this->ldap, $search);
809                $dn = $entry[0]['dn'];
810               
811                if (!@ldap_delete($this->ldap, $dn))
812                {
813                        $return['status'] = false;
814                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
815                }
816               
817                return $return;
818        }
819
820        function delete_group($gidnumber)
821        {
822                $return['status'] = true;
823               
824                $justthese = array("dn");
825                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
826                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
827                $entry = ldap_get_entries($this->ldap, $search);
828                $dn = $entry[0]['dn'];
829               
830                if (!@ldap_delete($this->ldap, $dn))
831                {
832                        $return['status'] = false;
833                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
834                }
835               
836                return $return;
837        }
838
839       
840        function rename_uid($uid, $new_uid)
841        {
842                $return['status'] = true;
843               
844                $justthese = array("dn");
845                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
846                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
847            $entry = ldap_get_entries($this->ldap, $search);
848                $dn = $entry[0]['dn'];
849               
850                $explode_dn = ldap_explode_dn($dn, 0);
851                $rdn = "uid=" . $new_uid;
852
853                $parent = array();
854                for ($j=1; $j<(count($explode_dn)-1); $j++)
855                        $parent[] = $explode_dn[$j];
856                $parent = implode(",", $parent);
857               
858                $return['new_dn'] = $rdn . ',' . $parent;
859                       
860                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
861                {
862                        $return['status'] = false;
863                        $return['msg'] .= 'Erro em ldap_funcitons->rename_uid: ' . ldap_error($this->ldap);
864                }
865               
866                //Grupos
867                $justthese = array("dn");
868                $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";
869                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
870            $entry = ldap_get_entries($this->ldap, $search);
871        $array_mod_add['memberUid'] = $new_uid;
872        $array_mod_del['memberUid'] = $uid;
873
874            for ($i=0; $i<=$entry['count']; $i++)
875            {
876                $dn = $entry[$i]['dn'];
877                @ldap_mod_add ( $this->ldap, $dn,  $array_mod_add);
878                @ldap_mod_del ( $this->ldap, $dn,  $array_mod_del);
879            }
880                return $return;
881        }
882
883        function rename_cn($cn, $new_cn)
884        {
885                $return['status'] = true;
886               
887                $justthese = array("dn");
888                $filter="(&(phpgwAccountType=g)(uid=".$cn."))";
889                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
890            $entry = ldap_get_entries($this->ldap, $search);
891                $dn = $entry[0]['dn'];
892               
893                $explode_dn = ldap_explode_dn($dn, 0);
894                $rdn = "cn=" . $new_cn;
895
896                $parent = array();
897                for ($j=1; $j<(count($explode_dn)-1); $j++)
898                        $parent[] = $explode_dn[$j];
899                $parent = implode(",", $parent);
900               
901                $return['new_dn'] = $rdn . ',' . $parent;
902                       
903                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
904                {
905                        $return['status'] = false;
906                }
907               
908                return $return;
909        }
910
911        function rename_departmentnumber($old_dp, $new_dp)
912        {
913               
914                $return['status'] = true;
915               
916               
917                $justthese = array("dn");
918                $filter="(&(phpgwAccountType=u)(departmentnumber=".$old_dp."))";
919                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
920            $entry = ldap_get_entries($this->ldap, $search);
921               
922            for ($i=0; $i<=$entry['count']; $i++)
923            {
924                $dn = strtolower($entry[$i]['dn']);
925                $ldap_mod_replace = array();
926                $ldap_mod_replace['departmentnumber'] = $new_dp;
927                @ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace);
928                        /*if (!@ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace))
929                        {
930                                $return['status'] = false;
931                                $return['msg'] .= 'Erro em ldap_funcitons->rename_departmentnumber: ' . ldap_error($this->ldap);
932                        }*/
933            }
934                return $return;
935        }
936}
937?>
Note: See TracBrowser for help on using the repository browser.