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 +++++++++++++++++-----------------
 1 files changed, 34 insertions(+), 34 deletions(-)

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