session->commit_session(); $this->charset = $GLOBALS['egw']->translation->charset(); } function searchAddress($_searchString) { if ($GLOBALS['egw_info']['user']['apps']['addressbook']) { if (method_exists($GLOBALS['egw']->contacts,'search')) { // 1.3+ $showAccounts = true; //error_log(__METHOD__.__LINE__.$_searchString); $seStAr = explode(' ',$_searchString); foreach ($seStAr as $k => $v) if (strlen($v)<3) unset($seStAr[$k]); $_searchString = trim(implode(' AND ',$seStAr)); //error_log(__METHOD__.__LINE__.$_searchString); if ($GLOBALS['egw_info']['user']['preferences']['addressbook']['hide_accounts']) $showAccounts=false; $contacts = $GLOBALS['egw']->contacts->search(array( 0 => "(n_fn like '%".trim(implode("%' AND n_fn like '%",$seStAr))."%')", 1 => "(contact_email like '%".trim(implode("%' AND contact_email like '%",$seStAr))."%')", 2 => "(contact_email_home like '%".trim(implode("%' AND contact_email_home like '%",$seStAr))."%')", ),array('n_fn','email','email_home'),'n_fn','','%',false,'OR',array(0,100),($showAccounts?array():array('account_id' => null))); // additionally search the accounts, if the contact storage is not the account storage if ($showAccounts && $GLOBALS['egw_info']['server']['account_repository'] == 'ldap' && $GLOBALS['egw_info']['server']['contact_repository'] == 'sql') { $accounts = $GLOBALS['egw']->contacts->search(array( 'n_fn' => $_searchString, 'email' => $_searchString, 'email_home' => $_searchString, ),array('n_fn','email','email_home'),'n_fn','','%',false,'OR',array(0,100),array('owner' => 0)); if ($contacts && $accounts) { $contacts = array_merge($contacts,$accounts); usort($contacts,create_function('$a,$b','return strcasecmp($a["n_fn"],$b["n_fn"]);')); } elseif($accounts) { $contacts =& $accounts; } unset($accounts); } } else { // < 1.3 $contacts = $GLOBALS['egw']->contacts->read(0,20,array( 'fn' => 1, 'email' => 1, 'email_home' => 1, ), $_searchString, 'tid=n', '', 'fn'); } } $response = new xajaxResponse(); if(is_array($contacts)) { $innerHTML = ''; $jsArray = array(); $i = 0; foreach($contacts as $contact) { foreach(array($contact['email'],$contact['email_home']) as $email) { // avoid wrong addresses, if an rfc822 encoded address is in addressbook $email = preg_replace("/(^.*<)([a-zA-Z0-9_\-]+@[a-zA-Z0-9_\-\.]+)(.*)/",'$2',$email); $contact['n_fn'] = str_replace(array(',','@'),' ',$contact['n_fn']); $completeMailString = addslashes(trim($contact['n_fn'] ? $contact['n_fn'] : $contact['fn']) .' <'. trim($email) .'>'); if(!empty($email) && in_array($completeMailString ,$jsArray) === false) { $i++; $str = $GLOBALS['egw']->translation->convert(trim($contact['n_fn'] ? $contact['n_fn'] : $contact['fn']) .' <'. trim($email) .'>', $this->charset, 'utf-8'); #$innerHTML .= '
'. $innerHTML .= '
'. htmlentities($str, ENT_QUOTES, 'utf-8') .'
'; $jsArray[$i] = $completeMailString; } if ($i > 10) break; // we check for # of results here, as we might have empty email addresses } } if($jsArray) { $response->addAssign('resultBox', 'innerHTML', $innerHTML); $response->addScript('results = new Array("'.implode('","',$jsArray).'");'); $response->addScript('displayResultBox();'); } //$response->addScript("getResults();"); //$response->addScript("selectSuggestion(-1);"); } else { $response->addAssign('resultBox', 'className', 'resultBoxHidden'); } return $response->getXML(); } }