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 *
RevLine 
[387]1<?php
[176]2include_once("class.imap_functions.inc.php");
[342]3include_once("class.functions.inc.php");
[176]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}
[387]9
[2]10class ldap_functions
11{
12        var $ds;
13        var $ldap_host;
14        var $ldap_context;
15        var $imap;
[342]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");
[1740]22                $this->external_srcs= ( isset( $external_srcs ) ) ? $external_srcs : NULL;
[387]23                $this->max_result       = 200;
24                $this->functions = new functions();
25        }
[342]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 {
[325]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'];
[387]41                        $this->branch = 'ou';
[325]42                }
[387]43
[325]44                $this->ds = ldap_connect($this->ldap_host);
[2]45                ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
[37]46                ldap_set_option($this->ds, LDAP_OPT_REFERRALS, $refer);
[342]47                if ($refer)     {
[176]48                        ldap_set_rebind_proc($this->ds, ldapRebind);
49                }
[387]50                @ldap_bind($this->ds,$this->bind_dn,$this->bind_dn_pw );
[2]51        }
52
[205]53        //Teste jakjr retornando o DS
54        function ldapConnect2($refer = false){
55                $ds = ldap_connect($_SESSION['phpgw_info']['expressomail']['ldap_server']['host']);
[387]56
[205]57                if (!$ds)
58                        return false;
[387]59
[205]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']);
[387]65
66                return $ds;
[205]67        }
68
69
[108]70        // usa o host e context do setup.
[2]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);
[37]76                ldap_set_option($this->ds, LDAP_OPT_REFERRALS, $refer);
[387]77                ldap_bind($this->ds, $_SESSION['phpgw_info']['expressomail']['server']['ldap_root_dn'],$_SESSION['phpgw_info']['expressomail']['server']['ldap_root_pw']);
[2]78
79        }
80
81        function quicksearch($params)
[387]82        {
[95]83                include_once("class.functions.inc.php");
[387]84                $functions = new functions;
[108]85
[4906]86//              $search_for     = utf8_encode($params['search_for']);
87  //Testa se a busca foi realizada com aspas
[325]88                $search_for     = utf8_encode($params['search_for']);
[4906]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
[2]100                $field          = $params['field'];
101                $ID                     = $params['ID'];
[644]102               
[3388]103                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'])
104                    $extendedinfo=true;
105                else
106                    $extendedinfo=false;
107
[325]108                $search_for     = explode(" ",$search_for);
109                $aux="";
110                foreach ($search_for as $search)
[644]111                {
112                        if(!$aux)
[325]113                        {
114                                $aux=$search;
[644]115                        }
116                        else
117                        {
[657]118                                if (strlen($search) > 2)
119                                {
[644]120                                        $aux=$aux."*".$search;
[325]121                                }
[657]122                                else
123                                {
124                                        $aux=$aux." ".$search;
125                                }
126                        }
[644]127                }
[325]128                $search_for=$aux;
[644]129               
[2]130                $contacts_result = array();
131                $contacts_result['field'] = $field;
132                $contacts_result['ID'] = $ID;
133                // follow the referral
134                $this->ldapConnect(true);
[387]135
[2]136                if ($this->ds)
[342]137                {
138                        if (($field != 'null') && ($ID != 'null'))
[325]139                        {
[3388]140                                $filter="(& (&(|(phpgwAccountType=u)(phpgwAccountType=g)(phpgwAccountType=l))(mail=*)) (|(cn=*$search_for*)(mail=*$search_for*)) (!(phpgwaccountvisible=-1)) )";
141                                if($extendedinfo)
[325]142                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid", "employeeNumber", "ou");
[3388]143                                else
144                                    $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid");
[342]145                        }
[37]146                        else
[342]147                        {
[4906]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)) )";
[3388]155                                if($extendedinfo)
[342]156                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible","jpegPhoto", "uid", "employeeNumber", "ou");
[3388]157                                else
158                                    $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible","jpegPhoto", "uid");
[342]159                        }
160                        $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result + 1);
161                        if(!$sr)
162                                return null;
[325]163                        $count_entries = ldap_count_entries($this->ds,$sr);
[342]164
[387]165                        // Get user org dn.
[271]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);
[387]171
[271]172                        // New search only on user sector
[5246]173                        if ($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['cloud_ldap'] || $count_entries > $this->max_result)
[342]174                        {
[108]175                                // Close old ldap conection
176                                ldap_close($this->ds);
[387]177
[108]178                                // Reopen a local ldap connection, following referral
179                                $this->ldapRootConnect(true);
[387]180
[342]181                                $sr= ldap_search($this->ds, $user_sector_dn, $filter, $justthese);
182                                if(!$sr)
183                                        return null;
[108]184                                $count_entries = ldap_count_entries($this->ds,$sr);
[387]185
[342]186                                if ($count_entries > $this->max_result){
[108]187                                        $return = array();
188                                        $return['status'] = false;
[387]189                                        $return['error'] = "many results";
[108]190                                        return $return;
191                                }
[5246]192                                elseif($count_entries < 1){
193                                    $return = array();
194                                    return $return;
195
196                                }else
[95]197                                {
[5246]198                                        if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['cloud_ldap'])
199                                            $quickSearch_cloud = true;
200                                        else
201                                            $quickSearch_only_in_userSector = true;
[95]202                                }
203                        }
[387]204
[37]205                        $info = ldap_get_entries($this->ds, $sr);
[387]206
[2]207                        $tmp = array();
[271]208                        $tmp_users_from_user_org = array();
[387]209
[342]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"]) {
[325]214                                                $this->ldapConnect(true,$i);
215                                                $filter="(|(cn=*$search_for*)(mail=*$search_for*))";
[3388]216                                                if($extendedinfo)
[342]217                                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid","employeeNumber", "ou");
[3388]218                                                else
219                                                    $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid");
[342]220                                                $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result+1);
221                                                if(!$sr)
222                                                        return null;
[325]223                                                $count_entries = ldap_count_entries($this->ds,$sr);
224                                                $search = ldap_get_entries($this->ds, $sr);
[387]225                                                for ($j=0; $j<$search["count"]; $j++) {
226                                                        $info[] = $search[$j];
[342]227                                                }
[325]228                                                $info["count"] = count($info)-1;
229                                        }
[271]230                                }
[342]231                        }
232
[325]233                        for ($i=0; $i<$info["count"]; $i++)
[342]234                        {
[5246]235                                if ($quickSearch_only_in_userSector || $quickSearch_cloud)
[271]236                                {
[325]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]);
[342]238                                }
[325]239                                else
[342]240                                {
241                                        if (preg_match("/$user_sector_dn/i", $info[$i]['dn']))
[325]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]);
[342]244                                        }
[271]245                                        else
[342]246                                        {
[325]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]);
[271]248                                        }
249                                }
[342]250                        }
[271]251                        natcasesort($tmp_users_from_user_org);
[2]252                        natcasesort($tmp);
[387]253
[37]254                        if (($field != 'null') && ($ID != 'null'))
[2]255                        {
[271]256                                $i = 0;
[387]257
[271]258                                $tmp = array_merge($tmp, $tmp_users_from_user_org);
259                                natcasesort($tmp);
[387]260
[37]261                                foreach ($tmp as $info => $cn)
262                                {
263                                        $contacts_result[$i] = array();
264                                        $contacts_result[$i]["cn"] = $cn;
[325]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);
[37]266                                        $i++;
267                                }
[95]268                                $contacts_result['quickSearch_only_in_userSector'] = $quickSearch_only_in_userSector;
[5246]269                                $contacts_result['quickSearch_cloud'] = $quickSearch_cloud;
[2]270                        }
[37]271                        else
272                        {
[271]273                                $options_users_from_user_org = '';
[37]274                                $options = '';
[271]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 */
[37]286                                foreach ($tmp as $info => $cn)
287                                {
288                                        $contacts_result[$i] = array();
[271]289                                        $options .= $this->make_quicksearch_card($info, $cn);
[37]290                                        $i++;
291                                }
[387]292
[95]293                                if ($quickSearch_only_in_userSector)
294                                {
[271]295                                        if ($options != '')
296                                        {
297                                                $head_option =
298                                                        '<tr class="quicksearchcontacts_unselected">' .
299                                                                '<td colspan="2" width="100%" align="center">' .
[342]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') . '.';
[271]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                                        }
[108]313                                }
[5246]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                                }
[271]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>' .
[342]336                                                                        $this->functions->getLang('Users from your organization') . '</B> ['.count($tmp_users_from_user_org).']';
337                                                                '</td>' .
[271]338                                                        '</tr>';
339
340                                                $head_option1 =
341                                                        '<tr class="quicksearchcontacts_unselected">' .
342                                                                '<td colspan="2" width="100%" align="center" style="background:#EEEEEE"><B>' .
[342]343                                                                        $this->functions->getLang('Users from others organizations') . '</B> ['.count($tmp).']';
344                                                                '</td>' .
[271]345                                                        '</tr>';
346                                        }
347                                        $contacts_result = $head_option0 . $options_users_from_user_org . $head_option1 . $options;
348                                }
[37]349                        }
[2]350                }
351                ldap_close($this->ds);
352                return $contacts_result;
353        }
354
[271]355        function make_quicksearch_card($info, $cn)
356        {
357                include_once("class.functions.inc.php");
[387]358                $functions = new functions;
359
[271]360                $contacts_result = array();
361                $contacts_result["cn"] = $cn;
[3388]362                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'])
363                    $extendedinfo=true;
364                else
365                    $extendedinfo=false;
[387]366
[3388]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
[271]369                if ($contacts_result['jpegphoto'])
370                        $photo_link = '<img src="./inc/show_user_photo.php?mail='.$contacts_result['mail'].'">';
371                else
[1495]372                        $photo_link = '<img src="./templates/default/images/photo.jpg">';
[387]373
[271]374                $phoneUser = $contacts_result['phone'];
[387]375
[271]376                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_enabled'] && $phoneUser) {
[342]377                        $phoneUser = '<a title="'.$this->functions->getLang("Call to Comercial Number").'" href="#" onclick="InfoContact.connectVoip(\''.$phoneUser.'\',\'com\')">'.$phoneUser.'</a>';
[271]378                        if($contacts_result['mobile']){
[342]379                                $phoneUser .= ' / <a title="'.$this->functions->getLang("Call to Mobile Number").'" href="#" onclick="InfoContact.connectVoip(\''.$contacts_result['mobile'].'\',\'mob\')">'.$contacts_result['mobile'].'</a>';
[271]380                        }
381                }
[3388]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
[644]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:
[271]406                $option =
407                        '<tr class="quicksearchcontacts_unselected">' .
408                                '<td class="cc" width="1%">' .
[342]409                                        '<a title="'.$this->functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result["cn"].'\', \''.$contacts_result["mail"].'\')">' .
[271]410                                                $photo_link .
411                                        '</a>' .
412                                '</td>' .
413                                '<td class="cc">' .
[3388]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"].'\')">' .
[271]416                                                '<font color=blue>' .
[644]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>' .
[271]420                                        $phoneUser .
[3388]421                                        $ou .
[271]422                                '</td>' .
[644]423                                '</tr>';
[271]424                return $option;
425        }
426
[387]427        function get_catalogs(){
[325]428                $catalogs = array();
[387]429                $catalogs[0] = $this->functions->getLang("Global Catalog");
430                if($this->external_srcs)
[342]431                        foreach ($this->external_srcs as $key => $valor ){
[325]432                        $catalogs[$key] = $valor['name'];
433                }
434                return $catalogs;
435        }
[2]436        function get_organizations($params){
437                $organizations = array();
[325]438                $params['referral']?$referral = $params['referral']:$referral = false;
[5246]439                $params['organization']?$org = "ou=".$params['organization'].",":$org = "";
[325]440                $cat = $params['catalog'];
[5246]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{
[325]466                        return null;
[5246]467            }
[2]468        }
469        function get_organizations2($params){
470                $organizations = array();
471                $referral = $params['referral'];
472                $this->ldapRootConnect($referral);
473                if ($this->ds) {
[3530]474                        $filter="(&(objectClass=organizationalUnit)(!(phpgwAccountVisible=-1)))";
[2]475                        $justthese = array("ou");
476                        $sr = ldap_list($this->ds, $this->ldap_context, $filter, $justthese);
477                        $info = ldap_get_entries($this->ds, $sr);
[387]478
[3530]479
480                        if($info["count"] == 0)
[2]481                        {
[3530]482                            $organizations[0]['ou'] = $this->ldap_context;
483                            $organizations[0]['dn'] = $this->ldap_context;
[2]484                        }
[3530]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                        }
[2]492                        ldap_close($this->ds);
[387]493                        sort($organizations);
[2]494                }
495                return $organizations;
496        }
[925]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
[2]508
[925]509                if ($this->ds)
510                {
511                    $justthese = array("gidNumber","cn");
512                    if ($params['type'] == 'search')
[1633]513                        $sr=ldap_search($this->ds, $context, ("(&(phpgwaccounttype=g)(!(phpgwaccountvisible=-1))(cn=*$filtro*))"),$justthese);
[925]514                    else
[1639]515                        $sr=ldap_list($this->ds,  $context ? $context : $user_context, ("(&(phpgwaccounttype=g)(!(phpgwaccountvisible=-1))(cn=*".$filtro."*))"),$justthese);
[925]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);
[3909]519                    $justthese = array("phpgwaccountvisible","uidNumber","cn");
[925]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
[1639]524                        $sr=ldap_list($this->ds, $context ? $context : $user_context, ("(&(phpgwaccounttype=u)(!(phpgwaccountvisible=-1))(phpgwaccountstatus=A)(|(cn=*$filtro*)(mail=$filtro*)))"),$justthese);
[925]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;
[3909]531                        $users[$uids=$info[$i]["uidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    u);
[925]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
[3909]543                foreach($groups as $id => $user_array) {
[925]544                        $newId = $id.'U';
545                        $group_options .= '<option  value="'.$newId.'">'.utf8_decode($user_array['name']).'</option>'."\n";
[3909]546                }
[925]547                foreach($users as $id => $user_array) {
548                    if($owner != $id){
[3909]549                        $newId = $id.'U';
550                        $user_options .= '<option  value="'.$newId.'">'.utf8_decode($user_array['name']).'</option>'."\n";
[925]551                    }
552                }
[3909]553                return array("users" => $user_options, "groups" => $group_options);
[925]554        }
555
[2]556        function catalogsearch($params)
[387]557        {
[325]558                $cn     = $params['search_for'] ? "*".utf8_encode($params['search_for'])."*" : "*";
[387]559                $max_result       = $params['max_result'] ? $params['max_result'] : $this->max_result;
[325]560                $catalog = $params['catalog'];
[2]561                $error = False;
[3388]562                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'])
563                    $extendedinfo=true;
564                else
565                    $extendedinfo=false;
[387]566
[3388]567
[381]568                $this->ldapConnect(true,$catalog);
[387]569
[5246]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'] =="")
[5865]576                    $params['organization_sub'] = "all";
[5246]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;
[387]580                if ($this->ds) {
[325]581                        if ($catalog == 0){
582                                //os atributos "employeeNumber" e "ou" foram adicionado ao vetor de busca;
[3388]583                                if($extendedinfo)
[325]584                                $justthese = array("cn", "mail", "phpgwaccounttype", "phpgwAccountVisible", "employeeNumber", "ou");
[3388]585                                else
586                                    $justthese = array("cn", "mail", "phpgwaccounttype", "phpgwAccountVisible");
587
[325]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;
[3388]592                                if($extendedinfo)
[325]593                                $justthese = array("cn", "mail", "employeeNumber", "ou");
[3388]594                                else
595                                    $justthese = array("cn", "mail");
[325]596                                $filter="(&(objectClass=".$this->object_class.")(cn=".$cn."))";
597                                //$user_context = $this->branch."=".$params['organization'].",".$external_srcs[$catalog]['dn'];
598                        }
[387]599
[381]600                        $sr=@ldap_search($this->ds, $user_context, $filter, $justthese, 0, $max_result+1);
[342]601                        if(!$sr)
602                                return null;
[2]603                        $count_entries = ldap_count_entries($this->ds,$sr);
[381]604                        if ($count_entries > $max_result){
[2]605                                $info = null;
[387]606                                $error = True;
[2]607                        }
608                        else
[387]609                                $info = ldap_get_entries($this->ds, $sr);
610
611                        ldap_close($this->ds);
612
[2]613                        $u_tmp = array();
614                        $g_tmp = array();
[387]615
[2]616                        for ($i=0; $i<$info["count"]; $i++){
[325]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];
[387]620                                if((!$catalog==0)||(strtoupper($info[$i]["phpgwaccounttype"][0]) == 'L') && ($info[$i]["phpgwaccountvisible"][0] != '-1'))
[325]621                                        $g_tmp[$info[$i]["mail"][0]] = utf8_decode($info[$i]["cn"][0]);
[387]622                        }
623
[2]624                        natcasesort($u_tmp);
625                        natcasesort($g_tmp);
[387]626
[2]627                        $i = 0;
[387]628                        $users = array();
[325]629
[387]630                        foreach ($u_tmp as $mail => $cn){
631
[325]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
[2]637                        }
638                        unset($u_tmp);
[387]639
640                        $i = 0;
[2]641                        $groups = array();
[387]642
643                        foreach ($g_tmp as $mail => $cn){
[2]644                                $groups[$i++] = array("name" => $cn, "email" => $mail);
645                        }
646                        unset($g_tmp);
[387]647
[2]648                        return  array('users' => $users, 'groups' => $groups, 'error' => $error);
[387]649                }else
[2]650                return null;
651        }
[387]652
[2]653        function get_emails_ldap(){
654
655                $result['mail']= array();
[387]656                $result['mailalter']= array();
[2]657                $user = $_SESSION['phpgw_info']['expressomail']['user']['account_lid'];
658                $this->ldapRootConnect(false);
659                if ($this->ds) {
[387]660                        $filter="uid=".$user;
[2]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);
[387]665
[2]666                        for ($i=0; $i<$ent["count"]; $i++){
667                                $result['mail'][] = $ent[$i]["mail"][0];
[387]668                                $result['mailalter'][] = $ent[$i]["mailalternateaddress"][0];
[2]669                        }
670                }
671                return $result;
672        }
[387]673
[342]674        //Busca usuarios de um contexto e ja retorna as options do select;
[2]675        function get_available_users($params)
[37]676    {
677        $this->ldapRootConnect();
[342]678        //Monta lista de Grupos e Usuarios
[37]679        $users = Array();
680        $groups = Array();
681        $user_context= $params['context'];
682        $owner = $_SESSION['phpgw_info']['expressomail']['user']['owner'];
[2]683
[37]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++)
[387]693                $groups[$uids=$info[$i]["gidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    g);
[37]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);
[2]699
[37]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);
[387]709
[37]710        @asort($users);
[387]711        @reset($users);
[37]712        @asort($groups);
713        @reset($groups);
714        $user_options ='';
715        $group_options ='';
[2]716
[37]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
[342]730        //Busca usuarios de um contexto e ja retorna as options do select;
[2]731        function get_available_users2($params)
732        {
733                $this->ldapRootConnect();
[387]734
[2]735                $context= $params['context'];
736                $justthese = array("cn", "uid", "cn");
[21]737                $filter = "(&(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))";
[2]738
[387]739            if ($this->ds)
[2]740            {
741                        $sr=ldap_search($this->ds, $context, $filter, $justthese);
742                        $entries = ldap_get_entries($this->ds, $sr);
[387]743
[2]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                        }
[387]749
[2]750                        natcasesort($u_tmp);
751
752                        $i = 0;
753                        $users = array();
[387]754
[2]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        }
[387]768
[2]769        function uid2cn($uid)
[387]770        {
[2]771                // do not follow the referral
772                $this->ldapRootConnect(false);
773                if ($this->ds)
774                {
[387]775                        $filter="(&(phpgwAccountType=u)(uid=$uid))";
[2]776                        $justthese = array("cn");
[344]777                        $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
778                        if(!$sr)
779                                return false;
[2]780                        $info = ldap_get_entries($this->ds, $sr);
[325]781                        return utf8_decode($info[0]["cn"][0]);
[2]782                }
783                return false;
784        }
[757]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        }
[387]801        function getSharedUsersFrom($params){
[2]802                $filter = '';
[1912]803                $i = 0;         
804                //Added to save if must save sent messages in shared folder
805                $acl_save_sent_in_shared = array();
806               
[371]807                if($params['uids']) {
[387]808                        $uids = explode(";",$params['uids']);
[1912]809                        $this->imap = new imap_functions();                     
[371]810                        foreach($uids as $index => $uid){
[387]811                                $params = array();
[1912]812                                //Added to save if user has create permission
813                                $acl_create_message = array();
[371]814                                $acl = $this->imap->getacltouser($uid);
[1912]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                        }                       
[2]823                }
[1912]824               
[387]825                $this->ldapRootConnect(false);
[371]826                if ($this->ds) {
[1912]827                        $justthese = array("cn","mail","uid");
[371]828                        if($filter) {
[1912]829                                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=s))(|$filter))";
[371]830                                $sr             =       ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
[387]831                                ldap_sort($this->ds,$sr,"cn");
832                                $info   =       ldap_get_entries($this->ds, $sr);
[1912]833                                $var = print_r($acl_save_sent_in_shared, true);                         
834                                for ($i = 0;$i < $info["count"]; $i++){
[371]835                                        $info[$i]['cn'][0] = utf8_decode($info[$i]['cn'][0]);
[1912]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                                }
[371]841                        }
[1912]842               
[371]843                        $info['myname'] = $_SESSION['phpgw_info']['expressomail']['user']['fullname'];
[387]844
[371]845                        //Find institucional_account.
846                        $filter="(&(phpgwAccountType=i)(mailForwardingAddress=".$_SESSION['phpgw_info']['expressomail']['user']['email']."))";
[387]847                        $sr     = ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
[448]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]);
[1912]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];                                 
[448]862                                }
[371]863                        }
[448]864
865                        $_SESSION['phpgw_info']['expressomail']['user']['shared_mailboxes'] = $info;
[1912]866                       
[2]867                        return $info;
868                }
869        }
[27]870
[205]871        function getUserByEmail($params)
872        {
[3163]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)); 
[205]877                $filter="(&(phpgwAccountType=u)(mail=" . $params['email'] . "))";
878                $ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn'];
[3388]879                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info'])
880                    $extendedinfo=true;
881                else
882                    $extendedinfo=false;
[205]883
[3388]884                if($extendedinfo)
885                    $justthese = array("cn","uid","telephoneNumber","jpegPhoto","mobile","ou","employeeNumber");
886                else
887                    $justthese = array("cn","uid","telephoneNumber","jpegPhoto","mobile");
888
[27]889                // Follow the referral
[205]890                $ds = $this->ldapConnect2(true);
891                if ($ds)
[387]892                {
[342]893                        $sr=@ldap_search($ds, $ldap_context, $filter, $justthese);
[387]894
[205]895                        if (!$sr)
896                                return null;
[387]897
[205]898                        $entry = ldap_first_entry($ds, $sr);
[387]899
900                        if($entry) {
[381]901                                $obj =  array("cn" => utf8_decode(current(ldap_get_values($ds, $entry, "cn"))),
[205]902                                                  "email" => $params['email'],
903                                                  "uid" => ldap_get_values($ds, $entry, "uid"),
[27]904                                                  "type" => "global",
[205]905                                                  "mobile" =>  @ldap_get_values($ds, $entry, "mobile"),
[3388]906                                                  "telefone" =>  @ldap_get_values($ds, $entry, "telephonenumber"),
907                                                  "ou" =>  @ldap_get_values($ds, $entry, "ou"),
908                                                  "employeeNumber" =>  @ldap_get_values($ds, $entry, "employeeNumber")
[205]909                                        );
[27]910
[320]911                                $_SESSION['phpgw_info']['expressomail']['contact_photo'] = @ldap_get_values_len($ds, $entry, "jpegphoto");
[205]912                                ldap_close($ds);
[27]913                                return $obj;
[205]914                        }
[27]915                }
916                return null;
917        }
[1500]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        }
[2]935}
[108]936?>
Note: See TracBrowser for help on using the repository browser.