X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap_mailbox.php;h=39e17d968ffe50a799dfebff12ea2c26e0212573;hb=591000ec59a6ae1088df08a48e65bb6652fc63a7;hp=018f2737c74cdb8687e94a4da30f69d3841d0658;hpb=96ba63151a8d41d2f348b0731d9541f15bf20715;p=squirrelmail.git diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index 018f2737..39e17d96 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -33,9 +33,9 @@ /****************************************************************************** ** Selects a mailbox ******************************************************************************/ - function sqimap_mailbox_select ($imap_stream, $mailbox) { + function sqimap_mailbox_select ($imap_stream, $mailbox, $hide) { fputs ($imap_stream, "a001 SELECT \"$mailbox\"\r\n"); - $read = sqimap_read_data($imap_stream, "a001", true, $response, $message); + $read = sqimap_read_data($imap_stream, "a001", true, $response, $message); } @@ -73,18 +73,6 @@ function sqimap_unsubscribe ($imap_stream, $mailbox) { global $imap_server_type; - /** This is a hack for UW server - ** Sometimes a folder will have a / at the end. If that's the case, - ** the unsubscribe doesn't work for a box named "mailbox/". We have - ** to strip off the / at the end. There may be a better way of doing - ** this, but this is the best I've found so far. (lme - April 26, 2000) - **/ - if ($imap_server_type == "uw") { - if (substr($mailbox, -1) == "/") { - $mailbox = substr($mailbox, 0, strlen($mailbox)-1); - } - } - fputs ($imap_stream, "a001 UNSUBSCRIBE \"$mailbox\"\r\n"); $read_ary = sqimap_read_data($imap_stream, "a001", true, $response, $message); } @@ -105,12 +93,12 @@ /****************************************************************************** ** Formats a mailbox into 4 parts for the $boxes array ******************************************************************************/ - function sqimap_mailbox_parse ($line, $dm) { + function sqimap_mailbox_parse ($line, $line_lsub, $dm) { global $folder_prefix; for ($g=0; $g < count($line); $g++) { $boxes[$g]["raw"] = $line[$g]; - $mailbox = find_mailbox_name($line[$g]); + $mailbox = $line_lsub[$g]; $dm_count = countCharInString($mailbox, $dm); if (substr($mailbox, -1) == $dm) $dm_count--; @@ -132,14 +120,6 @@ if ($flags) { $boxes[$g]["flags"] = explode(" ", $flags); } - /**** I'm not sure why this was even in here to begin with.. (lme) - for ($i=0; $i < count($boxes[$g]["flags"]); $i++) { - if ($boxes[$g]["flags"][$i] == "noselect") { - $boxes[$g]["unformatted-dm"] = $boxes[$g]["unformatted-dm"].$dm; -// echo $boxes[$g]["unformatted-dm"]." - debug
"; - } - } - ****/ } return $boxes; } @@ -162,30 +142,12 @@ $dm = sqimap_get_delimiter ($imap_stream); - /** LIST array **/ - fputs ($imap_stream, "a001 LIST \"\" \"$folder_prefix*\"\r\n"); - $list_ary = sqimap_read_data ($imap_stream, "a001", true, $response, $message); - - for ($i=0;$i < count($list_ary); $i++) { - $sorted_list_ary[$i]["name"] = find_mailbox_name($list_ary[$i]); - $sorted_list_ary[$i]["raw"] = $list_ary[$i]; - if ($sorted_list_ary[$i]["name"] == "INBOX") - $inbox_in_list = true; - } - if (isset($sorted_list_ary)) { - $list_sorted = array_cleave ($sorted_list_ary, "name"); - asort($list_sorted); - } - - /** 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; } @@ -193,60 +155,63 @@ sort($sorted_lsub_ary); } - + /** LIST array **/ + for ($i=0; $i < count($sorted_lsub_ary); $i++) { + if (substr($sorted_lsub_ary[$i], -1) == $dm) + $mbx = substr($sorted_lsub_ary[$i], 0, strlen($sorted_lsub_ary[$i])-1); + else + $mbx = $sorted_lsub_ary[$i]; + + fputs ($imap_stream, "a001 LIST \"\" \"$mbx\"\r\n"); + $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message); + $sorted_list_ary[$i] = $read[0]; + if (find_mailbox_name($sorted_list_ary[$i]) == "INBOX") + $inbox_in_list = true; + } + /** 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); - } - } + $pos = count($sorted_list_ary); + $sorted_list_ary[$pos] = $inbox_ary[0]; + + $pos = count($sorted_lsub_ary); + $sorted_lsub_ary[$pos] = find_mailbox_name($inbox_ary[0]); } - $boxes = sqimap_mailbox_parse ($merged, $dm); + $boxes = sqimap_mailbox_parse ($sorted_list_ary, $sorted_lsub_ary, $dm); /** Now, lets sort for special folders **/ for ($i = 0; $i < count($boxes); $i++) { if (strtolower($boxes[$i]["unformatted"]) == "inbox") { $boxesnew[0] = $boxes[$i]; $boxes[$i]["used"] = true; + $i = count($boxes); } } if ($list_special_folders_first == true) { - for ($i = 0; $i < count($boxes); $i++) { + for ($i = count($boxes)-1; $i >= 0 ; $i--) { if (($boxes[$i]["unformatted"] == $trash_folder) && ($move_to_trash)) { $pos = count($boxesnew); $boxesnew[$pos] = $boxes[$i]; $boxes[$i]["used"] = true; + $trash_found = true; } else if (($boxes[$i]["unformatted"] == $sent_folder) && ($move_to_sent)) { $pos = count($boxesnew); $boxesnew[$pos] = $boxes[$i]; $boxes[$i]["used"] = true; + $sent_found = true; } + + if (($sent_found && $trash_found) || ($sent_found && !$move_to_trash) || ($trash_found && !$move_to_sent) || (!$move_to_sent && !$move_to_trash)) + $i = -1; } } - + for ($i = 0; $i < count($boxes); $i++) { if ((strtolower($boxes[$i]["unformatted"]) != "inbox") && ($boxes[$i]["used"] == false)) { @@ -307,7 +272,9 @@ } $g++; } - $boxes = ary_sort ($boxes, "unformatted", 1); + if ($boxes) { + $boxes = ary_sort ($boxes, "unformatted", 1); + } return $boxes; }