* @link http://pear.horde.org/index.php?package=Kolab_Storage
*/
class Horde_Kolab_Storage_Base
+implements Horde_Kolab_Storage
{
/**
* The master Kolab storage system.
}
/**
- * Returns the list of folders visible to the current user.
+ * Get the folder list object.
*
- * @return array The list of IMAP folders, represented as
- * a list of strings.
+ * @return Horde_Kolab_Storage_List The handler for the list of folders
+ * present in the Kolab backend.
*/
- public function listFolders()
+ public function getList()
+ {
+ return new Horde_Kolab_Storage_List_Base(
+ $this->_master
+ );
+ }
+
+ /**
+ * Get a Folder object.
+ *
+ * @param string $folder The folder name.
+ *
+ * @return Horde_Kolab_Storage_Folder The Kolab folder object.
+ */
+ public function getFolder($folder)
+ {
+ return new Horde_Kolab_Storage_Folder_Base(
+ $this, $this->_master, $folder
+ );
+ }
+
+ /**
+ * Return a data handler for accessing data in the specified
+ * folder.
+ *
+ * @param string $folder The name of the folder.
+ * @param string $type The type of data we want to
+ * access in the folder.
+ *
+ * @return Horde_Kolab_Data The data object.
+ */
+ public function getData($folder, $type)
{
- return $this->_master->getMailboxes();
}
}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * A log decorator for the Kolab storage handler.
+ *
+ * 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
+ */
+
+/**
+ * A log decorator for the Kolab storage handler.
+ *
+ * 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_Decorator_Log
+implements Horde_Kolab_Storage
+{
+ /**
+ * The decorated storage handler.
+ *
+ * @var Horde_Kolab_Storage
+ */
+ private $_storage;
+
+ /**
+ * A log handler.
+ *
+ * @var mixed
+ */
+ private $_logger;
+
+ /**
+ * Constructor.
+ *
+ * @param Horde_Kolab_Storage $storage The storage handler.
+ * @param mixed $logger The log handler. This instance
+ * must provide the info() method.
+ */
+ public function __construct(Horde_Kolab_Storage $storage, $logger)
+ {
+ $this->_storage = $storage;
+ $this->_logger = $logger;
+ }
+
+ /**
+ * Get the folder list object.
+ *
+ * @return Horde_Kolab_Storage_List The handler for the list of folders
+ * present in the Kolab backend.
+ */
+ public function getList()
+ {
+ return new Horde_Kolab_Storage_List_Decorator_Log(
+ $this->_storage->getList(),
+ $this->_logger
+ );
+ }
+
+ /**
+ * Get a Folder object.
+ *
+ * @param string $folder The folder name.
+ *
+ * @return Horde_Kolab_Storage_Folder The Kolab folder object.
+ */
+ public function getFolder($folder)
+ {
+ return $this->_storage->getFolder();
+ }
+
+ /**
+ * Return a data handler for accessing data in the specified
+ * folder.
+ *
+ * @param string $folder The name of the folder.
+ * @param string $type The type of data we want to
+ * access in the folder.
+ *
+ * @return Horde_Kolab_Data The data object.
+ */
+ public function getData($folder, $type)
+ {
+ return $this->_storage->getData();
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * The interface describing a list of Kolab folders.
+ *
+ * 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 interface describing a list of Kolab folders.
+ *
+ * Copyright 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
+ */
+interface Horde_Kolab_Storage_List
+{
+ /**
+ * Returns the list of folders visible to the current user.
+ *
+ * @return array The list of folders, represented as strings.
+ */
+ public function listFolders();
+
+}
--- /dev/null
+<?php
+/**
+ * The basic handler for accessing folder lists from Kolab storage.
+ *
+ * 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 basic handler for accessing folder lists from Kolab storage.
+ *
+ * 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_List_Base
+implements Horde_Kolab_Storage_List
+{
+ /**
+ * The driver for accessing the Kolab storage system.
+ *
+ * @var Horde_Kolab_Storage_Driver
+ */
+ private $_driver;
+
+ /**
+ * Constructor.
+ *
+ * @param Horde_Kolab_Storage_Driver $driver The primary connection driver.
+ */
+ public function __construct(Horde_Kolab_Storage_Driver $driver)
+ {
+ $this->_driver = $driver;
+ }
+
+ /**
+ * Returns the list of folders visible to the current user.
+ *
+ * @return array The list of folders, represented as a list of strings.
+ */
+ public function listFolders()
+ {
+ return $this->_driver->getMailboxes();
+ }
+}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * The log decorator for folder lists from Kolab storage.
+ *
+ * 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 log decorator for folder lists from Kolab storage.
+ *
+ * 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_List_Decorator_Log
+implements Horde_Kolab_Storage_List
+{
+ /**
+ * Decorated list handler.
+ *
+ * @var Horde_Kolab_Storage_List
+ */
+ private $_list;
+
+ /**
+ * A log handler.
+ *
+ * @var mixed
+ */
+ private $_logger;
+
+ /**
+ * Constructor.
+ *
+ * @param Horde_Kolab_Storage_List $list The original list handler.
+ * @param mixed $logger The log handler. This instance
+ * must provide the info() method.
+ */
+ public function __construct(
+ Horde_Kolab_Storage_List $list,
+ $logger
+ ) {
+ $this->_list = $list;
+ $this->_logger = $logger;
+ }
+
+ /**
+ * Returns the list of folders visible to the current user.
+ *
+ * @return array The list of folders, represented as a list of strings.
+ */
+ public function listFolders()
+ {
+ $this->_logger->info('Listing folders.');
+ $result = $this->_list->listFolders();
+ $this->_logger->info(
+ sprintf('List contained %s folders.', count($result))
+ );
+ return $result;
+ }
+}
\ No newline at end of file
<email>jan@horde.org</email>
<active>yes</active>
</lead>
- <date>2010-12-16</date>
- <time>17:00:56</time>
+ <date>2010-12-21</date>
+ <time>20:59:39</time>
<version>
<release>0.4.0</release>
<api>0.1.0</api>
<dir name="Horde">
<dir name="Kolab">
<dir name="Storage">
+ <dir name="Decorator">
+ <file name="Log.php" role="php" />
+ </dir> <!-- /lib/Horde/Kolab/Storage/Decorator -->
<dir name="Driver">
<dir name="Decorator">
<file name="Base.php" role="php" />
<file name="Permission.php" role="php" />
</dir> <!-- /lib/Horde/Kolab/Storage/Folder -->
<dir name="List">
+ <dir name="Decorator">
+ <file name="Log.php" role="php" />
+ </dir> <!-- /lib/Horde/Kolab/Storage/List/Decorator -->
<file name="Base.php" role="php" />
</dir> <!-- /lib/Horde/Kolab/Storage/List -->
<file name="Base.php" role="php" />
<file name="List.php" role="php" />
<file name="Translation.php" role="php">
<tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
- <tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
</file>
</dir> <!-- /lib/Horde/Kolab/Storage -->
<file name="Storage.php" role="php" />
<file name="DriverTest.php" role="test" />
</dir> <!-- /test/Horde/Kolab/Storage/Server -->
<dir name="Unit">
+ <dir name="Decorator">
+ <file name="LogTest.php" role="test" />
+ </dir> <!-- /test/Horde/Kolab/Storage/Unit/Decorator -->
<dir name="Driver">
<file name="CclientTest.php" role="test" />
<file name="ImapTest.php" role="test" />
<file name="MockTest.php" role="test" />
<file name="PearTest.php" role="test" />
</dir> <!-- /test/Horde/Kolab/Storage/Unit/Driver -->
+ <dir name="Folder">
+ <file name="NamespaceTest.php" role="test" />
+ </dir> <!-- /test/Horde/Kolab/Storage/Unit/Folder -->
+ <dir name="List">
+ <dir name="Decorator">
+ <file name="LogTest.php" role="test" />
+ </dir> <!-- /test/Horde/Kolab/Storage/Unit/List/Decorator -->
+ <file name="BaseTest.php" role="test" />
+ </dir> <!-- /test/Horde/Kolab/Storage/Unit/List -->
<file name="BaseTest.php" role="test" />
<file name="FactoryTest.php" role="test" />
</dir> <!-- /test/Horde/Kolab/Storage/Unit -->
<file name="conf.php.dist" role="test" />
<file name="DataTest.php" role="test" />
<file name="FolderTest.php" role="test" />
- <file name="NamespaceTest.php" role="test" />
<file name="PermissionTest.php" role="test" />
<file name="phpunit.xml" role="test" />
<file name="Scenario.php" role="test" />
<install as="Horde/Kolab/Storage/Folder.php" name="lib/Horde/Kolab/Storage/Folder.php" />
<install as="Horde/Kolab/Storage/List.php" name="lib/Horde/Kolab/Storage/List.php" />
<install as="Horde/Kolab/Storage/Translation.php" name="lib/Horde/Kolab/Storage/Translation.php" />
+ <install as="Horde/Kolab/Storage/Decorator/Log.php" name="lib/Horde/Kolab/Storage/Decorator/Log.php" />
<install as="Horde/Kolab/Storage/Driver/Base.php" name="lib/Horde/Kolab/Storage/Driver/Base.php" />
<install as="Horde/Kolab/Storage/Driver/Cclient.php" name="lib/Horde/Kolab/Storage/Driver/Cclient.php" />
<install as="Horde/Kolab/Storage/Driver/Imap.php" name="lib/Horde/Kolab/Storage/Driver/Imap.php" />
<install as="Horde/Kolab/Storage/Folder/Permission/Element/Guest.php" name="lib/Horde/Kolab/Storage/Folder/Permission/Element/Guest.php" />
<install as="Horde/Kolab/Storage/Folder/Permission/Element/User.php" name="lib/Horde/Kolab/Storage/Folder/Permission/Element/User.php" />
<install as="Horde/Kolab/Storage/List/Base.php" name="lib/Horde/Kolab/Storage/List/Base.php" />
+ <install as="Horde/Kolab/Storage/List/Decorator/Log.php" name="lib/Horde/Kolab/Storage/List/Decorator/Log.php" />
<install as="locale/Horde_Kolab_Storage.pot" name="locale/Horde_Kolab_Storage.pot" />
<install as="locale/ar/LC_MESSAGES/Horde_Kolab_Storage.mo" name="locale/ar/LC_MESSAGES/Horde_Kolab_Storage.mo" />
<install as="locale/ar/LC_MESSAGES/Horde_Kolab_Storage.po" name="locale/ar/LC_MESSAGES/Horde_Kolab_Storage.po" />
<install as="Horde/Kolab/Storage/conf.php.dist" name="test/Horde/Kolab/Storage/conf.php.dist" />
<install as="Horde/Kolab/Storage/DataTest.php" name="test/Horde/Kolab/Storage/DataTest.php" />
<install as="Horde/Kolab/Storage/FolderTest.php" name="test/Horde/Kolab/Storage/FolderTest.php" />
- <install as="Horde/Kolab/Storage/NamespaceTest.php" name="test/Horde/Kolab/Storage/NamespaceTest.php" />
<install as="Horde/Kolab/Storage/PermissionTest.php" name="test/Horde/Kolab/Storage/PermissionTest.php" />
<install as="Horde/Kolab/Storage/phpunit.xml" name="test/Horde/Kolab/Storage/phpunit.xml" />
<install as="Horde/Kolab/Storage/Scenario.php" name="test/Horde/Kolab/Storage/Scenario.php" />
<install as="Horde/Kolab/Storage/Server/DriverTest.php" name="test/Horde/Kolab/Storage/Server/DriverTest.php" />
<install as="Horde/Kolab/Storage/Unit/BaseTest.php" name="test/Horde/Kolab/Storage/Unit/BaseTest.php" />
<install as="Horde/Kolab/Storage/Unit/FactoryTest.php" name="test/Horde/Kolab/Storage/Unit/FactoryTest.php" />
+ <install as="Horde/Kolab/Storage/Unit/Decorator/LogTest.php" name="test/Horde/Kolab/Storage/Unit/Decorator/LogTest.php" />
<install as="Horde/Kolab/Storage/Unit/Driver/CclientTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/CclientTest.php" />
<install as="Horde/Kolab/Storage/Unit/Driver/ImapTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/ImapTest.php" />
<install as="Horde/Kolab/Storage/Unit/Driver/MockTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/MockTest.php" />
<install as="Horde/Kolab/Storage/Unit/Driver/PearTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/PearTest.php" />
+ <install as="Horde/Kolab/Storage/Unit/Folder/NamespaceTest.php" name="test/Horde/Kolab/Storage/Unit/Folder/NamespaceTest.php" />
+ <install as="Horde/Kolab/Storage/Unit/List/BaseTest.php" name="test/Horde/Kolab/Storage/Unit/List/BaseTest.php" />
+ <install as="Horde/Kolab/Storage/Unit/List/Decorator/LogTest.php" name="test/Horde/Kolab/Storage/Unit/List/Decorator/LogTest.php" />
<install as="TODO" name="TODO" />
</filelist>
</phprelease>
<release>alpha</release>
<api>alpha</api>
</stability>
- <date>2010-12-16</date>
+ <date>2010-12-21</date>
<license uri="http://www.gnu.org/copyleft/lesser.html">LGPL</license>
<notes>
* Added namespace support (Bug #6691).
class Horde_Kolab_Storage_TestCase
extends PHPUnit_Framework_TestCase
{
+ protected function getNullMock()
+ {
+ return new Horde_Kolab_Storage_Driver_Mock(
+ new Horde_Kolab_Storage_Factory()
+ );
+ }
+
+ protected function getEmptyMock()
+ {
+ return new Horde_Kolab_Storage_Driver_Mock(
+ new Horde_Kolab_Storage_Factory(),
+ $this->getEmptyAccount()
+ );
+ }
+
+ protected function getEmptyAccount()
+ {
+ return array(
+ 'username' => 'test@example.com',
+ 'data' => array()
+ );
+ }
+
+ protected function getTwoFolderMock()
+ {
+ return new Horde_Kolab_Storage_Driver_Mock(
+ new Horde_Kolab_Storage_Factory(),
+ $this->getTwoFolderAccount()
+ );
+ }
+
+ protected function getTwoFolderAccount()
+ {
+ return array(
+ 'username' => 'test@example.com',
+ 'data' => array(
+ 'user/test' => null,
+ 'user/test/a' => null
+ )
+ );
+ }
+
+ protected function getMockLogger()
+ {
+ $this->logHandler = new Horde_Log_Handler_Mock();
+ return new Horde_Log_Logger($this->logHandler);
+ }
+
+ protected function assertLogCount($count)
+ {
+ $this->assertEquals(count($this->logHandler->events), $count);
+ }
+
+ protected function assertLogContains($message)
+ {
+ $found = false;
+ foreach ($this->logHandler->events as $event) {
+ if (strstr($event['message'], $message) !== false) {
+ $found = true;
+ break;
+ }
+ }
+ $this->assertTrue($found);
+ }
}
--- /dev/null
+<?php
+/**
+ * Test the log decorator for the storage handler.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package Kolab_Storage
+ * @subpackage UnitTests
+ * @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
+ */
+
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../../Autoload.php';
+
+/**
+ * Test the log decorator for the storage handler.
+ *
+ * Copyright 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
+ * @subpackage UnitTests
+ * @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_Unit_Decorator_LogTest
+extends Horde_Kolab_Storage_TestCase
+{
+ public function testListLogsEntry()
+ {
+ $storage = new Horde_Kolab_Storage_Decorator_Log(
+ new Horde_Kolab_Storage_Base($this->getNullMock()),
+ $this->getMockLogger()
+ );
+ $this->assertInstanceOf(
+ 'Horde_Kolab_Storage_List_Decorator_Log',
+ $storage->getList()
+ );
+ }
+}
--- /dev/null
+<?php
+/**
+ * Test the basic folder list handler.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package Kolab_Storage
+ * @subpackage UnitTests
+ * @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
+ */
+
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../../Autoload.php';
+
+/**
+ * Test the basic folder list handler.
+ *
+ * Copyright 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
+ * @subpackage UnitTests
+ * @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_Unit_List_BaseTest
+extends Horde_Kolab_Storage_TestCase
+{
+ public function testListReturnsArray()
+ {
+ $list = new Horde_Kolab_Storage_List_Base($this->getNullMock());
+ $this->assertType('array', $list->listFolders());
+ }
+
+ public function testListReturnsFolders()
+ {
+ $list = new Horde_Kolab_Storage_List_Base($this->getTwoFolderMock());
+ $this->assertEquals(
+ array('INBOX', 'INBOX/a'),
+ $list->listFolders()
+ );
+ }
+}
--- /dev/null
+<?php
+/**
+ * Test the folder list log decorator.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package Kolab_Storage
+ * @subpackage UnitTests
+ * @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
+ */
+
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../../../Autoload.php';
+
+/**
+ * Test the folder list log decorator.
+ *
+ * Copyright 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
+ * @subpackage UnitTests
+ * @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_Unit_List_Decorator_LogTest
+extends Horde_Kolab_Storage_TestCase
+{
+ public function testListLogsEntry()
+ {
+ $list = new Horde_Kolab_Storage_List_Decorator_Log(
+ new Horde_Kolab_Storage_List_Base($this->getNullMock()),
+ $this->getMockLogger()
+ );
+ $list->listFolders();
+ $this->assertLogCount(2);
+ }
+
+ public function testListFolderCount()
+ {
+ $list = new Horde_Kolab_Storage_List_Decorator_Log(
+ new Horde_Kolab_Storage_List_Base($this->getTwoFolderMock()),
+ $this->getMockLogger()
+ );
+ $list->listFolders();
+ $this->assertLogContains('List contained 2 folders.');
+ }
+}