summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--program/steps/settings/edit_folder.inc4
-rw-r--r--program/steps/settings/folders.inc17
-rw-r--r--program/steps/settings/func.inc19
-rw-r--r--program/steps/settings/save_folder.inc1
5 files changed, 37 insertions, 5 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 19a73b2c1..42a2305f7 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
+- Improved namespace roots handling in folder manager
- Added searching in all addressbook sources
- Added addressbook source selection in contacts import
- Implement LDAPv3 Virtual List View (VLV) for paged results listing
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),