source: branches/2.3/expressoMail1_2/inc/class.ldap_functions.inc.php @ 5865

Revision 5865, 33.8 KB checked in by brunocosta, 12 years ago (diff)

Ticket #2546 - corrige erro de sintaxe no método catalog search.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1<?php
2include_once("class.imap_functions.inc.php");
3include_once("class.functions.inc.php");
4
5function ldapRebind($ldap_connection, $ldap_url)
6{
7        @ldap_bind($ldap_connection, $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc'],$_SESSION['phpgw_info']['expressomail']['ldap_server']['pw']);
8}
9
10class ldap_functions
11{
12        var $ds;
13        var $ldap_host;
14        var $ldap_context;
15        var $imap;
16        var $external_srcs;
17        var $max_result;
18        var $functions;
19        function ldap_functions(){
20        // todo: Page Configuration for External Catalogs.
21                @include("../contactcenter/setup/external_catalogs.inc.php");
22                $this->external_srcs= ( isset( $external_srcs ) ) ? $external_srcs : NULL;
23                $this->max_result       = 200;
24                $this->functions = new functions();
25        }
26        // Using ContactCenter configuration.
27        function ldapConnect($refer = false,$catalog = 0){
28                if ($catalog > 0 && is_array($this->external_srcs)){
29                        $this->ldap_host        = $this->external_srcs[$catalog]['host'];
30                        $this->ldap_context = $this->external_srcs[$catalog]['dn'];
31                        $this->bind_dn          = $this->external_srcs[$catalog]['acc'];
32                        $this->bind_dn_pw       = $this->external_srcs[$catalog]['pw'];
33                        $this->object_class = $this->external_srcs[$catalog]['obj'];
34                        $this->base_dn          = $this->external_srcs[$catalog]['dn'];
35                        $this->branch           = $this->external_srcs[$catalog]['branch'];
36                }else {
37                        $this->ldap_host        = $_SESSION['phpgw_info']['expressomail']['ldap_server']['host'];
38                        $this->ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn'];
39                        $this->bind_dn = $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc'];
40                        $this->bind_dn_pw = $_SESSION['phpgw_info']['expressomail']['ldap_server']['pw'];
41                        $this->branch = 'ou';
42                }
43
44                $this->ds = ldap_connect($this->ldap_host);
45                ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
46                ldap_set_option($this->ds, LDAP_OPT_REFERRALS, $refer);
47                if ($refer)     {
48                        ldap_set_rebind_proc($this->ds, ldapRebind);
49                }
50                @ldap_bind($this->ds,$this->bind_dn,$this->bind_dn_pw );
51        }
52
53        //Teste jakjr retornando o DS
54        function ldapConnect2($refer = false){
55                $ds = ldap_connect($_SESSION['phpgw_info']['expressomail']['ldap_server']['host']);
56
57                if (!$ds)
58                        return false;
59
60                ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
61                ldap_set_option($ds, LDAP_OPT_REFERRALS, $refer);
62                if ($refer)
63                        ldap_set_rebind_proc($ds, ldapRebind);
64                @ldap_bind($ds, $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc'],$_SESSION['phpgw_info']['expressomail']['ldap_server']['pw']);
65
66                return $ds;
67        }
68
69
70        // usa o host e context do setup.
71        function ldapRootConnect($refer = false){
72                $this->ldap_host        = $_SESSION['phpgw_info']['expressomail']['server']['ldap_host'];
73                $this->ldap_context = $_SESSION['phpgw_info']['expressomail']['server']['ldap_context'];
74                $this->ds                       = ldap_connect($this->ldap_host);
75                ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
76                ldap_set_option($this->ds, LDAP_OPT_REFERRALS, $refer);
77                ldap_bind($this->ds, $_SESSION['phpgw_info']['expressomail']['server']['ldap_root_dn'],$_SESSION['phpgw_info']['expressomail']['server']['ldap_root_pw']);
78
79        }
80
81        function quicksearch($params)
82        {
83                include_once("class.functions.inc.php");
84                $functions = new functions;
85
86//              $search_for     = utf8_encode($params['search_for']);
87  //Testa se a busca foi realizada com aspas
88                $search_for     = utf8_encode($params['search_for']);
89                $search_len = (strlen($search_for)) - 1;
90                $quote_status=false;
91
92                if((($search_for{0}) == "\"") && (($search_for{$search_len}) == "\"")){
93                    $search_for{0} = " ";
94                    $search_for{$search_len} = " ";
95                    $quote_status=true;
96                }
97
98
99
100                $field          = $params['field'];
101                $ID                     = $params['ID'];
102               
103                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'])
104                    $extendedinfo=true;
105                else
106                    $extendedinfo=false;
107
108                $search_for     = explode(" ",$search_for);
109                $aux="";
110                foreach ($search_for as $search)
111                {
112                        if(!$aux)
113                        {
114                                $aux=$search;
115                        }
116                        else
117                        {
118                                if (strlen($search) > 2)
119                                {
120                                        $aux=$aux."*".$search;
121                                }
122                                else
123                                {
124                                        $aux=$aux." ".$search;
125                                }
126                        }
127                }
128                $search_for=$aux;
129               
130                $contacts_result = array();
131                $contacts_result['field'] = $field;
132                $contacts_result['ID'] = $ID;
133                // follow the referral
134                $this->ldapConnect(true);
135
136                if ($this->ds)
137                {
138                        if (($field != 'null') && ($ID != 'null'))
139                        {
140                                $filter="(& (&(|(phpgwAccountType=u)(phpgwAccountType=g)(phpgwAccountType=l))(mail=*)) (|(cn=*$search_for*)(mail=*$search_for*)) (!(phpgwaccountvisible=-1)) )";
141                                if($extendedinfo)
142                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid", "employeeNumber", "ou");
143                                else
144                                    $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid");
145                        }
146                        else
147                        {
148                                if($quote_status){
149                                        $filter="(& (phpgwAccountType=u) (|(cn=* $search_for *)(cn=$search_for *)(cn=* $search_for)) (!(phpgwaccountvisible=-1)) )";
150                                }
151                                else{
152                                        $filter="(& (phpgwAccountType=u)(cn=*$search_for*) (!(phpgwaccountvisible=-1)) )";
153                                }
154                        //      $filter="(& (phpgwAccountType=u)(cn=*$search_for*) (!(phpgwaccountvisible=-1)) )";
155                                if($extendedinfo)
156                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible","jpegPhoto", "uid", "employeeNumber", "ou");
157                                else
158                                    $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible","jpegPhoto", "uid");
159                        }
160                        $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result + 1);
161                        if(!$sr)
162                                return null;
163                        $count_entries = ldap_count_entries($this->ds,$sr);
164
165                        // Get user org dn.
166                        $user_dn = $_SESSION['phpgw_info']['expressomail']['user']['account_dn'];
167                        $user_sector_dn = ldap_explode_dn ( $user_dn, false );
168                        array_shift($user_sector_dn);
169                        array_shift($user_sector_dn);
170                        $user_sector_dn = implode(",", $user_sector_dn);
171
172                        // New search only on user sector
173                        if ($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['cloud_ldap'] || $count_entries > $this->max_result)
174                        {
175                                // Close old ldap conection
176                                ldap_close($this->ds);
177
178                                // Reopen a local ldap connection, following referral
179                                $this->ldapRootConnect(true);
180
181                                $sr= ldap_search($this->ds, $user_sector_dn, $filter, $justthese);
182                                if(!$sr)
183                                        return null;
184                                $count_entries = ldap_count_entries($this->ds,$sr);
185
186                                if ($count_entries > $this->max_result){
187                                        $return = array();
188                                        $return['status'] = false;
189                                        $return['error'] = "many results";
190                                        return $return;
191                                }
192                                elseif($count_entries < 1){
193                                    $return = array();
194                                    return $return;
195
196                                }else
197                                {
198                                        if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['cloud_ldap'])
199                                            $quickSearch_cloud = true;
200                                        else
201                                            $quickSearch_only_in_userSector = true;
202                                }
203                        }
204
205                        $info = ldap_get_entries($this->ds, $sr);
206
207                        $tmp = array();
208                        $tmp_users_from_user_org = array();
209
210                        if (!$quickSearch_only_in_userSector) {
211                                $catalogsNum=count($this->external_srcs);
212                                for ($i=0; $i<=count($this->external_srcs); $i++)       {
213                                        if ($this->external_srcs[$i]["quicksearch"]) {
214                                                $this->ldapConnect(true,$i);
215                                                $filter="(|(cn=*$search_for*)(mail=*$search_for*))";
216                                                if($extendedinfo)
217                                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid","employeeNumber", "ou");
218                                                else
219                                                    $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid");
220                                                $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result+1);
221                                                if(!$sr)
222                                                        return null;
223                                                $count_entries = ldap_count_entries($this->ds,$sr);
224                                                $search = ldap_get_entries($this->ds, $sr);
225                                                for ($j=0; $j<$search["count"]; $j++) {
226                                                        $info[] = $search[$j];
227                                                }
228                                                $info["count"] = count($info)-1;
229                                        }
230                                }
231                        }
232
233                        for ($i=0; $i<$info["count"]; $i++)
234                        {
235                                if ($quickSearch_only_in_userSector || $quickSearch_cloud)
236                                {
237                                        $tmp[$info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count'] . '%' . $info[$i]["employeenumber"][0] . '%' . $info[$i]["ou"][0]] = utf8_decode($info[$i]["cn"][0]);
238                                }
239                                else
240                                {
241                                        if (preg_match("/$user_sector_dn/i", $info[$i]['dn']))
242                                        {
243                                                $tmp_users_from_user_org[$info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count'] . '%' . $info[$i]["employeenumber"][0] . '%' . $info[$i]["ou"][0]] = utf8_decode($info[$i]["cn"][0]);
244                                        }
245                                        else
246                                        {
247                                                $tmp[$info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count'] . '%' . $info[$i]["employeenumber"][0] . '%' . $info[$i]["ou"][0]] = utf8_decode($info[$i]["cn"][0]);
248                                        }
249                                }
250                        }
251                        natcasesort($tmp_users_from_user_org);
252                        natcasesort($tmp);
253
254                        if (($field != 'null') && ($ID != 'null'))
255                        {
256                                $i = 0;
257
258                                $tmp = array_merge($tmp, $tmp_users_from_user_org);
259                                natcasesort($tmp);
260
261                                foreach ($tmp as $info => $cn)
262                                {
263                                        $contacts_result[$i] = array();
264                                        $contacts_result[$i]["cn"] = $cn;
265                                        list ($contacts_result[$i]["mail"], $contacts_result[$i]["phone"], $contacts_result[$i]["mobile"], $contacts_result[$i]["uid"], $contacts_result[$i]["jpegphoto"], $contacts_result[$i]["employeenumber"], $contacts_result[$i]["ou"]) = split ('%', $info);
266                                        $i++;
267                                }
268                                $contacts_result['quickSearch_only_in_userSector'] = $quickSearch_only_in_userSector;
269                                $contacts_result['quickSearch_cloud'] = $quickSearch_cloud;
270                        }
271                        else
272                        {
273                                $options_users_from_user_org = '';
274                                $options = '';
275
276                                /* List of users from user org */
277                                $i = 0;
278                                foreach ($tmp_users_from_user_org as $info => $cn)
279                                {
280                                        $contacts_result[$i] = array();
281                                        $options_users_from_user_org .= $this->make_quicksearch_card($info, $cn);
282                                        $i++;
283                                }
284
285                                /* List of users from others org */
286                                foreach ($tmp as $info => $cn)
287                                {
288                                        $contacts_result[$i] = array();
289                                        $options .= $this->make_quicksearch_card($info, $cn);
290                                        $i++;
291                                }
292
293                                if ($quickSearch_only_in_userSector)
294                                {
295                                        if ($options != '')
296                                        {
297                                                $head_option =
298                                                        '<tr class="quicksearchcontacts_unselected">' .
299                                                                '<td colspan="2" width="100%" align="center">' .
300                                                                        str_replace("%1", $this->max_result,$this->functions->getLang('More than %1 results were found')) . '.<br>' .
301                                                                        $this->functions->getLang('Showing only the results found in your organization') . '.';
302                                                                '</td>' .
303                                                        '</tr>';
304                                                $contacts_result = $head_option . $options_users_from_user_org . $options;
305                                        }
306                                        else
307                                        {
308                                                $return = array();
309                                                $return['status'] = false;
310                                                $return['error'] = "many results";
311                                                return $return;
312                                        }
313                                }
314                                if ($quickSearch_cloud)
315                                {
316                                                $head_option =
317                                                        '<tr class="quicksearchcontacts_unselected">' .
318                                                                '<td colspan="2" width="100%" align="center">' .
319                                                                        $this->functions->getLang('Showing only the results found in your organization') . '.'.
320                                                                        '<input id="QuickSearchUser_button_search" type="button" onclick="QuickSearchUser.close_window();openListUsers(\'1\');" value="busca avançada">'.
321                                                                '</td>' .
322                                                        '</tr>';
323
324
325
326                                                $contacts_result = $head_option . $options_users_from_user_org . $options;
327
328                                }
329                                else
330                                {
331                                        if (($options_users_from_user_org != '') && ($options != ''))
332                                        {
333                                                $head_option0 =
334                                                        '<tr class="quicksearchcontacts_unselected">' .
335                                                                '<td colspan="2" width="100%" align="center" style="background:#EEEEEE"><B>' .
336                                                                        $this->functions->getLang('Users from your organization') . '</B> ['.count($tmp_users_from_user_org).']';
337                                                                '</td>' .
338                                                        '</tr>';
339
340                                                $head_option1 =
341                                                        '<tr class="quicksearchcontacts_unselected">' .
342                                                                '<td colspan="2" width="100%" align="center" style="background:#EEEEEE"><B>' .
343                                                                        $this->functions->getLang('Users from others organizations') . '</B> ['.count($tmp).']';
344                                                                '</td>' .
345                                                        '</tr>';
346                                        }
347                                        $contacts_result = $head_option0 . $options_users_from_user_org . $head_option1 . $options;
348                                }
349                        }
350                }
351                ldap_close($this->ds);
352                return $contacts_result;
353        }
354
355        function make_quicksearch_card($info, $cn)
356        {
357                include_once("class.functions.inc.php");
358                $functions = new functions;
359
360                $contacts_result = array();
361                $contacts_result["cn"] = $cn;
362                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'])
363                    $extendedinfo=true;
364                else
365                    $extendedinfo=false;
366
367                list ($contacts_result["mail"], $contacts_result["phone"], $contacts_result["mobile"], $contacts_result["uid"], $contacts_result["jpegphoto"], $contacts_result["employeenumber"], $contacts_result["ou"]) = split ('%', $info);
368
369                if ($contacts_result['jpegphoto'])
370                        $photo_link = '<img src="./inc/show_user_photo.php?mail='.$contacts_result['mail'].'">';
371                else
372                        $photo_link = '<img src="./templates/default/images/photo.jpg">';
373
374                $phoneUser = $contacts_result['phone'];
375
376                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_enabled'] && $phoneUser) {
377                        $phoneUser = '<a title="'.$this->functions->getLang("Call to Comercial Number").'" href="#" onclick="InfoContact.connectVoip(\''.$phoneUser.'\',\'com\')">'.$phoneUser.'</a>';
378                        if($contacts_result['mobile']){
379                                $phoneUser .= ' / <a title="'.$this->functions->getLang("Call to Mobile Number").'" href="#" onclick="InfoContact.connectVoip(\''.$contacts_result['mobile'].'\',\'mob\')">'.$contacts_result['mobile'].'</a>';
380                        }
381                }
382                //verifica de existe o celular do funcionario ($contacts_result["mobile"]), se nao, $phoneUser fica vazia;
383
384                    $mobileUser = $contacts_result["mobile"];
385                    if($mobileUser && !$voipMobile) {
386                            $phoneUser .= " / $mobileUser";
387                    }
388                    $empNumber = $contacts_result["employeenumber"];
389                    if($empNumber) {
390                            $empNumber = "$empNumber - ";
391                    }
392                    $ou = $contacts_result["ou"];
393                    if($ou) {
394                            $ou = "<br/>$ou" ;
395                    }
396
397                // Begin: nickname, firstname and lastname for QuickAdd.
398                $fn = $contacts_result["cn"];
399                $array_name = explode(" ", $fn);
400                if(count($array_name) > 1){                     
401                        $fn = $array_name[0];
402                        array_shift($array_name);
403                        $sn = implode(" ",$array_name);
404                }
405                // End:
406                $option =
407                        '<tr class="quicksearchcontacts_unselected">' .
408                                '<td class="cc" width="1%">' .
409                                        '<a title="'.$this->functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result["cn"].'\', \''.$contacts_result["mail"].'\')">' .
410                                                $photo_link .
411                                        '</a>' .
412                                '</td>' .
413                                '<td class="cc">' .
414                                        '<span name="cn">' . $empNumber . $contacts_result['cn'] . '</span>' . '<br>' .
415                                        '<a title="'.$functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result["cn"].'\', \''.$contacts_result["mail"].'\')">' .
416                                                '<font color=blue>' .
417                                                '<span name="mail">' . $contacts_result['mail'] . '</span></a></font>'.
418                                                '<img src="templates/default/images/user_card.png" style="cursor: pointer;" title="'.$this->functions->getLang("Add Contact").'" onclick="javascript:connector.loadScript(\'ccQuickAdd\');ccQuickAddOne.showList(\''.$fn.','.$fn.','.$sn.','.$contacts_result["mail"].'\')">'.
419                                        '<br>' .
420                                        $phoneUser .
421                                        $ou .
422                                '</td>' .
423                                '</tr>';
424                return $option;
425        }
426
427        function get_catalogs(){
428                $catalogs = array();
429                $catalogs[0] = $this->functions->getLang("Global Catalog");
430                if($this->external_srcs)
431                        foreach ($this->external_srcs as $key => $valor ){
432                        $catalogs[$key] = $valor['name'];
433                }
434                return $catalogs;
435        }
436        function get_organizations($params){
437                $organizations = array();
438                $params['referral']?$referral = $params['referral']:$referral = false;
439                $params['organization']?$org = "ou=".$params['organization'].",":$org = "";
440                $cat = $params['catalog'];
441                // primeiro nível de ou
442                $this->ldapConnect($referral,$cat);
443                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['cloud_ldap'] && $cat == 0)
444                {
445                    $fistOu = substr($_SESSION['phpgw_info']['expressomail']['user']['account_dn'],strripos($_SESSION['phpgw_info']['expressomail']['user']['account_dn'], "ou="));
446                }
447                else
448                {
449                    $fistOu = $this->ldap_context;
450                }
451                if($this->branch != '') {
452                    $filter="(&(".$this->branch."=*)(!(phpgwAccountVisible=-1)))";
453                    $justthese = array("$this->branch");
454                    $sr = ldap_list($this->ds, $org.$fistOu, $filter, $justthese);
455                    $info = ldap_get_entries($this->ds, $sr);
456                    if($info["count"] == 0)
457                    {
458                        return null;
459                    }
460                    for ($i=0; $i<$info["count"]; $i++)
461                        $organizations[$i] = $info[$i]["ou"][0];
462                    ldap_close($this->ds);
463                    sort($organizations);
464                    return $organizations;
465                }else{
466                        return null;
467            }
468        }
469        function get_organizations2($params){
470                $organizations = array();
471                $referral = $params['referral'];
472                $this->ldapRootConnect($referral);
473                if ($this->ds) {
474                        $filter="(&(objectClass=organizationalUnit)(!(phpgwAccountVisible=-1)))";
475                        $justthese = array("ou");
476                        $sr = ldap_list($this->ds, $this->ldap_context, $filter, $justthese);
477                        $info = ldap_get_entries($this->ds, $sr);
478
479
480                        if($info["count"] == 0)
481                        {
482                            $organizations[0]['ou'] = $this->ldap_context;
483                            $organizations[0]['dn'] = $this->ldap_context;
484                        }
485                        else{
486                            for ($i=0; $i<$info["count"]; $i++)
487                            {
488                                    $organizations[$i]['ou'] = $info[$i]["ou"][0];
489                                    $organizations[$i]['dn'] = $info[$i]["dn"];
490                            }
491                        }
492                        ldap_close($this->ds);
493                        sort($organizations);
494                }
495                return $organizations;
496        }
497        //Busca usuarios de um contexto e ja retorna as options do select - usado por template serpro;
498        function search_users($params)
499        {
500                $this->ldapConnect(false,0);
501                //Monta lista de Grupos e Usuarios
502                $users = Array();
503                $groups = Array();
504                $user_context= $this->ldap_context;
505                $owner = $_SESSION['phpgw_info']['expressomail']['user']['owner'];
506                $filtro =utf8_encode($params['filter']);
507                $context =utf8_encode($params['context']);//adicionado
508
509                if ($this->ds)
510                {
511                    $justthese = array("gidNumber","cn");
512                    if ($params['type'] == 'search')
513                        $sr=ldap_search($this->ds, $context, ("(&(phpgwaccounttype=g)(!(phpgwaccountvisible=-1))(cn=*$filtro*))"),$justthese);
514                    else
515                        $sr=ldap_list($this->ds,  $context ? $context : $user_context, ("(&(phpgwaccounttype=g)(!(phpgwaccountvisible=-1))(cn=*".$filtro."*))"),$justthese);
516                    $info = ldap_get_entries($this->ds, $sr);
517                    for ($i=0; $i<$info["count"]; $i++)
518                        $groups[$uids=$info[$i]["gidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    g);
519                    $justthese = array("phpgwaccountvisible","uidNumber","cn");
520                    if ($params['type'] == 'search')
521                       // $sr=ldap_search($this->ds, $user_context, ("(&(phpgwaccounttype=u)(!(phpgwaccountvisible=-1))(phpgwaccountstatus=A)(|(cn=*$filtro*)(mail=$filtro*)))"),$justthese);
522                       $sr=ldap_search($this->ds, $context, ("(&(phpgwaccounttype=u)(!(phpgwaccountvisible=-1))(phpgwaccountstatus=A)(|(cn=*$filtro*)(mail=$filtro*)))"),$justthese);
523                    else
524                        $sr=ldap_list($this->ds, $context ? $context : $user_context, ("(&(phpgwaccounttype=u)(!(phpgwaccountvisible=-1))(phpgwaccountstatus=A)(|(cn=*$filtro*)(mail=$filtro*)))"),$justthese);
525
526                    $info = ldap_get_entries($this->ds, $sr);
527                    for ($i=0; $i<$info["count"]; $i++)
528                    {
529                        if ($info[$i]["phpgwaccountvisible"][0] == '-1')
530                      continue;
531                        $users[$uids=$info[$i]["uidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    u);
532                    }
533                }
534                ldap_close($this->ds);
535       
536                @asort($users);
537                @reset($users);
538                @asort($groups);
539                @reset($groups);
540                $user_options ='';
541                $group_options ='';
542
543                foreach($groups as $id => $user_array) {
544                        $newId = $id.'U';
545                        $group_options .= '<option  value="'.$newId.'">'.utf8_decode($user_array['name']).'</option>'."\n";
546                }
547                foreach($users as $id => $user_array) {
548                    if($owner != $id){
549                        $newId = $id.'U';
550                        $user_options .= '<option  value="'.$newId.'">'.utf8_decode($user_array['name']).'</option>'."\n";
551                    }
552                }
553                return array("users" => $user_options, "groups" => $group_options);
554        }
555
556        function catalogsearch($params)
557        {
558                $cn     = $params['search_for'] ? "*".utf8_encode($params['search_for'])."*" : "*";
559                $max_result       = $params['max_result'] ? $params['max_result'] : $this->max_result;
560                $catalog = $params['catalog'];
561                $error = False;
562                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'])
563                    $extendedinfo=true;
564                else
565                    $extendedinfo=false;
566
567
568                $this->ldapConnect(true,$catalog);
569
570                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['cloud_ldap'] && $catalog == 0)
571                    $fistOu = substr($_SESSION['phpgw_info']['expressomail']['user']['account_dn'],strripos($_SESSION['phpgw_info']['expressomail']['user']['account_dn'], "ou="));
572                else
573                    $fistOu = $this->ldap_context;
574               
575                if($params['organization_sub'] =="")
576                    $params['organization_sub'] = "all";
577               
578                $params['organization'] == 'all' ? $user_context = $fistOu :$user_context = $this->branch."=".$params['organization'].",".$fistOu;
579                $params['organization_sub'] == 'all' ? $user_context = $user_context :$user_context = $this->branch."=".$params['organization_sub'].",".$user_context;
580                if ($this->ds) {
581                        if ($catalog == 0){
582                                //os atributos "employeeNumber" e "ou" foram adicionado ao vetor de busca;
583                                if($extendedinfo)
584                                $justthese = array("cn", "mail", "phpgwaccounttype", "phpgwAccountVisible", "employeeNumber", "ou");
585                                else
586                                    $justthese = array("cn", "mail", "phpgwaccounttype", "phpgwAccountVisible");
587
588                                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(cn=".$cn."))";
589                                //$user_context = "ou=".$params['organization'].",".$this->ldap_context;
590                        }else {
591                                //os atributos "employeeNumber" e "ou" foram adicionado ao vetor de busca;
592                                if($extendedinfo)
593                                $justthese = array("cn", "mail", "employeeNumber", "ou");
594                                else
595                                    $justthese = array("cn", "mail");
596                                $filter="(&(objectClass=".$this->object_class.")(cn=".$cn."))";
597                                //$user_context = $this->branch."=".$params['organization'].",".$external_srcs[$catalog]['dn'];
598                        }
599
600                        $sr=@ldap_search($this->ds, $user_context, $filter, $justthese, 0, $max_result+1);
601                        if(!$sr)
602                                return null;
603                        $count_entries = ldap_count_entries($this->ds,$sr);
604                        if ($count_entries > $max_result){
605                                $info = null;
606                                $error = True;
607                        }
608                        else
609                                $info = ldap_get_entries($this->ds, $sr);
610
611                        ldap_close($this->ds);
612
613                        $u_tmp = array();
614                        $g_tmp = array();
615
616                        for ($i=0; $i<$info["count"]; $i++){
617                                if((!$catalog==0)||(strtoupper($info[$i]["phpgwaccounttype"][0]) == 'U') && ($info[$i]["phpgwaccountvisible"][0] != '-1'))
618                                        //aqui eh feita a concatenacao do departamento ao cn;
619                                        $u_tmp[$info[$i]["mail"][0]] = utf8_decode($info[$i]["cn"][0]). '%' . $info[$i]["ou"][0];
620                                if((!$catalog==0)||(strtoupper($info[$i]["phpgwaccounttype"][0]) == 'L') && ($info[$i]["phpgwaccountvisible"][0] != '-1'))
621                                        $g_tmp[$info[$i]["mail"][0]] = utf8_decode($info[$i]["cn"][0]);
622                        }
623
624                        natcasesort($u_tmp);
625                        natcasesort($g_tmp);
626
627                        $i = 0;
628                        $users = array();
629
630                        foreach ($u_tmp as $mail => $cn){
631
632                                $tmp = explode("%", $cn); //explode o cn pelo caracter "%" e joga em $tmp;
633                                $name = $tmp[0]; //pega o primeiro item (cn) do vetor resultante do explode acima;
634                                $department = $tmp[1]; //pega o segundo item (ou) do vetor resultanto do explode acima;
635                                $users[$i++] = array("name" => $name, "email" => $mail, "department" => $department);
636
637                        }
638                        unset($u_tmp);
639
640                        $i = 0;
641                        $groups = array();
642
643                        foreach ($g_tmp as $mail => $cn){
644                                $groups[$i++] = array("name" => $cn, "email" => $mail);
645                        }
646                        unset($g_tmp);
647
648                        return  array('users' => $users, 'groups' => $groups, 'error' => $error);
649                }else
650                return null;
651        }
652
653        function get_emails_ldap(){
654
655                $result['mail']= array();
656                $result['mailalter']= array();
657                $user = $_SESSION['phpgw_info']['expressomail']['user']['account_lid'];
658                $this->ldapRootConnect(false);
659                if ($this->ds) {
660                        $filter="uid=".$user;
661                        $justthese = array("mail","mailAlternateAddress");
662                        $sr = ldap_search($this->ds,$this->ldap_context, $filter, $justthese);
663                        $ent = ldap_get_entries($this->ds, $sr);
664                        ldap_close($this->ds);
665
666                        for ($i=0; $i<$ent["count"]; $i++){
667                                $result['mail'][] = $ent[$i]["mail"][0];
668                                $result['mailalter'][] = $ent[$i]["mailalternateaddress"][0];
669                        }
670                }
671                return $result;
672        }
673
674        //Busca usuarios de um contexto e ja retorna as options do select;
675        function get_available_users($params)
676    {
677        $this->ldapRootConnect();
678        //Monta lista de Grupos e Usuarios
679        $users = Array();
680        $groups = Array();
681        $user_context= $params['context'];
682        $owner = $_SESSION['phpgw_info']['expressomail']['user']['owner'];
683
684        if ($this->ds)
685        {
686            $justthese = array("gidNumber","cn");
687            if ($params['type'] == 'search')
688                $sr=ldap_search($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=g)(!(phpgwaccountvisible=-1)))"),$justthese);
689            else
690                $sr=ldap_list($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=g)(!(phpgwaccountvisible=-1)))"),$justthese);
691            $info = ldap_get_entries($this->ds, $sr);
692            for ($i=0; $i<$info["count"]; $i++)
693                $groups[$uids=$info[$i]["gidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    g);
694            $justthese = array("phpgwaccountvisible","uidNumber","cn");
695            if ($params['type'] == 'search')
696                $sr=ldap_search($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))"),$justthese);
697            else
698                $sr=ldap_list($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))"),$justthese);
699
700            $info = ldap_get_entries($this->ds, $sr);
701            for ($i=0; $i<$info["count"]; $i++)
702            {
703                if ($info[$i]["phpgwaccountvisible"][0] == '-1')
704                    continue;
705                $users[$uids=$info[$i]["uidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    u);
706            }
707        }
708        ldap_close($this->ds);
709
710        @asort($users);
711        @reset($users);
712        @asort($groups);
713        @reset($groups);
714        $user_options ='';
715        $group_options ='';
716
717        foreach($groups as $id => $user_array) {
718                $newId = $id.'U';
719                $group_options .= '<option  value="'.$newId.'">'.utf8_decode($user_array['name']).'</option>'."\n";
720        }
721        foreach($users as $id => $user_array) {
722            if($owner != $id){
723                $newId = $id.'U';
724                $user_options .= '<option  value="'.$newId.'">'.utf8_decode($user_array['name']).'</option>'."\n";
725            }
726        }
727        return array("users" => $user_options, "groups" => $group_options);
728    }
729
730        //Busca usuarios de um contexto e ja retorna as options do select;
731        function get_available_users2($params)
732        {
733                $this->ldapRootConnect();
734
735                $context= $params['context'];
736                $justthese = array("cn", "uid", "cn");
737                $filter = "(&(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))";
738
739            if ($this->ds)
740            {
741                        $sr=ldap_search($this->ds, $context, $filter, $justthese);
742                        $entries = ldap_get_entries($this->ds, $sr);
743
744                        for ($i=0; $i<$entries["count"]; $i++){
745                                if($_SESSION['phpgw_info']['expressomail']['user']['account_lid'] != $entries[$i]["uid"][0]){
746                                        $u_tmp[$entries[$i]["uid"][0]] = $entries[$i]["cn"][0];
747                                }
748                        }
749
750                        natcasesort($u_tmp);
751
752                        $i = 0;
753                        $users = array();
754
755                        if (count($u_tmp))
756                        {
757                                foreach ($u_tmp as $uidnumber => $cn)
758                                {
759                                        $options .= "<option value=$uidnumber>$cn</option>";
760                                }
761                                unset($u_tmp);
762                        }
763
764                        ldap_close($this->ds);
765                return $options;
766                }
767        }
768
769        function uid2cn($uid)
770        {
771                // do not follow the referral
772                $this->ldapRootConnect(false);
773                if ($this->ds)
774                {
775                        $filter="(&(phpgwAccountType=u)(uid=$uid))";
776                        $justthese = array("cn");
777                        $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
778                        if(!$sr)
779                                return false;
780                        $info = ldap_get_entries($this->ds, $sr);
781                        return utf8_decode($info[0]["cn"][0]);
782                }
783                return false;
784        }
785        function uidnumber2uid($uidnumber)
786        {
787                // do not follow the referral
788                $this->ldapRootConnect(false);
789                if ($this->ds)
790                {
791                        $filter="(&(phpgwAccountType=u)(uidnumber=$uidnumber))";
792                        $justthese = array("uid");
793                        $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
794                        if(!$sr)
795                                return false;
796                        $info = ldap_get_entries($this->ds, $sr);
797                        return $info[0]["uid"][0];
798                }
799                return false;
800        }
801        function getSharedUsersFrom($params){
802                $filter = '';
803                $i = 0;         
804                //Added to save if must save sent messages in shared folder
805                $acl_save_sent_in_shared = array();
806               
807                if($params['uids']) {
808                        $uids = explode(";",$params['uids']);
809                        $this->imap = new imap_functions();                     
810                        foreach($uids as $index => $uid){
811                                $params = array();
812                                //Added to save if user has create permission
813                                $acl_create_message = array();
814                                $acl = $this->imap->getacltouser($uid);
815                                if ( preg_match("/a/",$acl )){                         
816                                        $filter .= "(uid=$uid)";                                       
817                                        if ( preg_match("/p/",$acl )){                         
818                                                $acl_save_sent_in_shared[ $i ] =$uid;
819                                                $i++;
820                                        }                                       
821                                }                                                       
822                        }                       
823                }
824               
825                $this->ldapRootConnect(false);
826                if ($this->ds) {
827                        $justthese = array("cn","mail","uid");
828                        if($filter) {
829                                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=s))(|$filter))";
830                                $sr             =       ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
831                                ldap_sort($this->ds,$sr,"cn");
832                                $info   =       ldap_get_entries($this->ds, $sr);
833                                $var = print_r($acl_save_sent_in_shared, true);                         
834                                for ($i = 0;$i < $info["count"]; $i++){
835                                        $info[$i]['cn'][0] = utf8_decode($info[$i]['cn'][0]);
836                                        //verify if user has permission to save sent messages in a shared folder
837                                        if ( in_array( $info[$i]['uid'][0],$acl_save_sent_in_shared) ){                                         
838                                                $info[$i]['save_shared'][0] = 'y';
839                                        } else $info[$i]['save_shared'][0] = 'n';
840                                }
841                        }
842               
843                        $info['myname'] = $_SESSION['phpgw_info']['expressomail']['user']['fullname'];
844
845                        //Find institucional_account.
846                        $filter="(&(phpgwAccountType=i)(mailForwardingAddress=".$_SESSION['phpgw_info']['expressomail']['user']['email']."))";
847                        $sr     = ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
848                        ##
849                        # @AUTHOR Rodrigo Souza dos Santos
850                        # @DATE 2008/09/17
851                        # @BRIEF Changing to ensure that the variable session is always with due value.
852                        ##
853                        if(ldap_count_entries($this->ds,$sr))
854                        {
855                                ldap_sort($this->ds,$sr,"cn");
856                                $result = ldap_get_entries($this->ds, $sr);
857                                for ($j = 0;$j < $result["count"]; $j++){
858                                        $info[$i]['cn'][0] = utf8_decode($result[$j]['cn'][0]);
859                                        $info[$i]['mail'][0] = $result[$j]['mail'][0];
860                                        $info[$i]['save_shared'][0] = 'n';
861                                        $info[$i++]['uid'][0] = $result[$j]['uid'][0];                                 
862                                }
863                        }
864
865                        $_SESSION['phpgw_info']['expressomail']['user']['shared_mailboxes'] = $info;
866                       
867                        return $info;
868                }
869        }
870
871        function getUserByEmail($params)
872        {
873                $expires = 60*60*24*30; /* 30 days */
874                header("Cache-Control: maxage=".$expires);
875                header("Pragma: public");
876                header("Expires: ".gmdate('D, d M Y H:i:s', time()+$expires)); 
877                $filter="(&(phpgwAccountType=u)(mail=" . $params['email'] . "))";
878                $ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn'];
879                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'])
880                    $extendedinfo=true;
881                else
882                    $extendedinfo=false;
883
884                if($extendedinfo)
885                    $justthese = array("cn","uid","telephoneNumber","jpegPhoto","mobile","ou","employeeNumber");
886                else
887                    $justthese = array("cn","uid","telephoneNumber","jpegPhoto","mobile");
888
889                // Follow the referral
890                $ds = $this->ldapConnect2(true);
891                if ($ds)
892                {
893                        $sr=@ldap_search($ds, $ldap_context, $filter, $justthese);
894
895                        if (!$sr)
896                                return null;
897
898                        $entry = ldap_first_entry($ds, $sr);
899
900                        if($entry) {
901                                $obj =  array("cn" => utf8_decode(current(ldap_get_values($ds, $entry, "cn"))),
902                                                  "email" => $params['email'],
903                                                  "uid" => ldap_get_values($ds, $entry, "uid"),
904                                                  "type" => "global",
905                                                  "mobile" =>  @ldap_get_values($ds, $entry, "mobile"),
906                                                  "telefone" =>  @ldap_get_values($ds, $entry, "telephonenumber"),
907                                                  "ou" =>  @ldap_get_values($ds, $entry, "ou"),
908                                                  "employeeNumber" =>  @ldap_get_values($ds, $entry, "employeeNumber")
909                                        );
910
911                                $_SESSION['phpgw_info']['expressomail']['contact_photo'] = @ldap_get_values_len($ds, $entry, "jpegphoto");
912                                ldap_close($ds);
913                                return $obj;
914                        }
915                }
916                return null;
917        }
918       
919        function uid2uidnumber($uid)
920        {
921                // do not follow the referral
922                $this->ldapRootConnect(false);
923                if ($this->ds)
924                {
925                        $filter="(&(phpgwAccountType=u)(uid=$uid))";
926                        $justthese = array("uidnumber");
927                        $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
928                        if(!$sr)
929                                return false;
930                        $info = ldap_get_entries($this->ds, $sr);
931                        return $info[0]["uidnumber"][0];
932                }
933                return false;
934        }
935}
936?>
Note: See TracBrowser for help on using the repository browser.