Fixed created search strings.
This commit is contained in:
parent
3b616f3b8b
commit
73045ee858
1 changed files with 398 additions and 382 deletions
|
@ -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 */
|
||||
for ($cur_crit=0,$iCnt=count($where_array); $cur_crit <= $iCnt; ++$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) {
|
||||
$search_string = trim($search_string); /* Trim out last space */
|
||||
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])) {
|
||||
$criteria = sqimap_asearch_build_criteria($where_array[$cur_crit], $what_array[$cur_crit], $search_charset);
|
||||
if (!empty($criteria)) {
|
||||
//$criteria = 'ALL '. $criteria;
|
||||
$unop = $unop_array[$cur_crit];
|
||||
for ($crit = $cur_crit; $crit < count($where_array); $crit++) {
|
||||
$criteria = trim(sqimap_asearch_build_criteria($where_array[$crit], $what_array[$crit], $search_charset));
|
||||
if (!empty($criteria) && empty($exclude_array[$crit])) {
|
||||
if (asearch_nz($mailbox_array[$crit]) == $cur_mailbox) {
|
||||
$unop = $unop_array[$crit];
|
||||
if (!empty($unop)) {
|
||||
$criteria = $unop . ' ' . $criteria;
|
||||
} else {
|
||||
$criteria = 'ALL ' . $criteria;
|
||||
}
|
||||
/* We need to infix the next non-excluded criteria's biop if it's the same mailbox */
|
||||
$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);
|
||||
$aCriteria[] = array($biop_array[$crit], $criteria);
|
||||
}
|
||||
}
|
||||
// unset something
|
||||
$exclude_array[$next_crit] = true;
|
||||
$criteria .= $next_biop . ' '. $next_criterium;
|
||||
$exclude_array[$crit] = true;
|
||||
}
|
||||
$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];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//if ($next_biop == 'OR')
|
||||
// $criteria = $next_biop . ' ' . $criteria;
|
||||
$search_string .= $criteria;
|
||||
//$cur_biop = asearch_nz($biop_array[$cur_crit]);
|
||||
}
|
||||
$search_string .= implode(' ',$aSearch);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue