Fixed created search strings.

This commit is contained in:
stekkel 2004-06-06 01:43:35 +00:00
parent 3b616f3b8b
commit 73045ee858

View file

@ -455,7 +455,7 @@ function sqimap_asearch($imapConnection, &$mailbox_array, &$biop_array, &$unop_a
/* We loop one more time than the real array count, so the last search gets fired */ /* We loop one more time than the real array count, so the last search gets fired */
for ($cur_crit=0,$iCnt=count($where_array); $cur_crit <= $iCnt; ++$cur_crit) { for ($cur_crit=0,$iCnt=count($where_array); $cur_crit <= $iCnt; ++$cur_crit) {
if (empty($exclude_array[$cur_crit])) { if (empty($exclude_array[$cur_crit])) {
$next_mailbox = $mailbox_array[$cur_crit]; $next_mailbox = (isset($mailbox_array[$cur_crit])) ? $mailbox_array[$cur_crit] : false;
if ($next_mailbox != $cur_mailbox) { if ($next_mailbox != $cur_mailbox) {
$search_string = trim($search_string); /* Trim out last space */ $search_string = trim($search_string); /* Trim out last space */
if ($cur_mailbox == 'All Folders') if ($cur_mailbox == 'All Folders')
@ -477,35 +477,51 @@ function sqimap_asearch($imapConnection, &$mailbox_array, &$biop_array, &$unop_a
} }
if (isset($where_array[$cur_crit]) && empty($exclude_array[$cur_crit])) { if (isset($where_array[$cur_crit]) && empty($exclude_array[$cur_crit])) {
$criteria = sqimap_asearch_build_criteria($where_array[$cur_crit], $what_array[$cur_crit], $search_charset); for ($crit = $cur_crit; $crit < count($where_array); $crit++) {
if (!empty($criteria)) { $criteria = trim(sqimap_asearch_build_criteria($where_array[$crit], $what_array[$crit], $search_charset));
//$criteria = 'ALL '. $criteria; if (!empty($criteria) && empty($exclude_array[$crit])) {
$unop = $unop_array[$cur_crit]; if (asearch_nz($mailbox_array[$crit]) == $cur_mailbox) {
$unop = $unop_array[$crit];
if (!empty($unop)) { if (!empty($unop)) {
$criteria = $unop . ' ' . $criteria; $criteria = $unop . ' ' . $criteria;
} else {
$criteria = 'ALL ' . $criteria;
} }
/* We need to infix the next non-excluded criteria's biop if it's the same mailbox */ $aCriteria[] = array($biop_array[$crit], $criteria);
$next_biop = ''; }
for ($next_crit = $cur_crit+1; $next_crit <= count($where_array); $next_crit++) { }
if (empty($exclude_array[$next_crit])) {
if (asearch_nz($mailbox_array[$next_crit]) == $cur_mailbox) {
$next_biop = asearch_nz($biop_array[$next_crit]);
if ($next_biop == 'OR' || $next_biop == 'ALL') {
$next_criterium = sqimap_asearch_build_criteria($where_array[$next_crit], $what_array[$next_crit], $search_charset);
// unset something // unset something
$exclude_array[$next_crit] = true; $exclude_array[$crit] = true;
$criteria .= $next_biop . ' '. $next_criterium; }
$aSearch = array();
for($i=0,$iCnt=count($aCriteria);$i<$iCnt;++$i) {
$cur_biop = $aCriteria[$i][0];
$next_biop = (isset($aCriteria[$i+1][0])) ? $aCriteria[$i+1][0] : false;
if ($next_biop != $cur_biop && $next_biop == 'OR') {
$aSearch[] = 'OR '.$aCriteria[$i][1];
} else if ($cur_biop != 'OR') {
$aSearch[] = 'ALL '.$aCriteria[$i][1];
} else { // or only supports 2 search keys so we need to create a parenthized list
$prev_biop = (isset($aCriteria[$i-1][0])) ? $aCriteria[$i-1][0] : false;
if ($prev_biop == $cur_biop) {
$last = $aSearch[$i-1];
if (!substr($last,-1) == ')') {
$aSearch[$i-1] = "(OR $last";
$aSearch[] = $aCriteria[$i][1].')';
} else {
$sEnd = '';
while ($last && substr($last,-1) == ')') {
$last = substr($last,0,-1);
$sEnd .= ')';
}
$aSearch[$i-1] = "(OR $last";
$aSearch[] = $aCriteria[$i][1].$sEnd.')';
}
} else {
$aSearch[] = $aCriteria[$i][1];
} }
} }
} }
} $search_string .= implode(' ',$aSearch);
//if ($next_biop == 'OR')
// $criteria = $next_biop . ' ' . $criteria;
$search_string .= $criteria;
//$cur_biop = asearch_nz($biop_array[$cur_crit]);
}
} }
} }