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

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