egroupware_official/felamimail/inc/class.ajax_contacts.inc.php
2011-07-01 10:37:47 +00:00

104 lines
4.5 KiB
PHP

<?php
/***************************************************************************\
* eGroupWare - FeLaMiMail *
* http://www.linux-at-work.de *
* http://www.phpgw.de *
* http://www.egroupware.org *
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
* ------------------------------------------------- *
* 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 ajax_contacts {
function ajax_contacts() {
$GLOBALS['egw']->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;
if ($GLOBALS['egw_info']['user']['preferences']['addressbook']['hide_accounts']) $showAccounts=false;
$contacts = $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),($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 .= '<div class="inactiveResultRow" onclick="selectSuggestion('. $i .')">'.
$innerHTML .= '<div class="inactiveResultRow" onmousedown="keypressed(13,1)" onmouseover="selectSuggestion('.($i-1).')">'.
htmlentities($str, ENT_QUOTES, 'utf-8') .'</div>';
$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();
}
}