function sqimap_toggle_flag($imap_stream, $id, $flag, $set, $handle_errors) {
$msgs_id = sqimap_message_list_squisher($id);
$set_string = ($set ? '+' : '-');
+
+ // mpl-spirit
+ for ($i=0; $i<sizeof($id); $i++) {
+ $aMessageList["$id[$i]"] = array();
+ }
+
$aResponse = sqimap_run_command_list($imap_stream, "STORE $msgs_id ".$set_string."FLAGS ($flag)", $handle_errors, $response, $message, TRUE);
- // parse the fetch response
- return parseFetch($aResponse);
+
+ // parse the fetch response (mpl-spirit added 2nd arg)
+ $parseFetchResults=parseFetch($aResponse,$aMessageList);
+
+ // mpl-spirit
+ // some broken IMAP servers do not return UID elements on UID STORE
+ // if this is the case, then we need to do a UID FETCH
+ $testkey=$id[0];
+ if (!isset($parseFetchResults[$testkey]['UID'])) {
+ $aResponse = sqimap_run_command_list($imap_stream, "FETCH $msgs_id (FLAGS)", $handle_errors, $response, $message, TRUE);
+ $parseFetchResults = parseFetch($aResponse,$aMessageList);
+ }
+
+ return ($parseFetchResults);
}