source: companies/celepar/jabberit_messenger/inc/class.ldap_im.inc.php @ 763

Revision 763, 9.9 KB checked in by niltonneto, 15 years ago (diff)

Importação inicial do Expresso da Celepar

Line 
1<?php
2  /***************************************************************************\
3  *  Expresso - Expresso Messenger                                            *
4  *     - Alexandre Correia / Rodrigo Souza                                                               *
5  *     - JETI - http://jeti-im.org/                                                                              *
6  * ------------------------------------------------------------------------- *
7  *  This program is free software; you can redistribute it and/or modify it  *
8  *  under the terms of the GNU General Public License as published by the    *
9  *  Free Software Foundation; either version 2 of the License, or (at your   *
10  *  option) any later version.                                               *
11  \***************************************************************************/
12
13define('PHPGW_INCLUDE_ROOT', '../');
14define('PHPGW_API_INC','../phpgwapi/inc');
15require_once( PHPGW_API_INC . '/class.common.inc.php');
16
17class ldap_im
18{
19        private $ldap;
20        private $ldap_host;
21        private $ldap_context;
22        private $ldap_dn;
23        private $ldap_pass;
24        private $common;
25        private $jid;
26        private $max_result;
27        private $ou_User;
28       
29        public final function __construct()
30        {
31                $this->ldap_host        = (isset($_SESSION['phpgw_info']['jabberit_messenger']['server_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['server_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_host'];
32                $this->ldap_context     = (isset($_SESSION['phpgw_info']['jabberit_messenger']['context_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['context_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_context'];
33                $this->ldap_dn          = (isset($_SESSION['phpgw_info']['jabberit_messenger']['user_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['user_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
34                $this->ldap_pass        = (isset($_SESSION['phpgw_info']['jabberit_messenger']['password_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['password_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
35                $this->jid                      = $_SESSION['phpgw_info']['jabberit_messenger']['user'];
36                $this->max_result       = 50;
37        }
38
39        public final function __destruct()
40        {
41                if( $this->ldap )
42                        ldap_close($this->ldap);
43        }       
44
45        private final function _connect_ldap()
46        {
47                $this->common = new common();
48               
49                if( !$this->ldap )
50                {
51                        $GLOBALS['phpgw_info']['server']['ldap_version3'] = true;
52                        $this->ldap = $this->common->ldapConnect( $this->ldap_host,$this->ldap_dn,$this->ldap_pass, false );
53                }
54        }
55       
56        private final function _ldapConnect($refer = false)
57        {
58                function ldapRebindJabberit($ldap_connection, $ldap_url)
59                {
60                        $acc = $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['acc'];
61                        $pw = $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['pw'];
62                       
63                        @ldap_bind($ldap_connection, $acc,$pw);
64                }
65
66                // Using ContactCenter configuration.
67                $this->ldap_host        =       $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['host'];
68                $this->ldap_context     =       $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['dn'];
69                $this->ldap_dn          =       $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['acc'];
70                $this->ldap_pass        =       $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['pw'];
71
72                $this->ldap = ldap_connect($this->ldap_host);
73                ldap_set_option($this->ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
74                ldap_set_option($this->ldap, LDAP_OPT_REFERRALS, $refer);
75               
76                if ($refer)
77                {
78                        ldap_set_rebind_proc($this->ldap, ldapRebindJabberit);
79                }
80               
81                @ldap_bind($this->ldap,$this->ldap_dn,$this->ldap_pass);
82        }
83
84        public final function list_groups_memberUid($pGroup)
85        {
86                $this->_ldapConnect();
87               
88                if( $this->ldap )
89                {
90                        $filter = "(&(objectclass=posixgroup)(|".$pGroup."))";
91                        $justthese = array("dn","memberuid","gidnumber");
92                        $search = ldap_search($this->ldap,$this->ldap_context,$filter, $justthese);
93                        $result = ldap_get_entries($this->ldap,$search);
94                       
95                        if( $result['count'] > 0 )
96                                return $result;
97                }               
98               
99                return false;
100        }
101
102        public final function list_participants_externals($pSearch)
103        {
104                $this->_ldapConnect(true);
105               
106                $mail = $pSearch['mail'];
107               
108                if( $this->ldap )
109                {
110                        $filter = "(&(phpgwaccounttype=u)(mail=".$mail."))";
111                        $justthese = array("uid","uidNumber","cn","mail","phpgwAccountVisible","dn","jpegPhoto");
112                        $search = ldap_search($this->ldap,$this->ldap_context,$filter,$justthese, 0, $this->max_result + 1);
113                        $entry1 = ldap_get_entries($this->ldap,$search);
114                        $entry = ldap_first_entry( $this->ldap, $search );
115                }                       
116               
117                if( $entry1['count'] > 0 )
118                {
119                        $i = 0;
120                        $result_user = array();
121                        $result = array();
122
123                        while($entry)
124                        {
125                       
126                                if ( $entry1[$i]['phpgwaccountvisible'][0] != '-1' )
127                                {
128                                        $result['uidnumber'] = @ldap_get_values($this->ldap, $entry, 'uidnumber');                     
129                                        $result['mail'] = @ldap_get_values($this->ldap, $entry, 'mail');
130                                        $result['uid'] = @ldap_get_values($this->ldap, $entry, 'uid');
131                                        $result['cn'] = @ldap_get_values($this->ldap, $entry, 'cn');
132
133                                        foreach ( $result as $key => $value )
134                                                $result_user[$i][$key] = $value[0];
135
136                                        $ou = explode('dc=', $entry1[$i]['dn']);
137                                        $ou = explode("ou=",$ou[0]);
138                                        $ou = array_pop($ou);
139                                        $result_user[$i]['dn'] = strtoupper(substr($ou,0,strlen($ou)-1));
140
141                                        $result_user[$i]['photo'] = 0;
142
143                                        $photo = @ldap_get_values_len($this->ldap, $entry, 'jpegphoto');
144
145                                        if ( $photo )
146                                        {
147                                                $result_user[$i]['photo'] = 1;
148                                                $_SESSION['phpgw_info']['jabberit_messenger']['photo'][trim($result_user[$i]['uid'])] = $photo[0];
149                                        }
150
151                                        $i++;
152                                }                               
153                                $entry = ldap_next_entry($this->ldap,$entry);   
154                        }
155                       
156                        $return  = "<uids>";
157                        $return .= "<".$result_user[0]['dn']."><data>";
158                        $return .= "<cn>".$result_user[0]['cn']."</cn>";
159                        $return .= "<mail>".$result_user[0]['mail']."</mail>";
160                        $return .= "<uid>".$result_user[0]['uid']."</uid>";
161                        $return .= "<photo>".$result_user[0]['photo']."</photo>";                                                                       
162                        $return .= "</data></".$result_user[0]['dn'].">";                       
163                        $return .= "</uids>";
164
165                        return $return;         
166                }
167               
168                return '<empty/>';
169        }
170
171        public final function list_users_ldap( $search, $uidnumber, $ous = false )
172        {
173                $this->_connect_ldap();
174       
175                if( $this->ldap )
176                {
177                        $filter = "(&(phpgwaccounttype=u)(|".$uidnumber.")(".$search ."))";
178                        $justthese = array("uid","uidNumber","cn","mail","phpgwAccountVisible","dn","jpegPhoto");
179                        // SERPRO
180                        //$justthese = array("uid","uidNumber","cn","mail","description","phpgwAccountVisible","dn","jpegPhoto");
181       
182                        if( $ous != false )
183                                $search = ldap_search($this->ldap,$ous.",".$this->ldap_context,$filter,$justthese, 0, $this->max_result + 1);
184                        else
185                                $search = ldap_search($this->ldap,$this->ldap_context,$filter,$justthese, 0, $this->max_result + 1);
186
187                        $entry1 = ldap_get_entries($this->ldap,$search);
188                        $entry  = ldap_first_entry($this->ldap,$search);
189                }
190
191                if( $entry1['count'] > 0 )
192                {
193                        if( count($entry1) < $this->max_result )
194                        {
195                                $i = 0;
196                                $result_user = array();
197                                $result = array();
198
199                                while($entry)
200                                {
201                               
202                                        if ( $entry1[$i]['phpgwaccountvisible'][0] != '-1' )
203                                        {
204                                                $result['uidnumber'] = @ldap_get_values($this->ldap, $entry, 'uidnumber');                     
205                                                $result['mail'] = @ldap_get_values($this->ldap, $entry, 'mail');
206                                                $result['uid'] = @ldap_get_values($this->ldap, $entry, 'uid');
207                                                $result['cn'] = @ldap_get_values($this->ldap, $entry, 'cn');
208                                                // SERPRO
209                                                //$result['description'] = @ldap_get_values($this->ldap, $entry, 'description');
210
211                                                foreach ( $result as $key => $value )
212                                                        $result_user[$i][$key] = $value[0];
213
214                                                $ou = explode('dc=', $entry1[$i]['dn']);
215                                                $ou = explode("ou=",$ou[0]);
216                                                $ou = array_pop($ou);
217                                                $result_user[$i]['dn'] = strtoupper(substr($ou,0,strlen($ou)-1));
218
219                                                $result_user[$i]['photo'] = 0;
220                                                $photo = @ldap_get_values_len($this->ldap, $entry, 'jpegphoto');
221                                                if ( $photo )
222                                                {
223                                                        $result_user[$i]['photo'] = 1;
224                                                        $_SESSION['phpgw_info']['jabberit_messenger']['photo'][trim($result_user[$i]['uid'])] = $photo[0];
225                                                }
226                                               
227                                                $organization = explode(",", $_SESSION['phpgw_info']['jabberit_messenger']['attributes_org_ldap_jabberit']);
228
229                                                if(is_array($organization))
230                                                {
231                                                        foreach($organization as $attr)
232                                                        {
233                                                                $tmp = explode(";",$attr);
234                                                                if( strtolower(trim($tmp[0])) == strtolower(trim($result_user[$i]['dn'])) )
235                                                                {
236                                                                        switch(strtolower(trim($tmp[1])))
237                                                                        {
238                                                                                case "mail" :
239                                                                                                $uid = $result_user[$i]['mail'];
240                                                                                                $uid = substr($uid,0,strpos($uid,"@"));
241                                                                                                $result_user[$i]['uid'] = $uid;
242                                                                                                break;
243       
244                                                                                case "description" :
245                                                                                                // SERPRO
246                                                                                                // parte antes do arroba;
247                                                                                                $result_user[$i]['uid'] = $result_user[$i]['description'];                                                                             
248                                                                                                break;
249                                                                        }
250                                                                }
251                                                        }
252                                                }
253                                               
254                                                $i++;
255                                        }                               
256                                        $entry = ldap_next_entry($this->ldap,$entry);   
257                                }
258                               
259                                return $result_user;
260                        }
261                        else
262                        {
263                                return "Many Results";
264                        }
265                }
266                return 0;
267        }
268       
269        public final function listOrganizationsLdap()
270        {
271
272                $this->_connect_ldap();
273       
274                if( $this->ldap )
275                {
276                        $filter="ou=*";         
277                        $justthese = array("ou");
278                        $search = ldap_search($this->ldap,$this->ldap_context,$filter,$justthese);                     
279                        $entry = ldap_get_entries($this->ldap, $search);
280                }
281
282                foreach($entry as $tmp)
283                        if($tmp['ou'][0] != "")
284                                $result_org[] = $tmp['ou'][0]; 
285
286                return $result_org;
287        }
288       
289        public final function getGroupsLdap($pOrg)
290        {
291                $this->_ldapConnect(true);
292                $organization = 'ou=' . $pOrg['ou'] .",". $this->ldap_context;
293               
294                if( $this->ldap )       
295                {
296                        $filter = "(&(phpgwAccountType=g)(objectClass=posixGroup))";
297                        $justthese = array("cn","gidNumber");
298                        $search = ldap_list($this->ldap, $organization, $filter, $justthese);
299                        $entry = ldap_get_entries( $this->ldap, $search );
300
301                        if( $entry )
302                        {                                       
303                                $result_groups = "<ldap>";
304                                foreach($entry as $tmp)
305                                        if( $tmp['gidnumber'][0] != "" )
306                                                $result_groups .= "<org><cn>".$tmp['cn'][0]."</cn><gid>".$tmp['gidnumber'][0]."</gid></org>";
307                               
308                                $result_groups .= "</ldap>";                                           
309                        }
310                }
311
312                return $result_groups;
313        }
314}
315
316?>
Note: See TracBrowser for help on using the repository browser.