SORT and THREAD handling in search
[squirrelmail.git] / src / folders.php
index 6b436539ecc18cb209e36a7951f6930b9b83a8ca..7e4966eeba582d437c50f5c709e29b972a0eac4c 100644 (file)
  * Folders.
  *
  * $Id$
+ * @package squirrelmail
  */
 
-/* Path for SquirrelMail required files. */
+/** Path for SquirrelMail required files. */
 define('SM_PATH','../');
 
 /* SquirrelMail required files. */
@@ -120,9 +121,9 @@ if ( $default_sub_of_inbox == false ) {
 
 // Call sqimap_mailbox_option_list, using existing connection to IMAP server,
 // the arrays of folders to include or skip (assembled above), 
-// and indicate that folders listed should be parents (we're creating folders,
-// so we want to list the folders that can contain other folders), also force long form
-echo sqimap_mailbox_option_list($imapConnection, $show_selected, $skip_folders, $boxes, true, true);
+// use 'noinferiors' as a mailbox filter to leave out folders that can not contain other folders.
+// use the long format to show subfolders in an intelligible way if parent is missing (special folder)
+echo sqimap_mailbox_option_list($imapConnection, $show_selected, $skip_folders, $boxes, 'noinferiors', true);
 
 echo "</SELECT></TT>\n";
 if ($show_contain_subfolders_option) {
@@ -138,6 +139,8 @@ echo html_tag( 'tr',
         ) ."\n";
 
 /** count special folders **/
+
+// FIX ME, why not check if the folders are defined IMHO move_to_sent, move_to_trash has nothing todo with it
 $count_special_folders = 0;
 $num_max = 1;
 if (strtolower($imap_server_type) == "courier" || $move_to_trash) {
@@ -149,25 +152,36 @@ if ($move_to_sent) {
 if ($save_as_draft) {
     $num_max++;
 }
+
+// What if move_to_sent = false and $sent_folder is set? Should it still be skipped?
+
 for ($p = 0, $cnt = count($boxes); $p < $cnt && $count_special_folders < $num_max; $p++) {
-    if (strtolower($boxes[$p]['unformatted']) == 'inbox')
-        $count_special_folders++;
-    else if (strtolower($imap_server_type) == 'courier' &&
-            strtolower($boxes[$p]['unformatted']) == 'inbox.trash') {
-        $count_special_folders++;
-    }
-    else if ($boxes[$p]['unformatted'] == $trash_folder && $trash_folder) {
-        $count_special_folders++;
-        array_push($skip_folders, strtolower($trash_folder));
-    }
-    else if ($boxes[$p]['unformatted'] == $sent_folder && $sent_folder) {
-        $count_special_folders++;
-        array_push($skip_folders, strtolower($sent_folder));
-    }
-    else if ($boxes[$p]['unformatted'] == $draft_folder && $draft_folder) {
-        $count_special_folders++;
-        array_push($skip_folders, strtolower($draft_folder));
-    }
+    switch ($boxes[$p]['unformatted'])
+    {
+       case (strtoupper($boxes[$p]['unformatted']) == 'INBOX'):
+          ++$count_special_folders;
+         $skip_folders[] = $boxes[$p]['unformatted'];
+         break;
+       // FIX ME inbox.trash should be set in conf.pl
+       case 'inbox.trash':
+          if (strtolower($imap_server_type) == 'courier') {
+             ++$count_special_folders;
+         }
+         break;
+       case $trash_folder:
+           ++$count_special_folders;
+           $skip_folders[] = $trash_folder;
+          break;
+       case $sent_folder:
+           ++$count_special_folders;
+           $skip_folders[] = $sent_folder;
+          break;
+       case $draft_folder:
+           ++$count_special_folders;
+           $skip_folders[] = $draft_folder;
+          break;
+       default: break;
+    }    
 }
 
 
@@ -183,7 +197,11 @@ if ($count_special_folders < count($boxes)) {
        . "<TT><SELECT NAME=old>\n"
        . '         <OPTION VALUE="">[ ' . _("Select a folder") . " ]</OPTION>\n";
 
-    echo sqimap_mailbox_option_list($imapConnection, 0, $skip_folders, $boxes, false, true);
+    // use existing IMAP connection, we have no special values to show, 
+    // but we do include values to skip. Use the pre-created $boxes to save an IMAP query.
+    // send NULL for the flag - ALL folders are eligible for rename!
+    // use long format to make sure folder names make sense when parents may be missing.
+    echo sqimap_mailbox_option_list($imapConnection, 0, $skip_folders, $boxes, NULL, true);
 
     echo "</SELECT></TT>\n".
          "<input type=SUBMIT VALUE=\"".
@@ -211,7 +229,9 @@ if ($count_special_folders < count($boxes)) {
        . "<TT><SELECT NAME=mailbox>\n"
        . '         <OPTION VALUE="">[ ' . _("Select a folder") . " ]</OPTION>\n";
 
-    echo sqimap_mailbox_option_list($imapConnection, 0, $skip_folders, $boxes, false, true);
+    // send NULL for the flag - ALL folders are eligible for delete (except what we've got in skiplist)
+    // use long format to make sure folder names make sense when parents may be missing.
+    echo sqimap_mailbox_option_list($imapConnection, 0, $skip_folders, $boxes, NULL, true);
 
     echo "</SELECT></TT>\n"
        . '<input type=SUBMIT VALUE="'
@@ -244,9 +264,9 @@ if ($count_special_folders < count($boxes)) {
             ($boxes[$i]["unformatted"] != $trash_folder) &&
             ($boxes[$i]["unformatted"] != $sent_folder) &&
             ($boxes[$i]["unformatted"] != $draft_folder)) {
-            $box = $boxes[$i]["unformatted-dm"];
+            $box = htmlspecialchars($boxes[$i]["unformatted-dm"]);
             $box2 = str_replace(' ', '&nbsp;',
-                                imap_utf7_decode_local($boxes[$i]["unformatted-disp"]));
+                                htmlspecialchars(imap_utf7_decode_local($boxes[$i]["unformatted-disp"])));
             echo "         <OPTION VALUE=\"$box\">$box2\n";
         }
     }
@@ -278,8 +298,8 @@ if(!$no_list_for_subscribe) {
         }
     }
     if ($use_folder == true) {
-        $box[$q] = $boxes_all[$i]['unformatted-dm'];
-        $box2[$q] = imap_utf7_decode_local($boxes_all[$i]['unformatted-disp']);
+        $box[$q] = htmlspecialchars($boxes_all[$i]['unformatted-dm']);
+        $box2[$q] = htmlspecialchars(imap_utf7_decode_local($boxes_all[$i]['unformatted-disp']));
         $q++;
     }
   }