Move getSubpath() into the Namespace handler. Move setting the namespace handler...
authorGunnar Wrobel <p@rdus.de>
Mon, 15 Mar 2010 05:15:19 +0000 (06:15 +0100)
committerGunnar Wrobel <wrobel@temple.(none)>
Mon, 15 Mar 2010 10:33:21 +0000 (11:33 +0100)
framework/Kolab_Storage/lib/Horde/Kolab/Storage.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace.php

index c682f64..d73f5d5 100644 (file)
@@ -234,7 +234,7 @@ class Horde_Kolab_Storage
 
         foreach ($this->_folders as $key => $folder) {
             $result = $this->getConnection($key);
-            $folder->restore($this, $result->connection);
+            $folder->restore($this, $result->connection, $result->connection->getNamespace());
         }
         $this->connect();
     }
@@ -336,11 +336,8 @@ class Horde_Kolab_Storage
         if (!isset($this->_folders[$folder])) {
             $result = $this->getConnection($folder);
 
-            $kf = new Horde_Kolab_Storage_Folder(
-                $result->name,
-                $result->connection->getNamespace()
-            );
-            $kf->restore($this, $result->connection);
+            $kf = new Horde_Kolab_Storage_Folder($result->name);
+            $kf->restore($this, $result->connection, $result->connection->getNamespace());
             $this->_folders[$folder] = &$kf;
         }
         return $this->_folders[$folder];
@@ -361,7 +358,7 @@ class Horde_Kolab_Storage
             $connection = &$this->connections[$connection];
         }
         $folder = new Horde_Kolab_Storage_Folder(null);
-        $folder->restore($this, $connection);
+        $folder->restore($this, $connection, $connection->getNamespace());
         return $folder;
     }
 
index e7e7a70..a99bef1 100644 (file)
@@ -57,6 +57,14 @@ class Horde_Kolab_Storage_Folder
     public $name;
 
     /**
+     * A new folder name if the folder should be renamed on the next
+     * save.
+     *
+     * @var string
+     */
+    var $new_name;
+
+    /**
      * The connection specific for this folder.
      *
      * @var Horde_Kolab_Storage_Driver
@@ -71,14 +79,6 @@ class Horde_Kolab_Storage_Folder
     private $_namespace;
 
     /**
-     * A new folder name if the folder should be renamed on the next
-     * save.
-     *
-     * @var string
-     */
-    var $new_name;
-
-    /**
      * The handler for the list of Kolab folders.
      *
      * @var Kolab_storage
@@ -177,12 +177,9 @@ class Horde_Kolab_Storage_Folder
      * @param Horde_Kolab_Storage_Namespace $namespace The namespace handler for
      *                                                 this folder.
      */
-    function __construct(
-        $name = null,
-        Horde_Kolab_Storage_Namespace $namespace
-    ) {
+    function __construct($name = null)
+    {
         $this->name       = $name;
-        $this->_namespace = $namespace;
         $this->__wakeup();
     }
 
@@ -226,11 +223,14 @@ class Horde_Kolab_Storage_Folder
      *                                               folders.
      * @param Horde_Kolab_Storage_Driver $connection The storage connection.
      */
-    function restore(Horde_Kolab_Storage &$storage,
-                     Horde_Kolab_Storage_Driver &$connection)
-    {
+    function restore(
+        Horde_Kolab_Storage &$storage,
+        Horde_Kolab_Storage_Driver &$connection,
+        Horde_Kolab_Storage_Namespace $namespace
+    ) {
         $this->_storage    = $storage;
         $this->_connection = $connection;
+        $this->_namespace  = $namespace;
     }
 
     /**
@@ -498,17 +498,11 @@ class Horde_Kolab_Storage_Folder
      */
     function getSubpath($name = null)
     {
-        if (!isset($this->_subpath) || isset($name)) {
-            if (!isset($name)) {
-                $name = $this->getName();
-            }
-
-            if (!preg_match(";(shared\.|INBOX[/]?|user/([^/]+)[/]?)([^@]*)(@.*)?;", $name, $matches)) {
-                return PEAR::raiseError(sprintf(_("Subpath of folder %s cannot be determined."), $name));
-            }
-
-            $this->_subpath = $matches[3];
-
+        if (!empty($name)) {
+            return $this->_namespace->getSubpath($name);
+        }
+        if (!isset($this->_subpath)) {
+            $this->_subpath = $this->_namespace->getSubpath($this->getName());
         }
         return $this->_subpath;
     }
index 603d658..d1005ee 100644 (file)
@@ -73,9 +73,28 @@ class Horde_Kolab_Storage_Namespace
     }
 
     /**
-     * Generate a new name for a folder.
+     * Get the sub path for the given folder name.
      *
-     * @param string $name  The new folder name.
+     * @param string $name The folder name.
+     *
+     * @return string The sub path.
+     */
+    function getSubpath($name)
+    {
+        if (!preg_match(";(shared\.|INBOX[/]?|user/([^/]+)[/]?)([^@]*)(@.*)?;", $name, $matches)) {
+            throw new Horde_Kolab_Storage_Exception(
+                'Subpath of folder %s cannot be determined.', $name
+            );
+        }
+        return $matches[3];
+    }
+
+    /**
+     * Generate an IMAP folder name.
+     *
+     * @param string $name The new folder name.
+     *
+     * @return string The IMAP folder name.
      */
     function setName($name)
     {
@@ -85,5 +104,4 @@ class Horde_Kolab_Storage_Namespace
         }
         return Horde_String::convertCharset($name, Horde_Nls::getCharset(), 'UTF7-IMAP');
     }
-
 }
\ No newline at end of file