diff --git a/library/Class/Catalogue.php b/library/Class/Catalogue.php index 4a368b5183edf374c984d1ca7cda3197a2053622..15cff3d2f4fa83522b069d7e99992594b9db894f 100644 --- a/library/Class/Catalogue.php +++ b/library/Class/Catalogue.php @@ -274,26 +274,38 @@ class Class_Catalogue extends Storm_Model_Abstract { return $ret; } + + public function shouldCacheContent() { + if (Class_Users::getLoader()->isCurrentUserAdmin()) + return false; + + return Class_AdminVar::isCacheEnabled(); + } + + + public function getNoticesFromCacheByPreferences($preferences, $cache_vignette) { + $cache_key = md5(serialize($preferences).$cache_vignette); + $cache = Zend_Registry::get('cache'); + + if ($this->shouldCacheContent() && $cache->test($cache_key)) + return unserialize($cache->load($cache_key)); + + $notices = $this->_fetchAllNoticesByPreferences($preferences, $cache_vignette); + $cache->save(serialize($notices), $cache_key); + return $notices; + } + //------------------------------------------------------------------------------ // Rend les notices selon les preferences (kiosques) //------------------------------------------------------------------------------ public function getNoticesByPreferences($preferences,$cache_vignette=false) { - $cache_key = md5(serialize($preferences).$cache_vignette); - $cache = Zend_Registry::get('cache'); - if (Class_AdminVar::isCacheEnabled() && $cache->test($cache_key)) { - $notices = unserialize($cache->load($cache_key)); - } else { - $notices = $this->_fetchAllNoticesByPreferences($preferences, $cache_vignette); - $cache->save(serialize($notices), $cache_key); - } + $notices = $this->getNoticesFromCacheByPreferences($preferences, $cache_vignette); - // Tirage aleatoire - if($preferences["aleatoire"]==1) - { - shuffle($notices); - $notices = array_slice ($notices, 0, $preferences["nb_notices"]); - } - return $notices; + if ($preferences["aleatoire"] !== 1) + return $notices; + + shuffle($notices); + return array_slice ($notices, 0, $preferences["nb_notices"]); } diff --git a/library/ZendAfi/View/Helper/Accueil/Base.php b/library/ZendAfi/View/Helper/Accueil/Base.php index ad74e35c75b32ce497b26b7a56710d972e4166c5..549a66540a434df5bffca6be0c36fdbe65334443 100644 --- a/library/ZendAfi/View/Helper/Accueil/Base.php +++ b/library/ZendAfi/View/Helper/Accueil/Base.php @@ -68,7 +68,7 @@ class ZendAfi_View_Helper_Accueil_Base extends ZendAfi_View_Helper_BaseHelper { if (Class_Users::getLoader()->isCurrentUserAdmin()) return false; - return Class_AdminVar::get('CACHE_ACTIF') == '1'; + return Class_AdminVar::isCacheEnabled(); } diff --git a/tests/library/Class/CatalogueTest.php b/tests/library/Class/CatalogueTest.php index 91663c168dc756dbda24d19d1a0f41db18dda485..1ce927d8bd2f8eeb47a6f461ba4e58b545110389 100644 --- a/tests/library/Class/CatalogueTest.php +++ b/tests/library/Class/CatalogueTest.php @@ -480,6 +480,28 @@ class CatalogueTestGetNoticesByPreferences extends ModelTestCase { $this->assertEquals(array('test'), $notices); } + + + + /** @test */ + public function getNoticesWithCachePresentButUserAdminShouldCallThem() { + $account = new stdClass(); + $account->username = 'AutoTest' . time(); + $account->password = md5( 'password' ); + $account->ID_USER = 2; + $account->ROLE_LEVEL = ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL; + $account->confirmed = true; + $account->enabled = true; + Zend_Auth::getInstance()->getStorage()->write($account); + + Class_Users::getLoader()->newInstanceWithId($account->ID_USER)->setRoleLevel($account->ROLE_LEVEL); + + $notices = $this->_catalogue->getNoticesByPreferences(array('id_catalogue' => 666, + 'aleatoire' => 1, + 'nb_analyse' => 25, + 'nb_notices' => 40)); + $this->assertEquals(23, $notices[0]["id_notice"]); + } } ?> \ No newline at end of file