From 02491a9789d97fc321a3027847fd4ced42447cc6 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 17 Dec 2010 04:16:47 -0500
Subject: [PATCH] - Make possible to overwrite server's namespaces with imap_ns_* options

---
 program/include/rcube_imap.php |   68 +++++++++++++++++-----------------
 config/main.inc.php.dist       |    1 
 2 files changed, 35 insertions(+), 34 deletions(-)

diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index 8ce6050..e2f9aea 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -83,6 +83,7 @@
 // set these options. All can be strings or arrays of strings.
 // Folders need to be ended with directory separator, e.g. "INBOX."
 // (special directory "~" is an exception to this rule)
+// These can be used also to overwrite server's namespaces
 $rcmail_config['imap_ns_personal'] = null;
 $rcmail_config['imap_ns_other']    = null;
 $rcmail_config['imap_ns_shared']   = null;
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 5aa23fa..5715459 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -546,56 +546,56 @@
         $imap_shared    = $config->get('imap_ns_shared');
         $imap_delimiter = $config->get('imap_delimiter');
 
-        if ($imap_delimiter) {
-            $this->delimiter = $imap_delimiter;
-        }
-
         if (!$this->conn)
             return;
 
         $ns = $this->conn->getNamespace();
 
-        // NAMESPACE supported
+        // Set namespaces (NAMESPACE supported)
         if (is_array($ns)) {
             $this->namespace = $ns;
-
-            if (empty($this->delimiter))
-                $this->delimiter = $ns['personal'][0][1];
-            if (empty($this->delimiter))
-                $this->delimiter = $this->conn->getHierarchyDelimiter();
-            if (empty($this->delimiter))
-                $this->delimiter = '/';
         }
-        // not supported, get namespace from config
-        else if ($imap_personal !== null || $imap_shared !== null || $imap_other !== null) {
-            if (empty($this->delimiter))
-                $this->delimiter = $this->conn->getHierarchyDelimiter();
-            if (empty($this->delimiter))
-                $this->delimiter = '/';
-
+        else {
             $this->namespace = array(
                 'personal' => NULL,
                 'other'    => NULL,
                 'shared'   => NULL,
             );
+        }
 
-            if ($imap_personal !== null) {
-                foreach ((array)$imap_personal as $dir) {
-                    $this->namespace['personal'][] = array($dir, $this->delimiter);
+        if ($imap_delimiter) {
+            $this->delimiter = $imap_delimiter;
+        }
+        if (empty($this->delimiter)) {
+            $this->delimiter = $this->namespace['personal'][0][1];
+        }
+        if (empty($this->delimiter)) {
+            $this->delimiter = $this->conn->getHierarchyDelimiter();
+        }
+        if (empty($this->delimiter)) {
+            $this->delimiter = '/';
+        }
+
+        // Overwrite namespaces
+        if ($imap_personal !== null) {
+            $this->namespace['personal'] = NULL;
+            foreach ((array)$imap_personal as $dir) {
+                $this->namespace['personal'][] = array($dir, $this->delimiter);
+            }
+        }
+        if ($imap_other !== null) {
+            $this->namespace['other'] = NULL;
+            foreach ((array)$imap_other as $dir) {
+                if ($dir) {
+                    $this->namespace['other'][] = array($dir, $this->delimiter);
                 }
             }
-            if ($imap_other !== null) {
-                foreach ((array)$imap_other as $dir) {
-                    if ($dir) {
-                        $this->namespace['other'][] = array($dir, $this->delimiter);
-                    }
-                }
-            }
-            if ($imap_shared !== null) {
-                foreach ((array)$imap_shared as $dir) {
-                    if ($dir) {
-                        $this->namespace['shared'][] = array($dir, $this->delimiter);
-                    }
+        }
+        if ($imap_shared !== null) {
+            $this->namespace['shared'] = NULL;
+            foreach ((array)$imap_shared as $dir) {
+                if ($dir) {
+                    $this->namespace['shared'][] = array($dir, $this->delimiter);
                 }
             }
         }

--
Gitblit v1.9.1