X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap_mailbox.php;h=27a94fd564ddbf1c4058514ce29e578adbfc7470;hb=a34d6890fedb616a14007a34288b7ed4bc859d7f;hp=5749b29b7dd60e1c5668cc49518d19b95a1dc012;hpb=653ff1e630b7643d27cf01d33b1b5d4cbe798cb0;p=squirrelmail.git diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index 5749b29b..27a94fd5 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -3,7 +3,7 @@ /** * imap_mailbox.php * - * Copyright (c) 1999-2003 The SquirrelMail Project Team + * Copyright (c) 1999-2004 The SquirrelMail Project Team * Licensed under the GNU GPL. For full terms see the file COPYING. * * This impliments all functions that manipulate mailboxes @@ -224,13 +224,12 @@ function isDraftMailbox($box) { * Expunges a mailbox, ie. delete all contents. */ function sqimap_mailbox_expunge ($imap_stream, $mailbox, $handle_errors = true, $id='') { - global $uid_support; if ($id) { if (is_array($id)) { $id = sqimap_message_list_squisher($id); } $id = ' '.$id; - $uid = $uid_support; + $uid = TRUE; } else { $uid = false; } @@ -260,9 +259,10 @@ function sqimap_mailbox_expunge ($imap_stream, $mailbox, $handle_errors = true, function sqimap_mailbox_expunge_dmn($message_id) { global $msgs, $msort, $sort, $imapConnection, - $mailbox, $uid_support, $mbx_response, $auto_expunge, + $mailbox, $mbx_response, $auto_expunge, $sort, $allow_server_sort, $thread_sort_messages, $allow_thread_sort, $username, $data_dir; + $cnt = 0; // Got to grab this out of prefs, since it isn't saved from mailbox_view.php if ($allow_thread_sort) { @@ -274,18 +274,21 @@ function sqimap_mailbox_expunge_dmn($message_id) break; } } + + if ( isset($msgs) ) { + unset($msgs[$i]); + $msgs = array_values($msgs); + sqsession_register($msgs, 'msgs'); + } - unset($msgs[$i]); - unset($msort[$i]); - - $msgs = array_values($msgs); - $msort = array_values($msort); - - sqsession_register($msgs, 'msgs'); - sqsession_register($msort, 'msort'); + if ( isset($msort) ) { + unset($msort[$i]); + $msort = array_values($msort); + sqsession_register($msort, 'msort'); + } if ($auto_expunge) { - sqimap_mailbox_expunge($imapConnection, $mailbox, true); + $cnt = sqimap_mailbox_expunge($imapConnection, $mailbox, true); } // And after all that mucking around, update the sort list! @@ -294,10 +297,10 @@ function sqimap_mailbox_expunge_dmn($message_id) $server_sort_array = get_thread_sort($imapConnection); } elseif ( $allow_server_sort ) { $server_sort_array = sqimap_get_sort_order($imapConnection, $sort, $mbx_response); - } elseif ( $uid_support ) { + } else { $server_sort_array = sqimap_get_php_sort_order($imapConnection, $mbx_response); } - + return $cnt; } /** @@ -812,15 +815,34 @@ function sqimap_mailbox_tree($imap_stream) { $has_inbox = false; for ($i = 0, $cnt = count($lsub_ary); $i < $cnt; $i++) { - if (preg_match("/^\*\s+LSUB\s+(.*)\"?INBOX\"?[^(\/\.)].*$/i",$lsub_ary[$i])) { + if (preg_match("/^\*\s+LSUB.*\s\"?INBOX\"?[^(\/\.)].*$/i",$lsub_ary[$i])) { $lsub_ary[$i] = strtoupper($lsub_ary[$i]); - $has_inbox = true; + // in case of an unsubscribed inbox an imap server can + // return the inbox in the lsub results with a \NoSelect + // flag. + if (!preg_match("/\*\s+LSUB\s+\(.*\\\\NoSelect.*\).*/i",$lsub_ary[$i])) { + $has_inbox = true; + } else { + // remove the result and request it again with a list + // response at a later stage. + unset($lsub_ary[$i]); + // re-index the array otherwise the addition of the LIST + // response will fail in PHP 4.1.2 and probably other older versions + $lsub_ary = array_values($lsub_ary); + } break; } } if ($has_inbox == false) { - $lsub_ary[] = '* LSUB () NIL INBOX'; + // do a list request for inbox because we should always show + // inbox even if the user isn't subscribed to it. + $inbox_ary = sqimap_run_command ($imap_stream, 'LIST "" INBOX', + true, $response, $message); + $inbox_ary = compact_mailboxes_response($inbox_ary); + if (count($inbox_ary)) { + $lsub_ary[] = $inbox_ary[0]; + } } /* @@ -979,7 +1001,7 @@ function sqimap_fill_mailbox_tree($mbx_ary, $mbxs=false,$imap_stream) { } function sqimap_utf7_decode_mbx_tree(&$mbx_tree) { - if (strtoupper($mbx_tree->mailboxname_sub) == 'INBOX') + if (strtoupper($mbx_tree->mailboxname_full) == 'INBOX') $mbx_tree->mailboxname_sub = _("INBOX"); else $mbx_tree->mailboxname_sub = imap_utf7_decode_local($mbx_tree->mailboxname_sub);