/* Checks whether or not the specified mailbox exists */
function sqimap_mailbox_exists ($imap_stream, $mailbox) {
- if (!isset($mailbox)) {
+ if (!isset($mailbox) || empty($mailbox)) {
return false;
}
$mbx = sqimap_run_command($imap_stream, "LIST \"\" \"$mailbox\"",
* $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).
+ * $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 ) {
+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 = '';
- $shorten_box_names = getPref($data_dir, $username, 'mailbox_select_style', SMPREF_OFF);
+ if ( $use_long_format ) {
+ $shorten_box_names = 0;
+ } else {
+ $shorten_box_names = getPref($data_dir, $username, 'mailbox_select_style', SMPREF_OFF);
+ }
if ($boxes == 0) {
$boxes = sqimap_mailbox_list($imap_stream);
}
+
foreach ($boxes as $boxes_part) {
- if (!in_array('noselect', $boxes_part['flags'])) {
+ if ($flag == NULL || !in_array($flag, $boxes_part['flags'])) {
$box = $boxes_part['unformatted'];
$lowerbox = strtolower($box);
$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) {
$mbx = substr($mbx, 0, strlen($mbx) - 1);
}
if ($mbx == 'INBOX') {
- $sorted_lsub_ary[] = array ('mbx' => $mbx, 'flag' => '');
+ $sorted_lsub_ary[] = array ('mbx' => $mbx, 'noselect' => '0');
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'] =
$mailbox = $mbx_ary[$i]['mbx'];
switch ($mailbox) {
case 'INBOX':
+ // $mailboxes IS the INBOX, change $mbx to refer to $mailboxes
+ // for unread count, attribute setting, etc.
+ unset($mbx);
+ $mbx =& $mailboxes;
+
$mbx->is_inbox = true;
$mbx->is_special = true;
break;
$mbx->mailboxname_sub = $mbx_ary[$i]['mbx'];
}
$mbx->mailboxname_full = $mbx_ary[$i]['mbx'];
- $mailboxes->addMbx($mbx, $delimiter, $start, $list_special_folders_first);
+
+ // Don't add INBOX to itself
+ if ( $mailbox != 'INBOX' )
+ $mailboxes->addMbx($mbx, $delimiter, $start, $list_special_folders_first);
}
}
-
return $mailboxes;
}