diff --git a/VERSIONS_HOTLINE/81938 b/VERSIONS_HOTLINE/81938 new file mode 100644 index 0000000000000000000000000000000000000000..9aec972842018e8a5b0a8f0f5bb3eb16cef68053 --- /dev/null +++ b/VERSIONS_HOTLINE/81938 @@ -0,0 +1 @@ + - ticket #81938 : correction de la sauvegarde du paramétrage des boîtes qui pouvait échouer dans certaines conditions \ No newline at end of file diff --git a/application/modules/admin/controllers/WidgetController.php b/application/modules/admin/controllers/WidgetController.php index 0a9c04a448831efa0389abae51eaed4bfbe5fb29..80b10fd72d86901fbb2d4870509e245644f2f34d 100644 --- a/application/modules/admin/controllers/WidgetController.php +++ b/application/modules/admin/controllers/WidgetController.php @@ -301,6 +301,4 @@ class Admin_WidgetController extends ZendAfi_Controller_Action { public function formProvider($widget) { return call_user_func_array([$widget->getForm(), 'newWith'], [$widget->forForm()]); } - - } \ No newline at end of file diff --git a/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php b/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php index a52e8129bc35fcf93e66e4b8199a24386e510707..206b9ea4df6da90c64aa0d4a77a314dd454ef277 100644 --- a/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php +++ b/library/Class/Systeme/ModulesAccueil/ConteneurDeuxColonnes.php @@ -42,7 +42,7 @@ class Class_Systeme_ModulesAccueil_ConteneurDeuxColonnes extends Class_Systeme_M public function updateHook($datas) { foreach(['gauche', 'droite'] as $column) { $key = 'col_' . $column .'_module_id'; - $datas [$key] = $datas['preferences'][$key] = static::createModuleForCol($column, $datas, $datas['id_module'], $datas['profile_id']); + $datas [$key] = $datas['preferences'][$key] = static::createModuleForCol($column, $datas['preferences'], $datas['id_module'], $datas['profile_id']); } return $datas; diff --git a/library/Class/Systeme/ModulesAccueil/Library.php b/library/Class/Systeme/ModulesAccueil/Library.php index 7837bc98d32534be125fdb46edaebf3ddfaff4a9..3e21bc8a629ed9b9d22375842dfe37ea6a407638 100644 --- a/library/Class/Systeme/ModulesAccueil/Library.php +++ b/library/Class/Systeme/ModulesAccueil/Library.php @@ -145,9 +145,9 @@ class Class_Systeme_ModulesAccueil_Library extends Class_Systeme_ModulesAccueil_ public function updateHook($datas) { - if(array_key_exists('default_filters', $datas) - && (!is_array($datas['default_filters']))) - $datas['default_filters'] = []; + if (array_key_exists('default_filters', $datas['preferences']) + && (!is_array($datas['preferences']['default_filters']))) + $datas['preferences']['default_filters'] = []; return $datas; } diff --git a/library/Class/Systeme/ModulesAccueil/MenuVertical.php b/library/Class/Systeme/ModulesAccueil/MenuVertical.php index 28ea39b9f5edcc309dd1d79060a422c283bbcdd2..4b1b0b8e7bfda1531ad8cf972b4eeb84203c503c 100644 --- a/library/Class/Systeme/ModulesAccueil/MenuVertical.php +++ b/library/Class/Systeme/ModulesAccueil/MenuVertical.php @@ -61,13 +61,13 @@ class Class_Systeme_ModulesAccueil_MenuVertical extends Class_Systeme_ModulesAcc public function updateHook($datas) { - if(!isset($datas['menu'])) + if(!isset($datas['preferences']['menu'])) return $datas; - if(static::NEW_MENU != $datas['menu']) + if(static::NEW_MENU != $datas['preferences']['menu']) return $datas; - $datas['menu'] = $this->_prefixMenu($this->addMenu()); + $datas['preferences']['menu'] = $this->_prefixMenu($this->addMenu()); return $datas; } diff --git a/library/Class/Systeme/ModulesAccueil/Sitotheque.php b/library/Class/Systeme/ModulesAccueil/Sitotheque.php index 3f41408f033249788b7753ac6e5cafd98f9dafbb..b5d39244ed0f5953842a72579431118b7f35efd6 100644 --- a/library/Class/Systeme/ModulesAccueil/Sitotheque.php +++ b/library/Class/Systeme/ModulesAccueil/Sitotheque.php @@ -52,11 +52,11 @@ class Class_Systeme_ModulesAccueil_Sitotheque extends Class_Systeme_ModulesAccue public function updateHook($datas) { - if(static::DISPLAY_HIERARCHY != $datas['type_aff']) + if(static::DISPLAY_HIERARCHY != $datas['preferences']['type_aff']) return $datas; - if ($categories = explode('-', $datas['id_categorie'])) - $datas['preferences']['id_categorie'] = $datas['id_categorie'] = $categories[0]; + if ($categories = explode('-', $datas['preferences']['id_categorie'])) + $datas['preferences']['id_categorie'] = $categories[0]; return $datas; } diff --git a/library/Class/Systeme/ModulesAccueil/Tags.php b/library/Class/Systeme/ModulesAccueil/Tags.php index 930af4938f96ce7dcba498dbb862cf8b3ba50a7c..f9938870661acaa2f2d5196c9a7ccd0a223691a8 100644 --- a/library/Class/Systeme/ModulesAccueil/Tags.php +++ b/library/Class/Systeme/ModulesAccueil/Tags.php @@ -41,4 +41,13 @@ class Class_Systeme_ModulesAccueil_Tags extends Class_Systeme_ModulesAccueil_Nul 'id_panier' => 0, 'id_catalogue' => 0]; } + + + public function updateHook($datas) { + if (isset($datas['preferences']['type_tags_codes'])) { + $datas['preferences']['type_tags'] = str_replace(';', '', $datas['preferences']['type_tags_codes']); + unset($datas['preferences']['type_tags_codes']); + } + return $datas; + } } \ No newline at end of file diff --git a/library/Class/Systeme/Widget/Abstract.php b/library/Class/Systeme/Widget/Abstract.php index 61f19d4081d3ab7ee39eafa6457b7177474330c3..676850e689d3a66565ca99ae1c0e7c2ee1c06bcc 100644 --- a/library/Class/Systeme/Widget/Abstract.php +++ b/library/Class/Systeme/Widget/Abstract.php @@ -89,10 +89,10 @@ abstract class Class_Systeme_Widget_Abstract extends Class_Entity { protected function _getValues($attributes) { return $this->_getWidgetResources() - ->getValues(array_merge(isset($attributes['preferences']) + ->getValues(array_merge($attributes, + isset($attributes['preferences']) ? $attributes['preferences'] - : [], - $attributes)); + : [])); } diff --git a/library/Class/Systeme/Widget/Widget.php b/library/Class/Systeme/Widget/Widget.php index 6a9fafd25d0367d27994dfefc9359fa30d18b6a5..7b8e5861773edfaeb6469d159c4f669ca4969a31 100644 --- a/library/Class/Systeme/Widget/Widget.php +++ b/library/Class/Systeme/Widget/Widget.php @@ -36,16 +36,34 @@ class Class_Systeme_Widget_Widget extends Class_Systeme_Widget_Abstract { } + protected function _cleanRootAndPreferences($datas) { + $root_properties = ['type_module' => '', + 'division' => '', + 'id_module' => '', + 'preferences' => '', + 'parent_id' => '', + 'type_menu' => '', + 'libelle' => '', + 'picto' => '', + 'sous_menus' => []]; + + + $cleaned_datas = array_intersect_key($datas, $root_properties); + $cleaned_datas['preferences'] = array_diff_key($datas, + $root_properties); + return $cleaned_datas; + } + + protected function _update() { - $datas = array_merge($this->getLocalSettings(), - $this->getNewDatas()); + $cleaned_datas = $this->_cleanRootAndPreferences( + array_merge($this->getLocalSettings(), + $this->getNewDatas())); + - if(isset($datas['preferences'])) - unset($datas['preferences']); + $cleaned_datas['profile_id'] = $this->getProfileId(); + $datas = $this->_getWidgetResources()->updateHook($cleaned_datas); - $datas['preferences'] = $datas; - $datas['profile_id'] = $this->getProfileId(); - $datas = $this->_getWidgetResources()->updateHook($datas); $sub_menus = null; if(isset($datas['children'])) $sub_menus = $this->_convertChildren($datas['children']); diff --git a/tests/application/modules/admin/controllers/WidgetControllerTest.php b/tests/application/modules/admin/controllers/WidgetControllerTest.php index 5452e33a311418df119771ab3dad01ccb90fd959..7dd268c2008a76ccf81c0d9c3d60f35a5113fdf9 100644 --- a/tests/application/modules/admin/controllers/WidgetControllerTest.php +++ b/tests/application/modules/admin/controllers/WidgetControllerTest.php @@ -233,13 +233,13 @@ class WidgetControllerKioquePostTest extends WidgetControllerPostDispatchWidgetC /** @test */ public function titleShouldBeTitreDuKiosque() { - $this->assertEquals('titre du /kiosque', $this->_saved_settings['titre']); + $this->assertEquals('titre du /kiosque', $this->_saved_settings['preferences']['titre']); } /** @test */ public function profilRedirectShouldBeTwelve() { - $this->assertEquals('12', $this->_saved_settings['profil_redirect']); + $this->assertEquals('12', $this->_saved_settings['preferences']['profil_redirect']); } } @@ -759,21 +759,6 @@ class WidgetControllerVerticalNavDispatchWithMenuFromOtherTest extends WidgetCon -class WidgetControllerTagsDispatchTest extends WidgetControllerDispatchWidgetConfigurationTestCase { - public function setUp() { - $this->_type_module = 'TAGS'; - parent::setUp(); - } - - - /** @test */ - public function tagSelectionChampsShouldBePresent() { - $this->assertXPathContentContains('//h2', 'Facettes disponibles'); - } -} - - - class WidgetControllerLoginDispatchTest extends WidgetControllerDispatchWidgetConfigurationTestCase { public function setUp() { @@ -959,6 +944,85 @@ class WidgetControllerActivitiesPostDispatchTest extends WidgetControllerPostDis +class WidgetControllerTagsDispatchTest extends WidgetControllerDispatchWidgetConfigurationTestCase { + public function _stormHook() { + $tags = ['modules' => ['6' => ['division' => 3, + 'id_module' => '6', + 'type_module' => 'TAGS', + 'type_tags' => 'AMDPZ', + 'nombre' => 40, + 'preferences' => ['type_tags' => 'AM', + 'titre' => 'Des tags', + 'nombre' => 10]]]]; + $this + ->_profil + ->setCfgAccueil($tags) + ->assertSave(); + } + + + /** @test */ + public function tagSelectionChampsShouldBePresent() { + $this->assertXPathContentContains('//h2', 'Facettes disponibles'); + } + + + /** @test */ + public function inputTitreShouldContainsDesTags() { + $this->assertXPath('//input[@name="titre"][@value="Des tags"]'); + } + + + /** @test */ + public function inputTypeTagsCodesShouldContainsAandM() { + $this->assertXPath('//input[@name="type_tags_codes"][@value="A;M"]'); + } + + + /** @test */ + public function inputNombreShouldHaveValueTen() { + $this->assertXPath('//input[@name="nombre"][@value="10"]'); + } +} + + + + +class WidgetControllerTagsPostDispatchTest extends WidgetControllerPostDispatchWidgetConfigurationTestCase { + public function setUp() { + $this->_type_module = 'TAGS'; + $this->_params = ['type_tags_codes' => 'A;M;S']; + parent::setUp(); + } + + + /** @test */ + public function typeTagsAMSShouldHaveBeenSaved() { + $this->assertEquals('AMS', $this->_saved_settings['preferences']['type_tags']); + } + + + /** @test */ + public function typeTagsCodesAMSShouldHaveBeenRemovedFromPreferences() { + $this->assertFalse(isset($this->_saved_settings['preferences']['type_tags_codes'])); + } + + + /** @test */ + public function typeTagsCodesAMSShouldHaveBeenRemovedFromParams() { + $this->assertFalse(isset($this->_saved_settings['type_tags'])); + } + + + /** @test */ + public function preferencesShouldNotContainsDivision() { + $this->assertFalse(isset($this->_saved_settings['preferences']['division'])); + } +} + + + + abstract class WidgetControllerTwoWidgetsTestCase extends WidgetControllerWidgetConfigurationTestCase { public function setUp() { @@ -1552,13 +1616,13 @@ class WidgetControllerLoginPostDispatchTest extends WidgetControllerPostDispatch /** @test */ public function profilRedirectShouldBe678() { - $this->assertEquals(678, $this->_saved_settings['profil_redirect']); + $this->assertEquals(678, $this->_saved_settings['preferences']['profil_redirect']); } /** @test */ public function profilLogoutRedirectShouldBe345() { - $this->assertEquals(345, $this->_saved_settings['profil_logout_redirect']); + $this->assertEquals(345, $this->_saved_settings['preferences']['profil_logout_redirect']); } @@ -1881,23 +1945,18 @@ class WidgetControllerDomainBrowserPostDispatchTest extends WidgetControllerPost /** @test */ public function paramsShouldHaveBeenSaved() { - $this->assertEquals(array_merge($this->_params, - ['boite' => '', - 'division' => '3', - 'id_module' => '6', - 'type_module' => 'DOMAIN_BROWSER', - 'preferences' => ['titre' => 'Mes Domaines', - 'allow_breadcrumb' => '0', - 'root_domain_id' => '10', - 'display_mode' => '4', - 'boite' => '', - 'division' => '3', - 'id_module' => '6', - 'type_module' => 'DOMAIN_BROWSER', - 'profile_id' => '5', - 'tri' => 'annee desc'], - 'profile_id' => '5', - 'tri' => 'annee desc']), + $this->assertEquals(['division' => '3', + 'id_module' => '6', + 'type_module' => 'DOMAIN_BROWSER', + 'preferences' => ['titre' => 'Mes Domaines', + 'allow_breadcrumb' => '0', + 'root_domain_id' => '10', + 'display_mode' => '4', + 'profile_id' => '5', + 'tri' => 'annee desc', + 'boite' => '', + ], + 'profile_id' => '5'], $this->_saved_settings); } } @@ -2318,7 +2377,7 @@ class WidgetControllerWidgetAddWidgetFromTemplateTest extends WidgetControllerWi /** @test */ public function opTimeoutShouldBeSix() { $this->assertEquals(6, - $this->_module_config['op_timeout']); + $this->_module_config['preferences']['op_timeout']); } } diff --git a/tests/scenarios/Widgets/WidgetsTest.php b/tests/scenarios/Widgets/WidgetsTest.php index 89e8cb11ad9fa2c8bca0a36dd15af02a072cf9e6..01b776a4ec7d4a12e23eb81cd9c506e038edd1f6 100644 --- a/tests/scenarios/Widgets/WidgetsTest.php +++ b/tests/scenarios/Widgets/WidgetsTest.php @@ -483,8 +483,8 @@ class WidgetsPostEditVerticalMenuTest extends WidgetsSimpleTestCase { /** @test */ - public function newMenuIdShouldHaveBeenSetInMenuVerticalSettongs() { - $this->assertEquals('2-0', Class_Profil::getCurrentProfil()->getCfgAccueilAsArray()['modules'][6]['menu']); + public function newMenuIdShouldHaveBeenSetInMenuVerticalSettings() { + $this->assertEquals('2-0', Class_Profil::getCurrentProfil()->getCfgAccueilAsArray()['modules'][6]['preferences']['menu']); }