From: Gunnar Wrobel Date: Tue, 14 Dec 2010 15:36:52 +0000 (+0100) Subject: Rough draft of listing folders on the command line. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=c12febff1b571dd79f246059cc84c1b9ccdb63e4;p=horde.git Rough draft of listing folders on the command line. --- diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Cli.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Cli.php index d118a2ce6..2c5d832e8 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Cli.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Cli.php @@ -55,6 +55,15 @@ class Horde_Kolab_Storage_Cli } 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(); @@ -76,7 +85,24 @@ class Horde_Kolab_Storage_Cli 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.') ) ), ); diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Mock.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Mock.php index 3a94beb0f..b58e604ff 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Mock.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Driver/Mock.php @@ -29,6 +29,13 @@ class Horde_Kolab_Storage_Driver_Mock extends Horde_Kolab_Storage_Driver_Base { /** + * The data of the mailboxes. + * + * @var array + */ + private $_data; + + /** * The data of the mailbox currently opened * * @var array @@ -43,6 +50,22 @@ extends Horde_Kolab_Storage_Driver_Base 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. @@ -50,7 +73,7 @@ extends Horde_Kolab_Storage_Driver_Base 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; @@ -63,7 +86,7 @@ extends Horde_Kolab_Storage_Driver_Base */ public function getAuth() { - return $this->_imap->getParam('username'); + return $this->getParam('user'); } /** @@ -73,7 +96,13 @@ extends Horde_Kolab_Storage_Driver_Base */ 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; } /** diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php index 8b71d0edd..3b18cf30a 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php @@ -30,6 +30,9 @@ class Horde_Kolab_Storage_Factory /** * 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) @@ -37,4 +40,69 @@ class Horde_Kolab_Storage_Factory 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(). + *
+     *  - driver : The type of backend driver. One of "mock", "php", "pear",
+     *             "horde", "horde-socket", and "roundcube".
+     *  - params : Backend specific connection parameters.
+     *
+     *    
+     * 
+ * + * @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(). + *
+     *  - driver : The type of backend driver. One of "mock", "php", "pear",
+     *             "horde", "horde-socket", and "roundcube".
+     *  - params : Backend specific connection parameters.
+     *
+     *    
+     * 
+ * + * @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 diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/CliTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/CliTest.php index 938cfadb8..ce12434b7 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/CliTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/CliTest.php @@ -43,11 +43,24 @@ extends Horde_Kolab_Storage_TestCase $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()); } diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php index 03941b807..9786c9803 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php @@ -35,7 +35,7 @@ require_once dirname(__FILE__) . '/../Autoload.php'; 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( @@ -43,4 +43,42 @@ extends Horde_Kolab_Storage_TestCase $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') + ) + ); + } }