source: contrib/listAdmin/inc/class.ldap_functions.inc.php @ 3312

Revision 3312, 53.3 KB checked in by rafaelraymundo, 14 years ago (diff)

Ticket #1174 - Disponibilização do módulo de Listas(Mailman)

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                for($i=1; $i<count($sector_dn_array); $i++)
749                        $sector_dn .= $sector_dn_array[$i] . ',';
750                //Retira ultimo pipe.
751                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
752       
753            $result['dn']               = $entry[0]['dn'];
754            $result['ou']               = $entry[0]['ou'][0];
755                $result['context']                      = $sector_dn;
756                $result['uid']                          = $entry[0]['uid'][0];
757                $result['uidnumber']            = $entry[0]['uidnumber'][0];
758                $result['gidnumber']            = $entry[0]['gidnumber'][0];
759                $result['departmentnumber']     = $entry[0]['departmentnumber'][0];
760                $result['givenname']            = $entry[0]['givenname'][0];
761                $result['sn']                           = $entry[0]['sn'][0];
762                $result['telephonenumber']      = $entry[0]['telephonenumber'][0];
763                $result['mobile']       = $entry[0]['mobile'][0];
764                $result['phpgwaccountstatus']   = $entry[0]['phpgwaccountstatus'][0];
765                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
766                $result['accountstatus']        = $entry[0]['accountstatus'][0];
767                $result['mail']                         = $entry[0]['mail'][0];
768                $result['defaultMemberModeration']   = $entry[0]['defaultmembermoderation'][0];
769                $result['admlista']                  = $entry[0]['admlista'][0];
770                $result['listPass']                     = $entry[0]['listPass'][0];
771                $result['mailalternateaddress'] = $entry[0]['mailalternateaddress'][0];
772                $result['mailforwardingaddress']= $entry[0]['mailforwardingaddress'][0];
773                $result['deliverymode']         = $entry[0]['deliverymode'][0];
774                $result['userPasswordRFC2617']  = $entry[0]['userpasswordrfc2617'][0];
775                $result['cn']                           = $entry[0]['cn'][0];
776                $result['phpgwaccount']         = false;
777                if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']))
778                        $result[$GLOBALS['phpgw_info']['server']['atributoexpiracao']]  = $entry[0][$GLOBALS['phpgw_info']['server']['atributoexpiracao']][0];
779                        else
780                        $result['phpgwaccountexpires'] = $entry[0]['phpgwaccountexpires'][0];
781                //objectclass phpgwaccount
782                foreach ($entry[0]['objectclass'] as $objectclass)
783                        {
784                        if  (strcasecmp($objectclass, 'phpgwaccount') == 0)
785                                $result['phpgwaccount']  = true;
786                        }
787                //Photo
788                if ($entry[0]['jpegphoto']['count'] == 1)
789                        $result['photo_exist'] = 'true';
790               
791                // Samba
792                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
793                {
794                        if ($entry[0]['objectclass'][$i] == 'sambaSamAccount')
795                                $result['sambaUser'] = true;
796                }               
797                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($result['sambaUser']))
798                {
799                        $result['sambaaccflags'] = $entry[0]['sambaacctflags'][0];
800                        $result['sambalogonscript'] = $entry[0]['sambalogonscript'][0];
801                        $result['homedirectory'] = $entry[0]['homedirectory'][0];
802                        $a_tmp = explode("-", $entry[0]['sambasid'][0]);
803                        array_pop($a_tmp);
804                        $result['sambasid'] = implode("-", $a_tmp);
805                }
806               
807                // MailLists
808                $justthese = array("uid","mail","uidnumber");
809                $filter="(&(phpgwAccountType=l)(mailforwardingaddress=".$result['mail']."))";
810                $search = ldap_search($this->ldap, $context, $filter, $justthese);
811        ldap_sort($this->ldap, $search, "uid");
812        $entries = ldap_get_entries($this->ldap, $search);
813
814        for ($i=0; $i<$entries['count']; $i++)
815        {
816                $result['maillists_info'][$i]['uidnumber'] = $entries[$i]['uidnumber'][0];
817                $result['maillists_info'][$i]['uid'] = $entries[$i]['uid'][0];
818                $result['maillists_info'][$i]['mail'] = $entries[$i]['mail'][0];
819                $result['maillists'][] = $entries[$i]['uidnumber'][0];
820        }
821       
822        // Groups
823                $justthese = array("gidnumber","cn");
824                $filter="(&(phpgwAccountType=g)(memberuid=".$result['uid']."))";
825                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
826        ldap_sort($this->ldap, $search, "cn");
827        $entries = ldap_get_entries($this->ldap, $search);
828        for ($i=0; $i<$entries['count']; $i++)
829        {
830                $result['groups_ldap'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['cn'][0];
831                $result['groups'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['gidnumber'][0];
832                $result['groups_info'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['gidnumber'][0];
833        }
834                return $result;         
835        }
836       
837        function get_group_info($gidnumber, $context)
838        {
839                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
840                $search = ldap_search($this->ldap, $context, $filter);
841                $entry = ldap_get_entries($this->ldap, $search);
842
843                //Pega o dn do setor do grupo.
844                $entry[0]['dn'] = strtolower($entry[0]['dn']);
845                $sector_dn_array = explode(",", $entry[0]['dn']);
846                for($i=1; $i<count($sector_dn_array); $i++)
847                        $sector_dn .= $sector_dn_array[$i] . ',';
848                //Retira ultimo pipe.
849                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
850               
851                $result['context']                              = $sector_dn;
852                $result['cn']                                   = $entry[0]['cn'][0];
853                $result['description']                  = $entry[0]['description'][0];
854                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
855                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
856                $result['email']                                = $entry[0]['mail'][0];
857               
858                //MemberUid
859                for ($i=0; $i<$entry[0]['memberuid']['count']; $i++)
860                {
861                        $justthese = array("cn","uid","uidnumber");
862                       
863                        // Montagem dinamica do filtro
864                        $filter="(&(phpgwAccountType=u)(|";
865                        for ($k=0; (($k<10) && ($i<$entry[0]['memberuid']['count'])); $k++)
866                        {
867                                $filter .= "(uid=".$entry[0]['memberuid'][$i].")";
868                                $i++;
869                        }
870                        $i--;
871                        $filter .= "))";
872                       
873                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
874                        $user_entry = ldap_get_entries($this->ldap, $search);
875
876                        for ($j=0; $j<$user_entry['count']; $j++)
877                        {
878                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['cn'] = $user_entry[$j]['cn'][0];
879                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['uidnumber'] = $user_entry[$j]['uidnumber'][0];
880                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['type'] = 'u';
881                        }
882                }
883               
884                // Retira o count do array
885                array_shift($entry[0]['memberuid']);
886               
887                // Checamos e-mails que nï¿œo fazem parte do expresso.
888                // Criamos um array temporario
889                $tmp_array = array();
890                foreach ($result['memberuid_info'] as $uid => $user_data)
891                {
892                        $tmp_array[] = $uid;
893                }
894
895                // Vemos a diferenï¿œa
896                $array_diff = array_diff($entry[0]['memberuid'], $tmp_array);
897               
898                // Incluimos no resultado
899                foreach ($array_diff as $index=>$uid)
900                {
901                        $result['memberuid_info'][$uid]['cn'] = $uid;
902                }
903               
904                // Samba
905                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
906                {
907                        if ($entry[0]['objectclass'][$i] == 'sambaGroupMapping')
908                                $result['sambaGroup'] = true;
909
910                        $a_tmp = explode("-", $entry[0]['sambasid'][0]);
911                        array_pop($a_tmp);
912                        $result['sambasid'] = implode("-", $a_tmp);
913                }
914
915                return $result;
916        }       
917       
918        function get_maillist_info($uidnumber, $context)
919        {
920                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
921                $search = ldap_search($this->ldap, $context, $filter);
922                $entry = ldap_get_entries($this->ldap, $search);
923       
924                //Pega o dn do setor do usuario.
925                $entry[0]['dn'] = strtolower($entry[0]['dn']);
926                $sector_dn_array = explode(",", $entry[0]['dn']);
927                for($i=1; $i<count($sector_dn_array); $i++)
928                        $sector_dn .= $sector_dn_array[$i] . ',';
929                //Retira ultimo pipe.
930                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
931
932                $result['context']                      = $sector_dn;
933                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
934                $result['uid']                          = $entry[0]['uid'][0];
935                $result['cn']                           = $entry[0]['cn'][0];
936                $result['admlista']                     = $entry[0]['admlista'][0];
937                $result['defaultMemberModeration']      = $entry[0]['defaultmembermoderation'][0];
938                $result['listPass']                     = $entry[0]['listPass'][0];
939                $result['mail']                         = $entry[0]['mail'][0];
940                $result['accountStatus']                = $entry[0]['accountstatus'][0];
941                $result['accountAdm']                   = $entry[0]['accountAdm'][0];
942                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
943                $result['description']                  = $entry[0]['description'][0];
944                       
945                //Members
946                for ($i=0; $i<$entry[0]['mailforwardingaddress']['count']; $i++)
947                {
948                        $justthese = array("cn", "uidnumber", "uid", "phpgwaccounttype", "mail");
949                               
950                        // Montagem dinamica do filtro
951                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|";
952                        for ($k=0; (($k<10) && ($i<$entry[0]['mailforwardingaddress']['count'])); $k++)
953                        {
954                                $filter .= "(mail=".$entry[0]['mailforwardingaddress'][$i].")";
955                                $i++;
956                        }
957                        $i--;
958                        $filter .= "))";
959                               
960                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
961                        $user_entry = ldap_get_entries($this->ldap, $search);
962                               
963                        for ($j=0; $j<$user_entry['count']; $j++)
964                        {
965                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['uid'] = $user_entry[$j]['uid'][0];
966                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['cn'] = $user_entry[$j]['cn'][0];
967                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['type'] = $user_entry[$j]['phpgwaccounttype'][0];
968                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['mail'] = $user_entry[$j]['mail'][0];
969                                $result['members'][] = $user_entry[$j]['uidnumber'][0];
970                        }
971                }
972
973                // Retira o count do array
974                array_shift($entry[0]['mailforwardingaddress']);
975
976                // Checamos e-mails que nï¿œo fazem parte do expresso.
977                // Criamos um array temporario
978                $tmp_array = array();
979                foreach ($result['members_info'] as $uid => $user_data)
980                {
981                        $tmp_array[] = $user_data['mail'];
982                }
983
984                // Vemos a diferenï¿œa
985                $array_diff = array_diff($entry[0]['mailforwardingaddress'], $tmp_array);
986
987                // Incluimos no resultado
988                foreach ($array_diff as $index=>$mailforwardingaddress)
989                {
990                        $result['members_info'][$mailforwardingaddress]['uid'] = $mailforwardingaddress;
991                        //$result['members_info'][$mailforwardingaddress]['cn'] = 'E-Mail nao encontrado';
992                        $result['members_info'][$mailforwardingaddress]['cn'] = '';
993                        $result['members_info'][$mailforwardingaddress]['mailforwardingaddress'] = $mailforwardingaddress;
994                        $result['members'][] = $mailforwardingaddress;
995                }
996                return $result;
997        }       
998
999        function get_adm_maillist_info($uidnumber, $context) // Funcao que coleta as informacoes dos administradores de listas no LDAP
1000        {
1001                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
1002                $search = ldap_search($this->ldap, $context, $filter);
1003                $entry = ldap_get_entries($this->ldap, $search);
1004       
1005                //Pega o dn do setor do usuario.
1006                $entry[0]['dn'] = strtolower($entry[0]['dn']);
1007                $sector_dn_array = explode(",", $entry[0]['dn']);
1008                for($i=1; $i<count($sector_dn_array); $i++)
1009                        $sector_dn .= $sector_dn_array[$i] . ',';
1010                //Retira ultimo pipe.
1011                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
1012                       
1013                $result['context']                      = $sector_dn;
1014                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
1015                $result['uid']                          = $entry[0]['uid'][0];
1016                $result['cn']                           = $entry[0]['cn'][0];
1017                $result['listPass']                     = $entry[0]['listPass'][0];
1018                $result['mail']                         = $entry[0]['mail'][0];
1019                $result['accountStatus']                = $entry[0]['accountstatus'][0];
1020                $result['accountAdm']                   = $entry[0]['accountAdm'][0];
1021                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
1022                $result['description']                  = $entry[0]['description'][0];
1023
1024                //Members
1025                for ($i=0; $i<$entry[0]['admlista']['count']; $i++)
1026                {
1027                        $justthese = array("cn", "uidnumber", "uid", "phpgwaccounttype", "mail", "admlista");
1028                               
1029                        // Montagem dinamica do filtro
1030                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|";
1031                        for ($k=0; (($k<10) && ($i<$entry[0]['admlista']['count'])); $k++)
1032                        {
1033                                $filter .= "(mail=".$entry[0]['admlista'][$i].")";
1034                                $i++;
1035                        }
1036                        $i--;
1037                        $filter .= "))";
1038                               
1039                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1040                        $user_entry = ldap_get_entries($this->ldap, $search);
1041                               
1042                        for ($j=0; $j<$user_entry['count']; $j++)
1043                        {
1044                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['uid'] = $user_entry[$j]['uid'][0];
1045                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['cn'] = $user_entry[$j]['cn'][0];
1046                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['type'] = $user_entry[$j]['phpgwaccounttype'][0];
1047                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['mail'] = $user_entry[$j]['mail'][0];
1048                                $result['members'][] = $user_entry[$j]['uidnumber'][0];
1049                        }
1050                }
1051
1052                // Retira o count do array
1053                array_shift($entry[0]['admlista']);
1054
1055                // Checamos e-mails que nï¿œo fazem parte do expresso.
1056                // Criamos um array temporario
1057                $tmp_array = array();
1058                foreach ($result['members_info'] as $uid => $user_data)
1059                {
1060                        $tmp_array[] = $user_data['mail'];
1061                }
1062
1063                // Vemos a diferenï¿œa
1064                $array_diff = array_diff($entry[0]['admlista'], $tmp_array);
1065
1066                // Incluimos no resultado
1067                foreach ($array_diff as $index=>$admlista)
1068                {
1069                        $result['members_info'][$admlista]['uid'] = $admlista;
1070                        //$result['members_info'][$admlista]['cn'] = 'E-Mail nao encontrado';
1071                        $result['members_info'][$admlista]['cn'] = '';
1072                        $result['members_info'][$admlista]['admlista'] = $admlista;
1073                        $result['members'][] = $admlista;
1074                }
1075                return $result;
1076        }       
1077
1078
1079        function get_maillist_scl_info($uidnumber, $context)
1080        {
1081                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
1082                $search = ldap_search($this->ldap, $context, $filter);
1083                $entry = ldap_get_entries($this->ldap, $search);
1084
1085                //Pega o dn do setor do usuario.
1086                $entry[0]['dn'] = strtolower($entry[0]['dn']);
1087                $sector_dn_array = explode(",", $entry[0]['dn']);
1088                for($i=1; $i<count($sector_dn_array); $i++)
1089                        $sector_dn .= $sector_dn_array[$i] . ',';
1090                //Retira ultimo pipe.
1091                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
1092               
1093                $result['dn']                           = $entry[0]['dn'];
1094                $result['context']                      = $sector_dn;
1095                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
1096                $result['uid']                          = $entry[0]['uid'][0];
1097                $result['cn']                           = $entry[0]['cn'][0];
1098                $result['mail']                         = $entry[0]['mail'][0];
1099                $result['accountStatus']                = $entry[0]['accountstatus'][0];
1100                $result['accountAdm']                   = $entry[0]['accountAdm'][0];
1101                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
1102                $result['accountRestrictive']           = $entry[0]['accountrestrictive'][0];
1103                $result['participantCanSendMail']       = $entry[0]['participantcansendmail'][0];
1104                $result['description']                  = $entry[0]['description'][0];
1105               
1106                //Senders
1107                //for ($i=0; $i<$entry[0]['mailsenderaddress']['count']; $i++)
1108                //Recupera a relacao de usuario nao moderados no Mailman (podem enviar e-mails para uma lista de e-mail sem precisar da
1109                //autorizacao do moderador;
1110                for ($i=0; $i<$entry[0]['naomoderado']['count']; $i++)
1111                {
1112                        $justthese = array("cn", "uidnumber", "uid", "mail");
1113                        $filter="(&(phpgwAccountType=u)(mail=".$entry[0]['naomoderado'][$i]."))";
1114                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1115                        $user_entry = ldap_get_entries($this->ldap, $search);
1116                       
1117                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['uid'] = $user_entry[0]['uid'][0];
1118                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['cn'] = $user_entry[0]['cn'][0];
1119                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['mail'] = $user_entry[0]['mail'][0];
1120                        $result['members'][] = $user_entry[0]['uidnumber'][0];
1121                }
1122
1123                return $result;
1124        }       
1125
1126        function group_exist($gidnumber)
1127        {
1128                $justthese = array("cn");
1129                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1130                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1131                               
1132                $entry = ldap_get_entries($this->ldap, $search);
1133                if ($entry['count'] == 0)
1134                        return false;
1135                else
1136                        return true;
1137        }
1138
1139        function gidnumbers2cn($gidnumbers, $context)
1140        {
1141                $result = array();
1142                if (count($gidnumbers))
1143                {
1144                        $justthese = array("cn");
1145                        $i = 0;
1146                        foreach ($gidnumbers as $gidnumber)
1147                        {
1148                                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1149                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1150                               
1151                                $entry = ldap_get_entries($this->ldap, $search);
1152                                if ($entry['count'] == 0)
1153                                        $result['groups_info'][$i]['cn'] = '_Grupo existe no BD mas nï¿œo no LDAP';
1154                                else
1155                                        $result['groups_info'][$i]['cn'] = $entry[0]['cn'][0];
1156                                $result['groups_info'][$i]['gidnumber'] = $gidnumber;
1157                               
1158                                if (!strpos(strtolower($entry[0]['dn']), strtolower($context)))
1159                                        $result['groups_info'][$i]['group_disabled'] = 'true';
1160                                else
1161                                        $result['groups_info'][$i]['group_disabled'] = 'false';
1162                               
1163                                $i++;
1164                        }
1165                }
1166                return $result;
1167        }
1168
1169        function uidnumber2uid($uidnumber)
1170        {
1171                $justthese = array("uid");
1172                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1173                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1174                $entry = ldap_get_entries($this->ldap, $search);
1175                return $entry[0]['uid'][0];
1176        }
1177
1178        function uid2uidnumber($uid)
1179        {
1180               $justthese = array("uidnumber");
1181               $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=".$uid."))";
1182               $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1183               $entry = ldap_get_entries($this->ldap, $search);
1184               return $entry[0]['uidnumber'][0];
1185        }
1186
1187        function uidnumber2mail($uidnumber)
1188        {
1189                $justthese = array("mail");
1190                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1191                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1192                $entry = ldap_get_entries($this->ldap, $search);
1193                return $entry[0]['mail'][0];
1194        }
1195
1196       
1197        function change_user_context($dn, $newrdn, $newparent)
1198        {
1199                if (!ldap_rename ( $this->ldap_write, $dn, $newrdn, $newparent, true ))
1200                {
1201                        $return['status'] = false;
1202                        $return['msg'] = 'Erro em ldap_funcitons->change_user_context: ' . ldap_error($this->ldap_write);
1203                }
1204                else
1205                        $return['status'] = true;
1206                return $return;
1207        }
1208       
1209        function replace_user_attributes($dn, $ldap_mod_replace)
1210        {
1211                if (!@ldap_mod_replace ( $this->ldap_write, $dn, $ldap_mod_replace ))
1212                {
1213                        $return['status'] = false;
1214                        $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldap_write);
1215                }
1216                else
1217                        $return['status'] = true;
1218                return $return;
1219        }
1220       
1221        function add_user_attributes($dn, $ldap_add)
1222        {
1223                if (!@ldap_mod_add ( $this->ldap_write, $dn, $ldap_add ))
1224                {
1225                        $return['status'] = false;
1226                        $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldap_write);
1227                }
1228                else
1229                        $return['status'] = true;
1230               
1231                return $return;
1232        }
1233       
1234        function remove_user_attributes($dn, $ldap_remove)
1235        {
1236                if (!@ldap_mod_del ( $this->ldap_write, $dn, $ldap_remove ))
1237                {
1238                        $return['status'] = false;
1239                        $return['msg'] = 'Erro em ldap_funcitons->remove_user_attributes: ' . ldap_error($this->ldap_write);
1240                }
1241                else
1242                        $return['status'] = true;
1243               
1244                return $return;
1245        }
1246       
1247        function set_user_password($uid, $password)
1248        {
1249                $justthese = array("userPassword");
1250                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1251                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1252                $entry = ldap_get_entries($this->ldap_write, $search);
1253                $dn = $entry[0]['dn'];
1254                $userPassword = $entry[0]['userpassword'][0];
1255                $ldap_mod_replace['userPassword'] = $password;
1256                $this->replace_user_attributes($dn, $ldap_mod_replace);
1257                return $userPassword;
1258        }
1259
1260        function set_user_expires($uid, $expires)
1261        {
1262                $justthese = array(" ");
1263                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1264                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1265                $entry = ldap_get_entries($this->ldap_write, $search);
1266                $dn = $entry[0]['dn'];
1267                if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']))
1268                        {
1269                        if(substr($GLOBALS['phpgw_info']['server']['atributoexpiracao'],-1,1)=="Z")
1270                                {
1271                                ###quando a data de expiracao estah no formato yyyymmddhhmmssZ
1272                                $ldap_mod_replace[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = strftime("%Y%m%d%H%M%SZ", $expires);
1273                                }
1274                                else
1275                                {
1276                                ###Outro atributo ldap que, assim como o phpgwaccounttype, tambem contem hora em formato unix
1277                                $ldap_mod_replace[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = $expires;
1278                                }
1279                        }
1280                else
1281                        {
1282                        $ldap_mod_replace['phpgwaccountexpires'] = $expires;
1283                        }
1284                //$ldap_mod_replace['phpgwaccountexpires'] = $expires;
1285                $this->replace_user_attributes($dn, $ldap_mod_replace);
1286                return true;
1287        }
1288       
1289        function delete_user($user_info)
1290        {
1291                $return['status'] = true;
1292               
1293                // GROUPS
1294                $attrs = array();
1295                $attrs['memberUid'] = $user_info['uid'];
1296                if (count($user_info['groups_info']))
1297                {
1298                        foreach ($user_info['groups_info'] as $group_info)
1299                        {
1300                                $gidnumber = $group_info['gidnumber'];
1301                                $justthese = array("dn");
1302                                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1303                                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1304                        $entry = ldap_get_entries($this->ldap_write, $search);
1305                                $dn = $entry[0]['dn'];
1306                       
1307                                if (!@ldap_mod_del($this->ldap_write, $dn, $attrs))
1308                                {
1309                                        $return['status'] = false;
1310                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap_write);
1311                                }
1312                        }
1313                }
1314                       
1315                // MAILLISTS
1316                $attrs = array();
1317                $attrs['mailForwardingAddress'] = $user_info['mail'];
1318                if (count($user_info['maillists_info']))
1319                {
1320                        foreach ($user_info['maillists_info'] as $maillists_info)
1321                        {
1322                                $uidnumber = $maillists_info['uidnumber'];
1323                                $justthese = array("dn");
1324                                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1325                                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1326                        $entry = ldap_get_entries($this->ldap_write, $search);
1327                                $dn = $entry[0]['dn'];
1328                       
1329                                if (!@ldap_mod_del($this->ldap_write, $dn, $attrs))
1330                                {
1331                                        $return['status'] = false;
1332                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap_write);
1333                                }
1334                        }
1335                }
1336                       
1337                // UID
1338                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
1339                if (!@ldap_delete($this->ldap_write, $dn))
1340                {
1341                        $return['status'] = false;
1342                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap_write);
1343                }
1344               
1345                return $return;
1346        }
1347function delete_user_group($user,$groups)
1348        {
1349        $return['status'] = true;
1350        $attrs = array();
1351        $attrs['memberUid'] = $user['uid'];
1352        if ($groups['groups'])
1353                {
1354                foreach ($groups['groups'] as $gidnumber)
1355                         {
1356                         $justthese = array("dn");
1357                         $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1358                         $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1359                         $entry = ldap_get_entries($this->ldap_write, $search);
1360                         $dn = $entry[0]['dn'];
1361                         if (!@ldap_mod_del($this->ldap_write, $dn, $attrs))
1362                                {
1363                                $return['status'] = false;
1364                                $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap_write);
1365                                }
1366                        }
1367                }
1368        return $return;
1369        }
1370function delete_maillist($uidnumber)
1371        {
1372                $return['status'] = true;
1373               
1374                $justthese = array("dn");
1375                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1376                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1377                $entry = ldap_get_entries($this->ldap_write, $search);
1378                $dn = $entry[0]['dn'];
1379               
1380                if (!@ldap_delete($this->ldap_write, $dn))
1381                {
1382                        $return['status'] = false;
1383                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap_write);
1384                }
1385               
1386                return $return;
1387        }
1388
1389        function delete_group($gidnumber)
1390        {
1391                $return['status'] = true;
1392               
1393                $justthese = array("dn");
1394                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1395                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1396                $entry = ldap_get_entries($this->ldap_write, $search);
1397                $dn = $entry[0]['dn'];
1398               
1399                if (!@ldap_delete($this->ldap_write, $dn))
1400                {
1401                        $return['status'] = false;
1402                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap_write);
1403                }
1404               
1405                return $return;
1406        }
1407
1408       
1409        function rename_uid($uid, $new_uid)
1410        {
1411                $return['status'] = true;
1412               
1413                $justthese = array("dn");
1414                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1415                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1416            $entry = ldap_get_entries($this->ldap_write, $search);
1417                $dn = $entry[0]['dn'];
1418               
1419                $explode_dn = ldap_explode_dn($dn, 0);
1420                $rdn = "uid=" . $new_uid;
1421
1422                $parent = array();
1423                for ($j=1; $j<(count($explode_dn)-1); $j++)
1424                        $parent[] = $explode_dn[$j];
1425                $parent = implode(",", $parent);
1426               
1427                $return['new_dn'] = $rdn . ',' . $parent;
1428                       
1429                if (!@ldap_rename($this->ldap_write, $dn, $rdn, $parent, false))
1430                {
1431                        $return['status'] = false;
1432                        $return['msg'] .= 'Erro em ldap_funcitons->rename_uid: ' . ldap_error($this->ldap_write);
1433                }
1434               
1435                //Grupos
1436                $justthese = array("dn");
1437                $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";
1438                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1439            $entry = ldap_get_entries($this->ldap_write, $search);
1440        $array_mod_add['memberUid'] = $new_uid;
1441        $array_mod_del['memberUid'] = $uid;
1442
1443            for ($i=0; $i<=$entry['count']; $i++)
1444            {
1445                $dn = $entry[$i]['dn'];
1446                @ldap_mod_add ( $this->ldap_write, $dn,  $array_mod_add);
1447                @ldap_mod_del ( $this->ldap_write, $dn,  $array_mod_del);
1448            }
1449                return $return;
1450        }
1451
1452        function rename_cn($cn, $new_cn)
1453        {
1454                $return['status'] = true;
1455               
1456                $justthese = array("dn");
1457                $filter="(&(phpgwAccountType=g)(uid=".$cn."))";
1458                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1459            $entry = ldap_get_entries($this->ldap_write, $search);
1460                $dn = $entry[0]['dn'];
1461               
1462                $explode_dn = ldap_explode_dn($dn, 0);
1463                $rdn = "cn=" . $new_cn;
1464
1465                $parent = array();
1466                for ($j=1; $j<(count($explode_dn)-1); $j++)
1467                        $parent[] = $explode_dn[$j];
1468                $parent = implode(",", $parent);
1469               
1470                $return['new_dn'] = $rdn . ',' . $parent;
1471                       
1472                if (!@ldap_rename($this->ldap_write, $dn, $rdn, $parent, false))
1473                {
1474                        $return['status'] = false;
1475                }
1476               
1477                return $return;
1478        }
1479/*
1480        function rename_departmentnumber($old_dp, $new_dp)
1481        {
1482                $return['status'] = true;
1483               
1484                $justthese = array("dn");
1485                $filter="(&(phpgwAccountType=u)(departmentnumber=".$old_dp."))";
1486                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1487            $entry = ldap_get_entries($this->ldap, $search);
1488               
1489            for ($i=0; $i<=$entry['count']; $i++)
1490            {
1491                $dn = strtolower($entry[$i]['dn']);
1492                $ldap_mod_replace = array();
1493                $ldap_mod_replace['departmentnumber'] = $new_dp;
1494                @ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace);
1495                        //if (!@ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace))
1496                        //{
1497                        //      $return['status'] = false;
1498                        //      $return['msg'] .= 'Erro em ldap_funcitons->rename_departmentnumber: ' . ldap_error($this->ldap);
1499                        //}
1500            }
1501                return $return;
1502        }
1503*/
1504/*
1505        function get_sambadomains($context)
1506        {
1507                $return['status'] = true;
1508                $return['sambaDomains'] = array();
1509               
1510                $justthese = array("sambaSID","sambaDomainName");
1511                $filter="(objectClass=sambaDomain)";
1512                $search = ldap_search($this->ldap, $context, $filter, $justthese);
1513            $entry = ldap_get_entries($this->ldap, $search);
1514               
1515            for ($i=0; $i<$entry['count']; $i++)
1516            {
1517                        $return['sambaDomains'][$i]['samba_domain_sid'] = $entry[$i]['sambasid'][0];
1518                        $return['sambaDomains'][$i]['samba_domain_name'] = $entry[$i]['sambadomainname'][0];
1519                        $return['sambaDomains'][$i]['samba_domain_dn'] = $entry[$i]['dn'];
1520            }
1521           
1522                return $return;
1523        }
1524*/
1525        function exist_sambadomains($context, $sambaDomainName)
1526        {
1527                $justthese = array("dn");
1528                $filter="(&(objectClass=sambaDomain)(sambaDomainName=$sambaDomainName))";
1529                $search = ldap_search($this->ldap_write, $context, $filter, $justthese);
1530            $entry = ldap_get_entries($this->ldap_write, $search);
1531           
1532                if ($entry['count'])
1533                        return true;
1534                else
1535                        return false;
1536        }
1537       
1538        // Primeiro nilvel de organizaᅵᅵo.
1539        function exist_sambadomains_in_context($params)
1540        {
1541                $dn = $GLOBALS['phpgw_info']['server']['ldap_context'];
1542                $array_dn = ldap_explode_dn ( $dn, 0 );
1543               
1544                $context = $params['context'];
1545                $array_context = ldap_explode_dn ( $context, 0 );
1546               
1547                // Pego o setor no caso do contexto ser um sub-setor.
1548                if (($array_dn['count']+1) < ($array_context['count']))
1549                {
1550                        // inverto o array_dn para poder retirar o count
1551                        $array_dn_reverse  = array_reverse ( $array_dn, false );
1552                       
1553                        //retiro o count
1554                        array_pop($array_dn_reverse);
1555                       
1556                        //incluo o setor no dn
1557                        array_push ( $array_dn_reverse,  $array_context[ $array_context['count'] - 1 - $array_dn['count']]);
1558                       
1559                        // Volto a ordem natural
1560                        $array_dn  = array_reverse ( $array_dn_reverse, false );
1561                       
1562                        // Implodo
1563                        $context = implode ( ",", $array_dn );
1564                }
1565               
1566                $justthese = array("dn","sambaDomainName");
1567                $filter="(objectClass=sambaDomain)";
1568                $search = ldap_list($this->ldap_write, $context, $filter, $justthese);
1569            $entry = ldap_get_entries($this->ldap_write, $search);
1570           
1571            for ($i=0; $i<$entry['count']; $i++)
1572            {
1573                        $return['sambaDomains'][$i] = $entry[$i]['sambadomainname'][0];
1574            }
1575           
1576                if ($entry['count'])
1577                        $return['status'] = true;
1578                else
1579                        $return['status'] = false;
1580                       
1581                return $return;
1582        }
1583       
1584        function add_sambadomain($sambadomainname, $sambasid, $context)
1585        {
1586                $result = array();
1587               
1588                $dn                                                             = "sambaDomainName=$sambadomainname,$context";
1589                $entry['sambaSID']                                      = $sambasid;
1590                $entry['objectClass']                           = 'sambaDomain';
1591                $entry['sambaAlgorithmicRidBase']       = '1000';
1592                $entry['sambaDomainName']                       = $sambadomainname;
1593               
1594                if (!@ldap_add ( $this->ldap_write, $dn, $entry ))
1595                {
1596                        $return['status'] = false;
1597                        $return['msg'] = "Erro na funcao ldap_functions->add_sambadomain ($dn).\nRetorno do servidor: " . ldap_error($this->ldap_write);
1598                }
1599                else
1600                        $return['status'] = true;
1601               
1602                return $return;
1603        }
1604       
1605        function delete_sambadomain($sambadomainname)
1606        {
1607                $return['status'] = true;
1608                $filter="(sambaDomainName=$sambadomainname)";
1609                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter);
1610            $entry = ldap_get_entries($this->ldap_write, $search);
1611         
1612                if ($entry['count'] != 0)
1613            {
1614                        $dn = $entry[0]['dn'];
1615                       
1616                        if (!@ldap_delete($this->ldap_write, $dn))
1617                        {
1618                                $return['status'] = false;
1619                                $return['msg'] .= "Erro em ldap_functions->delete_sambadomain ($sambadomainname).\nRetorno do servidor: " . ldap_error($this->ldap_write);
1620                        }
1621            }
1622           
1623                return $return;
1624        }
1625}
1626//Geracao de senha criptografada pro Mailman
1627
1628        function encriptar($string)
1629                {
1630                $key='expresso-livre';
1631                $result = '';
1632                for($i=1; $i<=strlen($string); $i++)
1633                {
1634                        $char = substr($string, $i-1, 1);
1635                        $keychar = substr($key, ($i % strlen($key))-1, 1);
1636                        $char = chr(ord($char)+ord($keychar));
1637                        $result.=$char;
1638                }
1639                return $result;
1640                }
1641
1642?>
Note: See TracBrowser for help on using the repository browser.