X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap_messages.php;h=8ae69c3c9c10c8759cd40622718199028e89c740;hb=0c46707d33b0e134bc2edba3362b043b56e9b5e1;hp=55932ca4cfbf470cd1b34a19cf664f3794a2d610;hpb=11505466864a694b326cd5f340e3d38a2a4d79b0;p=squirrelmail.git diff --git a/functions/imap_messages.php b/functions/imap_messages.php index 55932ca4..8ae69c3c 100755 --- a/functions/imap_messages.php +++ b/functions/imap_messages.php @@ -81,7 +81,7 @@ function get_reference_header ($imap_stream, $message) { $sid = sqimap_session_id(); $results = array(); $references = ""; - $query = "$sid FETCH $message BODY.PEEK[HEADER.FIELDS (References)]\r\n"; + $query = "$sid FETCH $message BODY[HEADER.FIELDS (References)]\r\n"; fputs ($imap_stream, $query); $responses = sqimap_read_data_list($imap_stream, $sid, true, $responses, $message); if (!eregi("^\\* ([0-9]+) FETCH", $responses[0][0], $regs)) { @@ -90,6 +90,226 @@ function get_reference_header ($imap_stream, $message) { return $responses; } + +/* get sort order from server and + * return it as the $id array for + * mailbox_display + */ + +function sqimap_get_sort_order ($imap_stream, $sort) { + global $default_charset, $thread_sort_messages, + $internal_date_sort, $server_sort_array, + $sent_folder, $mailbox; + + if (session_is_registered('server_sort_array')) { + session_unregister('server_sort_array'); + } + $sid = sqimap_session_id(); + $sort_on = array(); + $reverse = 0; + $server_sort_array = array(); + $sort_test = array(); + $sort_query = ''; + $sort_on = array (0=> 'DATE', + 1=> 'DATE', + 2=> 'FROM', + 3=> 'FROM', + 4=> 'SUBJECT', + 5=> 'SUBJECT', + 6=> 'DATE'); + if ($internal_date_sort == true) { + $sort_on[0] = 'ARRIVAL'; + $sort_on[1] = 'ARRIVAL'; + } + if ($sent_folder == $mailbox) { + $sort_on[2] = 'TO'; + $sort_on[3] = 'TO'; + } + if (!empty($sort_on[$sort])) { + $sort_query = "$sid SORT ($sort_on[$sort]) ".strtoupper($default_charset)." ALL\r\n"; + fputs($imap_stream, $sort_query); + $sort_test = sqimap_read_data($imap_stream, $sid, false, $response, $message); + } + if (isset($sort_test[0])) { + if (preg_match("/^\* SORT (.+)$/", $sort_test[0], $regs)) { + $server_sort_array = preg_split("/ /", trim($regs[1])); + } + } + if ($sort == 0 || $sort == 2 || $sort == 4) { + $server_sort_array = array_reverse($server_sort_array); + } + if (!preg_match("/OK/", $response)) { + $server_sort_array = 'no'; + } + session_register('server_sort_array'); + return $server_sort_array; +} + +/* returns an indent array for printMessageinfo() + this represents the amount of indent needed (value) + for this message number (key) +*/ + +function get_parent_level ($imap_stream) { + global $sort_by_ref, $default_charset, $thread_new; + $parent = ""; + $child = ""; + $cutoff = 0; + + /* loop through the threads and take unwanted characters out + of the thread string then chop it up + */ + for ($i=0;$i 1) { + $thread_new[$k] .= $thread_temp[$i]; + $counter = $counter - 1; + } + else { + $thread_new[$k] .= $thread_temp[$i]; + $k++; + $thread_new[$k] = ""; + $counter = $counter - 1; + } + } + } + session_register('thread_new'); + $thread_new = array_reverse($thread_new); + $thread_list = implode(" ", $thread_new); + $thread_list = str_replace("(", " ", $thread_list); + $thread_list = str_replace(")", " ", $thread_list); + $thread_list = preg_split("/\s/", $thread_list, -1, PREG_SPLIT_NO_EMPTY); + $server_sort_array = $thread_list; + session_register('server_sort_array'); + return $thread_list; +} + + + function sqimap_get_small_header_list ($imap_stream, $msg_list, $issent) { global $squirrelmail_language, $color, $data_dir, $username; @@ -100,7 +320,6 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $issent) { $results = array(); $read_list = array(); $sizes_list = array(); - /* * We need to return the data in the same order as the caller supplied * in $msg_list, but IMAP servers are free to return responses in @@ -392,6 +611,17 @@ function sqimap_get_header ($imap_stream, $read) { } else { $hdr->charset = "us-ascii"; } + /* Detect type in case of multipart/related */ + if (strpos(strtolower(trim($line)), "type=")) { + $pos = strpos($line, "type=") + 6; + $type = trim($line); + if (strpos($line, ";", $pos) > 0) { + $type = substr($type, $pos, strpos($line, ";", $pos)-$pos); + } else { + $type = substr($type, $pos); + } + $hdr->type = $type; + } } else if (strtolower(substr($read[$i], 0, 20)) == "content-disposition:") { /* Add better content-disposition support */