From 18a3dcaf56aa8d650db8c791cdba90fcd38468ab Mon Sep 17 00:00:00 2001 From: alecpl Date: Mon, 13 Feb 2012 14:26:46 +0000 Subject: [PATCH] - Fix issue with folder creation under INBOX. namespace (#1488349) --- CHANGELOG | 1 + program/js/app.js | 8 ++++++-- program/steps/settings/edit_folder.inc | 11 ++++++++++- program/steps/settings/folders.inc | 1 + 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 9ab55fe1a..2bd325c46 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Fix issue with folder creation under INBOX. namespace (#1488349) - Added mailto: protocol handler registration link in User Preferences (#1486580) - Handle identity details box with an iframe (#1487020) - Fix issue where some text from original message was missing on reply (#1488340) diff --git a/program/js/app.js b/program/js/app.js index 208e9b489..ad0cc9096 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -4984,7 +4984,7 @@ function rcube_webmail() if (!this.gui_objects.subscriptionlist) return false; - var row, n, i, tmp, folders, rowid, list = [], slist = [], + var row, n, i, tmp, tmp_name, folders, rowid, list = [], slist = [], tbody = this.gui_objects.subscriptionlist.tBodies[0], refrow = $('tr', tbody).get(1), id = 'rcmrow'+((new Date).getTime()); @@ -5020,8 +5020,12 @@ function rcube_webmail() for (n in folders) { // protected folder if (folders[n][2]) { + tmp_name = folders[n][0] + this.env.delimiter; + // prefix namespace cannot have subfolders (#1488349) + if (tmp_name == this.env.prefix_ns) + continue; slist.push(folders[n][0]); - tmp = folders[n][0]+this.env.delimiter; + tmp = tmp_name; } // protected folder's child else if (tmp && folders[n][0].indexOf(tmp) == 0) diff --git a/program/steps/settings/edit_folder.inc b/program/steps/settings/edit_folder.inc index 2c69c74d0..644c86e2c 100644 --- a/program/steps/settings/edit_folder.inc +++ b/program/steps/settings/edit_folder.inc @@ -115,6 +115,15 @@ function rcmail_folder_form($attrib) } else { $selected = isset($_POST['_parent']) ? $_POST['_parent'] : $path_id; + $exceptions = array($mbox_imap); + + // Exclude 'prefix' namespace from parent folders list (#1488349) + // If INBOX. namespace exists, folders created as INBOX subfolders + // will be listed at the same level - selecting INBOX as a parent does nothing + if ($prefix = $storage->get_namespace('prefix')) { + $exceptions[] = substr($prefix, 0, -1); + } + $select = rcmail_mailbox_select(array( 'name' => '_parent', 'noselection' => '---', @@ -122,7 +131,7 @@ function rcmail_folder_form($attrib) 'maxlength' => 150, 'unsubscribed' => true, 'skip_noinferiors' => true, - 'exceptions' => array($mbox_imap), + 'exceptions' => $exceptions, )); $form['props']['fieldsets']['location']['content']['path'] = array( diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc index d82d8366b..3802577eb 100644 --- a/program/steps/settings/folders.inc +++ b/program/steps/settings/folders.inc @@ -415,6 +415,7 @@ function rcmail_rename_folder($oldname, $newname) $OUTPUT->set_pagetitle(rcube_label('folders')); $OUTPUT->include_script('list.js'); $OUTPUT->set_env('quota', $STORAGE->get_capability('QUOTA')); +$OUTPUT->set_env('prefix_ns', $STORAGE->get_namespace('prefix')); // add some labels to client $OUTPUT->add_label('deletefolderconfirm', 'purgefolderconfirm', 'folderdeleting',