X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap_mailbox.php;h=422638ed3193150b8a06adb94ac9cfce9ade72ad;hb=5218b2823717b3d99bfbe440df933ff1795203e9;hp=436f4d41d72c6febc5385af5e3dc010ae0e6267f;hpb=c5eb2c035ef288266b9e7568686ce9e365cecfb4;p=squirrelmail.git diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index 436f4d41..422638ed 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -12,6 +12,7 @@ sqimap_mailbox_select ($imap_stream, $mailbox); fputs ($imap_stream, "a001 EXPUNGE\r\n"); $read = sqimap_read_data($imap_stream, "a001", true, $response, $message); + sqimap_mailbox_close ($imap_stream); } @@ -19,23 +20,39 @@ ** Checks whether or not the specified mailbox exists ******************************************************************************/ function sqimap_mailbox_exists ($imap_stream, $mailbox) { - $boxes = sqimap_mailbox_list ($imap_stream); - $found = false; - for ($i = 0; $i < count ($boxes); $i++) { - if ($boxes[$i]["unformatted"] == $mailbox) - $found = true; + fputs ($imap_stream, "a001 LIST \"\" \"$mailbox\"\r\n"); + $mbx = sqimap_read_data($imap_stream, "a001", true, $response, $message); + if ($mailbox) { + if (ereg ("$mailbox", $mbx[0])) { + return true; + } else { + return false; + } } - return $found; } + /****************************************************************************** + ** Closes an open mailbox + ******************************************************************************/ + function sqimap_mailbox_close ($imap_stream) { + fputs ($imap_stream, "a001 CLOSE\r\n"); + $tmp = sqimap_read_data($imap_stream, "a001", false, $response, $message); + } - /****************************************************************************** ** Selects a mailbox ******************************************************************************/ - function sqimap_mailbox_select ($imap_stream, $mailbox, $hide) { + function sqimap_mailbox_select ($imap_stream, $mailbox, $hide=true, $recent=false) { fputs ($imap_stream, "a001 SELECT \"$mailbox\"\r\n"); $read = sqimap_read_data($imap_stream, "a001", true, $response, $message); + if ($recent) { + for ($i=0; $i"; - } - } - ****/ } return $boxes; } @@ -162,30 +159,13 @@ $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,36 +173,33 @@ 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++) { @@ -313,7 +290,9 @@ } $g++; } - $boxes = ary_sort ($boxes, "unformatted", 1); + if ($boxes) { + $boxes = ary_sort ($boxes, "unformatted", 1); + } return $boxes; }