forked from extern/egroupware
135 lines
3.6 KiB
PHP
135 lines
3.6 KiB
PHP
<?php
|
|
/**************************************************************************\
|
|
* phpGroupWare - addressbook *
|
|
* http://www.phpgroupware.org *
|
|
* Written by Joseph Engo <jengo@mail.com> *
|
|
* -------------------------------------------- *
|
|
* This program is free software; you can redistribute it and/or modify it *
|
|
* under the terms of the GNU General Public License as published by the *
|
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
|
* option) any later version. *
|
|
\**************************************************************************/
|
|
|
|
/* $Id$ */
|
|
|
|
class remote
|
|
{
|
|
var $servers = array(
|
|
'BigFoot' => array(
|
|
'host' => 'ldap.bigfoot.com',
|
|
'basedn' => '',
|
|
'search' => 'cn',
|
|
'attrs' => 'mail,cn,o,surname,givenname',
|
|
'enabled' => True
|
|
),
|
|
);
|
|
var $serverid = '';
|
|
|
|
var $ldap = 0;
|
|
|
|
function remote($serverid='BigFoot')
|
|
{
|
|
$GLOBALS['phpgw']->db->query("SELECT * FROM phpgw_addressbook_servers",__LINE__,__FILE__);
|
|
while ($GLOBALS['phpgw']->db->next_record())
|
|
{
|
|
if ($GLOBALS['phpgw']->db->f('name'))
|
|
{
|
|
$this->servers[$GLOBALS['phpgw']->db->f('name')] = array(
|
|
'host' => $GLOBALS['phpgw']->db->f('host'),
|
|
'basedn' => $GLOBALS['phpgw']->db->f('basedn'),
|
|
'search' => $GLOBALS['phpgw']->db->f('search'),
|
|
'attrs' => $GLOBALS['phpgw']->db->f('attrs'),
|
|
'enabled' => $GLOBALS['phpgw']->db->f('enabled')
|
|
);
|
|
}
|
|
}
|
|
$this->serverid = $serverid;
|
|
$this->ldap = $this->_connect($this->serverid);
|
|
//$this->search();
|
|
}
|
|
|
|
function _connect($serverid='BigFoot')
|
|
{
|
|
if (!$ds = ldap_connect($this->servers[$serverid]['host']))
|
|
{
|
|
printf("<b>Error: Can't connect to LDAP server %s!</b><br>",$this->servers[$serverid]['host']);
|
|
return False;
|
|
}
|
|
@ldap_bind($ds);
|
|
|
|
return $ds;
|
|
}
|
|
|
|
function search($query='')
|
|
{
|
|
if(!$query)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isset($this->servers[$this->serverid]['attrs']))
|
|
{
|
|
$attrs = explode(',',$this->servers[$this->serverid]['attrs']);
|
|
$found = ldap_search($this->ldap,$this->servers[$this->serverid]['basedn'],$this->servers[$this->serverid]['search'] . '=*' . $query . '*',$attrs);
|
|
}
|
|
else
|
|
{
|
|
$found = ldap_search($this->ldap,$this->servers[$this->serverid]['basedn'],$this->servers[$this->serverid]['search'] . '=*' . $query . '*');
|
|
}
|
|
|
|
$ldap_fields = @ldap_get_entries($this->ldap, $found);
|
|
|
|
$out = $this->clean($ldap_fields);
|
|
$out = $this->convert($out);
|
|
|
|
return $out;
|
|
}
|
|
|
|
function clean($value)
|
|
{
|
|
if(!is_int($value) && ($value != 'count'))
|
|
{
|
|
if(is_array($value))
|
|
{
|
|
while(list($x,$y) = @each($value))
|
|
{
|
|
/* Fill a new output array, but do not include things like array( 0 => mail) */
|
|
if(isset($this->servers[$this->serverid]['attrs']) &&
|
|
!@in_array($y,explode(',',$this->servers[$this->serverid]['attrs'])))
|
|
{
|
|
$out[$x] = $this->clean($y);
|
|
}
|
|
}
|
|
unset($out['count']);
|
|
return $out;
|
|
}
|
|
else
|
|
{
|
|
return $value;
|
|
}
|
|
}
|
|
}
|
|
|
|
function convert($in='')
|
|
{
|
|
if(is_array($in))
|
|
{
|
|
while(list($key,$value) = each($in))
|
|
{
|
|
$out[] = array(
|
|
'fn' => $value['cn'][0],
|
|
'n_family' => $value['sn'][0] ? $value['sn'][0] : $value['surname'][0],
|
|
'email' => $value['mail'][0],
|
|
'owner' => $GLOBALS['phpgw_info']['user']['account_id']
|
|
);
|
|
}
|
|
return $out;
|
|
}
|
|
else
|
|
{
|
|
return $in;
|
|
}
|
|
}
|
|
}
|
|
?>
|