From 67975b99efc14e98181f659568ce9306d0a91cd1 Mon Sep 17 00:00:00 2001 From: alecpl Date: Fri, 17 Jun 2011 08:03:07 +0000 Subject: - Improved namespace roots handling in folder manager --- program/steps/settings/edit_folder.inc | 4 ++-- program/steps/settings/folders.inc | 17 ++++++++++++++++- program/steps/settings/func.inc | 19 +++++++++++++++++-- program/steps/settings/save_folder.inc | 1 + 4 files changed, 36 insertions(+), 5 deletions(-) (limited to 'program') diff --git a/program/steps/settings/edit_folder.inc b/program/steps/settings/edit_folder.inc index 0bc7ab657..093b8dfac 100644 --- a/program/steps/settings/edit_folder.inc +++ b/program/steps/settings/edit_folder.inc @@ -135,7 +135,7 @@ function rcmail_folder_form($attrib) ); // Settings: threading - if ($threading_supported && !$options['noselect']) { + if ($threading_supported && !$options['noselect'] && !$options['is_root']) { $select = new html_select(array('name' => '_viewmode', 'id' => '_listmode')); $select->add(rcube_label('list'), 0); $select->add(rcube_label('threads'), 1); @@ -192,7 +192,7 @@ function rcmail_folder_form($attrib) 'content' => array() ); - if (!$options['noselect']) { + if (!$options['noselect'] && !$options['is_root']) { $msgcount = $RCMAIL->imap->messagecount($mbox_imap, 'ALL', true, false); // Size diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc index c84f616bb..ed1fb79bf 100644 --- a/program/steps/settings/folders.inc +++ b/program/steps/settings/folders.inc @@ -179,7 +179,7 @@ function rcube_subscription_form($attrib) list($form_start, $form_end) = get_form_tags($attrib, 'folders'); unset($attrib['form']); - + if (!$attrib['id']) $attrib['id'] = 'rcmSubscriptionlist'; @@ -197,6 +197,7 @@ function rcube_subscription_form($attrib) $a_unsubscribed = $IMAP->list_unsubscribed(); $a_subscribed = $IMAP->list_mailboxes(); $delimiter = $IMAP->get_hierarchy_delimiter(); + $namespace = $IMAP->get_namespace(); $a_js_folders = array(); $seen = array(); $list_folders = array(); @@ -253,6 +254,7 @@ function rcube_subscription_form($attrib) $idx = $i + 1; $subscribed = in_array($folder['id'], $a_subscribed); $protected = ($CONFIG['protect_default_folders'] == true && in_array($folder['id'], $CONFIG['default_imap_folders'])); + $noselect = false; $classes = array($i%2 ? 'even' : 'odd'); $folder_js = Q($folder['id']); @@ -271,6 +273,19 @@ function rcube_subscription_form($attrib) $disabled = (($protected && $subscribed) || $noselect); + // check if the folder is a namespace prefix, then disable subscription option on it + if (!$disabled && $folder['virtual'] && $folder['level'] == 0 && !empty($namespace)) { + $fname = $folder['id'] . $delimiter; + foreach ($namespace as $ns) { + foreach ($ns as $item) { + if ($item[0] === $fname) { + $disabled = true; + break; + } + } + } + } + $table->add_row(array('id' => 'rcmrow'.$idx, 'class' => join(' ', $classes), 'foldername' => $folder['id'])); diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index de9da282f..72e278364 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -790,14 +790,29 @@ function rcmail_folder_options($mailbox) $acl = $RCMAIL->imap->get_capability('ACL'); $default_folders = (array) $RCMAIL->config->get('default_imap_folders'); + $delimiter = $RCMAIL->imap->get_hierarchy_delimiter(); + $namespace = $RCMAIL->imap->get_namespace(); $options = array(); + // check if the folder is a namespace prefix + if (!empty($namespace)) { + $mbox = $mailbox . $delimiter; + foreach ($namespace as $ns) { + foreach ($ns as $item) { + if ($item[0] === $mbox) { + $options['is_root'] = true; + break; + } + } + } + } + $options['name'] = $mailbox; $options['options'] = $RCMAIL->imap->mailbox_options($mailbox, true); $options['namespace'] = $RCMAIL->imap->mailbox_namespace($mailbox); - $options['rights'] = $acl ? (array)$RCMAIL->imap->my_rights($mailbox) : array(); + $options['rights'] = $acl && !$options['is_root'] ? (array)$RCMAIL->imap->my_rights($mailbox) : array(); $options['special'] = in_array($mailbox, $default_folders); - $options['protected'] = $options['special'] && $RCMAIL->config->get('protect_default_folders'); + $options['protected'] = $options['is_root'] || ($options['special'] && $RCMAIL->config->get('protect_default_folders')); if (is_array($options['options'])) { foreach ($options['options'] as $opt) { diff --git a/program/steps/settings/save_folder.inc b/program/steps/settings/save_folder.inc index 54671133d..f0aae7c86 100644 --- a/program/steps/settings/save_folder.inc +++ b/program/steps/settings/save_folder.inc @@ -72,6 +72,7 @@ else { $folder['name'] = $name_imap; $folder['oldname'] = $old_imap; $folder['class'] = ''; + $folder['options'] = $options; $folder['settings'] = array( // List view mode: 0-list, 1-threads 'view_mode' => (int) get_input_value('_viewmode', RCUBE_INPUT_POST), -- cgit v1.2.3