Split sqimap_mailbox_option_list() into two functions to facilitate template development.
authorstevetruckstuff <stevetruckstuff@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 30 Aug 2006 20:45:56 +0000 (20:45 +0000)
committerstevetruckstuff <stevetruckstuff@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Wed, 30 Aug 2006 20:45:56 +0000 (20:45 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@11657 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/imap_mailbox.php

index e9f9d6a48cd3a5684be0882934bdbb49d0d36478..40ceac2d787b9fe2360dead84bbb06362057ac3e 100755 (executable)
@@ -651,26 +651,13 @@ function sqimap_mailbox_parse ($line) {
 }
 
 /**
- * Returns list of options (to be echoed into select statement
- * based on available mailboxes and separators
- * Caller should surround options with <select ...> </select> and
- * any formatting.
- * @param stream $imap_stream imap connection resource to query for mailboxes
- * @param array $show_selected array containing list of mailboxes to pre-select (0 if none)
- * @param array $folder_skip array of folders to keep out of option list (compared in lower)
- * @param $boxes list of already fetched boxes (for places like folder panel, where
- *            you know these options will be shown 3 times in a row.. (most often unset).
- * @param string $flag (since 1.4.1) flag to check for in mailbox flags, used to filter out mailboxes.
- *           'noselect' by default to remove unselectable mailboxes.
- *           'noinferiors' used to filter out folders that can not contain subfolders.
- *           NULL to avoid flag check entirely.
- *           NOTE: noselect and noiferiors are used internally. The IMAP representation is
- *                 \NoSelect and \NoInferiors
- * @param boolean $use_long_format (since 1.4.1) override folder display preference and always show full folder name.
- * @return string html formated mailbox selection options
- * @since 1.3.2
+ * Returns an array of mailboxes available.  Separated from sqimap_mailbox_option_list()
+ * below for template development.
+ * 
+ * @author Steve Brown
+ * @since 1.5.2
  */
-function sqimap_mailbox_option_list($imap_stream, $show_selected = 0, $folder_skip = 0, $boxes = 0,
+function sqimap_mailbox_option_array($imap_stream, $folder_skip = 0, $boxes = 0,
                                     $flag = 'noselect', $use_long_format = false ) {
     global $username, $data_dir, $translate_special_folders, $sent_folder, 
         $trash_folder, $draft_folder;
@@ -688,6 +675,7 @@ function sqimap_mailbox_option_list($imap_stream, $show_selected = 0, $folder_sk
         $boxes = sqimap_mailbox_list($imap_stream);
     }
 
+    $a = array();
     foreach ($boxes as $boxes_part) {
         if ($flag == NULL || (is_array($boxes_part['flags'])
                       && !in_array($flag, $boxes_part['flags']))) {
@@ -745,14 +733,58 @@ function sqimap_mailbox_option_list($imap_stream, $show_selected = 0, $folder_sk
                     break;
                 }
             }
-            if ($show_selected != 0 && in_array($lowerbox, $show_selected) ) {
-                $mbox_options .= '<option value="' . htmlspecialchars($box) .'" selected="selected">'.$box2.'</option>' . "\n";
-            } else {
-                $mbox_options .= '<option value="' . htmlspecialchars($box) .'">'.$box2.'</option>' . "\n";
+            
+            $a[htmlspecialchars($box)] = $box2;
+        }
+    }
+    
+    return $a;
+}
+
+/**
+ * Returns list of options (to be echoed into select statement
+ * based on available mailboxes and separators
+ * Caller should surround options with <select ...> </select> and
+ * any formatting.
+ * @param stream $imap_stream imap connection resource to query for mailboxes
+ * @param array $show_selected array containing list of mailboxes to pre-select (0 if none)
+ * @param array $folder_skip array of folders to keep out of option list (compared in lower)
+ * @param $boxes list of already fetched boxes (for places like folder panel, where
+ *            you know these options will be shown 3 times in a row.. (most often unset).
+ * @param string $flag (since 1.4.1) flag to check for in mailbox flags, used to filter out mailboxes.
+ *           'noselect' by default to remove unselectable mailboxes.
+ *           'noinferiors' used to filter out folders that can not contain subfolders.
+ *           NULL to avoid flag check entirely.
+ *           NOTE: noselect and noiferiors are used internally. The IMAP representation is
+ *                 \NoSelect and \NoInferiors
+ * @param boolean $use_long_format (since 1.4.1) override folder display preference and always show full folder name.
+ * @return string html formated mailbox selection options
+ * @since 1.3.2
+ */
+function sqimap_mailbox_option_list($imap_stream, $show_selected = 0, $folder_skip = 0, $boxes = 0,
+                                    $flag = 'noselect', $use_long_format = false ) {
+    global $username, $data_dir, $translate_special_folders, $sent_folder, 
+        $trash_folder, $draft_folder;
+
+    $boxes = sqimap_mailbox_option_array($imap_stream, $folder_skip, $boxes, $flag, $use_long_format);
+    
+    $str = '';
+    foreach ($boxes as $value=>$option) {
+        $lowerbox = strtolower(htmlspecialchars($value));
+        $sel = false;
+        if ($show_selected != 0) {
+            reset($show_selected);
+            while (!$sel && (list($x, $val) = each($show_selected))) {
+                if (strtolower($value) == strtolower(htmlspecialchars($val))) {
+                    $sel = true;
+                }
             }
         }
+        
+        $str .= '<option value="'. $value .'"'. ($sel ? ' selected="selected"' : '').'>'. $option ."</option>\n";
     }
-    return $mbox_options;
+    
+    return $str;
 }
 
 /**