diff --git a/VERSIONS_HOTLINE/115655 b/VERSIONS_HOTLINE/115655 new file mode 100644 index 0000000000000000000000000000000000000000..d7c46144a660d9e9458808f748f94792b467a525 --- /dev/null +++ b/VERSIONS_HOTLINE/115655 @@ -0,0 +1 @@ + - ticket #115655 : Magasin thèmes : correction de la régression sur le paramètre d'affichage du lien "dissémination" \ No newline at end of file diff --git a/library/Class/Template.php b/library/Class/Template.php index 63ff1ce679915654230f651af79069036e2ca946..736c97097867f566b89ac2fbd5f31404720e09a4 100644 --- a/library/Class/Template.php +++ b/library/Class/Template.php @@ -40,7 +40,7 @@ class Class_Template { public function __call($name, $params) { if (!$settings = $this->getSettings()) - return parent::__call($name, $params); + return $this; if (preg_match('/(set)(\w+)/', $name, $matches)) { call_user_func([$settings, $name], $params[0]); diff --git a/library/templates/Intonation/Library/Widget/Carousel/View.php b/library/templates/Intonation/Library/Widget/Carousel/View.php index f0abc6b7df79e50c3b8e2254ceb0e924ff07d387..e261b25be35eed4c1d3e02d13ecae3a0801dac7f 100644 --- a/library/templates/Intonation/Library/Widget/Carousel/View.php +++ b/library/templates/Intonation/Library/Widget/Carousel/View.php @@ -28,6 +28,7 @@ abstract class Intonation_Library_Widget_Carousel_View extends Zendafi_View_Help Intonation_Library_Widget_Carousel_Definition::LISTING => 'Intonation_View_RenderList', Intonation_Library_Widget_Carousel_Definition::LISTING_WITH_OPTIONS => 'Intonation_View_RenderTruncateList', Intonation_Library_Widget_Carousel_Definition::HORIZONTAL_LISTING => 'Intonation_View_RenderHorizontalList', + Intonation_Library_Widget_Carousel_Definition::MULTIPLE_CAROUSEL => 'Intonation_View_RenderMultipleCarousel', Intonation_Library_Widget_Carousel_Definition::MULTIPLE_CAROUSEL_PLUS => 'Intonation_View_RenderMultipleCarousel', Intonation_Library_Widget_Carousel_Definition::GRID => 'Intonation_View_RenderWallGrid', Intonation_Library_Widget_Carousel_Definition::MAP => 'Intonation_View_RenderMap', @@ -59,7 +60,8 @@ abstract class Intonation_Library_Widget_Carousel_View extends Zendafi_View_Help protected function _renderHeadScriptsOn($script_loader) { - $this->_getLayoutHelper()->renderHeadScriptsOn($script_loader); + $this->_getLayoutHelper($this->_settings->getLayout()) + ->renderHeadScriptsOn($script_loader); } @@ -197,9 +199,7 @@ abstract class Intonation_Library_Widget_Carousel_View extends Zendafi_View_Help } - protected function _getLayoutHelperClass() { - $layout = $this->_settings->getLayout(); - + protected function _getLayoutHelperClass($layout) { if ($renderer = Class_Template::current()->getCarouselRenderer($layout)) return $renderer; @@ -210,28 +210,32 @@ abstract class Intonation_Library_Widget_Carousel_View extends Zendafi_View_Help } - protected function _getLayoutHelper() { + protected function _getLayoutHelper($layout) { if ($this->_layout_helper) return $this->_layout_helper; - $helper_class = $this->_getLayoutHelperClass(); + $helper_class = $this->_getLayoutHelperClass($layout); $this->_layout_helper = new $helper_class(); $this->_layout_helper->setView($this->view); - if (in_array($this->_settings->getLayout(), + if (in_array($layout, [Intonation_Library_Widget_Carousel_Definition::MAP, Intonation_Library_Widget_Carousel_Definition::WALL, Intonation_Library_Widget_Carousel_Definition::GRID])) $this->_layout_helper->setIdModule($this->id_module); + if ($layout === Intonation_Library_Widget_Carousel_Definition::MULTIPLE_CAROUSEL) + $this->_layout_helper->setNumberOfColumns(3); + return $this->_layout_helper; } protected function _renderLayout($layout, $elements, $content_callback) { - $helper_func = array_reverse(explode('_', get_class($this->_getLayoutHelper())))[0]; - return call_user_func_array([$this->_getLayoutHelper(), + $layout_helper = $this->_getLayoutHelper($layout); + $helper_func = array_reverse(explode('_', get_class($layout_helper)))[0]; + return call_user_func_array([$layout_helper, $helper_func], [new Storm_Collection($elements), diff --git a/library/templates/Intonation/View/LibrariesWidget.php b/library/templates/Intonation/View/LibrariesWidget.php index b34538ecfb9d18135549dea2bd3349d0952c250f..28db3f621871e0f944dc58b06e9181dfdbdf6562 100644 --- a/library/templates/Intonation/View/LibrariesWidget.php +++ b/library/templates/Intonation/View/LibrariesWidget.php @@ -100,7 +100,7 @@ class Intonation_View_LibrariesWidget extends ZendAfi_View_Helper_BaseHelper { $order = ($order == Class_Systeme_ModulesAccueil_Library::ORDER_ALPHA) ? 'libelle' - : 'FIELD (id_site, ' . implode($id_libraries, ',') . ')'; + : 'FIELD (id_site, ' . implode(',', $id_libraries) . ')'; return Class_Bib::findAllBy(['id_site' => $id_libraries, 'order' => $order]); diff --git a/library/templates/Intonation/View/RenderList.php b/library/templates/Intonation/View/RenderList.php index 79ec4479bd553f0b41a6a1bc76d7140206875e49..570656ddf9e870c8010e1627c7fba3832c25b7bc 100644 --- a/library/templates/Intonation/View/RenderList.php +++ b/library/templates/Intonation/View/RenderList.php @@ -22,6 +22,11 @@ class Intonation_View_RenderList extends ZendAfi_View_Helper_BaseHelper { + public function setIdModule() { + return $this; + } + + public function renderList($collection, $callback) { if ($collection->isEmpty()) return ''; diff --git a/library/templates/Intonation/View/RenderMultipleCarousel.php b/library/templates/Intonation/View/RenderMultipleCarousel.php index a55633d7dbc23a1167194fc2e2dadaecc9cd9988..7202862ce650b9ff259fc2b1a01fe3a355fe9b5d 100644 --- a/library/templates/Intonation/View/RenderMultipleCarousel.php +++ b/library/templates/Intonation/View/RenderMultipleCarousel.php @@ -21,12 +21,16 @@ class Intonation_View_RenderMultipleCarousel extends Intonation_View_Abstract_Carousel { + protected $_columns = 5; - protected $_columns; + public function renderMultipleCarousel($collection, $callback) { + return $this->_renderCarousel($collection, $callback); + } - public function renderMultipleCarousel($collection, $callback, $columns = 5) { + + public function setNumberOfColumns($columns) { $this->_columns = $columns; - return $this->_renderCarousel($collection, $callback); + return $this; } diff --git a/tests/scenarios/Templates/TemplatesArticlesTest.php b/tests/scenarios/Templates/TemplatesArticlesTest.php index 189316d3a43303ee6351773100acf297d9f8edc4..d430f8ed19ad61e9dd9c5f67a9e03c54cdbe8546 100644 --- a/tests/scenarios/Templates/TemplatesArticlesTest.php +++ b/tests/scenarios/Templates/TemplatesArticlesTest.php @@ -21,20 +21,82 @@ require_once('TemplatesTest.php'); -class TemplatesArticlesWidgetTest extends TemplatesIntonationTestCase { + +abstract class TemplatesArticlesWidgetTestCase extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + + + public function setUp() { + parent::setUp(); + + $this->_buildTemplateProfil(['id' => 1, + 'libelle' => 'My page']) + ->setBoiteOfTypeInDivision(2, + Intonation_Library_Widget_Carousel_Article_Definition::CODE, + ['all_layout' => Intonation_Library_Widget_Carousel_Definition::LISTING]) + ->assertSave(); + + $this->fixture('Class_Article', + ['id' => 4, + 'titre' => 'Winter', + 'contenu' => '<p>is ...</p>']); + + $this->fixture('Class_Article', + ['id' => 6, + 'titre' => 'Sprechen Sie Deutsch ?', + 'contenu' => '<p>Ich ...</p>']); + + $this->fixture('Class_Article', + ['id' => 7, + 'titre' => 'Parlez-vous français ?', + 'contenu' => '<p>Une b...</p>', + 'events_debut' => '2020-03-13 00:00:00', + 'events_fin' => '2020-07-31 00:00:00', + 'all_day' => 1]); + } +} + + + + +class TemplatesArticlesRenderAllTest extends TemplatesArticlesWidgetTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch('/widget/render-all/profile_id/1/widget_id/1'); + } + + + /** @test */ + public function pageShouldContainsWinterInListGroup() { + $this->assertXPathContentContains('//div[contains(@class, "list-group")]//div[contains(@class, "card-title")]', 'Winter', $this->_response->getBody()); + } +} + + + + +class TemplatesArticlesEditWidgetTest extends TemplatesArticlesWidgetTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch('/admin/widget/edit-widget/id/1/id_profil/1'); + } + /** @test */ public function editArticlesWidgetShouldContainsSelection() { - $this->dispatch('/admin/widget/edit-widget/id/18/id_profil/72', true); $this->assertXpath('//select[@name="order"]//option[@value="Selection"]'); } +} - /** @test */ - public function dispatchFrontShouldContainsSprechenSieDeutsh() { + + +class TemplatesArticlesWidgetTest extends TemplatesArticlesWidgetTestCase { + public function setUp() { + parent::setUp(); $widget = ((new Class_Systeme_Widget_Widget) - ->setId(18) - ->setProfileId(72) + ->setId(1) + ->setProfileId(1) ->load()); $widget ->setNewDatas(['order' => 'Selection', @@ -46,50 +108,29 @@ class TemplatesArticlesWidgetTest extends TemplatesIntonationTestCase { 'layout' => 'multiple_carousel']) ->updateProfile(); - $winter = $this->fixture('Class_Article', - ['id' => 4, - 'titre' => 'Winter', - 'contenu' => '<p>is ...</p>']); - - $deutsch = $this->fixture('Class_Article', - ['id' => 6, - 'titre' => 'Sprechen Sie Deutsch ?', - 'contenu' => '<p>Ich ...</p>']); - - $bar = $this->fixture('Class_Article', - ['id' => 7, - 'titre' => 'Bar', - 'contenu' => '<p>Une b...</p>']); - $this ->onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') - ->answers([$winter, - $deutsch, - $bar]); + ->answers(Class_Article::findAllBy(['id_article' => [4, 6, 7]])); - $this->dispatch('/opac/index/index/id_profil/72', true); + $this->dispatch('/opac/index/index/id_profil/1', true); + } + + + /** @test */ + public function dispatchFrontShouldContainsSprechenSieDeutsh() { $this->assertXPathContentContains('//div', 'Sprechen Sie Deutsch ?'); } } -class TemplatesArticlesCmsListActionTest extends TemplatesIntonationTestCase { + +class TemplatesArticlesCmsListActionTest extends TemplatesArticlesWidgetTestCase { /** @test */ public function dispatchShouldRenderSprechenSieDeutsh() { - $this->fixture('Class_Article', - ['id' => 6, - 'titre' => 'Sprechen Sie Deutsch ?', - 'contenu' => '<p>Ich ...</p>']); - - $this->fixture('Class_Article', - ['id' => 7, - 'titre' => 'Parlez-vous français ?', - 'contenu' => '<p>Une b...</p>']); - - $this->dispatch('/opac/cms/list/title/language/articles/7-6/id_profil/72', true); + $this->dispatch('/opac/cms/list/title/language/articles/7-6/id_profil/1', true); $this->assertXPathContentContains('//main//div', 'Parlez-vous français ?'); } } @@ -97,18 +138,10 @@ class TemplatesArticlesCmsListActionTest extends TemplatesIntonationTestCase { -class TemplatesArticlesCmsArticleViewTest extends TemplatesIntonationTestCase { +class TemplatesArticlesCmsArticleViewTest extends TemplatesArticlesWidgetTestCase { public function setUp() { parent::setUp(); - $this->fixture('Class_Article', - ['id' => 7, - 'titre' => 'Parlez-vous français ?', - 'contenu' => '<p>Une b...</p>', - 'events_debut' => '2020-03-13 00:00:00', - 'events_fin' => '2020-07-31 00:00:00', - 'all_day' => 1]); - - $this->dispatch('/opac/cms/articleview/id/7/id_profil/72'); + $this->dispatch('/opac/cms/articleview/id/7/id_profil/1'); } @@ -139,23 +172,17 @@ class TemplatesArticlesCmsArticleViewTest extends TemplatesIntonationTestCase { -class TemplatesArticlesCmsArticleViewWithHiddenTitleTest extends TemplatesIntonationTestCase { +class TemplatesArticlesCmsArticleViewWithHiddenTitleTest extends TemplatesArticlesWidgetTestCase { public function setUp() { parent::setUp(); - $this->fixture('Class_Article', - ['id' => 7, - 'titre' => 'Parlez-vous français ?', - 'cacher_titre' => 1, - 'contenu' => '<p>Une b...</p>', - 'events_debut' => '2020-03-13 00:00:00', - 'events_fin' => '2020-07-31 00:00:00', - 'all_day' => 1, - 'auteur' => $this->fixture('Class_Users', - ['id' => 88393, - 'login' => 'Harlock', - 'password' => 'Arc4di4 for 3v3r'])]); - - $this->dispatch('/opac/cms/articleview/id/7/id_profil/72'); + Class_Article::find(7) + ->setCacherTitre(1) + ->setAuteur($this->fixture('Class_Users', + ['id' => 88393, + 'login' => 'Harlock', + 'password' => 'Arc4di4 for 3v3r'])); + + $this->dispatch('/opac/cms/articleview/id/7/id_profil/1'); } @@ -174,7 +201,7 @@ class TemplatesArticlesCmsArticleViewWithHiddenTitleTest extends TemplatesIntona -abstract class TemplatesArticlesWithLocationTestCase extends TemplatesIntonationTestCase { +abstract class TemplatesArticlesWithLocationTestCase extends TemplatesArticlesWidgetTestCase { public function setUp() { parent::setUp(); $annecy = $this->fixture('Class_Lieu', @@ -188,15 +215,8 @@ abstract class TemplatesArticlesWithLocationTestCase extends TemplatesIntonation 'longitude' => '6.1459837']); - $this->fixture('Class_Article', - ['id' => 7, - 'titre' => 'Parlez-vous français ?', - 'contenu' => '<p>Une b...</p>', - 'events_debut' => '2020-03-13 00:00:00', - 'events_fin' => '2020-07-31 00:00:00', - 'lieu' => $annecy, - 'all_day' => 1]); - + Class_Article::find(7) + ->setLieu($annecy); $lost_location = $this->fixture('Class_Lieu', ['id' => '9283', @@ -210,9 +230,6 @@ abstract class TemplatesArticlesWithLocationTestCase extends TemplatesIntonation 'titre' => 'Lost in translation', 'contenu' => 'with Bill', 'lieu' => $lost_location]); - - - $this->dispatch('/opac/cms/articleview/id/7/id_profil/72'); } } @@ -222,7 +239,7 @@ abstract class TemplatesArticlesWithLocationTestCase extends TemplatesIntonation class TemplatesArticlesWithLocationViewTest extends TemplatesArticlesWithLocationTestCase { public function setUp() { parent::setUp(); - $this->dispatch('/opac/cms/articleview/id/7/id_profil/72'); + $this->dispatch('/opac/cms/articleview/id/7/id_profil/1'); } @@ -264,15 +281,15 @@ class TemplatesArticlesMapTest extends TemplatesArticlesWithLocationTestCase { Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Article') ->whenCalled('getArticlesByPreferences') ->answers([Class_Article::find(7), Class_Article::find(8)]); - $this->_buildTemplateProfil(['id' => 3, - 'libelle' => 'Explore']) - ->setBoiteOfTypeInDivision(2, + + Class_Profil::find(1) + ->setBoiteOfTypeInDivision(3, Intonation_Library_Widget_Carousel_Article_Definition::CODE, ['layout' => Intonation_Library_Widget_Carousel_Definition::MAP, 'titre' => 'event map', 'id_items' => '7;8']) ->assertSave(); - $this->dispatch('/opac/index/index/id_profil/3'); + $this->dispatch('/opac/index/index/id_profil/1'); } diff --git a/tests/scenarios/Templates/TemplatesLibraryTest.php b/tests/scenarios/Templates/TemplatesLibraryTest.php index 1a63e59b03caf15c44b7f13070382c50a1a2eedc..65d13e3507e69979322580f3d506b1b895771363 100644 --- a/tests/scenarios/Templates/TemplatesLibraryTest.php +++ b/tests/scenarios/Templates/TemplatesLibraryTest.php @@ -21,9 +21,20 @@ require_once('TemplatesTest.php'); -class TemplatesLibraryReadMoreTest extends TemplatesIntonationTestCase { +abstract class TemplatesLibraryTestCase extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + + public function setUp() { parent::setUp(); + Class_AdminVar::set('FEATURES_TRACKING_ENABLE', 0); + + $this->_buildTemplateProfil(['id' => 1, + 'libelle' => 'My page']) + ->setBoiteOfTypeInDivision(2, + Intonation_Library_Widget_Carousel_Library_Definition::CODE, + ['layout' => Intonation_Library_Widget_Carousel_Definition::MULTIPLE_CAROUSEL]) + ->assertSave(); $this->fixture('Class_Bib', ['id' => 1, @@ -40,7 +51,67 @@ class TemplatesLibraryReadMoreTest extends TemplatesIntonationTestCase { 'libelle' => 'Seynod', 'visibilite' => Class_Bib::V_NODATA]); - $this->dispatch('/opac/bib/en-lire-plus/id/1/id_profil/72', true); + + $this->fixture('Class_Bib', + ['id' => 4, + 'libelle' => 'Meythet', + 'visibilite' => Class_Bib::V_DATA]); + + + $this->fixture('Class_Bib', + ['id' => 5, + 'libelle' => 'Pringy', + 'visibilite' => Class_Bib::V_DATA]); + } +} + + + + +class TemplatesLibraryWidgetWithCarouselThreeColumnsTest extends TemplatesLibraryTestCase { + public function setUp() { + parent::setUp(); + + $this->dispatch('/opac/index/index/id_profil/1', true); + } + + + /** @test */ + public function cardGridShouldContainsThreeCard() { + $this->assertXPathCount('//div[contains(@class, "carousel-item active")]//div[contains(@class, "card text-center")]', 3); + } +} + + + + +class TemplatesLibraryWidgetWithCarouselFiveColumnsTest extends TemplatesLibraryTestCase { + public function setUp() { + parent::setUp(); + Class_Profil::find(1) + ->updateModuleConfigAccueil(1, + ['division' => 2, + 'type_module' => Intonation_Library_Widget_Carousel_Library_Definition::CODE, + 'preferences' => ['layout' => Intonation_Library_Widget_Carousel_Definition::MULTIPLE_CAROUSEL_PLUS]]); + + $this->dispatch('/opac/index/index/id_profil/1', true); + } + + + /** @test */ + public function cardGridShouldContainsFiveCards() { + $this->assertXPathCount('//div[contains(@class, "carousel-item active")]//div[contains(@class, "card text-center")]', 5); + } +} + + + + +class TemplatesLibraryReadMoreTest extends TemplatesLibraryTestCase { + public function setUp() { + parent::setUp(); + + $this->dispatch('/opac/bib/en-lire-plus/id/1/id_profil/1', true); } @@ -57,7 +128,7 @@ class TemplatesLibraryReadMoreTest extends TemplatesIntonationTestCase { /** @test */ - public function pageShouldContainsLinkToReadMoreSeynod() { - $this->assertXPath('//a[contains(@class, "next")][contains(@href, "/bib/en-lire-plus/id/3")]', $this->_response->getBody()); + public function pageShouldContainsLinkToReadMoreMeythet() { + $this->assertXPath('//a[contains(@class, "next")][contains(@href, "/bib/en-lire-plus/id/4")]'); } }