From: Gunnar Wrobel
Date: Mon, 17 Jan 2011 09:17:32 +0000 (+0100) Subject: Support returning basic folder data from the cache. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=b30f949b175f9aadb54b37a3c7f77b1fbba3da31;p=horde.git Support returning basic folder data from the cache. --- diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query.php index 088b7fe8e..2d95b1f10 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query.php @@ -45,6 +45,15 @@ extends Horde_Kolab_Storage_Query public function listFolderTypeAnnotations(); /** + * List basic folder data for the folders of a specific type. + * + * @param string $type The folder type the listing should be limited to. + * + * @return array The list of folders. + */ + public function dataByType($type); + + /** * List all folders of a specific type. * * @param string $type The folder type the listing should be limited to. diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php index 489a5e036..ffb6b8b01 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php @@ -105,6 +105,28 @@ implements Horde_Kolab_Storage_List_Query } /** + * List basic folder data for the folders of a specific type. + * + * @param string $type The folder type the listing should be limited to. + * + * @return array The list of folders. + */ + public function dataByType($type) + { + $result = array(); + $namespace = $this->_list->getNamespace(); + foreach ($this->listTypes() as $folder => $folder_type) { + if ($folder_type == $type) { + $result[$folder] = array( + 'owner' => $namespace->getOwner($folder), + 'name' => $namespace->getTitle($folder), + ); + } + } + return $result; + } + + /** * Get the folder owners. * * @return array The folder owners with the folder names as key and the diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Cache.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Cache.php index 924b92949..7ab28c9c3 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Cache.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Cache.php @@ -117,7 +117,24 @@ implements Horde_Kolab_Storage_List_Query { $by_type = $this->_list_cache->getQuery(self::BY_TYPE); if (isset($by_type[$type])) { - return $by_type[$type]; + return array_keys($by_type[$type]); + } else { + return array(); + } + } + + /** + * List basic folder data for the folders of a specific type. + * + * @param string $type The folder type the listing should be limited to. + * + * @return array The list of folders. + */ + public function dataByType($type) + { + $data_by_type = $this->_list_cache->getQuery(self::BY_TYPE); + if (isset($data_by_type[$type])) { + return $data_by_type[$type]; } else { return array(); } @@ -199,30 +216,30 @@ implements Horde_Kolab_Storage_List_Query */ public function synchronize() { - $types = array(); - $by_type = array(); - foreach ($this->listFolderTypeAnnotations() as $folder => $annotation) { - $type = $annotation->getType(); - $types[$folder] = $type; - $by_type[$type][] = $folder; - } - $this->_list_cache->setQuery(self::TYPES, $types); - $this->_list_cache->setQuery(self::BY_TYPE, $by_type); + $namespace = $this->_list->getNamespace(); $owners = array(); - $namespace = $this->_list->getNamespace(); foreach ($this->_list->listFolders() as $folder) { $owners[$folder] = $namespace->getOwner($folder); } $this->_list_cache->setQuery(self::OWNERS, $owners); + $types = array(); + $by_type = array(); $personal_defaults = array(); $defaults = array(); - $namespace = $this->_list->getNamespace(); + foreach ($this->listFolderTypeAnnotations() as $folder => $annotation) { + $type = $annotation->getType(); + $owner = $namespace->getOwner($folder); + $title = $namespace->getTitle($folder); + + $types[$folder] = $type; + $by_type[$type][$folder] = array( + 'owner' => $owner, 'name' => $title + ); + if ($annotation->isDefault()) { - $type = $annotation->getType(); - $owner = $namespace->getOwner($folder); if (!isset($defaults[$owner][$type])) { $defaults[$owner][$type] = $folder; } else { @@ -252,6 +269,8 @@ implements Horde_Kolab_Storage_List_Query } } } + $this->_list_cache->setQuery(self::TYPES, $types); + $this->_list_cache->setQuery(self::BY_TYPE, $by_type); $this->_list_cache->setQuery(self::DEFAULTS, $defaults); $this->_list_cache->setQuery( self::PERSONAL_DEFAULTS, $personal_defaults diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/BaseTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/BaseTest.php index 97a90aba2..cba65b534 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/BaseTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/BaseTest.php @@ -295,4 +295,47 @@ extends Horde_Kolab_Storage_TestCase $query->listDefaults() ); } + + public function testDataByTypeReturnsArray() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $factory->createListQuery('Base', $this->getNullList($factory)); + $this->assertType('array', $query->dataByType('test')); + } + + public function testListCalendarsListsCalendarData() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $factory->createListQuery('Base', $this->getAnnotatedList($factory)); + $this->assertEquals(array('INBOX/Calendar'), array_keys($query->dataByType('event'))); + } + + public function testListTasklistsListsTasklistData() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $factory->createListQuery('Base', $this->getAnnotatedList($factory)); + $this->assertEquals(array('INBOX/Tasks'), array_keys($query->dataByType('task'))); + } + + public function testListDataHasOwner() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $factory->createListQuery('Base', $this->getAnnotatedList($factory)); + $data = $query->dataByType('event'); + $this->assertEquals( + 'test@example.com', + $data['INBOX/Calendar']['owner'] + ); + } + + public function testListDataHasTitle() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $factory->createListQuery('Base', $this->getAnnotatedList($factory)); + $data = $query->dataByType('event'); + $this->assertEquals( + 'Calendar', + $data['INBOX/Calendar']['name'] + ); + } } diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/CacheTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/CacheTest.php index 9ccb05aa8..844c8d0e4 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/CacheTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/CacheTest.php @@ -302,4 +302,47 @@ extends Horde_Kolab_Storage_TestCase $query->listDefaults() ); } + + public function testDataByTypeReturnsArray() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $this->getCachedQueryForList($this->getNullList($factory), $factory); + $this->assertType('array', $query->dataByType('test')); + } + + public function testListCalendarsListsCalendarData() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $this->getCachedQueryForList($this->getAnnotatedList($factory), $factory); + $this->assertEquals(array('INBOX/Calendar'), array_keys($query->dataByType('event'))); + } + + public function testListTasklistsListsTasklistData() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $this->getCachedQueryForList($this->getAnnotatedList($factory), $factory); + $this->assertEquals(array('INBOX/Tasks'), array_keys($query->dataByType('task'))); + } + + public function testListDataHasOwner() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $this->getCachedQueryForList($this->getAnnotatedList($factory), $factory); + $data = $query->dataByType('event'); + $this->assertEquals( + 'test@example.com', + $data['INBOX/Calendar']['owner'] + ); + } + + public function testListDataHasTitle() + { + $factory = new Horde_Kolab_Storage_Factory(); + $query = $this->getCachedQueryForList($this->getAnnotatedList($factory), $factory); + $data = $query->dataByType('event'); + $this->assertEquals( + 'Calendar', + $data['INBOX/Calendar']['name'] + ); + } }