* $folder_skip - array of folders to keep out of option list (compared in lower)
* $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).
- * $parent - used to indicate whether or not listed boxes can be parents
+ * $flag - 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.
+ * $use_long_format - override folder display preference and always show full folder name.
*/
-function sqimap_mailbox_option_list($imap_stream, $show_selected = 0, $folder_skip = 0, $boxes = 0, $parent = false, $use_long_format = false ) {
+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;
$mbox_options = '';
if ($boxes == 0) {
$boxes = sqimap_mailbox_list($imap_stream);
}
- if ($parent) {
- $flag = 'noinferiors';
- }
- else {
- $flag = 'noselect';
- }
+
foreach ($boxes as $boxes_part) {
- if (!in_array($flag, $boxes_part['flags'])) {
+ if ($flag == NULL || !in_array($flag, $boxes_part['flags'])) {
$box = $boxes_part['unformatted'];
$lowerbox = strtolower($box);
$lsub_ary = sqimap_run_command ($imap_stream, "LSUB \"$folder_prefix\" \"*\"",
true, $response, $message);
+ /* Check to see if we have an INBOX */
+ $has_inbox = false;
+
+ for ($i = 0, $cnt = count($lsub_ary); $i < $cnt; $i++) {
+ if (preg_match("/^\*\s+LSUB\s+(.*)\"?INBOX\"?[^(\/\.)].*$/",$lsub_ary[$i])) {
+ $has_inbox = true;
+ break;
+ }
+ }
+
+ if ($has_inbox == false) {
+ $lsub_ibx = sqimap_run_command( $imap_stream, "LSUB \"\" \"INBOX\"", true, $response, $message );
+ if (isset($lsub_ibx[0])) {
+ if (preg_match("/^\*\s+LSUB\s+(.*)\"?INBOX\"?[^(\/\.)].*$/",$lsub_ibx[0])) {
+ $lsub_ary[] = $lsub_ibx[0];
+ } else {
+ $lsub_ibx = sqimap_run_command( $imap_stream, "LIST \"\" \"INBOX\"", true, $response, $message );
+ if (preg_match("/^\*\s+LIST(.*)\"?INBOX\"?[^(\/\.)].*$/",$lsub_ibx[0])) {
+ $lsub_ibx[0] = str_replace("LIST","LSUB",$lsub_ibx[0]);
+ $lsub_ary[] = $lsub_ibx[0];
+ }
+ }
+ }
+ }
+
/*
* Section about removing the last element was removed
* We don't return "* OK" anymore from sqimap_read_data
*/
$sorted_lsub_ary = array();
$cnt = count($lsub_ary);
+
for ($i = 0; $i < $cnt; $i++) {
/*
* Workaround for EIMS
$lsub_ary[$i] = $regs[1] . '"' . addslashes(trim($lsub_ary[$i])) . '"' . $regs[2];
}
- /*
- if (preg_match("/^\*\s+LSUB\s+\((.*)\)\s+\"(.*)\"\s+\"?(.+(?=\")|.+).*$/",$lsub_ary[$i],$regs)) {
- $flag = $regs[1];
- $mbx = trim($regs[3]);
- $sorted_lsub_ary[] = array ('mbx' => $mbx, 'flag' => $flag);
- }
- */
$mbx = find_mailbox_name($lsub_ary[$i]);
$noselect = check_is_noselect($lsub_ary[$i]);
if (substr($mbx, -1) == $delimiter) {
}
array_multisort($sorted_lsub_ary, SORT_ASC, SORT_REGULAR);
- for($i = 0; $i < $cnt; $i++) {
- if ($sorted_lsub_ary[$i]['mbx'] == 'INBOX') {
- $inbox_in_list = true;
- break;
- }
- }
-
- /*
- * Just in case they're not subscribed to their inbox,
- * we'll get it for them anyway
- */
- if (!$inbox_in_list) {
- $inbox_ary = sqimap_run_command ($imap_stream, "LIST \"\" \"INBOX\"",
- true, $response, $message);
- /* Another workaround for EIMS */
- if (isset($inbox_ary[1]) &&
- ereg("^(\\* [A-Z]+.*)\\{[0-9]+\\}([ \n\r\t]*)$",
- $inbox_ary[0], $regs)) {
- $inbox_ary[0] = $regs[1] . '"' . addslashes(trim($inbox_ary[1])) .
- '"' . $regs[2];
- }
- $mbx = find_mailbox_name($inbox_ary[0]);
- if (substr($mbx, -1) == $delimiter) {
- $mbx = substr($mbx, 0, strlen($mbx) - 1);
- }
- if ($mbx == 'INBOX') {
- $sorted_lsub_ary[] = array ('mbx' => $mbx, 'flag' => '');
- sqimap_subscribe($imap_stream, 'INBOX');
- $cnt++;
- }
-
- /*
- if (preg_match("/^\*\s+LIST\s+\((.*)\)\s+\"(.*)\"\s+\"?(.+(?=\")|.+).*$/",$inbox_ary[0],$regs)) {
- $flag = $regs[1];
- $mbx = trim($regs[3]);
- if (substr($mbx, -1) == $delimiter) {
- $mbx = substr($mbx, 0, strlen($mbx) - 1);
- }
- $sorted_lsub_ary[] = array ('mbx' => $mbx, 'flag' => $flag);
- }
- */
- }
for ($i = 0 ; $i < $cnt; $i++) {
$mbx = $sorted_lsub_ary[$i]['mbx'];
if (($unseen_notify == 2 && $mbx == 'INBOX') ||
($unseen_notify == 3) ||
($move_to_trash && ($mbx == $trash_folder))) {
- if($sorted_lsub_ary[$i]['noselect']) {
+ if( $sorted_lsub_ary[$i]['noselect'] ) {
$sorted_lsub_ary[$i]['unseen'] = 0;
} else {
$sorted_lsub_ary[$i]['unseen'] =
}
}
}
+
$boxesnew = sqimap_fill_mailbox_tree($sorted_lsub_ary);
return $boxesnew;
}
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;
+ $delimiter, $imap_server_type;
$special_folders = array ('INBOX', $sent_folder, $draft_folder, $trash_folder);
$mailboxes= new mailboxes();
$mailboxes->is_root = true;
$trail_del = false;
- if (isset($folder_prefix) && $folder_prefix != '') {
+ $start = 0;
+
+/* JA - Seems to really screw up folder displays, courier and uw both lose their INBOX when you
+ have a default_folder_prefix set on this
+
+
+ if (isset($folder_prefix) && ($folder_prefix != '')) {
$start = substr_count($folder_prefix,$delimiter);
if (strrpos($folder_prefix, $delimiter) == (strlen($folder_prefix)-1)) {
$trail_del = true;
} else {
$start = 0;
}
+*/
+
$cnt = count($mbx_ary);
for ($i=0; $i < $cnt; $i++) {
if ($mbx_ary[$i]['mbx'] !='' ) {
$mbx->mailboxname_sub = $mbx_ary[$i]['mbx'];
}
$mbx->mailboxname_full = $mbx_ary[$i]['mbx'];
+
$mailboxes->addMbx($mbx, $delimiter, $start, $list_special_folders_first);
}
}
-
return $mailboxes;
}