From: Gunnar Wrobel Date: Mon, 22 Mar 2010 15:11:58 +0000 (+0100) Subject: Start spliting the namespace driver into the three subtypes needed. First one is... X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=75e12f34d697a0010aed459c02a186bead1c9998;p=horde.git Start spliting the namespace driver into the three subtypes needed. First one is the fixed implementation. --- diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php index f51489628..7e9892e52 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php @@ -53,7 +53,7 @@ abstract class Horde_Kolab_Storage_Driver */ public function getNamespace() { - return new Horde_Kolab_Storage_Namespace(); + return new Horde_Kolab_Storage_Namespace_Fixed(); } } \ No newline at end of file diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace.php index 8442e4e68..a5ef5ca8f 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace.php @@ -27,7 +27,7 @@ * @license http://www.fsf.org/copyleft/lgpl.html LGPL * @link http://pear.horde.org/index.php?package=Kolab_Storage */ -class Horde_Kolab_Storage_Namespace +abstract class Horde_Kolab_Storage_Namespace { /** The possible namespace types (RFC 2342 [5]) */ const PRIV = 'private'; @@ -39,7 +39,7 @@ class Horde_Kolab_Storage_Namespace * * @var array */ - private $_namespaces = array( + protected $_namespaces = array( self::PRIV => array( 'INBOX' => '/', ), @@ -56,14 +56,14 @@ class Horde_Kolab_Storage_Namespace * * @var string */ - private $_charset; + protected $_charset; /** * A prefix in the shared namespaces that will be ignored/removed. * * @var string */ - private $_sharedPrefix; + protected $_sharedPrefix; /** * Indicates the personal namespace that the class will use to create new @@ -71,17 +71,7 @@ class Horde_Kolab_Storage_Namespace * * @var string */ - private $_primaryPersonalNamespace; - - /** - * Constructor. - */ - public function __construct() - { - $this->_charset = Horde_Nls::getCharset(); - $this->_sharedPrefix = 'shared.'; - $this->_primaryPersonalNamespace = 'INBOX'; - } + protected $_primaryPersonalNamespace; /** * Match a folder name with the corresponding namespace. diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace/Fixed.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace/Fixed.php new file mode 100644 index 000000000..01eb8ae4a --- /dev/null +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace/Fixed.php @@ -0,0 +1,72 @@ + + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @link http://pear.horde.org/index.php?package=Kolab_Storage + */ + +/** + * The Horde_Kolab_Storage_Namespace_Fixed:: implements the default IMAP + * namespaces on the Kolab server. + * + * Copyright 2004-2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (LGPL). If you + * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. + * + * @category Kolab + * @package Kolab_Storage + * @author Gunnar Wrobel + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @link http://pear.horde.org/index.php?package=Kolab_Storage + */ +class Horde_Kolab_Storage_Namespace_Fixed +extends Horde_Kolab_Storage_Namespace +{ + /** + * The namespaces. + * + * @var array + */ + protected $_namespaces = array( + self::PRIV => array( + 'INBOX' => '/', + ), + self::OTHER => array( + 'user' => '/', + ), + self::SHARED => array( + '' => '/', + ), + ); + + /** + * A prefix in the shared namespaces that will be ignored/removed. + * + * @var string + */ + protected $_sharedPrefix = 'shared.'; + + /** + * Indicates the personal namespace that the class will use to create new + * folders. + * + * @var string + */ + protected $_primaryPersonalNamespace = 'INBOX'; + + /** + * Constructor. + */ + public function __construct() + { + $this->_charset = Horde_Nls::getCharset(); + } +} \ No newline at end of file diff --git a/framework/Kolab_Storage/package.xml b/framework/Kolab_Storage/package.xml index 855236b70..74d52cddc 100644 --- a/framework/Kolab_Storage/package.xml +++ b/framework/Kolab_Storage/package.xml @@ -80,6 +80,9 @@ + + + @@ -189,6 +192,7 @@ + diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php index 5a24eedb4..519cb6a3b 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php @@ -41,28 +41,28 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase public function testFolderTitleIsEmptyForPrivateNamespace() { $folder = new Horde_Kolab_Storage_Folder('INBOX'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('', $folder->getTitle()); } public function testFolderTitleDoesNotContainPrivateNamespace() { $folder = new Horde_Kolab_Storage_Folder('INBOX/test'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('test', $folder->getTitle()); } public function testFolderTitleOfOtherUserDoesNotContainUserPrefixAndOtherUserName() { $folder = new Horde_Kolab_Storage_Folder('user/test/his_folder'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('his_folder', $folder->getTitle()); } public function testFolderTitleReplacesSeparatorWithDoubleColon() { $folder = new Horde_Kolab_Storage_Folder('INBOX/test/sub'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('test:sub', $folder->getTitle()); } @@ -71,7 +71,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase Horde_Nls::setCharset('UTF8'); $name = Horde_String::convertCharset('äöü', 'UTF8', 'UTF7-IMAP'); $folder = new Horde_Kolab_Storage_Folder('INBOX/' . $name); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('äöü', $folder->getTitle()); } @@ -79,7 +79,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase { $_SESSION['horde_auth']['userId'] = 'test'; $folder = new Horde_Kolab_Storage_Folder(null); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $folder->setName('test'); $this->assertEquals('test', $folder->getTitle()); } @@ -88,7 +88,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase { $_SESSION['horde_auth']['userId'] = 'test'; $folder = new Horde_Kolab_Storage_Folder('INBOX'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('test', $folder->getOwner()); } @@ -96,28 +96,28 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase { $_SESSION['horde_auth']['userId'] = 'test'; $folder = new Horde_Kolab_Storage_Folder('INBOX/mine'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('test', $folder->getOwner()); } public function testFolderOwnerIsOtherUserIfPrefixMatchesOtherNamespace() { $folder = new Horde_Kolab_Storage_Folder('user/test'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('test', $folder->getOwner()); } public function testFolderOwnerIsOtherUserIfPrefixContainsOtherNamespace() { $folder = new Horde_Kolab_Storage_Folder('user/test/mine'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('test', $folder->getOwner()); } public function testFolderOwnerIsAnonymousIfPrefixContainsSharedNamespace() { $folder = new Horde_Kolab_Storage_Folder('shared.test'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('anonymous', $folder->getOwner()); } @@ -125,7 +125,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase { $_SESSION['horde_auth']['userId'] = 'test'; $folder = new Horde_Kolab_Storage_Folder(null); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $folder->setName('test'); $this->assertEquals('test', $folder->getOwner()); } @@ -134,21 +134,21 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase { $_SESSION['horde_auth']['userId'] = 'test@example.com'; $folder = new Horde_Kolab_Storage_Folder('user/test/mine'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('test@example.com', $folder->getOwner()); } public function testFolderOwnerHasDomainFromCurrentUserIfNoFolderDomain() { $folder = new Horde_Kolab_Storage_Folder('user/test/mine@example.com'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('test@example.com', $folder->getOwner()); } public function testSetnameDoesAddDefaultPersonalNamespace() { $folder = new Horde_Kolab_Storage_Folder(null); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $folder->setName('test:this'); $this->assertEquals('INBOX/test/this', $folder->getName()); } @@ -156,7 +156,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase public function testSetnameReplacesDoubleColonWithSeparator() { $folder = new Horde_Kolab_Storage_Folder(null); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $folder->setName('a:b:c'); $this->assertEquals('INBOX/a/b/c', $folder->getName()); } @@ -165,7 +165,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase { Horde_Nls::setCharset('UTF8'); $folder = new Horde_Kolab_Storage_Folder(null); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $folder->setName('äöü'); $this->assertEquals( 'INBOX/äöü', @@ -176,7 +176,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase public function testSetnameAllowsCreatingFoldersInSharedNamespace() { $folder = new Horde_Kolab_Storage_Folder(null); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $folder->setName('shared.test'); $this->assertEquals('shared.test', $folder->getName()); } @@ -184,7 +184,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase public function testSetnameAllowsCreatingFoldersInOthersNamespace() { $folder = new Horde_Kolab_Storage_Folder(null); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $folder->setName('user:test:test'); $this->assertEquals('user/test/test', $folder->getName()); } @@ -192,7 +192,7 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase public function testFolderSubpathIsAccessibleForNewFolders() { $folder = new Horde_Kolab_Storage_Folder(null); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $folder->setName('test'); $this->assertEquals('test', $folder->getSubpath()); } @@ -200,21 +200,21 @@ class Horde_Kolab_Storage_NamespaceTest extends PHPUnit_Framework_TestCase public function testFolderSubpathDoesNotContainUsernameIfPrefixContainsOtherNamespace() { $folder = new Horde_Kolab_Storage_Folder('user/test/mine'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('mine', $folder->getSubpath()); } public function testFolderSubpathReturnsSubpathWithoutNamespacePrefix() { $folder = new Horde_Kolab_Storage_Folder('INBOX/a/b'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('a/b', $folder->getSubpath()); } public function testFolderSubpathReturnsSubpathWithoutSharedPrefix() { $folder = new Horde_Kolab_Storage_Folder('shared.a/b'); - $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace()); + $folder->restore($this->_storage, $this->_connection, new Horde_Kolab_Storage_Namespace_Fixed()); $this->assertEquals('a/b', $folder->getSubpath()); } } \ No newline at end of file