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); if ($refer) { ldap_set_rebind_proc($this->ds, ldapRebind); } @ldap_bind($this->ds, $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc'],$_SESSION['phpgw_info']['expressomail']['ldap_server']['pw']); } //Teste jakjr retornando o DS function ldapConnect2($refer = false){ $ds = ldap_connect($_SESSION['phpgw_info']['expressomail']['ldap_server']['host']); if (!$ds) return false; ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ds, LDAP_OPT_REFERRALS, $refer); if ($refer) ldap_set_rebind_proc($ds, ldapRebind); @ldap_bind($ds, $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc'],$_SESSION['phpgw_info']['expressomail']['ldap_server']['pw']); return $ds; } // usa o host e context do setup. 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*)(mail=$search_for*)) (!(phpgwaccountvisible=-1)) )"; $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid"); } else { $filter="(& (phpgwAccountType=u)(cn=*$search_for*) (!(phpgwaccountvisible=-1)) )"; $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); // Get user org dn. $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 if ($count_entries > 200) { // Close old ldap conection ldap_close($this->ds); // Reopen a local ldap connection, following referral $this->ldapRootConnect(true); $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(); $tmp_users_from_user_org = array(); for ($i=0; $i<$info["count"]; $i++) { // Usuario sempre serao da minha org. if ($quickSearch_only_in_userSector) { $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]; } else { if (preg_match("/$user_sector_dn/i", $info[$i]['dn'])) { $tmp_users_from_user_org[$info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count']] = $info[$i]["cn"][0]; } else { $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_users_from_user_org); natcasesort($tmp); if (($field != 'null') && ($ID != 'null')) { $i = 0; $tmp = array_merge($tmp, $tmp_users_from_user_org); natcasesort($tmp); 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_users_from_user_org = ''; $options = ''; /* List of users from user org */ $i = 0; foreach ($tmp_users_from_user_org as $info => $cn) { $contacts_result[$i] = array(); $options_users_from_user_org .= $this->make_quicksearch_card($info, $cn); $i++; } /* List of users from others org */ foreach ($tmp as $info => $cn) { $contacts_result[$i] = array(); $options .= $this->make_quicksearch_card($info, $cn); $i++; } if ($quickSearch_only_in_userSector) { if ($options != '') { $head_option = '' . '' . $functions->getLang('More than 200 results were found') . '.
' . $functions->getLang('Showing only the results found in your organization') . '.'; '' . ''; $contacts_result = $head_option . $options_users_from_user_org . $options; } else { $return = array(); $return['status'] = false; $return['error'] = "many results"; return $return; } } else { if (($options_users_from_user_org != '') && ($options != '')) { $head_option0 = '' . '' . $functions->getLang('Users from your organization') . '.'; '' . ''; $head_option1 = '' . '' . $functions->getLang('Users from others organizations') . '.'; '' . ''; } $contacts_result = $head_option0 . $options_users_from_user_org . $head_option1 . $options; } } } ldap_close($this->ds); return $contacts_result; } function make_quicksearch_card($info, $cn) { include_once("class.functions.inc.php"); $functions = new functions; $contacts_result = array(); $contacts_result["cn"] = $cn; list ($contacts_result["mail"], $contacts_result["phone"], $contacts_result["mobile"], $contacts_result["uid"], $contacts_result["jpegphoto"]) = split ('%', $info); if ($contacts_result['jpegphoto']) $photo_link = ''; else $photo_link = ''; $phoneUser = $contacts_result['phone']; if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_enabled'] && $phoneUser) { $phoneUser = ''.$phoneUser.''; if($contacts_result['mobile']){ $phoneUser .= ' / '.$contacts_result['mobile'].''; } } $option = '' . '' . '' . $photo_link . '' . '' . '' . '' . $contacts_result['cn'] . '' . '
' . '' . '' . '' . $contacts_result['mail'] . '' . '
' . '
' . '
' . $phoneUser . '' . ''; return $option; } 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 ($info[$i]["phpgwaccountvisible"][0] == '-1') continue; 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 .= ''."\n"; } foreach($users as $id => $user_array) { if($owner != $id){ $newId = $id.'U'; $user_options .= ''."\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 .= ""; } 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) { $filter="(&(phpgwAccountType=u)(mail=" . $params['email'] . "))"; $ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn']; $justthese = array("cn","uid","telephoneNumber","jpegPhoto","mobile"); // Follow the referral $ds = $this->ldapConnect2(true); if ($ds) { $sr=ldap_search($ds, $ldap_context, $filter, $justthese); if (!$sr) return null; $entry = ldap_first_entry($ds, $sr); if($entry) { $obj = array("cn" => ldap_get_values($ds, $entry, "cn"), "email" => $params['email'], "uid" => ldap_get_values($ds, $entry, "uid"), "type" => "global", "mobile" => @ldap_get_values($ds, $entry, "mobile"), "telefone" => @ldap_get_values($ds, $entry, "telephonenumber") ); $_SESSION['phpgw_info']['expressomail']['contact_photo'] = @ldap_get_values_len($ds, $entry, "jpegphoto"); ldap_close($ds); return $obj; } } return null; } } ?>