From 18a3dcaf56aa8d650db8c791cdba90fcd38468ab Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 13 Feb 2012 09:26:46 -0500
Subject: [PATCH] - Fix issue with folder creation under INBOX. namespace (#1488349)

---
 CHANGELOG                              |    1 +
 program/steps/settings/edit_folder.inc |   11 ++++++++++-
 program/steps/settings/folders.inc     |    1 +
 program/js/app.js                      |    8 ++++++--
 4 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 9ab55fe..2bd325c 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 208e9b4..ad0cc90 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -4984,7 +4984,7 @@
     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 @@
     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 2c69c74..644c86e 100644
--- a/program/steps/settings/edit_folder.inc
+++ b/program/steps/settings/edit_folder.inc
@@ -115,6 +115,15 @@
     }
     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 @@
             '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 d82d836..3802577 100644
--- a/program/steps/settings/folders.inc
+++ b/program/steps/settings/folders.inc
@@ -415,6 +415,7 @@
 $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',

--
Gitblit v1.9.1