implements Horde_Kolab_Storage_Driver
{
/**
+ * Factory for generating helper objects.
+ *
+ * @var Horde_Kolab_Storage_Factory
+ */
+ private $_factory;
+
+ /**
* Additional connection parameters.
*
* @var array
/**
* Constructor.
*
- * @param array $params Connection parameters.
+ * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects.
+ * @param array $params Connection parameters.
*/
- public function __construct($params = array())
- {
- $this->_params = $params;
+ public function __construct(
+ Horde_Kolab_Storage_Factory $factory,
+ $params = array()
+ ) {
+ $this->_factory = $factory;
+ $this->_params = $params;
}
/**
}
/**
+ * Return the factory.
+ *
+ * @return Horde_Kolab_Storage_Factory The factory.
+ */
+ protected function getFactory()
+ {
+ return $this->_factory;
+ }
+
+ /**
* Retrieve the namespace information for this connection.
*
* @return Horde_Kolab_Storage_Folder_Namespace The initialized namespace handler.
public function getNamespace()
{
if (isset($this->_params['namespaces'])) {
- return new Horde_Kolab_Storage_Folder_Namespace_Config(
- $this->_params['namespaces']
+ return $factory->createNamespace(
+ 'config', $this->_params['namespaces']
);
}
- return new Horde_Kolab_Storage_Folder_Namespace_Fixed();
+ return $this->_factory->createNamespace('fixed');
}
}
\ No newline at end of file
/**
* Constructor.
*
- * @param Horde_Imap_Client_Base $imap The IMAP connection handler.
- * @param array $params Connection parameters.
+ * @param Horde_Imap_Client_Base $imap The IMAP connection handler.
+ * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects.
+ * @param array $params Connection parameters.
*/
public function __construct(
Horde_Imap_Client_Base $imap,
+ Horde_Kolab_Storage_Factory $factory,
$params = array()
) {
$this->_imap = $imap;
- parent::__construct($params);
+ parent::__construct($factory, $params);
}
/**
public function getNamespace()
{
if ($this->_imap->queryCapability('NAMESPACE') === true) {
- return new Horde_Kolab_Storage_Folder_Namespace_Imap(
- $this->_imap->getNamespaces(),
- $this->getParam('namespaces', array())
- );
+ $c = array();
+ $configuration = $this->getParam('namespaces', array());
+ foreach ($this->_imap->getNamespaces() as $namespace) {
+ if (in_array($namespace['name'], array_keys($configuration))) {
+ $namespace = array_merge($namespace, $configuration[$namespace['name']]);
+ }
+ $c[] = $namespace;
+ }
+ return $this->getFactory()->createNamespace('imap', $c);
}
return parent::getNamespace();
}
/**
* Constructor.
*
- * @param array $params Connection parameters.
+ * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects.
+ * @param array $params Connection parameters.
*/
- public function __construct($params = array())
- {
+ public function __construct(
+ Horde_Kolab_Storage_Factory $factory,
+ $params = array()
+ ) {
if (isset($params['data'])) {
$this->_data = $params['data'];
unset($params['data']);
} else {
$this->_data = array();
}
- parent::__construct($params);
+ parent::__construct($factory, $params);
}
/**
/**
* Constructor.
*
- * @param Net_IMAP $imap The IMAP connection handler.
- * @param array $params Connection parameters.
+ * @param Net_IMAP $imap The IMAP connection handler.
+ * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects.
+ * @param array $params Connection parameters.
*/
public function __construct(
Net_IMAP $imap,
+ Horde_Kolab_Storage_Factory $factory,
$params = array()
) {
$this->_imap = $imap;
- parent::__construct($params);
+ parent::__construct($factory, $params);
}
/**
/**
* Constructor.
*
- * @param rcube_imap_generic $imap The IMAP connection handler.
- * @param array $params Connection parameters.
+ * @param rcube_imap_generic $imap The IMAP connection handler.
+ * @param Horde_Kolab_Storage_Factory $factory A factory for helper objects.
+ * @param array $params Connection parameters.
*/
public function __construct(
rcube_imap_generic $imap,
+ Horde_Kolab_Storage_Factory $factory,
$params = array()
) {
$this->_imap = $imap;
- parent::__construct($params);
+ parent::__construct($factory, $params);
}
/**
switch ($params['driver']) {
case 'mock':
$config['data'] = array('user/test' => array());
- return new Horde_Kolab_Storage_Driver_Mock($config);
+ return new Horde_Kolab_Storage_Driver_Mock($this, $config);
case 'horde':
$config['hostspec'] = $config['host'];
unset($config['host']);
return new Horde_Kolab_Storage_Driver_Imap(
new Horde_Imap_Client_Socket(
$config
- )
+ ),
+ $this
);
case 'horde-php':
$config['hostspec'] = $config['host'];
return new Horde_Kolab_Storage_Driver_Imap(
new Horde_Imap_Client_Cclient(
$config
- )
+ ),
+ $this
);
case 'php':
- return new Horde_Kolab_Storage_Driver_Cclient($config);
+ return new Horde_Kolab_Storage_Driver_Cclient($this, $config);
case 'pear':
$client = new Net_IMAP($config['host']);
Horde_Kolab_Storage_Exception_Pear::catchError(
$client->login($config['username'], $config['password'])
);
return new Horde_Kolab_Storage_Driver_Pear(
- $client, $config
+ $client, $this, $config
);
case 'roundcube':
$client = new rcube_imap_generic();
)
);
return new Horde_Kolab_Storage_Driver_Rcube(
- $client, $config
+ $client, $this, $config
);
default:
throw new Horde_Kolab_Storage_Exception(
}
}
+ /**
+ * Create a namespace handler.
+ *
+ * @param string $type The namespace type.
+ * @param array $params The parameters for the namespace. See
+ *
+ * @return Horde_Kolab_Storage_Folder_Namespace The namespace handler.
+ */
+ public function createNamespace($type, array $params = array())
+ {
+ $class = 'Horde_Kolab_Storage_Folder_Namespace_' . ucfirst($type);
+ if (!class_exists($class)) {
+ throw new Horde_Kolab_Storage_Exception(
+ sprintf(
+ Horde_Kolab_Storage_Translation::t(
+ 'Invalid "namespace" type "%s"!'
+ ),
+ $type
+ )
+ );
+ }
+ return new $class($params);
+ }
}
\ No newline at end of file
class Horde_Kolab_Storage_Folder_Namespace_Imap
extends Horde_Kolab_Storage_Folder_Namespace_Config
{
- /**
- * Constructor.
- */
- public function __construct(array $namespaces, array $configuration = array())
- {
- $c = array();
- foreach ($namespaces as $namespace) {
- if (in_array($namespace['name'], array_keys($configuration))) {
- $namespace = array_merge($namespace, $configuration[$namespace['name']]);
- }
- $c[] = $namespace;
- }
- parent::__construct($c);
- }
}
\ No newline at end of file
{
$this->_storage = $this->getMock('Horde_Kolab_Storage', array(), array(), '', false, false);
$this->_imap = $this->getMock('Horde_Imap_Client_Socket', array(), array(), '', false, false);
- $this->_connection = new Horde_Kolab_Storage_Driver_Imap($this->_imap);
+ $this->_connection = new Horde_Kolab_Storage_Driver_Imap(
+ $this->_imap,
+ new Horde_Kolab_Storage_Factory()
+ );
$this->_imap->expects($this->any())
->method('getNamespaces')
->will(
{
public function testConstruction()
{
- new Horde_Kolab_Storage_Base(new Horde_Kolab_Storage_Driver_Mock());
+ new Horde_Kolab_Storage_Base(new Horde_Kolab_Storage_Driver_Mock(new Horde_Kolab_Storage_Factory()));
}
}
public function testGetNamespaceReturnsNamespaceHandler()
{
$driver = new Horde_Kolab_Storage_Driver_Cclient(
- array()
+ new Horde_Kolab_Storage_Factory(), array()
);
$this->assertType(
'Horde_Kolab_Storage_Folder_Namespace',
public function testGetNamespaceReturnsExpectedNamespaces()
{
$driver = new Horde_Kolab_Storage_Driver_Cclient(
- array()
+ new Horde_Kolab_Storage_Factory(), array()
);
$namespaces = array();
foreach ($driver->getNamespace() as $namespace) {
{
$driver = new Horde_Kolab_Storage_Driver_Imap(
$this->_getNamespaceMock(),
+ new Horde_Kolab_Storage_Factory(),
array()
);
$this->assertType(
{
$driver = new Horde_Kolab_Storage_Driver_Imap(
$this->_getNamespaceMock(),
+ new Horde_Kolab_Storage_Factory(),
array()
);
$namespaces = array();
public function testGetNamespaceReturnsNamespaceHandler()
{
$driver = new Horde_Kolab_Storage_Driver_Mock(
- array()
+ new Horde_Kolab_Storage_Factory(), array()
);
$this->assertType(
'Horde_Kolab_Storage_Folder_Namespace',
public function testGetNamespaceReturnsExpectedNamespaces()
{
$driver = new Horde_Kolab_Storage_Driver_Mock(
- array()
+ new Horde_Kolab_Storage_Factory(), array()
);
$namespaces = array();
foreach ($driver->getNamespace() as $namespace) {
{
$driver = new Horde_Kolab_Storage_Driver_Pear(
$this->_getNamespaceMock(),
+ new Horde_Kolab_Storage_Factory(),
array()
);
$this->assertType(
{
$driver = new Horde_Kolab_Storage_Driver_Pear(
$this->_getNamespaceMock(),
+ new Horde_Kolab_Storage_Factory(),
array()
);
$namespaces = array();
$factory = new Horde_Kolab_Storage_Factory();
$this->assertType(
'Horde_Kolab_Storage_Base',
- $factory->create(new Horde_Kolab_Storage_Driver_Mock())
+ $factory->create(
+ new Horde_Kolab_Storage_Driver_Mock(
+ new Horde_Kolab_Storage_Factory()
+ )
+ )
);
}
)
);
}
+
+ /**
+ * @expectedException Horde_Kolab_Storage_Exception
+ */
+ public function testInvalidNamespace()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $factory->createNamespace(
+ 'undefined'
+ );
+ }
+
+ public function testFixedNamespace()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $this->assertInstanceOf(
+ 'Horde_Kolab_Storage_Folder_Namespace_Fixed',
+ $factory->createNamespace(
+ 'fixed'
+ )
+ );
+ }
}