source: trunk/listAdmin/inc/class.ldap_functions.inc.php @ 7673

Revision 7673, 53.6 KB checked in by douglasz, 11 years ago (diff)

Ticket #3236 - Correcoes para Performance: Function Within Loop Declaration.

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