From b60b6af292ea6b85dca09956872be26cbf818b00 Mon Sep 17 00:00:00 2001 From: Gunnar Wrobel
Date: Wed, 24 Mar 2010 05:07:43 +0100 Subject: [PATCH] Fetch the namespace from the connection. --- .../Kolab_Storage/lib/Horde/Kolab/Storage.php | 6 +- .../lib/Horde/Kolab/Storage/Driver.php | 7 ++ .../lib/Horde/Kolab/Storage/Folder.php | 24 ++----- .../test/Horde/Kolab/Storage/FolderTest.php | 5 +- .../test/Horde/Kolab/Storage/NamespaceTest.php | 81 ++++++++++------------ 5 files changed, 55 insertions(+), 68 deletions(-) diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage.php index 25eda2e29..2a4bff406 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage.php @@ -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; } diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php index 929993a30..5b8eff796 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php @@ -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 diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder.php index 235e6486c..a11f43115 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder.php @@ -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; } diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/FolderTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/FolderTest.php index be90077ee..1df2fa86e 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/FolderTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/FolderTest.php @@ -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); } diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php index 38b2efcdf..ca0ffeda2 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php @@ -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( -- 2.11.0