ldapService = ServiceLocator::getService('ldap'); if(isset($external_srcs)) $this->external_srcs = $external_srcs; $this->max_result = $this->ldapService->limit; $this->functions = new functions(); } // Using ContactCenter configuration. function ldapConnect($refer = false,$catalog = 0){ if ($catalog > 0 && is_array($this->external_srcs)){ $this->ldap_host = $this->external_srcs[$catalog]['host']; $this->ldap_context = $this->external_srcs[$catalog]['dn']; $this->bind_dn = $this->external_srcs[$catalog]['acc']; $this->bind_dn_pw = $this->external_srcs[$catalog]['pw']; $this->object_class = $this->external_srcs[$catalog]['obj']; $this->base_dn = $this->external_srcs[$catalog]['dn']; $this->branch = $this->external_srcs[$catalog]['branch']; }else { $this->ldap_host = $_SESSION['phpgw_info']['expressomail']['ldap_server']['host']; $this->ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn']; $this->bind_dn = $_SESSION['phpgw_info']['expressomail']['ldap_server']['acc']; $this->bind_dn_pw = $_SESSION['phpgw_info']['expressomail']['ldap_server']['pw']; $this->branch = 'ou'; } $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,$this->bind_dn,$this->bind_dn_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, 'rebind'); @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']; if( isset($_SESSION['phpgw_info']['expressomail']['server']['ldap_master_host']) && isset($_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_dn']) && isset($_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_pw']) && $_SESSION['phpgw_info']['expressomail']['server']['ldap_master_host'] && $_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_dn'] && $_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_pw']) { $this->ds = ldap_connect($_SESSION['phpgw_info']['expressomail']['server']['ldap_master_host']); ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($this->ds, LDAP_OPT_REFERRALS,0); ldap_bind($this->ds, $_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_dn'], $_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_pw']); }else{ $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; $field = $params['field']; $ID = $params['ID']; $ldapService = ServiceLocator::getService('ldap'); $filter = $ldapService->getSearchFilter($params['search_for']); $contacts_result = array(); $contacts_result['field'] = $field; $contacts_result['ID'] = $ID; $search_for = utf8_encode($params['search_for']); if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info']) $extendedinfo=true; else $extendedinfo=false; // follow the referral $this->ldapConnect(true); if ($this->ds) { $ldapService->connection = $this->ds; if($extendedinfo) $justthese = array("cn", "mail", "telephonenumber", "uid","uidNumber", "mobile", "phpgwaccountvisible", "employeenumber", "ou"); else $justthese = array("cn", "mail", "telephoneNumber", "phpgwAccountVisible", "uidNumber","uid"); $types = false; if( $field == 'null' || $ID == 'null' ) { $justthese[] = "jpegphoto"; $types = 'u'; } $filter = $ldapService->getSearchFilter( $params['search_for'], $types ); $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result); if(!$sr) return null; $count_entries = ldap_count_entries($this->ds,$sr); $info = ldap_get_entries($this->ds, $sr); // New search only on user sector if ($count_entries == $this->max_result) { $overload = $count_entries; } else { $catalogsNum=count($this->external_srcs); for ($i=0; $i<=$catalogsNum; $i++) { if ($this->external_srcs[$i]["quicksearch"]) { $this->ldapConnect(true,$i); $filter="(|(cn=*$search_for*)(mail=*$search_for*))"; if($extendedinfo) $justthese = array("cn", "mail", "telephonenumber", "uid","uidNumber", "mobile", "phpgwaccountvisible", "employeenumber", "ou"); else $justthese = array("cn", "mail", "telephoneNumber", "phpgwAccountVisible","uidNumber", "uid"); $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result+1); if(!$sr) return null; $count_entries = ldap_count_entries($this->ds,$sr); $search = ldap_get_entries($this->ds, $sr); for ($j=0; $j<$search["count"]; $j++) { $info[] = $search[$j]; } $info["count"] = count($info)-1; } } } $tmp = array(); $tmp_users_from_user_org = array(); for ($i=0; $i<$info["count"]; $i++) { $key = $info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count'] . '%' . $info[$i]["employeenumber"][0] . '%' . $info[$i]["ou"][0]; if (/*(!$quickSearch_only_in_userSector) &&*/ preg_match("/$user_sector_dn/i", $info[$i]['dn'])) { $tmp_users_from_user_org[$key] = utf8_decode($info[$i]["cn"][0]); continue; } $tmp[$key] = utf8_decode($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"], $contacts_result[$i]["uid"], $contacts_result[$i]["jpegphoto"], $contacts_result[$i]["employeenumber"], $contacts_result[$i]["ou"]) = preg_split('/%/', $info); $i++; } $contacts_result['quickSearch_only_in_userSector'] = $quickSearch_only_in_userSector; $contacts_result['maxResult'] = $ldapService->limit; } else { $options_users_from_user_org = ''; $options = ''; $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++; } foreach ($tmp as $info => $cn) { $contacts_result[$i] = array(); $options .= $this->make_quicksearch_card($info, $cn); $i++; } if (($options_users_from_user_org != '') && ($options != '')) { $head_option0 = '' . '' . $this->functions->getLang('Users from your organization') . ' ['.count($tmp_users_from_user_org).']'; '' . ''; $head_option1 = '' . '' . $this->functions->getLang('Users from others organizations') . ' ['.count($tmp).']'; '' . ''; } $head_option = ''; if( $overload ) $head_option = '' . '' .str_replace('%1', $this->max_result, $this->functions->getLang('More than %1 results. Please, try to refine your search.')) . ' '. '' . ''; $contacts_result = $head_option.$head_option0 . $options_users_from_user_org . $head_option1. $options; } } ldap_close($this->ds); return $contacts_result; } /** * Método que faz o roteamento entre os métodos de busca (Catálogo pessoal, global e todos) * @license http://www.gnu.org/copyleft/gpl.html GPL * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) * @sponsor Caixa Econômica Federal * @author Prognus Software Livre * @param <$param> */ function quicksearchcontact($params) { if(array_key_exists('Type', $params)){ return $this->quickSearch($params); } $modal = false; if($params['catalog']) $modal = true; include_once dirname(__FILE__). '/../../header.inc.php'; if($modal) { if($params['catalog'] == "global") { return $this->quickSearchGlobal($params); } else { if($params['catalog'] == "personal") return $this->quickSearchPersonal($params); else return $this->quickSearchAll($params); } } else { if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['catalog_search'] == "global") { return $this->quickSearchGlobal($params); } else { if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['catalog_search'] == "personal") return $this->quickSearchPersonal($params); else //Veirifica se quem chamou foi o campo de pesquisa rápida Expresso_Mail if(($params['field'] == 'null') && ($params['ID'] == 'null')) return $this->quickSearch($params); else return $this->quickSearchAll($params); } } } /** * Método que faz a busca de usuários em todos os catálogos * @license http://www.gnu.org/copyleft/gpl.html GPL * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) * @sponsor Caixa Econômica Federal * @author ProgquickSearchAllnus Software Livre * @param <$param> * @return <$retorno> */ function quickSearchAll($params) { $retorno_personal = $this->quickSearchPersonal($params); $retorno_global = $this->quickSearchGlobal($params); //$retorno = $retorno_personal + $retorno_global; $retorno = array_merge($retorno_personal, $retorno_global); $retorno['type_catalog'] = "A"; $retorno['search_for'] = $params['search_for']; return $retorno; } /** * Método que faz a busca de usuários no Catálogo Pessoal * @license http://www.gnu.org/copyleft/gpl.html GPL * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) * @sponsor Caixa Econômica Federal * @author Prognus Software Livre * @param <$param> * @return <$retorno> */ function quickSearchPersonal($params, $all=false) { $results = array(); $DBService = ServiceLocator::getService('db'); $results = $DBService->search_contacts($params['search_for']); $results2 = array(); $results2 = $DBService->search_groups($params['search_for']); if(is_array($results)){ if(is_array($results2)){ $results = array_merge($results, $results2); } } else if(is_array($results2)){ $results = $results2; } if(!$all) $results['type_catalog'] = "P"; foreach($results as $i=>$value) $results[$i]['type_contact'] = "P"; $results['search_for'] = $params['search_for']; return $results; } /** * Método que faz a busca de usuários no Catálogo Geral * @license http://www.gnu.org/copyleft/gpl.html GPL * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) * @sponsor Caixa Econômica Federal * @author Prognus Software Livre * @param <$param> * @return <$retorno> */ function quickSearchGlobal($params, $all=false) { include_once dirname(__FILE__). '/../../header.inc.php'; $c = CreateObject('phpgwapi.config','contactcenter'); $all_data = $c->read_repository(); $searchable_fields = array(); foreach($all_data as $index => $value) { $parts = explode('_', $index); if (is_numeric($parts[3]) && $parts[1]=='attribute') { if($parts[2] == 'searchable' /*&& $value == 'true'*/) $searchable_fields[$all_data['cc_attribute_ldapname_' . $parts[3]]] = $all_data['cc_attribute_name_' . $parts[3]]; } } include_once("class.functions.inc.php"); $functions = new functions; $field = $params['field']; $ID = $params['ID']; $ldapService = ServiceLocator::getService('ldap'); $filter = $ldapService->getSearchFilter($params['search_for']); $contacts_result = array(); $contacts_result['field'] = $field; $contacts_result['ID'] = $ID; $search_for = utf8_encode($params['search_for']); $this->ldapConnect(true); if ($this->ds) { $ldapService->connection = $this->ds; $campos_extras = ''; $justthese = array("cn", "mail", "telephonenumber", "mobile", "phpgwaccountvisible", "uid", "employeenumber", "ou","vacationActive","vacationInfo"); foreach($searchable_fields as $fields_ldap => $value_field) { $campos_extras .= $fields_ldap . "|" . $value_field . "#"; array_push($justthese, $fields_ldap); } $types = false; $campos_extras = substr($campos_extras,0,-1); if($field == 'null' || $ID == 'null') { $justthese[] = "jpegphoto"; $types = 'u'; } $filter = $ldapService->getSearchFilter($params['search_for'], $types); // Retirei o this->max_result, que limitava a busca. Agora ta retornando tudo amigo. $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result); if(!$sr) return null; $count_entries = ldap_count_entries($this->ds,$sr); $info = ldap_get_entries($this->ds, $sr); $info_return = $info; //if($campos_extras != '') //array_push($info_return, $campos_extras); } ldap_close($this->ds); //Busca em Catalagos externos $catalogsNum=count($this->external_srcs); for ($i=0; $i<=$catalogsNum; $i++) { if ($this->external_srcs[$i]["quicksearch"]) { $this->ldapConnect(true,$i); $filter="(|(cn=*$search_for*)(mail=*$search_for*))"; $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid","employeeNumber", "ou","vacationActive","vacationInfo"); $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result+1); if(!$sr) return null; $count_entries = ldap_count_entries($this->ds,$sr); $search = ldap_get_entries($this->ds, $sr); for ($j=0; $j<$search["count"]; $j++) { $search[$j]['isExternal'] = true; $info_return[] = $search[$j]; } $info_return["count"] = count($info_return)-1; } } //---------------------------------------------------------------// if($all == false) $info_return['type_catalog'] = "G"; $info_return['extra_ldap_fields'] = $campos_extras; foreach($info_return as &$value){ $value['type_contact'] = "G"; //Converte a descrição dos filtros para ISO8859 corrigindo inconsitências com caractéres especiais if(isset($value['vacationinfo']) && isset($value['vacationinfo'][0]) && $value['vacationinfo'][0] != '') $value['vacationinfo'][0] = $this->toISO8859($value['vacationinfo'][0]); } $info_return['search_for'] = $params['search_for']; return $info_return; } /*Converte um parametro de UTF-8 para ISO8859*/ function toISO8859($data) { if(!is_array($data)) return mb_convert_encoding( $data , 'ISO-8859-1' , 'UTF-8 , ISO-8859-1' ); $return = array(); foreach ($data as $i => $v) $return[$this->toISO8859($i)] = $this->toISO8859($v); return $return; } function make_quicksearch_card($info, $cn) { include_once("class.functions.inc.php"); $functions = new functions; $contacts_result = array(); $contacts_result["cn"] = $cn; if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info']) $extendedinfo=true; else $extendedinfo=false; list ($contacts_result["mail"], $contacts_result["phone"], $contacts_result["mobile"], $contacts_result["uid"], $contacts_result["jpegphoto"], $contacts_result["employeenumber"], $contacts_result["ou"]) = preg_split('/%/', $info); if ($contacts_result['jpegphoto']) $photo_link = ''; else $photo_link = ''; $phoneUser = $contacts_result['phone']; $mobileUser = $contacts_result["mobile"]; if($mobileUser){ $phoneUser .= " / $mobileUser"; } if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_enabled']) { $phoneUser = $contacts_result['phone']; if($phoneUser) $phoneUser = ''.$phoneUser.''; if($mobileUser) $phoneUser .= ' / '.$mobileUser.''; } $empNumber = $contacts_result["employeenumber"]; if($empNumber) { $empNumber = "$empNumber - "; } $ou = $contacts_result["ou"]; if($ou) { $ou = "
$ou" ; } // Begin: nickname, firstname and lastname for QuickAdd. $fn = $contacts_result["cn"]; $array_name = explode(" ", $fn); if(count($array_name) > 1){ $fn = $array_name[0]; array_shift($array_name); $sn = implode(" ",$array_name); } // End: $option = '' . '' . '' . $photo_link . '' . '' . '' . '' . ($empNumber != "" ? $empNumber : $uid) . $contacts_result['cn'] . '' . '
' . '' . '' . '' . $contacts_result['mail'] . ''. ''. '
' . $phoneUser . $ou . '' . ''; return $option; } function get_catalogs(){ $catalogs = array(); $catalogs[0] = $this->functions->getLang("Global Catalog"); if($this->external_srcs) foreach ($this->external_srcs as $key => $valor ){ $catalogs[$key] = $valor['name']; } return $catalogs; } function get_organizations($params){ $organizations = array(); $params['referral']?$referral = $params['referral']:$referral = false; $cat = $params['catalog']; $this->ldapConnect($referral,$cat); if($this->branch != '') { $filter="(&(".$this->branch."=*)(!(phpgwAccountVisible=-1)))"; $justthese = array("$this->branch"); $sr = ldap_list($this->ds, $this->ldap_context, $filter, $justthese); $info = ldap_get_entries($this->ds, $sr); if($info["count"] == 0) { $organizations[0]['ou'] = $this->ldap_context; } for ($i=0; $i<$info["count"]; $i++) $organizations[$i] = $info[$i]["ou"][0]; ldap_close($this->ds); sort($organizations); return $organizations; }else{ return null; } } function get_organizations2($params){ $organizations = array(); $referral = $params['referral']; $this->ldapRootConnect($referral); if ($this->ds) { $filter="(&(objectClass=organizationalUnit)(!(phpgwAccountVisible=-1)))"; $justthese = array("ou"); $sr = ldap_list($this->ds, $this->ldap_context, $filter, $justthese); $info = ldap_get_entries($this->ds, $sr); if($info["count"] == 0) { $organizations[0]['ou'] = $this->ldap_context; $organizations[0]['dn'] = $this->ldap_context; } else{ 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; } //Busca usuarios de um contexto e ja retorna as options do select - usado por template serpro; function search_users($params) { $owner = $_SESSION['phpgw_info']['expressomail']['user']['owner']; $ldapService = ServiceLocator::getService('ldap'); $ldapService->connect($_SESSION['phpgw_info']['expressomail']['server']['ldap_host'], $_SESSION['phpgw_info']['expressomail']['server']['ldap_root_dn'], $_SESSION['phpgw_info']['expressomail']['server']['ldap_root_pw']); $groups = $ldapService->accountSearch($params['filter'], array("gidNumber","cn", 'uid'), $params['context'] , 'g', 'cn'); $users = $ldapService->accountSearch($params['filter'], array("uidNumber","cn", 'uid'), $params['context'] , 'u', 'cn'); $compartilhadas = $ldapService->accountSearch($params['filter'], array("uidNumber","cn",'uid'), $params['context'] , 's', 'cn'); $group_options = array(); $user_options = array(); $shared_options = array(); foreach($groups as $group) { $group_options[] = '"'.$group['gidnumber'].'U'.'":"'.$group['cn'].' ('.$group['uid'].')"'; } foreach($users as $user) { if($owner != $user['uidnumber']) $user_options[] = '"'.$user['uidnumber'].'U'.'":"'.$user['cn'].' ('.$user['uid'].')"'; } foreach($compartilhadas as $shared) { if($owner != $shared['uidnumber']) $shared_options[] = '"'.$shared['uidnumber'].'U'.'":"'.$shared['cn'].' ('.$shared['uid'].')"'; } $user_options = '{'.implode( ',', $user_options ).'}'; $group_options = '{'.implode( ',', $group_options ).'}'; $shared_options = '{'.implode( ',', $shared_options ).'}'; return '{"users":'.$user_options.',"groups":'.$group_options.',"shared":'. $shared_options .'}'; } function catalogsearch($params) { $ldapService = ServiceLocator::getService('ldap'); $filter = $ldapService->getSearchFilter($params['search_for'],array('u','l','s')); $catalog = $params['catalog']; $error = False; //if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info']) //$extendedinfo=true; //else //$extendedinfo=false; $this->ldapConnect(true,$catalog); $params['organization'] == 'all' ? $user_context = $this->ldap_context :$user_context = $this->branch."=".$params['organization'].",".$this->ldap_context; if ($this->ds) { $justthese = array("cn", "mail", "phpgwaccounttype", "phpgwAccountVisible", "employeeNumber", "ou"); $sr=@ldap_search($this->ds, $user_context, $filter, $justthese, 0, $ldapService->limit+1); if(!$sr) return null; $count_entries = ldap_count_entries($this->ds,$sr); if ($count_entries > $ldapService->limit){ $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((!$catalog==0)||(strtoupper($info[$i]["phpgwaccounttype"][0]) == 'U') && ($info[$i]["phpgwaccountvisible"][0] != '-1')) //aqui eh feita a concatenacao do departamento ao cn; $u_tmp[$info[$i]["mail"][0]] = utf8_decode($info[$i]["cn"][0]). '%' . $info[$i]["ou"][0]; if((!$catalog==0)||(strtoupper($info[$i]["phpgwaccounttype"][0]) == 'L') && ($info[$i]["phpgwaccountvisible"][0] != '-1')) $g_tmp[$info[$i]["mail"][0]] = utf8_decode($info[$i]["cn"][0]); } natcasesort($u_tmp); natcasesort($g_tmp); $i = 0; $users = array(); foreach ($u_tmp as $mail => $cn){ $tmp = explode("%", $cn); //explode o cn pelo caracter "%" e joga em $tmp; $name = $tmp[0]; //pega o primeiro item (cn) do vetor resultante do explode acima; $department = $tmp[1]; //pega o segundo item (ou) do vetor resultanto do explode acima; $users[$i++] = array("name" => $name, "email" => $mail, "department" => $department); } 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,'maxResult' => $ldapService->limit); }else 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 usuarios de um contexto e ja retorna as options do select; function get_available_users($params) { $this->ldapRootConnect(); //Monta lista de Grupos e Usuarios $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 usuarios de um contexto e ja retorna as options do select; function get_available_users2($params) { $ldapService = ServiceLocator::getService('ldap'); $ldapService->connect($_SESSION['phpgw_info']['expressomail']['server']['ldap_host'], $_SESSION['phpgw_info']['expressomail']['server']['ldap_root_dn'], $_SESSION['phpgw_info']['expressomail']['server']['ldap_root_pw']); $entries = $ldapService->accountSearch($params['sentence'], array('cn', 'uid'), $params['context'], 'u', 'cn'); $options = array(); foreach ($entries as $value) $options[] = '"'.$value['uid'].'"'.':'.'"'.$value['cn'].'"'; return "{".implode(',',$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); if(!$sr) return false; $info = ldap_get_entries($this->ds, $sr); return utf8_decode($info[0]["cn"][0]); } return false; } function uidnumber2uid($uidnumber) { // do not follow the referral $this->ldapRootConnect(false); if ($this->ds) { $filter="(&(phpgwAccountType=u)(uidnumber=$uidnumber))"; $justthese = array("uid"); $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese); if(!$sr) return false; $info = ldap_get_entries($this->ds, $sr); return $info[0]["uid"][0]; } return false; } function getSharedUsersFrom($params){ $filter = ''; $i = 0; //Added to save if must save sent messages in shared folder $acl_save_sent_in_shared = array(); if($params['uids']) { $uids = explode(";",$params['uids']); $this->imap = new imap_functions(); foreach($uids as $index => $uid){ $params = array(); //Added to save if user has create permission $acl_create_message = array(); $acl = $this->imap->getacltouser($uid ,true); if ( preg_match("/p/",$acl )){ $filter .= "(uid=$uid)"; $acl_save_sent_in_shared[ $i ] =$uid; $i++; } } } $this->ldapRootConnect(false); if ($this->ds) { $justthese = array("cn","mail","uid"); if($filter) { $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=s))(|$filter))"; $sr = ldap_search($this->ds, $this->ldap_context, $filter, $justthese); ldap_sort($this->ds,$sr,"cn"); $info = ldap_get_entries($this->ds, $sr); $var = print_r($acl_save_sent_in_shared, true); for ($i = 0;$i < $info["count"]; $i++){ $info[$i]['cn'][0] = utf8_decode($info[$i]['cn'][0]); //verify if user has permission to save sent messages in a shared folder if ( in_array( $info[$i]['uid'][0],$acl_save_sent_in_shared) ){ $info[$i]['save_shared'][0] = 'y'; } else $info[$i]['save_shared'][0] = 'n'; } } $info['myname'] = $_SESSION['phpgw_info']['expressomail']['user']['fullname']; //Find institucional_account. $filter="(&(phpgwAccountType=i)(mailForwardingAddress=".$_SESSION['phpgw_info']['expressomail']['user']['email']."))"; $sr = ldap_search($this->ds, $this->ldap_context, $filter, $justthese); ## # @AUTHOR Rodrigo Souza dos Santos # @DATE 2008/09/17 # @BRIEF Changing to ensure that the variable session is always with due value. ## if(ldap_count_entries($this->ds,$sr)) { ldap_sort($this->ds,$sr,"cn"); $result = ldap_get_entries($this->ds, $sr); for ($j = 0;$j < $result["count"]; $j++){ $result[$j]['cn'][0] = utf8_decode($result[$j]['cn'][0]); $result[$j]['mail'][0] = $result[$j]['mail'][0]; $result[$j]['save_shared'][0] = 'n'; $info[$info['count']] = $result[$j]; $info['count'] = (int)$info['count'] + 1; } } $_SESSION['phpgw_info']['expressomail']['user']['shared_mailboxes'] = $info; return $info; } } function getUserByEmail($params) { $expires = 60*60*24*30; /* 30 days */ header("Cache-Control: maxage=".$expires); header("Pragma: public"); header("Expires: ".gmdate('D, d M Y H:i:s', time()+$expires)); $filter="(&(phpgwAccountType=u)(mail=" . $params['email'] . "))"; $ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn']; if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['extended_info']) $extendedinfo=true; else $extendedinfo=false; if($extendedinfo) $justthese = array("cn","uid","telephoneNumber","jpegPhoto","mobile","ou","employeeNumber"); else $justthese = array("cn","uid","telephoneNumber","jpegPhoto"); // 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" => utf8_decode(current(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"), "ou" => @ldap_get_values($ds, $entry, "ou"), "employeeNumber" => @ldap_get_values($ds, $entry, "employeeNumber") ); $_SESSION['phpgw_info']['expressomail']['contact_photo'] = @ldap_get_values_len($ds, $entry, "jpegphoto"); ldap_close($ds); return $obj; } } return null; } function uid2uidnumber($uid) { // do not follow the referral $this->ldapRootConnect(false); if ($this->ds) { $filter="(&(phpgwAccountType=u)(uid=$uid))"; $justthese = array("uidnumber"); $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese); if(!$sr) return false; $info = ldap_get_entries($this->ds, $sr); return $info[0]["uidnumber"][0]; } return false; } function get_user_groups($uid) { $organizations = array(); $this->ldapRootConnect(); $justthese = array("gidnumber","cn"); $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))"; $search = ldap_search($this->ds, $this->ldap_context, $filter, $justthese); $result = array(); $entries = ldap_get_entries($this->ds, $search); for ($i=0; $i<$entries['count']; $i++) { $result[ $entries[$i]['gidnumber'][0] ] = $entries[$i]['cn'][0]; } return $result; } function getMailByUid($pUid) { // do not follow the referral $this->ldapRootConnect(false); if ($this->ds) { $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=s)(phpgwAccountType=l))(uid=$pUid))"; $justthese = array("mail"); $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese); if(!$sr) return false; $info = ldap_get_entries($this->ds, $sr); return utf8_decode($info[0]["mail"][0]); } return false; } function mail2uid($mail) { if(!$this-ds) $this->ldapRootConnect(false); $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=s)(phpgwAccountType=i)(phpgwAccountType=g))(mail=$mail))"; $justthese = array("uid"); $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese); if(!$sr) return false; $info = ldap_get_entries($this->ds, $sr); return $info[0]["uid"][0]; } /** * Retorna as contas compartilhas * @param string $toaddress emails * @param string $ccaddress emails * @param string $ccoaddress emails * @param array $groups array com os grupos que o usuario pertence * @return array */ function returnSharedsAccounts($toaddress,$ccaddress,$ccoaddress) { $arrayAllAddres = array(); $arrayAllAddres = array_merge($arrayAllAddres , explode(',',$toaddress)); $arrayAllAddres = array_merge($arrayAllAddres, explode(',',$ccaddress)); $arrayAllAddres = array_merge($arrayAllAddres, explode(',',$ccoaddress)); $mailsArray = array(); foreach ($arrayAllAddres as $toAddres) { if(strchr($toAddres,'@') && strchr($toAddres,'<') && strchr($toAddres,'>')) { $alias = substr($toAddres, strpos($toAddres,'<'), strpos($toAddres,'>')); $alias = str_replace('<','', str_replace('>','',$alias)); array_push($mailsArray, $alias); } else if(strchr($toAddres,'@')) { array_push($mailsArray, $toAddres); } } $arraySharedAccounts = array(); $conexao = $this->ldapConnect2(true); $mailFilter = ''; foreach ($mailsArray as $mail) $mailFilter .= '(|(mail='.$mail.')(mailAlternateAddress='.$mail.'))'; $filter = '(&(phpgwAccountType=s)(|'.$mailFilter.') )'; $ldap_context = $_SESSION['phpgw_info']['expressomail']['server']['ldap_context']; $justthese = array('cn','uid','mail'); if ($conexao) { $search = @ldap_search($conexao, $ldap_context, $filter, $justthese); if($search) { $results = ldap_get_entries($conexao, $search); foreach ($results as $result) { if($result['mail'][0]) array_push($arraySharedAccounts, $result['mail'][0]); } } } return $arraySharedAccounts; } /** * Verifica se um email é uma conta compartilhada * * @license http://www.gnu.org/copyleft/gpl.html GPL * @author Cons?rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) * @author Cristiano Corrêa Schmidt * @param String $mail Email a ser verificado * @return bolean * @access public */ function isSharedAccountByMail($mail) { $return = false; $conexao = $this->ldapConnect2(true); $filter = '(&(phpgwAccountType=s)(mail='.$mail.'))'; $ldap_context = $_SESSION['phpgw_info']['expressomail']['server']['ldap_context']; $justthese = array('cn','uid','mail'); if ($conexao) { $search = @ldap_search($conexao, $ldap_context, $filter, $justthese); if(ldap_count_entries ($conexao , $search)) $return = true; } return $return; } function save_telephoneNumber($params){ $return = array(); if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['blockpersonaldata']){ $return['error'] = $this->functions->getLang("You can't modify your Commercial Telephone."); return $return; } $old_telephone = 0; $pattern = '/\([0-9]{2,3}\)[0-9]{4}-[0-9]{4}$/'; if ((strlen($params['number']) != 0) && (!preg_match($pattern, $params['number']))) { $return['error'] = $this->functions->getLang('The format of telephone number is invalid'); return $return; } if($params['number'] != $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number']) { $old_telephone = $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number']; $this->ldapRootConnect(false); if(strlen($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number']) == 0) { $info['telephonenumber'] = $params['number']; $result = @ldap_mod_add($this->ds, $_SESSION['phpgw_info']['expressomail']['user']['account_dn'], $info); } else { $info['telephonenumber'] = $params['number']; $result = @ldap_mod_replace($this->ds, $_SESSION['phpgw_info']['expressomail']['user']['account_dn'], $info); } $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'] = $info['telephonenumber']; // Log updated telephone number by user action include_once('class.db_functions.inc.php'); $db_functions = new db_functions(); $db_functions->write_log('modified user telephone',"User changed its own telephone number in preferences $old_telephone => ".$info['telephonenumber']); unset($info['telephonenumber']); } return $return['ok'] = true; } } ?>