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

Revision 72, 13.9 KB checked in by niltonneto, 17 years ago (diff)

* empty log message *

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