Fetch the namespace from the connection.
authorGunnar Wrobel <p@rdus.de>
Wed, 24 Mar 2010 04:07:43 +0000 (05:07 +0100)
committerGunnar Wrobel <wrobel@temple.(none)>
Wed, 24 Mar 2010 10:41:25 +0000 (11:41 +0100)
framework/Kolab_Storage/lib/Horde/Kolab/Storage.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder.php
framework/Kolab_Storage/test/Horde/Kolab/Storage/FolderTest.php
framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php

index 25eda2e..2a4bff4 100644 (file)
@@ -212,7 +212,7 @@ class Horde_Kolab_Storage
 
         foreach ($this->_folders as $key => $folder) {
             $result = $this->getConnection($key);
-            $folder->restore($this, $result->connection, $result->connection->getNamespace());
+            $folder->restore($this, $result->connection);
         }
     }
 
@@ -303,7 +303,7 @@ class Horde_Kolab_Storage
             $result = $this->getConnection($folder);
 
             $kf = new Horde_Kolab_Storage_Folder($result->name);
-            $kf->restore($this, $result->connection, $result->connection->getNamespace());
+            $kf->restore($this, $result->connection);
             $this->_folders[$folder] = &$kf;
         }
         return $this->_folders[$folder];
@@ -324,7 +324,7 @@ class Horde_Kolab_Storage
             $connection = &$this->connections[$connection];
         }
         $folder = new Horde_Kolab_Storage_Folder(null);
-        $folder->restore($this, $connection, $connection->getNamespace());
+        $folder->restore($this, $connection);
         return $folder;
     }
 
index 929993a..5b8eff7 100644 (file)
@@ -45,4 +45,11 @@ abstract class Horde_Kolab_Storage_Driver
         throw new Horde_Kolab_Storage_Exception(
             'Driver type definition "' . $class . '" missing.');
     }
+
+    /**
+     * Retrieve the namespace information for this connection.
+     *
+     * @return Horde_Kolab_Storage_Namespace The initialized namespace handler.
+     */
+    abstract public function getNamespace();
 }
\ No newline at end of file
index 235e648..a11f431 100644 (file)
@@ -72,13 +72,6 @@ class Horde_Kolab_Storage_Folder
     private $_connection;
 
     /**
-     * The namespace handler for this folder
-     *
-     * @var Horde_Kolab_Storage_Namespace
-     */
-    private $_namespace;
-
-    /**
      * The handler for the list of Kolab folders.
      *
      * @var Kolab_storage
@@ -174,8 +167,6 @@ class Horde_Kolab_Storage_Folder
      * Creates a Kolab Folder representation.
      *
      * @param string                        $name      Name of the folder
-     * @param Horde_Kolab_Storage_Namespace $namespace The namespace handler for
-     *                                                 this folder.
      */
     function __construct($name = null)
     {
@@ -210,7 +201,6 @@ class Horde_Kolab_Storage_Folder
     {
         $properties = get_object_vars($this);
         unset($properties['_storage']);
-        unset($properties['_namespace']);
         unset($properties['_connection']);
         $properties = array_keys($properties);
         return $properties;
@@ -225,12 +215,10 @@ class Horde_Kolab_Storage_Folder
      */
     function restore(
         Horde_Kolab_Storage &$storage,
-        Horde_Kolab_Storage_Driver &$connection,
-        Horde_Kolab_Storage_Namespace $namespace
+        Horde_Kolab_Storage_Driver &$connection
     ) {
         $this->_storage    = $storage;
         $this->_connection = $connection;
-        $this->_namespace  = $namespace;
     }
 
     /**
@@ -256,7 +244,7 @@ class Horde_Kolab_Storage_Folder
      */
     function setName($name)
     {
-        $this->new_name = $this->_namespace->setName($name);
+        $this->new_name = $this->_connection->getNamespace()->setName($name);
     }
 
     /**
@@ -480,7 +468,7 @@ class Horde_Kolab_Storage_Folder
     public function getOwner()
     {
         if (!isset($this->_owner)) {
-            $owner = $this->_namespace->getOwner($this->getName());
+            $owner = $this->_connection->getNamespace()->getOwner($this->getName());
             /**
              * @todo: Reconsider if this handling should really be done here
              * rather than in a module nearer to the applications.
@@ -517,10 +505,10 @@ class Horde_Kolab_Storage_Folder
     public function getSubpath($name = null)
     {
         if (!empty($name)) {
-            return $this->_namespace->getSubpath($name);
+            return $this->_connection->getNamespace()->getSubpath($name);
         }
         if (!isset($this->_subpath)) {
-            $this->_subpath = $this->_namespace->getSubpath($this->getName());
+            $this->_subpath = $this->_connection->getNamespace()->getSubpath($this->getName());
         }
         return $this->_subpath;
     }
@@ -533,7 +521,7 @@ class Horde_Kolab_Storage_Folder
     public function getTitle()
     {
         if (!isset($this->_title)) {
-            $this->_title = $this->_namespace->getTitle($this->getName());
+            $this->_title = $this->_connection->getNamespace()->getTitle($this->getName());
         }
         return $this->_title;
     }
index be90077..1df2fa8 100644 (file)
@@ -82,8 +82,11 @@ class Horde_Kolab_Storage_FolderTest extends Horde_Kolab_Storage_Scenario
         $GLOBALS['language'] = 'de_DE';
         $storage = $this->getMock('Horde_Kolab_Storage', array(), array(), '', false, false);
         $connection = $this->getMock('Horde_Kolab_Storage_Driver');
+        $connection->expects($this->once())
+            ->method('getNamespace')
+            ->will($this->returnValue(new Horde_Kolab_Storage_Namespace_Fixed()));
         $folder = new Horde_Kolab_Storage_Folder('INBOX/Contacts');
-        $folder->restore($storage, $connection, new Horde_Kolab_Storage_Namespace_Fixed());
+        $folder->restore($storage, $connection);
         $folder->setName('TestAÖÜ');
         $this->assertEquals(Horde_String::convertCharset('INBOX/TestAÖÜ', Horde_Nls::getCharset(), 'UTF7-IMAP'), $folder->new_name);
     }
index 38b2efc..ca0ffed 100644 (file)
@@ -41,8 +41,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderTitleIsEmptyForPersonalNamespace()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('INBOX');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('INBOX', $namespace);
             $this->assertEquals('', $folder->getTitle());
         }
     }
@@ -50,8 +49,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderTitleDoesNotContainPersonalNamespace()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('INBOX/test');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('INBOX/test', $namespace);
             $this->assertEquals('test', $folder->getTitle());
         }
     }
@@ -59,8 +57,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderTitleOfOtherUserDoesNotContainUserPrefixAndOtherUserName()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('user/test/his_folder');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('user/test/his_folder', $namespace);
             $this->assertEquals('his_folder', $folder->getTitle());
         }
     }
@@ -68,8 +65,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderTitleReplacesSeparatorWithDoubleColon()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('INBOX/test/sub');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('INBOX/test/sub', $namespace);
             $this->assertEquals('test:sub', $folder->getTitle());
         }
     }
@@ -79,8 +75,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
         Horde_Nls::setCharset('UTF8');
         foreach ($this->_getNamespaces() as $namespace) {
             $name = Horde_String::convertCharset('äöü', 'UTF8', 'UTF7-IMAP');
-            $folder = new Horde_Kolab_Storage_Folder('INBOX/' . $name);
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('INBOX/' . $name, $namespace);
             $this->assertEquals('äöü', $folder->getTitle());
         }
     }
@@ -89,8 +84,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     {
         foreach ($this->_getNamespaces() as $namespace) {
             $_SESSION['horde_auth']['userId'] = 'test';
-            $folder = new Horde_Kolab_Storage_Folder(null);
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder(null, $namespace);
             $folder->setName('test');
             $this->assertEquals('test', $folder->getTitle());
         }
@@ -100,8 +94,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     {
         foreach ($this->_getNamespaces() as $namespace) {
             $_SESSION['horde_auth']['userId'] = 'test';
-            $folder = new Horde_Kolab_Storage_Folder('INBOX');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('INBOX', $namespace);
             $this->assertEquals('test', $folder->getOwner());
         }
     }
@@ -110,8 +103,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     {
         foreach ($this->_getNamespaces() as $namespace) {
             $_SESSION['horde_auth']['userId'] = 'test';
-            $folder = new Horde_Kolab_Storage_Folder('INBOX/mine');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('INBOX/mine', $namespace);
             $this->assertEquals('test', $folder->getOwner());
         }
     }
@@ -119,8 +111,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderOwnerIsOtherUserIfPrefixMatchesOtherNamespace()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('user/test');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('user/test', $namespace);
             $this->assertEquals('test', $folder->getOwner());
         }
     }
@@ -128,8 +119,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderOwnerIsOtherUserIfPrefixContainsOtherNamespace()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('user/test/mine');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('user/test/mine', $namespace);
             $this->assertEquals('test', $folder->getOwner());
         }
     }
@@ -137,8 +127,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderOwnerIsAnonymousIfPrefixContainsSharedNamespace()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('shared.test');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('shared.test', $namespace);
             $this->assertEquals('anonymous', $folder->getOwner());
         }
     }
@@ -147,8 +136,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     {
         foreach ($this->_getNamespaces() as $namespace) {
             $_SESSION['horde_auth']['userId'] = 'test';
-            $folder = new Horde_Kolab_Storage_Folder(null);
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder(null, $namespace);
             $folder->setName('test');
             $this->assertEquals('test', $folder->getOwner());
         }
@@ -158,8 +146,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     {
         foreach ($this->_getNamespaces() as $namespace) {
             $_SESSION['horde_auth']['userId'] = 'test@example.com';
-            $folder = new Horde_Kolab_Storage_Folder('user/test/mine');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('user/test/mine', $namespace);
             $this->assertEquals('test@example.com', $folder->getOwner());
         }
     }
@@ -167,8 +154,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderOwnerHasDomainFromCurrentUserIfNoFolderDomain()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('user/test/mine@example.com');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('user/test/mine@example.com', $namespace);
             $this->assertEquals('test@example.com', $folder->getOwner());
         }
     }
@@ -176,8 +162,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testSetnameDoesAddDefaultPersonalNamespace()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder(null);
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder(null, $namespace);
             $folder->setName('test:this');
             $this->assertEquals('INBOX/test/this', $folder->getName());
         }
@@ -186,8 +171,8 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testSetnameReplacesDoubleColonWithSeparator()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder(null);
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder(null, $namespace);
+            $folder->restore($this->_storage, $this->_connection);
             $folder->setName('a:b:c');
             $this->assertEquals('INBOX/a/b/c', $folder->getName());
         }
@@ -197,8 +182,8 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     {
         Horde_Nls::setCharset('UTF8');
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder(null);
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder(null, $namespace);
+            $folder->restore($this->_storage, $this->_connection);
             $folder->setName('äöü');
             $this->assertEquals(
                 'INBOX/äöü',
@@ -210,8 +195,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testSetnameAllowsCreatingFoldersInSharedNamespace()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder(null);
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder(null, $namespace);
             $folder->setName('shared.test');
             $this->assertEquals('shared.test', $folder->getName());
         }
@@ -220,8 +204,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testSetnameAllowsCreatingFoldersInOthersNamespace()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder(null);
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder(null, $namespace);
             $folder->setName('user:test:test');
             $this->assertEquals('user/test/test', $folder->getName());
         }
@@ -230,8 +213,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderSubpathIsAccessibleForNewFolders()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder(null);
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder(null, $namespace);
             $folder->setName('test');
             $this->assertEquals('test', $folder->getSubpath());
         }
@@ -240,8 +222,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderSubpathDoesNotContainUsernameIfPrefixContainsOtherNamespace()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('user/test/mine');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('user/test/mine', $namespace);
             $this->assertEquals('mine', $folder->getSubpath());
         }
     }
@@ -249,8 +230,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderSubpathReturnsSubpathWithoutNamespacePrefix()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('INBOX/a/b');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('INBOX/a/b', $namespace);
             $this->assertEquals('a/b', $folder->getSubpath());
         }
     }
@@ -258,12 +238,21 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase
     public function testFolderSubpathReturnsSubpathWithoutSharedPrefix()
     {
         foreach ($this->_getNamespaces() as $namespace) {
-            $folder = new Horde_Kolab_Storage_Folder('shared.a/b');
-            $folder->restore($this->_storage, $this->_connection, $namespace);
+            $folder = $this->_getFolder('shared.a/b', $namespace);
             $this->assertEquals('a/b', $folder->getSubpath());
         }
     }
 
+    private function _getFolder($name, $namespace)
+    {
+        $this->_connection->expects($this->any())
+            ->method('getNamespace')
+            ->will($this->returnValue($namespace));
+        $folder = new Horde_Kolab_Storage_Folder($name);
+        $folder->restore($this->_storage, $this->_connection);
+        return $folder;
+    }
+
     private function _getNamespaces()
     {
         return array(