} else {
switch ($arguments[0]) {
case 'folder':
+ $factory = new Horde_Kolab_Storage_Factory();
+ var_dump(
+ $factory->createFromParams(
+ array(
+ 'driver' => $options['driver'],
+ 'params' => $options
+ )
+ )->listFolders()
+ );
break;
default:
$parser->printHelp();
array(
'action' => 'store',
'choices' => array('horde', 'php', 'pear', 'roundcube', 'mock'),
- 'help' => Horde_Kolab_Storage_Translation::t('The IMAP driver that should be used')
+ 'help' => Horde_Kolab_Storage_Translation::t(
+"The Kolab backend driver that should be used.
+Choices are:
+
+ - horde [IMAP]: The Horde_Imap_Client driver
+ - php [IMAP]: The PHP imap_* functions which are based on c-client
+ - pear [IMAP]: The PEAR-Net_IMAP driver
+ - roundcube [IMAP]: The roundcube IMAP driver
+ - mock [Memory]: A dummy driver."
+ )
+ )
+ ),
+ new Horde_Argv_Option(
+ '-u',
+ '--user',
+ array(
+ 'action' => 'store',
+ 'help' => Horde_Kolab_Storage_Translation::t('The user accessing the backend.')
)
),
);
extends Horde_Kolab_Storage_Driver_Base
{
/**
+ * The data of the mailboxes.
+ *
+ * @var array
+ */
+ private $_data;
+
+ /**
* The data of the mailbox currently opened
*
* @var array
private $_mboxname = null;
/**
+ * Constructor.
+ *
+ * @param array $params Connection parameters.
+ */
+ public function __construct($params = array())
+ {
+ if (isset($params['data'])) {
+ $this->_data = $params['data'];
+ unset($params['data']);
+ } else {
+ $this->_data = array();
+ }
+ parent::__construct($params);
+ }
+
+ /**
* Parse the folder name into an id for this mock driver.
*
* @return string The folder id.
private function _parseFolder($folder)
{
if (substr($folder, 0, 5) == 'INBOX') {
- $user = split('@', $this->_user);
+ $user = explode('@', $this->_user);
return 'user/' . $user[0] . substr($folder, 5);
}
return $folder;
*/
public function getAuth()
{
- return $this->_imap->getParam('username');
+ return $this->getParam('user');
}
/**
*/
public function getMailboxes()
{
- return $this->_imap->listMailboxes('*', Horde_Imap_Client::MBOX_ALL, array('flat' => true));
+ $user = explode('@', $this->getAuth());
+ $pattern = '#^user/' . $user[0] . '#';
+ $result = array();
+ foreach (array_keys($this->_data) as $mbox) {
+ $result[] = preg_replace($pattern, 'INBOX', $mbox);
+ }
+ return $result;
}
/**
/**
* Create the storage handler.
*
+ * @param Horde_Kolab_Storage_Driver $driver The required driver for access
+ * to the storage backend.
+ *
* @return Horde_Kolab_Storage The storage handler.
*/
public function create(Horde_Kolab_Storage_Driver $driver)
return new Horde_Kolab_Storage_Base($driver);
}
+ /**
+ * Create the storage handler based on a set of configuration parameters.
+ *
+ * @param array $params The parameters for the backend access. See create().
+ * <pre>
+ * - driver : The type of backend driver. One of "mock", "php", "pear",
+ * "horde", "horde-socket", and "roundcube".
+ * - params : Backend specific connection parameters.
+ *
+ *
+ * </pre>
+ *
+ * @return Horde_Kolab_Storage The storage handler.
+ */
+ public function createFromParams(array $params)
+ {
+ return new Horde_Kolab_Storage_Base(
+ $this->createDriverFromParams($params)
+ );
+ }
+
+ /**
+ * Create the storage backend driver based on a set of parameters.
+ *
+ * @param array $params The parameters for the backend access. See create().
+ * <pre>
+ * - driver : The type of backend driver. One of "mock", "php", "pear",
+ * "horde", "horde-socket", and "roundcube".
+ * - params : Backend specific connection parameters.
+ *
+ *
+ * </pre>
+ *
+ * @return Horde_Kolab_Storage_Driver The storage handler.
+ */
+ public function createDriverFromParams(array $params)
+ {
+ if (!isset($params['driver'])) {
+ throw new Horde_Kolab_Storage_Exception(
+ Horde_Kolab_Storage_Translation::t(
+ 'Missing "driver" parameter!'
+ )
+ );
+ }
+ if (isset($params['params'])) {
+ $config = $params['params'];
+ } else {
+ $config = array();
+ }
+ switch ($params['driver']) {
+ case 'mock':
+ $config['data'] = array('user/test' => array());
+ return new Horde_Kolab_Storage_Driver_Mock($config);
+ default:
+ throw new Horde_Kolab_Storage_Exception(
+ sprintf(
+ Horde_Kolab_Storage_Translation::t(
+ 'Invalid "driver" parameter "%s". Please use one of "mock", "php", "pear", "horde", "horde-socket", and "roundcube"!'
+ ),
+ $params['driver']
+ )
+ );
+ }
+ }
+
}
\ No newline at end of file
$this->runCli();
}
+ public function testUsage()
+ {
+ $_SERVER['argv'] = array(
+ 'kolab-storage',
+ '--driver=mock',
+ '--user=test',
+ 'DOESNOTEXISTS'
+ );
+ $this->assertContains('Usage:', $this->runCli());
+ }
+
public function testFolderList()
{
$_SERVER['argv'] = array(
'kolab-storage',
- 'list'
+ '--driver=mock',
+ '--user=test',
+ 'folder'
);
$this->assertContains('INBOX', $this->runCli());
}
class Horde_Kolab_Storage_Unit_FactoryTest
extends Horde_Kolab_Storage_TestCase
{
- public function testConstruction()
+ public function testCreation()
{
$factory = new Horde_Kolab_Storage_Factory();
$this->assertType(
$factory->create(new Horde_Kolab_Storage_Driver_Mock())
);
}
+
+ public function testCreationFromParams()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $this->assertType(
+ 'Horde_Kolab_Storage_Base',
+ $factory->createFromParams(array('driver' => 'mock'))
+ );
+ }
+
+ /**
+ * @expectedException Horde_Kolab_Storage_Exception
+ */
+ public function testMissingDriver()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $factory->createDriverFromParams(array());
+ }
+
+ /**
+ * @expectedException Horde_Kolab_Storage_Exception
+ */
+ public function testInvalidDriver()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $factory->createDriverFromParams(array('driver' => 'something'));
+ }
+
+ public function testMockDriver()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $this->assertType(
+ 'Horde_Kolab_Storage_Driver_Mock',
+ $factory->createDriverFromParams(
+ array('driver' => 'mock')
+ )
+ );
+ }
}