ldap_host = $_SESSION['phpgw_info']['expressomail']['ldap_server']['host'];
$this->ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn'];
$this->ds = ldap_connect($this->ldap_host);
ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($this->ds, LDAP_OPT_REFERRALS, $refer);
ldap_bind($this->ds, $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc'],$_SESSION['phpgw_info']['expressomail']['ldap_server']['pw']);
}
function ldapRootConnect($refer = false){
$this->ldap_host = $_SESSION['phpgw_info']['expressomail']['server']['ldap_host'];
$this->ldap_context = $_SESSION['phpgw_info']['expressomail']['server']['ldap_context'];
$this->ds = ldap_connect($this->ldap_host);
ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($this->ds, LDAP_OPT_REFERRALS, $refer);
ldap_bind($this->ds, $_SESSION['phpgw_info']['expressomail']['server']['ldap_root_dn'],$_SESSION['phpgw_info']['expressomail']['server']['ldap_root_pw']);
}
function quicksearch($params)
{
include_once("class.functions.inc.php");
$functions = new functions;
$search_for = $params['search_for'];
$field = $params['field'];
$ID = $params['ID'];
$contacts_result = array();
$contacts_result['field'] = $field;
$contacts_result['ID'] = $ID;
// follow the referral
$this->ldapConnect(true);
if ($this->ds)
{
if (($field != 'null') && ($ID != 'null'))
{
$filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(cn=*$search_for*)(sn=*$search_for*)(mail=$search_for*)))";
$justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid");
}
else
{
$filter="(&(phpgwAccountType=u)(|(cn=*$search_for*)(sn=*$search_for*)(mail=$search_for*)))";
$justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "jpegPhoto", "uid");
}
$sr=ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
$count_entries = ldap_count_entries($this->ds,$sr);
if ($count_entries > 200)
{
$user_dn = $_SESSION['phpgw_info']['expressomail']['user']['account_dn'];
$user_sector_dn = ldap_explode_dn ( $user_dn, false );
array_shift($user_sector_dn);
array_shift($user_sector_dn);
$user_sector_dn = implode(",", $user_sector_dn);
// New search only on user sector
$sr=ldap_search($this->ds, $user_sector_dn, $filter, $justthese);
$count_entries = ldap_count_entries($this->ds,$sr);
if ($count_entries > 200){
$return = array();
$return['status'] = false;
$return['error'] = "many results";
return $return;
}
else
{
$quickSearch_only_in_userSector = true;
}
}
$info = ldap_get_entries($this->ds, $sr);
$tmp = array();
for ($i=0; $i<$info["count"]; $i++)
{
if ($info[$i]["phpgwaccountvisible"][0] == '-1')
continue;
$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];
}
natcasesort($tmp);
$i = 0;
if (($field != 'null') && ($ID != 'null'))
{
foreach ($tmp as $info => $cn)
{
$contacts_result[$i] = array();
$contacts_result[$i]["cn"] = $cn;
list ($contacts_result[$i]["mail"], $contacts_result[$i]["phone"], $contacts_result[$i]["mobile"]) = split ('%', $info);
$i++;
}
$contacts_result['quickSearch_only_in_userSector'] = $quickSearch_only_in_userSector;
}
else
{
$options = '';
foreach ($tmp as $info => $cn)
{
$contacts_result[$i] = array();
$contacts_result[$i]["cn"] = $cn;
list ($contacts_result[$i]["mail"], $contacts_result[$i]["phone"], $contacts_result[$i]["mobile"], $contacts_result[$i]["uid"], $contacts_result[$i]["jpegphoto"]) = split ('%', $info);
if ($contacts_result[$i]['jpegphoto'])
$photo_link = ' ';
else
$photo_link = ' ';
// '
' .
$phoneUser = $contacts_result[$i]['phone'];
if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_enabled'] && $phoneUser) {
$phoneUser = ''.$phoneUser.' ';
if($contacts_result[$i]['mobile']){
$phoneUser .= ' / '.$contacts_result[$i]['mobile'].' ';
}
}
$options .=
' ' .
'' .
'' .
$photo_link .
' ' .
' ' .
'' .
'' . $contacts_result[$i]['cn'] . ' ' . ' ' .
'' .
'' .
'' . $contacts_result[$i]['mail'] . ' ' . ' ' .
' ' .
' ' .
$phoneUser .
' ' .
' ';
$i++;
}
$contacts_result = $options;
if ($quickSearch_only_in_userSector)
{
$head_option =
'' .
'' .
$functions->getLang('More than 200 results were found') . '. ' .
$functions->getLang('Showing only the results found in your organization') . '.';
' ' .
' ';
$contacts_result = $head_option . $contacts_result;
}
}
}
ldap_close($this->ds);
return $contacts_result;
}
function get_organizations($params){
$organizations = array();
$referral = $params['referral'];
$this->ldapConnect($referral);
if ($this->ds) {
$filter="ou=*";
$justthese = array("ou");
$sr = ldap_list($this->ds, $this->ldap_context, $filter, $justthese);
$info = ldap_get_entries($this->ds, $sr);
for ($i=0; $i<$info["count"]; $i++)
$organizations[$i] = $info[$i]["ou"][0];
ldap_close($this->ds);
sort($organizations);
}
return $organizations;
}
function get_organizations2($params){
$organizations = array();
$referral = $params['referral'];
$this->ldapRootConnect($referral);
if ($this->ds) {
$filter="ou=*";
$justthese = array("ou");
$sr = ldap_list($this->ds, $this->ldap_context, $filter, $justthese);
$info = ldap_get_entries($this->ds, $sr);
for ($i=0; $i<$info["count"]; $i++)
{
$organizations[$i]['ou'] = $info[$i]["ou"][0];
$organizations[$i]['dn'] = $info[$i]["dn"];
}
ldap_close($this->ds);
sort($organizations);
}
return $organizations;
}
function catalogsearch($params)
{
$this->ldapConnect(true);
$cn = $params['search_for'] ? "*".$params['search_for']."*" : "*";
$user_context = "ou=".$params['organization'].",".$this->ldap_context;
$max_result = $params['max_result'] ? $params['max_result'] : '200';
$error = False;
if ($this->ds) {
$justthese = array("cn", "mail", "phpgwaccounttype", "phpgwAccountVisible");
$filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(cn=".$cn."))";
$sr=ldap_search($this->ds, $user_context, $filter, $justthese);
$count_entries = ldap_count_entries($this->ds,$sr);
if ($count_entries > $max_result){
$info = null;
$error = True;
}
else
$info = ldap_get_entries($this->ds, $sr);
ldap_close($this->ds);
$u_tmp = array();
$g_tmp = array();
for ($i=0; $i<$info["count"]; $i++){
if((strtoupper($info[$i]["phpgwaccounttype"][0]) == 'U') && ($info[$i]["phpgwaccountvisible"][0] != '-1'))
$u_tmp[$info[$i]["mail"][0]] = $info[$i]["cn"][0];
else
$g_tmp[$info[$i]["mail"][0]] = $info[$i]["cn"][0];
}
natcasesort($u_tmp);
natcasesort($g_tmp);
$i = 0;
$users = array();
foreach ($u_tmp as $mail => $cn){
$users[$i++] = array("name" => $cn, "email" => $mail);
}
unset($u_tmp);
$i = 0;
$groups = array();
foreach ($g_tmp as $mail => $cn){
$groups[$i++] = array("name" => $cn, "email" => $mail);
}
unset($g_tmp);
return array('users' => $users, 'groups' => $groups, 'error' => $error);
}
return null;
}
function get_emails_ldap(){
$result['mail']= array();
$result['mailalter']= array();
$user = $_SESSION['phpgw_info']['expressomail']['user']['account_lid'];
$this->ldapRootConnect(false);
if ($this->ds) {
$filter="uid=".$user;
$justthese = array("mail","mailAlternateAddress");
$sr = ldap_search($this->ds,$this->ldap_context, $filter, $justthese);
$ent = ldap_get_entries($this->ds, $sr);
ldap_close($this->ds);
for ($i=0; $i<$ent["count"]; $i++){
$result['mail'][] = $ent[$i]["mail"][0];
$result['mailalter'][] = $ent[$i]["mailalternateaddress"][0];
}
}
return $result;
}
//Busca usuários de um contexto e já retorna as options do select;
function get_available_users($params)
{
$this->ldapRootConnect();
//Monta lista de Grupos e Usuários
$users = Array();
$groups = Array();
$user_context= $params['context'];
$owner = $_SESSION['phpgw_info']['expressomail']['user']['owner'];
if ($this->ds)
{
$justthese = array("gidNumber","cn");
if ($params['type'] == 'search')
$sr=ldap_search($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=g)(!(phpgwaccountvisible=-1)))"),$justthese);
else
$sr=ldap_list($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=g)(!(phpgwaccountvisible=-1)))"),$justthese);
$info = ldap_get_entries($this->ds, $sr);
for ($i=0; $i<$info["count"]; $i++)
$groups[$uids=$info[$i]["gidnumber"][0]] = Array('name' => $uids=$info[$i]["cn"][0], 'type' => g);
$justthese = array("phpgwaccountvisible","uidNumber","cn");
if ($params['type'] == 'search')
$sr=ldap_search($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))"),$justthese);
else
$sr=ldap_list($this->ds, $user_context, ("(&(cn=*)(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))"),$justthese);
$info = ldap_get_entries($this->ds, $sr);
for ($i=0; $i<$info["count"]; $i++)
{
if ($info[$i]["phpgwaccountvisible"][0] == '-1')
continue;
$users[$uids=$info[$i]["uidnumber"][0]] = Array('name' => $uids=$info[$i]["cn"][0], 'type' => u);
}
}
ldap_close($this->ds);
@asort($users);
@reset($users);
@asort($groups);
@reset($groups);
$user_options ='';
$group_options ='';
foreach($groups as $id => $user_array) {
$newId = $id.'U';
$group_options .= ''.utf8_decode($user_array['name']).' '."\n";
}
foreach($users as $id => $user_array) {
if($owner != $id){
$newId = $id.'U';
$user_options .= ''.utf8_decode($user_array['name']).' '."\n";
}
}
return array("users" => $user_options, "groups" => $group_options);
}
//Busca usuários de um contexto e já retorna as options do select;
function get_available_users2($params)
{
$this->ldapRootConnect();
$context= $params['context'];
$justthese = array("cn", "uid", "cn");
$filter = "(&(phpgwaccounttype=u)(!(phpgwaccountvisible=-1)))";
if ($this->ds)
{
$sr=ldap_search($this->ds, $context, $filter, $justthese);
$entries = ldap_get_entries($this->ds, $sr);
for ($i=0; $i<$entries["count"]; $i++){
if($_SESSION['phpgw_info']['expressomail']['user']['account_lid'] != $entries[$i]["uid"][0]){
$u_tmp[$entries[$i]["uid"][0]] = $entries[$i]["cn"][0];
}
}
natcasesort($u_tmp);
$i = 0;
$users = array();
if (count($u_tmp))
{
foreach ($u_tmp as $uidnumber => $cn)
{
$options .= "$cn ";
}
unset($u_tmp);
}
ldap_close($this->ds);
return $options;
}
}
function uid2cn($uid)
{
// do not follow the referral
$this->ldapRootConnect(false);
if ($this->ds)
{
$filter="(&(phpgwAccountType=u)(uid=$uid))";
$justthese = array("cn");
$sr=ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
$info = ldap_get_entries($this->ds, $sr);
return $info[0]["cn"][0];
}
return false;
}
function getSharedUsersFrom($params){
$uids = explode(";",$params['uids']);
$this->imap = new imap_functions();
$filter = '';
foreach($uids as $index => $uid){
$params = array();
$acl = $this->imap->getacltouser($uid);
if(preg_match("/a/",$acl))
$filter .= "(uid=$uid)";
}
$this->ldapRootConnect(false);
$filter="(&(phpgwAccountType=u)(|$filter))";
if ($this->ds) {
$justthese = array("cn","mail");
$sr = ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
ldap_sort($this->ds,$sr,"cn");
$info = ldap_get_entries($this->ds, $sr);
$info['myname'] = $_SESSION['phpgw_info']['expressomail']['user']['fullname'];
return $info;
}
}
function getUserByEmail($params){
// Follow the referral
$email = $params['email'];
$this->ldapConnect(true);
if ($this->ds)
{
$filter="(&(phpgwAccountType=u)(mail=$email))";
$justthese = array("cn","uid","telephoneNumber","jpegPhoto","mobile");
$sr=ldap_search($this->ds, $this->ldap_context, $filter, $justthese);
$entry = ldap_first_entry($this->ds, $sr);
if($entry) {
$obj = array("cn" => @ldap_get_values($this->ds, $entry, "cn"),
"email" => $email,
"uid" => @ldap_get_values($this->ds, $entry, "uid"),
"type" => "global",
"mobile" => @ldap_get_values($this->ds, $entry, "mobile"),
"telefone" => @ldap_get_values($this->ds, $entry, "telephonenumber"));
$_SESSION['phpgw_info']['expressomail']['contact_photo'] = @ldap_get_values_len($this->ds, $entry, "jpegphoto");
ldap_close($this->ds);
return $obj;
}
}
return null;
}
}
?>