From 8e9e8afac7b50a90520dd86c7d8efdfd3ee62d7a Mon Sep 17 00:00:00 2001 From: lkehresman Date: Fri, 14 Apr 2000 03:17:41 +0000 Subject: [PATCH] bugfixes with folder listing git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@423 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/imap_general.php | 2 +- functions/imap_mailbox.php | 575 ++++++++++++++++++---------------- functions/mailbox_display.php | 20 +- functions/strings.php | 1 + src/folders.php | 6 +- 5 files changed, 307 insertions(+), 297 deletions(-) diff --git a/functions/imap_general.php b/functions/imap_general.php index 9e3a514b..5ee38404 100755 --- a/functions/imap_general.php +++ b/functions/imap_general.php @@ -145,7 +145,7 @@ ** Returns the delimeter between mailboxes: INBOX/Test, or INBOX.Test... ******************************************************************************/ function sqimap_get_delimiter ($imap_stream) { - fputs ($imap_stream, ". LSUB \"\" *\r\n"); + fputs ($imap_stream, ". LIST \"INBOX\" \"\"\r\n"); $read = sqimap_read_data($imap_stream, ".", true, $a, $b); $quote_position = strpos ($read[0], "\""); $delim = substr ($read[0], $quote_position+1, 1); diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index f7237ca5..dec4e399 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -1,285 +1,304 @@

"; + + /** LSUB array **/ + $inbox_subscribed = false; + fputs ($imap_stream, "a001 LSUB \"\" \"*\"\r\n"); + $lsub_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message); + for ($i=0;$i < count($lsub_ary); $i++) { + $sorted_lsub_ary[$i] = find_mailbox_name($lsub_ary[$i]); + if (substr($sorted_lsub_ary[$i], -1) == $dm) + $sorted_lsub_ary[$i] = substr($sorted_lsub_ary[$i], 0, strlen($sorted_lsub_ary[$i])-1); + if ($sorted_lsub_ary[$i] == "INBOX") + $inbox_subscribed = true; + } + if (isset($sorted_lsub_ary)) { + sort($sorted_lsub_ary); + } + + + /** Just in case they're not subscribed to their inbox, we'll get it for them anyway **/ + if ($inbox_subscribed == false || $inbox_in_list == false) { + fputs ($imap_stream, "a001 LIST \"\" \"INBOX\"\r\n"); + $inbox_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message); + $merged[0] = $inbox_ary[0]; + $k = 1; + } else { + $k = 0; + } + + $i = $j = 0; + + if (isset($list_sorted) && isset($sorted_lsub_ary)) { + reset ($list_sorted); + for (reset($list_sorted); $key = key($list_sorted), isset($key);) { + if ($sorted_lsub_ary[$i] == $list_sorted[$key]) { + $merged[$k] = $sorted_list_ary[$key]["raw"]; + $k++; + $i++; + next($list_sorted); + } else if ($sorted_lsub_ary[$i] < $list_sorted[$key]) { + $i++; + } else { + next($list_sorted); + } + } + } + + echo "


"; + return sqimap_mailbox_parse ($merged, $dm); + } + /* - $original = $boxes; + $original = $boxes; - for ($i = 0; $i < count($original); $i++) { - $boxes[$i]["unformatted"] = strtolower($boxes[$i]["unformatted"]); - } + for ($i = 0; $i < count($original); $i++) { + $boxes[$i]["unformatted"] = strtolower($boxes[$i]["unformatted"]); + } - $boxes = ary_sort($boxes, "unformatted", 1); + $boxes = ary_sort($boxes, "unformatted", 1); - for ($i = 0; $i < count($boxes); $i++) { - for ($j = 0; $j < count($original); $j++) { - if ($boxes[$i]["id"] == $original[$j]["id"]) { - $boxes[$i] = $original[$j]; - } - } - } + for ($i = 0; $i < count($boxes); $i++) { + for ($j = 0; $j < count($original); $j++) { + if ($boxes[$i]["id"] == $original[$j]["id"]) { + $boxes[$i] = $original[$j]; + } + } + } - - for ($i = 0; $i < count($boxes); $i++) { - if ($boxes[$i]["unformatted"] == $special_folders[0]) { - $boxesnew[0] = $boxes[$i]; - $boxes[$i]["used"] = true; - } - } - - if ($list_special_folders_first == true) { - for ($i = 0; $i < count($boxes); $i++) { - for ($j = 1; $j < count($special_folders); $j++) { - if (substr($boxes[$i]["unformatted"], 0, strlen($special_folders[$j])) == $special_folders[$j]) { - $pos = count($boxesnew); - $boxesnew[$pos] = $boxes[$i]; - $boxes[$i]["used"] = true; - } - } - } - } - - for ($i = 0; $i < count($boxes); $i++) { - if (($boxes[$i]["unformatted"] != $special_folders[0]) && - ($boxes[$i]["used"] == false)) { - $pos = count($boxesnew); - $boxesnew[$pos] = $boxes[$i]; - $boxes[$i]["used"] = true; - } - } - - return $boxesnew; - } - */ - - /****************************************************************************** - ** Returns a list of all folders, subscribed or not - ******************************************************************************/ - function sqimap_mailbox_list_all ($imap_stream) { - global $special_folders, $list_special_folders_first, $folder_prefix; - - if (!function_exists ("ary_sort")) - include ("../functions/array.php"); - - $dm = sqimap_get_delimiter ($imap_stream); - - fputs ($imap_stream, "a001 LIST \"$folder_prefix\" *\r\n"); - $read_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message); - $g = 0; - $phase = "inbox"; - for ($i = 0; $i < count($read_ary); $i++) { - if (substr ($read_ary[$i], 0, 4) != "a001") { - $boxes[$g]["raw"] = $read_ary[$i]; - - $mailbox = find_mailbox_name($read_ary[$i]); - $dm_count = countCharInString($mailbox, $dm); - if (substr($mailbox, -1) == $dm) - $dm_count--; - - for ($j = 0; $j < $dm_count; $j++) - $boxes[$g]["formatted"] = $boxes[$g]["formatted"] . " "; - $boxes[$g]["formatted"] .= readShortMailboxName($mailbox, $dm); - - $boxes[$g]["unformatted-dm"] = $mailbox; - if (substr($mailbox, -1) == $dm) - $mailbox = substr($mailbox, 0, strlen($mailbox) - 1); - $boxes[$g]["unformatted"] = $mailbox; - $boxes[$g]["id"] = $g; - - /** Now lets get the flags for this mailbox **/ - fputs ($imap_stream, "a002 LIST \"\" \"$mailbox\"\r\n"); - $read_mlbx = sqimap_read_data ($imap_stream, "a002", true, $response, $message); - - $flags = substr($read_mlbx[0], strpos($read_mlbx[0], "(")+1); - $flags = substr($flags, 0, strpos($flags, ")")); - $flags = str_replace("\\", "", $flags); - $flags = trim(strtolower($flags)); - if ($flags) { - $boxes[$g]["flags"] = explode(" ", $flags); - } - } - $g++; - } - $boxes = ary_sort ($boxes, "unformatted", 1); - return $boxes; - } - + + for ($i = 0; $i < count($boxes); $i++) { + if ($boxes[$i]["unformatted"] == $special_folders[0]) { + $boxesnew[0] = $boxes[$i]; + $boxes[$i]["used"] = true; + } + } + + if ($list_special_folders_first == true) { + for ($i = 0; $i < count($boxes); $i++) { + for ($j = 1; $j < count($special_folders); $j++) { + if (substr($boxes[$i]["unformatted"], 0, strlen($special_folders[$j])) == $special_folders[$j]) { + $pos = count($boxesnew); + $boxesnew[$pos] = $boxes[$i]; + $boxes[$i]["used"] = true; + } + } + } + } + + for ($i = 0; $i < count($boxes); $i++) { + if (($boxes[$i]["unformatted"] != $special_folders[0]) && + ($boxes[$i]["used"] == false)) { + $pos = count($boxesnew); + $boxesnew[$pos] = $boxes[$i]; + $boxes[$i]["used"] = true; + } + } + + return $boxesnew; + } + */ + + /****************************************************************************** + ** Returns a list of all folders, subscribed or not + ******************************************************************************/ + function sqimap_mailbox_list_all ($imap_stream) { + global $special_folders, $list_special_folders_first, $folder_prefix; + + if (!function_exists ("ary_sort")) + include ("../functions/array.php"); + + $dm = sqimap_get_delimiter ($imap_stream); + + fputs ($imap_stream, "a001 LIST \"$folder_prefix\" *\r\n"); + $read_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message); + $g = 0; + $phase = "inbox"; + for ($i = 0; $i < count($read_ary); $i++) { + if (substr ($read_ary[$i], 0, 4) != "a001") { + $boxes[$g]["raw"] = $read_ary[$i]; + + $mailbox = find_mailbox_name($read_ary[$i]); + $dm_count = countCharInString($mailbox, $dm); + if (substr($mailbox, -1) == $dm) + $dm_count--; + + for ($j = 0; $j < $dm_count; $j++) + $boxes[$g]["formatted"] = $boxes[$g]["formatted"] . " "; + $boxes[$g]["formatted"] .= readShortMailboxName($mailbox, $dm); + + $boxes[$g]["unformatted-dm"] = $mailbox; + if (substr($mailbox, -1) == $dm) + $mailbox = substr($mailbox, 0, strlen($mailbox) - 1); + $boxes[$g]["unformatted"] = $mailbox; + $boxes[$g]["id"] = $g; + + /** Now lets get the flags for this mailbox **/ + fputs ($imap_stream, "a002 LIST \"\" \"$mailbox\"\r\n"); + $read_mlbx = sqimap_read_data ($imap_stream, "a002", true, $response, $message); + + $flags = substr($read_mlbx[0], strpos($read_mlbx[0], "(")+1); + $flags = substr($flags, 0, strpos($flags, ")")); + $flags = str_replace("\\", "", $flags); + $flags = trim(strtolower($flags)); + if ($flags) { + $boxes[$g]["flags"] = explode(" ", $flags); + } + } + $g++; + } + $boxes = ary_sort ($boxes, "unformatted", 1); + return $boxes; + } + ?> diff --git a/functions/mailbox_display.php b/functions/mailbox_display.php index 6cef9ec7..cd25b137 100644 --- a/functions/mailbox_display.php +++ b/functions/mailbox_display.php @@ -115,6 +115,8 @@ // generic function to convert the msgs array into an HTML table function displayMessageArray($imapConnection, $numMessages, $startMessage, &$msgs, $msort, $mailbox, $sort, $color,$show_num) { + global $folder_prefix; + // do a check to see if the config stuff has already been included or not if (!isset($imapServerAddress)) include("../config/config.php"); @@ -175,21 +177,9 @@ $boxes = sqimap_mailbox_list($imapConnection); for ($i = 0; $i < count($boxes); $i++) { - $use_folder = true; - for ($p = 0; $p < count($special_folders); $p++) { - if ($boxes[$i]["unformatted"] == $special_folders[0]) { - $use_folder = true; - } else if ($boxes[$i]["unformatted"] == $special_folders[$p]) { - $use_folder = false; - } else if (substr($boxes[$i]["unformatted"], 0, strlen($trash_folder)) == $trash_folder) { - $use_folder = false; - } - } - if ($use_folder == true) { - $box = $boxes[$i]["unformatted"]; - $box2 = replace_spaces($boxes[$i]["formatted"]); - echo "