diff --git a/VERSIONS_HOTLINE/145669 b/VERSIONS_HOTLINE/145669 new file mode 100644 index 0000000000000000000000000000000000000000..5275794b5c27570bec90aa83686b2ba518093b4c --- /dev/null +++ b/VERSIONS_HOTLINE/145669 @@ -0,0 +1 @@ + - ticket #145669 : Boite agenda : Les selections d'articles sont bien filtrés \ No newline at end of file diff --git a/library/Class/Calendar.php b/library/Class/Calendar.php index b58a5c4dae13b3935fef22188c1761440ec0dfd1..164088dfe51eb0b2cc28f755655f5916884dab20 100644 --- a/library/Class/Calendar.php +++ b/library/Class/Calendar.php @@ -157,17 +157,21 @@ class Class_Calendar { if ($tag = $this->_getParam('tag', null)) $prefs['tag'] = $tag; + $preferences = ['display_order' => (isset($this->preferences['display_order']) + ? $this->preferences['display_order'] + : $this->preferences['order']), + 'id_categorie' => $this->_getCategoriesIds(), + 'events_only' => true, + 'event_date' => $this->date, + 'id_bib' => $this->id_bib, + 'id_lieu' => $id_lieu, + 'custom_fields' => $this->getCustomFields(), + 'published' => $this->date >= strftime('%Y-%m', $this->getTimeSource()->time())]; + if (isset($this->preferences['id_items'])) + $preferences['id_items'] = $this->preferences['id_items']; + $prefs = array_merge($prefs, - ['display_order' => (isset($this->preferences['display_order']) - ? $this->preferences['display_order'] - : $this->preferences['order']), - 'id_categorie' => $this->_getCategoriesIds(), - 'events_only' => true, - 'event_date' => $this->date, - 'id_bib' => $this->id_bib, - 'id_lieu' => $id_lieu, - 'custom_fields' => $this->getCustomFields(), - 'published' => $this->date >= strftime('%Y-%m', $this->getTimeSource()->time())], + $preferences, $extra_prefs); $articles = Class_Article::getArticlesByPreferences($prefs); diff --git a/tests/application/modules/opac/controllers/CmsControllerCalendarActionTest.php b/tests/application/modules/opac/controllers/CmsControllerCalendarActionTest.php index 397d59cab3dd8129a017ddb1aa1a597cf6a258c0..442f5cd70755e830bba4ef74722a6dad547a0210 100644 --- a/tests/application/modules/opac/controllers/CmsControllerCalendarActionTest.php +++ b/tests/application/modules/opac/controllers/CmsControllerCalendarActionTest.php @@ -687,6 +687,104 @@ class CmsControllerCalendarActionHeaderTest extends AbstractControllerTestCase { } +class CmsControllerCalendarActionWithIdItemsTest extends AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + + public function setUp() { + parent::setUp(); + + $cfg_accueil = [ + 'modules' => [ + '1' => [ + 'division' => '1', + 'type_module' => 'CALENDAR', + 'preferences' => [ + 'titre' => 'Rendez-vous', + 'rss_avis' => false, + 'id_categorie' => '12-2', + 'id_items' => '100-102', + 'display_cat_select' => true, + 'enabled_filters' => 'date;place;custom_field_2;zork', + 'display_event_info' => 'none', + ] + ] + ], + 'options' => [] + ]; + + $time_source = new TimeSourceForTest('2021-12-14 09:00:00'); + ZendAfi_View_Helper_Calendar_Table::setTimeSource($time_source); + ZendAfi_View_Helper_CalendarContent::setTimeSource($time_source); + Class_Calendar::setTimeSource($time_source); + + $this->fixture(Class_Article::class, + ['id' => 100, + 'titre' => 'Les toiles de Nathalie Novi', + 'events_debut' => '2021-12-01', + 'events_fin' => '2021-12-31', + 'categorie' => '', + 'contenu' => 'L\'ensemble des oeuvres de Nathalie Novi' + ]); + + $this->fixture(Class_Article::class, + ['id' => 101, + 'titre' => 'Sécurité', + 'events_debut' => '2021-12-01', + 'events_fin' => '2021-12-31', + 'categorie' => '', + 'contenu' => 'Se protéger contre les spywhare' + ]); + + $this->fixture(Class_Article::class, + ['id' => 102, + 'titre' => 'Exposition Nathalie Novi', + 'events_debut' => '2021-12-01', + 'events_fin' => '2021-12-31', + 'categorie' => '', + 'contenu' => 'Toutes les expositions de l\'artiste' + ]); + + $this->fixture(Class_Profil::class, + ['id' => 4, + 'browser' => 'opac', + 'libelle' => 'Rendez-vous', + 'cfg_accueil' => $cfg_accueil]); + + $callback = function ($preferences){ + if (isset($preferences['id_items']) + && ($preferences['id_items'] === "100-102")) + return [Class_Article::find(100), + Class_Article::find(102)]; + return [Class_Article::find(100), + Class_Article::find(101), + Class_Article::find(102)]; + }; + + $this->onLoaderOfModel(Class_Article::class) + ->whenCalled('getArticlesByPreferences') + ->willDo($callback); + + $this->dispatch('/index/index/id_profil/4'); + } + + + /** @test */ + public function agendaShouldDisplayToilesNathalieNovi() { + $this->assertXPathContentContains('//a[@class = "calendar_event_title"]', 'Les toiles de Nathalie Novi'); + } + + + /** @test */ + public function agendaShouldDisplayExpositionNathalieNovi() { + $this->assertXPathContentContains('//a[@class = "calendar_event_title"]', 'Exposition Nathalie Novi'); + } + + + /** @test */ + public function agendaShouldNotContainsSecurite() { + $this->assertNotXPathContentContains('//a[@class = "calendar_event_title"]', 'Sécurité'); + } +} class CmsControllerCalendarActionAjaxLinkTest extends AbstractControllerTestCase {