Skip to content
Snippets Groups Projects
Commit 8ca53ce5 authored by Sebastien ANDRE's avatar Sebastien ANDRE
Browse files

Merge branch 'hotline#115655_regression_magasin_themes' into 'hotline'

hotline #115655 Fix regression in render all_layout

See merge request !3606
parents 0113e1c1 79b7fae0
Branches
Tags
1 merge request!3606hotline #115655 Fix regression in render all_layout
Pipeline #10882 passed with stage
in 53 minutes and 30 seconds
- 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
......@@ -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]);
......
......@@ -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),
......
......@@ -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]);
......
......@@ -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 '';
......
......@@ -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;
}
......
......@@ -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');
}
......
......@@ -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")]');
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment