From: Gunnar Wrobel Date: Mon, 3 Jan 2011 22:17:25 +0000 (+0100) Subject: Synchronize queries as well. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=4fc23dac435eb1deb5f2049e4edfc3525c1d4f24;p=horde.git Synchronize queries as well. --- diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php index 67e17ce76..533993dd6 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php @@ -218,6 +218,7 @@ class Horde_Kolab_Storage_Factory if (method_exists($query, 'setFactory')) { $query->setFactory($this); } + $list->registerQuery($query); return $query; } diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php index 187e1d6b5..5bae4b305 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php @@ -36,6 +36,13 @@ implements Horde_Kolab_Storage_List private $_driver; /** + * The list of registered queries. + * + * @var array + */ + private $_queries = array(); + + /** * Constructor. * * @param Horde_Kolab_Storage_Driver $driver The primary connection driver. @@ -87,5 +94,20 @@ implements Horde_Kolab_Storage_List */ public function synchronize() { + foreach ($this->_queries as $query) { + $query->synchronize(); + } + } + + /** + * Register a query to be updated if the underlying data changes. + * + * @param Horde_Kolab_Storage_Query $query The query to register. + * + * @return NULL + */ + public function registerQuery(Horde_Kolab_Storage_Query $query) + { + $this->_queries[] = $query; } } \ No newline at end of file diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Cache.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Cache.php index 4f7946de0..8eba1b262 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Cache.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Cache.php @@ -120,15 +120,27 @@ implements Horde_Kolab_Storage_List */ public function synchronize() { - $this->_list->synchronize(); - $this->_list_cache->store( $this->_list->listFolders(), $this->_list->listFolderTypes() ); + $this->_list->synchronize(); + $this->_list_cache->save(); $this->_init = true; } + + /** + * Register a query to be updated if the underlying data changes. + * + * @param Horde_Kolab_Storage_Query $query The query to register. + * + * @return NULL + */ + public function registerQuery(Horde_Kolab_Storage_Query $query) + { + $this->_list->registerQuery($query); + } } \ No newline at end of file diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php index 7bab527fc..6e02167b3 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php @@ -131,4 +131,16 @@ implements Horde_Kolab_Storage_List ) ); } + + /** + * Register a query to be updated if the underlying data changes. + * + * @param Horde_Kolab_Storage_Query $query The query to register. + * + * @return NULL + */ + public function registerQuery(Horde_Kolab_Storage_Query $query) + { + $this->_list->registerQuery($query); + } } \ No newline at end of file diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php index 239b56d39..9d110baeb 100644 --- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php +++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php @@ -27,5 +27,13 @@ */ interface Horde_Kolab_Storage_Queriable { + /** + * Register a query to be updated if the underlying data changes. + * + * @param Horde_Kolab_Storage_Query $query The query to register. + * + * @return NULL + */ + public function registerQuery(Horde_Kolab_Storage_Query $query); } diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Stub/FactoryQuery.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Stub/FactoryQuery.php index 17a93ca8f..cba9c5911 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Stub/FactoryQuery.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Stub/FactoryQuery.php @@ -3,6 +3,7 @@ class Horde_Kolab_Storage_Stub_FactoryQuery implements Horde_Kolab_Storage_Query { public $called = false; + public $synchronized = false; /** * Constructor. @@ -32,5 +33,6 @@ implements Horde_Kolab_Storage_Query */ public function synchronize() { + $this->synchronized = true; } } \ No newline at end of file diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php index 1980707b1..a4a2b4793 100644 --- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php +++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php @@ -73,4 +73,20 @@ extends Horde_Kolab_Storage_TestCase ); $this->assertTrue($list instanceOf Horde_Kolab_Storage_Queriable); } + + public function testQuerySynchronization() + { + $factory = new Horde_Kolab_Storage_Factory(); + $list = new Horde_Kolab_Storage_List_Base( + $this->getNullMock(), + $factory + ); + $query = $factory->createListQuery( + 'Horde_Kolab_Storage_Stub_FactoryQuery', + $list + ); + $list->registerQuery($query); + $list->synchronize(); + $this->assertTrue($query->synchronized); + } }