Start spliting the namespace driver into the three subtypes needed. First one is...
authorGunnar Wrobel <p@rdus.de>
Mon, 22 Mar 2010 15:11:58 +0000 (16:11 +0100)
committerGunnar Wrobel <wrobel@temple.(none)>
Tue, 23 Mar 2010 06:53:31 +0000 (07:53 +0100)
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Namespace/Fixed.php [new file with mode: 0644]
framework/Kolab_Storage/package.xml
framework/Kolab_Storage/test/Horde/Kolab/Storage/NamespaceTest.php

index f514896..7e9892e 100644 (file)
@@ -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
index 8442e4e..a5ef5ca 100644 (file)
@@ -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 (file)
index 0000000..01eb8ae
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+/**
+ * The Horde_Kolab_Storage_Namespace_Fixed:: implements the default IMAP
+ * namespaces on the Kolab server.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @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 <wrobel@pardus.de>
+ * @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
index 855236b..74d52cd 100644 (file)
@@ -80,6 +80,9 @@
        <file name="Exception.php" role="php" />
        <file name="Folder.php" role="php" />
        <file name="Namespace.php" role="php" />
+       <dir name="Namespace">
+        <file name="Fixed.php" role="php" />
+       </dir> <!-- /lib/Horde/Kolab/Storage/Namespace -->
        <file name="Permission.php" role="php" />
       </dir> <!-- /lib/Horde/Kolab/Storage -->
       <file name="Storage.php" role="php" />
    <install as="Horde/Kolab/Storage/Exception.php" name="lib/Horde/Kolab/Storage/Exception.php" />
    <install as="Horde/Kolab/Storage/Folder.php" name="lib/Horde/Kolab/Storage/Folder.php" />
    <install as="Horde/Kolab/Storage/Namespace.php" name="lib/Horde/Kolab/Storage/Namespace.php" />
+   <install as="Horde/Kolab/Storage/Namespace/Fixed.php" name="lib/Horde/Kolab/Storage/Namespace/Fixed.php" />
    <install as="Horde/Kolab/Storage/Permission.php" name="lib/Horde/Kolab/Storage/Permission.php" />
    <install as="Horde/Kolab/Storage/Driver/Imap.php" name="lib/Horde/Kolab/Storage/Driver/Imap.php" />
    <install as="Horde/Kolab/Storage/AllTests.php" name="test/Horde/Kolab/Storage/AllTests.php" />
index 5a24eed..519cb6a 100644 (file)
@@ -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