$color, $search_position = '', $search_all, $count_all) {
global $msgs, $message_highlight_list, $squirrelmail_language, $languages,
- $index_order, $pos;
-
+ $index_order, $pos, $allow_charset_search, $imap_server_type;
$pos = $search_position;
$urlMailbox = urlencode($mailbox);
$search_what = ereg_replace('[ ]{2,}', ' ', $search_what);
$multi_search = explode(' ', $search_what);
$search_string = '';
- foreach ($multi_search as $multi_search_part) {
- $search_string .= $search_where . ' {' . strlen($multi_search_part)
- . "}\r\n" . $multi_search_part . ' ';
- }
+ /* it seems macosx does not support the prefered search
+ syntax so we fall back to the older style. This IMAP
+ server has a problem with multiple search terms. Instead
+ of returning the messages that match all the terms it
+ returns the messages that match each term. Could be fixed
+ on the client side, but should be fixed on the server
+ as per the RFC */
+
+ if ($imap_server_type == 'macosx') {
+ foreach ($multi_search as $multi_search_part) {
+ $search_string .= $search_where . ' ' .$multi_search_part. ' ';
+ }
+ }
+ else {
+ foreach ($multi_search as $multi_search_part) {
+ $search_string .= $search_where . ' {' . strlen($multi_search_part)
+ . "}\r\n" . $multi_search_part . ' ';
+ }
+ }
+
$search_string = trim($search_string);
/* now use $search_string in the imap search */
- if (isset($languages[$squirrelmail_language]['CHARSET']) &&
+ if ($allow_charset_search && isset($languages[$squirrelmail_language]['CHARSET']) &&
$languages[$squirrelmail_language]['CHARSET']) {
$ss = "SEARCH CHARSET "
. strtoupper($languages[$squirrelmail_language]['CHARSET'])
}
/* read data back from IMAP */
- $readin = sqimap_run_command($imapConnection, $ss, true, $result, $message);
+ $readin = sqimap_run_command($imapConnection, $ss, false, $result, $message);
/* try US-ASCII charset if search fails */
if (isset($languages[$squirrelmail_language]['CHARSET'])
}
$issent = ($mailbox == $sent_folder);
$hdr_list = sqimap_get_small_header_list($imapConnection, $id, $issent);
- $flags = sqimap_get_flags_list($imapConnection, $id, $issent);
+// $flags = sqimap_get_flags_list($imapConnection, $id, $issent);
+
foreach ($hdr_list as $hdr) {
$from[] = $hdr->from;
$date[] = $hdr->date;
$cc[] = $hdr->cc;
$size[] = $hdr->size;
$type[] = $hdr->type0;
+ $flag_deleted[] = $hdr->flag_deleted;
+ $flag_answered[] = $hdr->flag_answered;
+ $flag_seen[] = $hdr->flag_seen;
+ $flag_flagged[] = $hdr->flag_flagged;
}
$j = 0;
$messages[$j]["CC"] = $cc[$j];
$messages[$j]["SIZE"] = $size[$j];
$messages[$j]["TYPE0"] = $type[$j];
-
+ $messages[$j]['FLAG_DELETED'] = $flag_deleted[$j];
+ $messages[$j]['FLAG_ANSWERED'] = $flag_answered[$j];
+ $messages[$j]['FLAG_SEEN'] = $flag_seen[$j];
+ $messages[$j]['FLAG_FLAGGED'] = $flag_flagged[$j];
+/*
$num = 0;
while ($num < count($flags[$j])) {
if ($flags[$j][$num] == 'Deleted') {
}
$num++;
}
+*/
$j++;
+
}
/* Find and remove the ones that are deleted */