From 4d5f2b3176f3c3b82f657d86c1600256acda633b Mon Sep 17 00:00:00 2001 From: kink Date: Sun, 6 Feb 2005 19:55:04 +0000 Subject: [PATCH] Add "show only subscribed folders" option (defaults to On, current behaviour). Recommended by RFC 2683 sect 3.2.2, allows a user to show all mailboxes regardless of subscription. Thanks Simon Matter for the idea. btw when will the "oldway" in left_main disappear? git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@8768 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 4 +- functions/imap_mailbox.php | 23 ++++-- include/load_prefs.php | 3 + include/options/folder.php | 6 ++ src/folders.php | 149 +++++++++++++++++++------------------ 5 files changed, 103 insertions(+), 82 deletions(-) diff --git a/ChangeLog b/ChangeLog index a135e568..71444d6f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -204,7 +204,9 @@ Version 1.5.1 -- CVS create an empty one. - Add trailing slash for data directory used by global file based address book (#1105760). - - Fixed sorting problem is get_squirrel_sort() function (#1115403). + - Fixed sorting problem is get_squirrel_sort() function (#1115403). + - Add "Show Only Subscribed Folders" option to allow users to show all + folders instead of only subscribed ones (#1105756, #1105250). Version 1.5.0 -------------------- diff --git a/functions/imap_mailbox.php b/functions/imap_mailbox.php index 59ab2ed9..30ecbd5f 100755 --- a/functions/imap_mailbox.php +++ b/functions/imap_mailbox.php @@ -563,21 +563,22 @@ function sqimap_mailbox_list($imap_stream, $force=false) { global $data_dir, $username, $list_special_folders_first, $folder_prefix, $trash_folder, $sent_folder, $draft_folder, $move_to_trash, $move_to_sent, $save_as_draft, - $delimiter, $noselect_fix_enable, $imap_server_type; + $delimiter, $noselect_fix_enable, $imap_server_type, + $show_only_subscribed_folders; $inbox_subscribed = false; $listsubscribed = sqimap_capability($imap_stream,'LIST-SUBSCRIBED'); require_once(SM_PATH . 'include/load_prefs.php'); - - if ($listsubscribed) { + if (!$show_only_subscribed_folders) { + $lsub = 'LIST'; + } elseif ($listsubscribed) { $lsub = 'LIST (SUBSCRIBED)'; } else { $lsub = 'LSUB'; } if ($noselect_fix_enable) { - $lsub_args = "$lsub \"$folder_prefix\" \"*%\""; } else { $lsub_args = "$lsub \"$folder_prefix\" \"*\""; @@ -749,15 +750,21 @@ function sqimap_mailbox_tree($imap_stream) { if (true) { global $data_dir, $username, $list_special_folders_first, $folder_prefix, $delimiter, $trash_folder, $move_to_trash, - $imap_server_type; + $imap_server_type, $show_only_subscribed_folders; $noselect = false; $noinferiors = false; require_once(SM_PATH . 'include/load_prefs.php'); + if ($show_only_subscribed_folders) { + $lsub_cmd = 'LSUB'; + } else { + $lsub_cmd = 'LIST'; + } + /* LSUB array */ - $lsub_ary = sqimap_run_command ($imap_stream, "LSUB \"$folder_prefix\" \"*\"", + $lsub_ary = sqimap_run_command ($imap_stream, "$lsub_cmd \"$folder_prefix\" \"*\"", true, $response, $message); $lsub_ary = compact_mailboxes_response($lsub_ary); @@ -765,12 +772,12 @@ 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_cmd.*\s\"?INBOX\"?[^(\/\.)].*$/i",$lsub_ary[$i])) { $lsub_ary[$i] = strtoupper($lsub_ary[$i]); // 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])) { + if (!preg_match("/\*\s+$lsub_cmd\s+\(.*\\\\NoSelect.*\).*/i",$lsub_ary[$i])) { $has_inbox = true; } else { // remove the result and request it again with a list diff --git a/include/load_prefs.php b/include/load_prefs.php index 7f566719..f9564c42 100644 --- a/include/load_prefs.php +++ b/include/load_prefs.php @@ -278,6 +278,9 @@ if ( checkForJavascript() ) $search_memory = getPref($data_dir, $username, 'search_memory', 0); +$show_only_subscribed_folders = + getPref($data_dir, $username, 'show_only_subscribed_folders', SMPREF_ON); + $forward_cc = getPref($data_dir, $username, 'forward_cc', 0); $mailbox_select_style = getPref($data_dir, $username, 'mailbox_select_style', 0); diff --git a/include/options/folder.php b/include/options/folder.php index f4b5624a..3bf3f449 100644 --- a/include/options/folder.php +++ b/include/options/folder.php @@ -215,6 +215,12 @@ function load_optpage_data_folder() { 9 => '9') ); + $optvals[SMOPT_GRP_FOLDERLIST][] = array( + 'name' => 'show_only_subscribed_folders', + 'caption' => _("Show only subscribed folders"), + 'type' => SMOPT_TYPE_BOOLEAN, + 'refresh' => SMOPT_REFRESH_FOLDERLIST + ); /*** Load the General Options into the array ***/ $optgrps[SMOPT_GRP_FOLDERSELECT] = _("Folder Selection Options"); diff --git a/src/folders.php b/src/folders.php index 8865afe3..86a8a9da 100644 --- a/src/folders.php +++ b/src/folders.php @@ -249,82 +249,85 @@ echo html_tag( 'tr', ) ."\n"; -/** UNSUBSCRIBE FOLDERS **/ -echo html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="4" cellspacing="0" border="0"' ) . - html_tag( 'tr', - html_tag( 'td', '' . _("Unsubscribe") . '/' . _("Subscribe") . '', 'center', $color[9], 'colspan="2"' ) - ) . - html_tag( 'tr' ) . - html_tag( 'td', '', 'center', $color[0], 'width="50%"' ); +if ($show_only_subscribed_folders) { -if ($count_special_folders < count($boxes)) { - echo addForm('folders_subscribe.php?method=unsub') - . "\n"; + for ($i = 0; $i < count($boxes); $i++) { + $use_folder = true; + if ((strtolower($boxes[$i]["unformatted"]) != "inbox") && + ($boxes[$i]["unformatted"] != $trash_folder) && + ($boxes[$i]["unformatted"] != $sent_folder) && + ($boxes[$i]["unformatted"] != $draft_folder)) { + $box = htmlspecialchars($boxes[$i]["unformatted-dm"]); + $box2 = str_replace(' ', ' ', + htmlspecialchars(imap_utf7_decode_local($boxes[$i]["unformatted-disp"]))); + echo " \n"; + } + } + echo "

\n" + . '\n" + . "\n"; + } else { + echo _("No folders were found to unsubscribe from!") . ''; } - } - echo "

\n" - . '\n" - . "\n"; -} else { - echo _("No folders were found to unsubscribe from!") . ''; -} -$boxes_sub = $boxes; + $boxes_sub = $boxes; + + /** SUBSCRIBE TO FOLDERS **/ + echo html_tag( 'td', '', 'center', $color[0], 'width="50%"' ); + if(!$no_list_for_subscribe) { + $boxes_all = sqimap_mailbox_list_all ($imapConnection); + + $box = ''; + $box2 = ''; + for ($i = 0, $q = 0; $i < count($boxes_all); $i++) { + $use_folder = true; + for ($p = 0; $p < count ($boxes); $p++) { + if ($boxes_all[$i]['unformatted'] == $boxes[$p]['unformatted']) { + $use_folder = false; + continue; + } else if ($boxes_all[$i]['unformatted-dm'] == $folder_prefix) { + $use_folder = false; + } + } + if ($use_folder == true) { + $box[$q] = htmlspecialchars($boxes_all[$i]['unformatted-dm']); + $box2[$q] = htmlspecialchars(imap_utf7_decode_local($boxes_all[$i]['unformatted-disp'])); + $q++; + } + } + if ($box && $box2) { + echo addForm('folders_subscribe.php?method=sub') + . '

' + . '\n" + . "
\n"; + } else { + echo _("No folders were found to subscribe to!") . ''; + } + } else { + /* don't perform the list action -- this is much faster */ + echo addForm('folders_subscribe.php?method=sub') + . _("Subscribe to:") . '
' + . '' + . '\n" + . "
\n"; } - } - if ($use_folder == true) { - $box[$q] = htmlspecialchars($boxes_all[$i]['unformatted-dm']); - $box2[$q] = htmlspecialchars(imap_utf7_decode_local($boxes_all[$i]['unformatted-disp'])); - $q++; - } - } - if ($box && $box2) { - echo addForm('folders_subscribe.php?method=sub') - . '

' - . '\n" - . "
\n"; - } else { - echo _("No folders were found to subscribe to!") . ''; - } -} else { - /* don't perform the list action -- this is much faster */ - echo addForm('folders_subscribe.php?method=sub') - . _("Subscribe to:") . '
' - . '' - . '\n" - . "
\n"; } do_hook('folders_bottom'); @@ -336,4 +339,4 @@ do_hook('folders_bottom'); - \ No newline at end of file + -- 2.25.1