source: trunk/expressoMail1_2/inc/class.ldap_functions.inc.php @ 243

Revision 243, 16.0 KB checked in by niltonneto, 16 years ago (diff)

Correção de código para ocultar listas na janela de Pesquisar,

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1<?php                   
2include_once("class.imap_functions.inc.php");
3
4function ldapRebind($ldap_connection, $ldap_url)
5{
6        @ldap_bind($ldap_connection, $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc'],$_SESSION['phpgw_info']['expressomail']['ldap_server']['pw']);
7}
8                       
9class ldap_functions
10{
11        var $ds;
12        var $ldap_host;
13        var $ldap_context;
14        var $imap;
15       
16        // usa o host e context do contact center.
17        function ldapConnect($refer = false){
18                $this->ldap_host        = $_SESSION['phpgw_info']['expressomail']['ldap_server']['host'];
19                $this->ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn'];
20                $this->ds                       = ldap_connect($this->ldap_host);
21                ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
22                ldap_set_option($this->ds, LDAP_OPT_REFERRALS, $refer);
23                if ($refer)
24                {
25                        ldap_set_rebind_proc($this->ds, ldapRebind);
26                }
27                @ldap_bind($this->ds, $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc'],$_SESSION['phpgw_info']['expressomail']['ldap_server']['pw']);                             
28        }
29
30        //Teste jakjr retornando o DS
31        function ldapConnect2($refer = false){
32                $ds = ldap_connect($_SESSION['phpgw_info']['expressomail']['ldap_server']['host']);
33               
34                if (!$ds)
35                        return false;
36               
37                ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
38                ldap_set_option($ds, LDAP_OPT_REFERRALS, $refer);
39                if ($refer)
40                        ldap_set_rebind_proc($ds, ldapRebind);
41                @ldap_bind($ds, $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc'],$_SESSION['phpgw_info']['expressomail']['ldap_server']['pw']);
42               
43                return $ds;                             
44        }
45
46
47        // usa o host e context do setup.
48        function ldapRootConnect($refer = false){
49                $this->ldap_host        = $_SESSION['phpgw_info']['expressomail']['server']['ldap_host'];
50                $this->ldap_context = $_SESSION['phpgw_info']['expressomail']['server']['ldap_context'];
51                $this->ds                       = ldap_connect($this->ldap_host);
52                ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
53                ldap_set_option($this->ds, LDAP_OPT_REFERRALS, $refer);
54                ldap_bind($this->ds, $_SESSION['phpgw_info']['expressomail']['server']['ldap_root_dn'],$_SESSION['phpgw_info']['expressomail']['server']['ldap_root_pw']);                             
55
56        }
57
58        function quicksearch($params)
59        {       
60                include_once("class.functions.inc.php");
61                $functions = new functions;                                             
62
63                $search_for     = $params['search_for'];
64                $field          = $params['field'];
65                $ID                     = $params['ID'];
66               
67                $contacts_result = array();
68                $contacts_result['field'] = $field;
69                $contacts_result['ID'] = $ID;
70               
71                // follow the referral
72                $this->ldapConnect(true);
73               
74                if ($this->ds)
75                {
76                        if (($field != 'null') && ($ID != 'null'))
77                        {
78                                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(cn=*$search_for*)(mail=$search_for*)))";
79                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid");
80                        }
81                        else
82                        {
83                                $filter="(& (phpgwAccountType=u)(cn=*$search_for*) )";
84                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "jpegPhoto", "uid");
85                        }
86                       
87                        $sr=ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
88                        $count_entries = ldap_count_entries($this->ds,$sr);
89                       
90                        if ($count_entries > 200)
91                        {
92                                // Close old ldap conection
93                                ldap_close($this->ds);
94                               
95                                // Reopen a local ldap connection, following referral
96                                $this->ldapRootConnect(true);
97                               
98                                $user_dn = $_SESSION['phpgw_info']['expressomail']['user']['account_dn'];
99                                $user_sector_dn = ldap_explode_dn ( $user_dn, false );
100                                array_shift($user_sector_dn);
101                                array_shift($user_sector_dn);
102                                $user_sector_dn = implode(",", $user_sector_dn);
103                               
104                                // New search only on user sector
105                                $sr=ldap_search($this->ds, $user_sector_dn, $filter, $justthese);
106                                $count_entries = ldap_count_entries($this->ds,$sr);
107                               
108                                if ($count_entries > 200){
109                                        $return = array();
110                                        $return['status'] = false;
111                                        $return['error'] = "many results";
112                                        return $return;
113                                }
114                                else
115                                {
116                                        $quickSearch_only_in_userSector = true;
117                                }
118                        }
119                        $info = ldap_get_entries($this->ds, $sr);
120
121                        $tmp = array();
122                        for ($i=0; $i<$info["count"]; $i++)
123                        {
124                                if ($info[$i]["phpgwaccountvisible"][0] == '-1')
125                                        continue;
126                                $tmp[$info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count']] = $info[$i]["cn"][0];
127                        }
128                        natcasesort($tmp);
129                       
130                        $i = 0;
131                        if (($field != 'null') && ($ID != 'null'))
132                        {
133                                foreach ($tmp as $info => $cn)
134                                {
135                                        $contacts_result[$i] = array();
136                                        $contacts_result[$i]["cn"] = $cn;
137                                        list ($contacts_result[$i]["mail"], $contacts_result[$i]["phone"], $contacts_result[$i]["mobile"]) = split ('%', $info);
138                                        $i++;
139                                }
140                                $contacts_result['quickSearch_only_in_userSector'] = $quickSearch_only_in_userSector;
141                        }
142                        else
143                        {
144                                $options = '';
145                               
146                                foreach ($tmp as $info => $cn)
147                                {
148                                        $contacts_result[$i] = array();
149                                        $contacts_result[$i]["cn"] = $cn;
150                                        list ($contacts_result[$i]["mail"], $contacts_result[$i]["phone"], $contacts_result[$i]["mobile"], $contacts_result[$i]["uid"], $contacts_result[$i]["jpegphoto"]) = split ('%', $info);
151                                       
152                                        if ($contacts_result[$i]['jpegphoto'])
153                                                $photo_link = '<img src="./inc/show_user_photo.php?mail='.$contacts_result[$i]['mail'].'">';
154                                        else
155                                                $photo_link = '<img src="./templates/default/images/photo.png">';
156                                       
157                                        // '<tr class="quicksearchcontacts_unselected" onClick="javascript:QuickSearchUser.select_cc(this)">' .
158                                        $phoneUser = $contacts_result[$i]['phone'];
159                                       
160                                        if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_enabled'] && $phoneUser) {
161                                                $phoneUser = '<a title="'.$functions->getLang("Call to Comercial Number").'" href="#" onclick="InfoContact.connectVoip(\''.$phoneUser.'\',\'com\')">'.$phoneUser.'</a>';
162                                                if($contacts_result[$i]['mobile']){
163                                                $phoneUser .= ' / <a title="'.$functions->getLang("Call to Mobile Number").'" href="#" onclick="InfoContact.connectVoip(\''.$contacts_result[$i]['mobile'].'\',\'mob\')">'.$contacts_result[$i]['mobile'].'</a>';
164                                                }
165                                        }
166                                        $options .=
167                                                '<tr class="quicksearchcontacts_unselected">' .
168                                                        '<td class="cc" width="1%">' .
169                                                                '<a title="'.$functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result[$i]["cn"].'\', \''.$contacts_result[$i]["mail"].'\')">' .
170                                                                        $photo_link .
171                                                                '</a>' .
172                                                        '</td>' .
173                                                        '<td class="cc">' .
174                                                                '<span name="cn">' . $contacts_result[$i]['cn'] . '</span>' . '<br>' .
175                                                                '<a title="'.$functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result[$i]["cn"].'\', \''.$contacts_result[$i]["mail"].'\')">' .
176                                                                        '<font color=blue>' .
177                                                                                '<span name="mail">' . $contacts_result[$i]['mail'] . '</span>' . '<br>' .
178                                                                        '</font>' .
179                                                                '</a>' .
180                                                                $phoneUser .
181                                                        '</td>' .
182                                                '</tr>';
183                                        $i++;
184                                }
185                                $contacts_result = $options;
186                               
187                                if ($quickSearch_only_in_userSector)
188                                {
189                                        $head_option =
190                                                '<tr class="quicksearchcontacts_unselected">' .
191                                                        '<td colspan="2" width="100%" align="center">' .
192                                                                $functions->getLang('More than 200 results were found') . '.<br>' .
193                                                                $functions->getLang('Showing only the results found in your organization') . '.';
194                                                        '</td>' .
195                                                '</tr>';
196                                        $contacts_result = $head_option . $contacts_result;
197                                }
198                        }
199                }
200                ldap_close($this->ds);
201                return $contacts_result;
202        }
203
204        function get_organizations($params){
205                $organizations = array();
206                $referral = $params['referral'];
207                $this->ldapConnect($referral);
208                if ($this->ds) {
209                        $filter="ou=*";         
210                        $justthese = array("ou");
211                        $sr = ldap_list($this->ds, $this->ldap_context, $filter, $justthese);
212                        $info = ldap_get_entries($this->ds, $sr);
213                       
214                        for ($i=0; $i<$info["count"]; $i++)
215                                $organizations[$i] = $info[$i]["ou"][0];
216
217                        ldap_close($this->ds);
218                        sort($organizations);                                   
219                }
220                return $organizations;
221        }
222
223        function get_organizations2($params){
224                $organizations = array();
225                $referral = $params['referral'];
226                $this->ldapRootConnect($referral);
227                if ($this->ds) {
228                        $filter="ou=*";         
229                        $justthese = array("ou");
230                        $sr = ldap_list($this->ds, $this->ldap_context, $filter, $justthese);
231                        $info = ldap_get_entries($this->ds, $sr);
232                       
233                        for ($i=0; $i<$info["count"]; $i++)
234                        {
235                                $organizations[$i]['ou'] = $info[$i]["ou"][0];
236                                $organizations[$i]['dn'] = $info[$i]["dn"];
237                        }
238                       
239                        ldap_close($this->ds);
240                        sort($organizations);                                   
241                }
242                return $organizations;
243        }
244
245        function catalogsearch($params)
246        {       
247                $this->ldapConnect(true);
248                $cn     = $params['search_for'] ? "*".$params['search_for']."*" : "*";
249                $user_context = "ou=".$params['organization'].",".$this->ldap_context;         
250                $max_result       = $params['max_result'] ? $params['max_result'] : '200';             
251                $error = False;
252               
253                if ($this->ds) {                                                                                       
254                        $justthese = array("cn", "mail", "phpgwaccounttype", "phpgwAccountVisible");
255                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(cn=".$cn."))";
256                        $sr=ldap_search($this->ds, $user_context, $filter, $justthese);
257                       
258                        $count_entries = ldap_count_entries($this->ds,$sr);
259                        if ($count_entries > $max_result){
260                                $info = null;
261                                $error = True;                                         
262                        }
263                        else
264                                $info = ldap_get_entries($this->ds, $sr);               
265                       
266                        ldap_close($this->ds);                 
267                       
268                        $u_tmp = array();
269                        $g_tmp = array();
270                       
271                        for ($i=0; $i<$info["count"]; $i++){
272                                if ($info[$i]["phpgwaccountvisible"][0] == '-1')
273                                        continue;
274                                if((strtoupper($info[$i]["phpgwaccounttype"][0]) == 'U') && ($info[$i]["phpgwaccountvisible"][0] != '-1'))
275                                        $u_tmp[$info[$i]["mail"][0]] = $info[$i]["cn"][0];
276                                else
277                                        $g_tmp[$info[$i]["mail"][0]] = $info[$i]["cn"][0];
278                        }                                                                               
279                       
280                        natcasesort($u_tmp);
281                        natcasesort($g_tmp);
282                       
283                        $i = 0;
284                        $users = array();                       
285                       
286                        foreach ($u_tmp as $mail => $cn){                               
287                                $users[$i++] = array("name" => $cn, "email" => $mail);
288                        }
289                        unset($u_tmp);
290                       
291                        $i = 0;                 
292                        $groups = array();
293                       
294                        foreach ($g_tmp as $mail => $cn){                               
295                                $groups[$i++] = array("name" => $cn, "email" => $mail);
296                        }
297                        unset($g_tmp);
298                       
299                        return  array('users' => $users, 'groups' => $groups, 'error' => $error);
300                }                               
301                return null;
302        }
303       
304        function get_emails_ldap(){
305
306                $result['mail']= array();
307                $result['mailalter']= array();         
308                $user = $_SESSION['phpgw_info']['expressomail']['user']['account_lid'];
309                $this->ldapRootConnect(false);
310                if ($this->ds) {
311                        $filter="uid=".$user;           
312                        $justthese = array("mail","mailAlternateAddress");
313                        $sr = ldap_search($this->ds,$this->ldap_context, $filter, $justthese);
314                        $ent = ldap_get_entries($this->ds, $sr);
315                        ldap_close($this->ds);
316                       
317                        for ($i=0; $i<$ent["count"]; $i++){
318                                $result['mail'][] = $ent[$i]["mail"][0];
319                                $result['mailalter'][] = $ent[$i]["mailalternateaddress"][0];                           
320                        }
321                }
322                return $result;
323        }
324       
325        //Busca usuários de um contexto e já retorna as options do select;
326        function get_available_users($params)
327    {
328        $this->ldapRootConnect();
329        //Monta lista de Grupos e Usuários
330        $users = Array();
331        $groups = Array();
332        $user_context= $params['context'];
333        $owner = $_SESSION['phpgw_info']['expressomail']['user']['owner'];
334
335        if ($this->ds)
336        {
337            $justthese = array("gidNumber","cn");
338            if ($params['type'] == 'search')
339                $sr=ldap_search($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=g)(!(phpgwaccountvisible=-1)))"),$justthese);
340            else
341                $sr=ldap_list($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=g)(!(phpgwaccountvisible=-1)))"),$justthese);
342            $info = ldap_get_entries($this->ds, $sr);
343            for ($i=0; $i<$info["count"]; $i++)
344                $groups[$uids=$info[$i]["gidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    g);           
345            $justthese = array("phpgwaccountvisible","uidNumber","cn");
346            if ($params['type'] == 'search')
347                $sr=ldap_search($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))"),$justthese);
348            else
349                $sr=ldap_list($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))"),$justthese);
350
351            $info = ldap_get_entries($this->ds, $sr);
352            for ($i=0; $i<$info["count"]; $i++)
353            {
354                if ($info[$i]["phpgwaccountvisible"][0] == '-1')
355                    continue;
356                $users[$uids=$info[$i]["uidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    u);
357            }
358        }
359        ldap_close($this->ds);
360           
361        @asort($users);
362        @reset($users);   
363        @asort($groups);
364        @reset($groups);
365        $user_options ='';
366        $group_options ='';
367
368        foreach($groups as $id => $user_array) {
369                $newId = $id.'U';
370                $group_options .= '<option  value="'.$newId.'">'.utf8_decode($user_array['name']).'</option>'."\n";
371        }
372        foreach($users as $id => $user_array) {
373            if($owner != $id){
374                $newId = $id.'U';
375                $user_options .= '<option  value="'.$newId.'">'.utf8_decode($user_array['name']).'</option>'."\n";
376            }
377        }
378        return array("users" => $user_options, "groups" => $group_options);
379    }
380
381        //Busca usuários de um contexto e já retorna as options do select;
382        function get_available_users2($params)
383        {
384                $this->ldapRootConnect();
385               
386                $context= $params['context'];
387                $justthese = array("cn", "uid", "cn");
388                $filter = "(&(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))";
389
390            if ($this->ds)
391            {
392                        $sr=ldap_search($this->ds, $context, $filter, $justthese);
393                        $entries = ldap_get_entries($this->ds, $sr);
394                       
395                        for ($i=0; $i<$entries["count"]; $i++){
396                                if($_SESSION['phpgw_info']['expressomail']['user']['account_lid'] != $entries[$i]["uid"][0]){
397                                        $u_tmp[$entries[$i]["uid"][0]] = $entries[$i]["cn"][0];
398                                }
399                        }
400                       
401                        natcasesort($u_tmp);
402
403                        $i = 0;
404                        $users = array();
405                       
406                        if (count($u_tmp))
407                        {
408                                foreach ($u_tmp as $uidnumber => $cn)
409                                {
410                                        $options .= "<option value=$uidnumber>$cn</option>";
411                                }
412                                unset($u_tmp);
413                        }
414
415                        ldap_close($this->ds);
416                return $options;
417                }
418        }
419       
420        function uid2cn($uid)
421        {       
422                // do not follow the referral
423                $this->ldapRootConnect(false);
424                if ($this->ds)
425                {
426                        $filter="(&(phpgwAccountType=u)(uid=$uid))";           
427                        $justthese = array("cn");
428                        $sr=ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
429                       
430                        $info = ldap_get_entries($this->ds, $sr);
431                        return $info[0]["cn"][0];
432                }
433                return false;
434        }
435        function getSharedUsersFrom($params){           
436                $uids = explode(";",$params['uids']);
437
438                $this->imap = new imap_functions();
439                $filter = '';
440
441                foreach($uids as $index => $uid){
442                        $params = array();             
443                        $acl = $this->imap->getacltouser($uid);
444                        if(preg_match("/a/",$acl))
445                                $filter .= "(uid=$uid)";
446                }
447
448                $this->ldapRootConnect(false);
449                $filter="(&(phpgwAccountType=u)(|$filter))";
450                if ($this->ds) {                                       
451                        $justthese = array("cn","mail");
452                        $sr             =       ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
453                        ldap_sort($this->ds,$sr,"cn");                 
454                        $info   =       ldap_get_entries($this->ds, $sr);
455                        $info['myname'] = $_SESSION['phpgw_info']['expressomail']['user']['fullname'];                                         
456                        return $info;
457                }
458        }
459
460        function getUserByEmail($params)
461        {
462                $filter="(&(phpgwAccountType=u)(mail=" . $params['email'] . "))";
463                $ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn'];
464                $justthese = array("cn","uid","telephoneNumber","jpegPhoto","mobile");
465
466                // Follow the referral
467                $ds = $this->ldapConnect2(true);
468                if ($ds)
469                {                       
470                        $sr=ldap_search($ds, $ldap_context, $filter, $justthese);
471                       
472                        if (!$sr)
473                                return null;
474                       
475                        $entry = ldap_first_entry($ds, $sr);
476                       
477                        if($entry) {                                           
478                                $obj =  array("cn" => ldap_get_values($ds, $entry, "cn"),
479                                                  "email" => $params['email'],
480                                                  "uid" => ldap_get_values($ds, $entry, "uid"),
481                                                  "type" => "global",
482                                                  "mobile" =>  @ldap_get_values($ds, $entry, "mobile"),
483                                                  "telefone" =>  @ldap_get_values($ds, $entry, "telephonenumber")
484                                        );
485
486                                $_SESSION['phpgw_info']['expressomail']['contact_photo'] = ldap_get_values_len($ds, $entry, "jpegphoto");
487                                ldap_close($ds);
488                                return $obj;
489                        }
490                }
491                return null;
492        }
493}
494?>
Note: See TracBrowser for help on using the repository browser.