Add "show only subscribed folders" option (defaults to On, current behaviour).
authorkink <kink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 6 Feb 2005 19:55:04 +0000 (19:55 +0000)
committerkink <kink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 6 Feb 2005 19:55:04 +0000 (19:55 +0000)
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
functions/imap_mailbox.php
include/load_prefs.php
include/options/folder.php
src/folders.php

index a135e56..71444d6 100644 (file)
--- 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
 --------------------
index 59ab2ed..30ecbd5 100755 (executable)
@@ -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
index 7f56671..f9564c4 100644 (file)
@@ -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);
index f4b5624..3bf3f44 100644 (file)
@@ -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");
index 8865afe..86a8a9d 100644 (file)
@@ -249,82 +249,85 @@ echo html_tag( 'tr',
         ) ."</table>\n";
 
 
-/** UNSUBSCRIBE FOLDERS **/
-echo html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="4" cellspacing="0" border="0"' ) .
-            html_tag( 'tr',
-                html_tag( 'td', '<b>' . _("Unsubscribe") . '/' . _("Subscribe") . '</b>', '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')
-       . "<tt><select name=\"mailbox[]\" multiple=\"multiple\" size=\"8\">\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(' ', '&nbsp;',
-                                htmlspecialchars(imap_utf7_decode_local($boxes[$i]["unformatted-disp"])));
-            echo "         <option value=\"$box\">$box2</option>\n";
+        /** UNSUBSCRIBE FOLDERS **/
+        echo html_tag( 'table', '', 'center', '', 'width="70%" cellpadding="4" cellspacing="0" border="0"' ) .
+                    html_tag( 'tr',
+                        html_tag( 'td', '<b>' . _("Unsubscribe") . '/' . _("Subscribe") . '</b>', 'center', $color[9], 'colspan="2"' )
+                    ) .
+                    html_tag( 'tr' ) .
+                        html_tag( 'td', '', 'center', $color[0], 'width="50%"' );
+
+        if ($count_special_folders < count($boxes)) {
+            echo addForm('folders_subscribe.php?method=unsub')
+               . "<tt><select name=\"mailbox[]\" multiple=\"multiple\" size=\"8\">\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(' ', '&nbsp;',
+                                        htmlspecialchars(imap_utf7_decode_local($boxes[$i]["unformatted-disp"])));
+                    echo "         <option value=\"$box\">$box2</option>\n";
+                }
+            }
+            echo "</select></tt><br /><br />\n"
+               . '<input type="submit" value="'
+               . _("Unsubscribe")
+               . "\" />\n"
+               . "</form></td>\n";
+        } else {
+            echo _("No folders were found to unsubscribe from!") . '</td>';
         }
-    }
-    echo "</select></tt><br /><br />\n"
-       . '<input type="submit" value="'
-       . _("Unsubscribe")
-       . "\" />\n"
-       . "</form></td>\n";
-} else {
-    echo _("No folders were found to unsubscribe from!") . '</td>';
-}
-$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')
+               . '<tt><select name="mailbox[]" multiple="multiple" size="8">';
 
-/** 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;
+            for ($q = 0; $q < count($box); $q++) {
+               echo '         <option value="' . $box[$q] . '">'.$box2[$q]."</option>\n";
+            }
+            echo '</select></tt><br /><br />'
+               . '<input type="submit" value="'. _("Subscribe") . "\" />\n"
+               . "</form></td></tr></table><br />\n";
+          } else {
+            echo _("No folders were found to subscribe to!") . '</td></tr></table>';
+          }
+        } else {
+          /* don't perform the list action -- this is much faster */
+          echo addForm('folders_subscribe.php?method=sub')
+             . _("Subscribe to:") . '<br />'
+             . '<tt><input type="text" name="mailbox[]" size="35" />'
+             . '<input type="submit" value="'. _("Subscribe") . "\" />\n"
+             . "</form></td></tr></table><br />\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')
-       . '<tt><select name="mailbox[]" multiple="multiple" size="8">';
-
-    for ($q = 0; $q < count($box); $q++) {
-       echo '         <option value="' . $box[$q] . '">'.$box2[$q]."</option>\n";
-    }
-    echo '</select></tt><br /><br />'
-       . '<input type="submit" value="'. _("Subscribe") . "\" />\n"
-       . "</form></td></tr></table><br />\n";
-  } else {
-    echo _("No folders were found to subscribe to!") . '</td></tr></table>';
-  }
-} else {
-  /* don't perform the list action -- this is much faster */
-  echo addForm('folders_subscribe.php?method=sub')
-     . _("Subscribe to:") . '<br />'
-     . '<tt><input type="text" name="mailbox[]" size="35" />'
-     . '<input type="submit" value="'. _("Subscribe") . "\" />\n"
-     . "</form></td></tr></table><br />\n";
 }
 
 do_hook('folders_bottom');
@@ -336,4 +339,4 @@ do_hook('folders_bottom');
 <?php
    sqimap_logout($imapConnection);
 ?>
-</body></html>
\ No newline at end of file
+</body></html>