From 5d363b89ef81e739947546920e81509e83046c3e Mon Sep 17 00:00:00 2001
From: Patrick Barroca <pbarroca@afi-sa.fr>
Date: Fri, 11 Oct 2019 15:44:46 +0200
Subject: [PATCH] hotline #98351 : fix 2 cols widget lost configuration on
 adding a new widget to page

---
 VERSIONS_HOTLINE/98351                        |  1 +
 library/Class/Profil.php                      | 10 ++-
 .../controllers/WidgetControllerTest.php      | 86 +++++++++++++++++++
 3 files changed, 93 insertions(+), 4 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/98351

diff --git a/VERSIONS_HOTLINE/98351 b/VERSIONS_HOTLINE/98351
new file mode 100644
index 00000000000..97705216caf
--- /dev/null
+++ b/VERSIONS_HOTLINE/98351
@@ -0,0 +1 @@
+ - ticket #98351 : Profils : Correction de la perte de configuration des boîtes 2 colonnes lors de l'ajout d'une autre boîte dans la page.
\ No newline at end of file
diff --git a/library/Class/Profil.php b/library/Class/Profil.php
index ad65d8b2a26..036ba9aad33 100644
--- a/library/Class/Profil.php
+++ b/library/Class/Profil.php
@@ -806,13 +806,13 @@ class Class_Profil extends Storm_Model_Abstract {
 
     $module = array_merge($module, $modules_config[$id_module]);
 
-
     $default_prefs = Class_Systeme_ModulesAccueil::getInstance()
       ->getValeursParDefaut($module['type_module']);
     $default_prefs = array_merge($default_prefs, ['id_module' => $id_module]);
 
-    $module['preferences'] = (!array_isset('preferences', $module)) ?
-      $default_prefs : array_merge($default_prefs, $module['preferences']);
+    $module['preferences'] = (!array_isset('preferences', $module))
+      ? $default_prefs
+      : array_merge($default_prefs, $module['preferences']);
 
     return $module;
   }
@@ -2071,8 +2071,10 @@ class Class_Profil extends Storm_Model_Abstract {
     $new_modules = [];
     $i = 0;
     foreach($cfg_accueil['modules'] as $module_id => $module) {
-      if (!isset($module['division']))
+      if (!isset($module['division'])) {
+        $new_modules[$module_id] = $module;
         continue;
+      }
 
       $in_new_div = $module['division'] == $new_div;
 
diff --git a/tests/application/modules/admin/controllers/WidgetControllerTest.php b/tests/application/modules/admin/controllers/WidgetControllerTest.php
index 55839256bf7..ef8beb6ee6f 100644
--- a/tests/application/modules/admin/controllers/WidgetControllerTest.php
+++ b/tests/application/modules/admin/controllers/WidgetControllerTest.php
@@ -2681,3 +2681,89 @@ class WidgetControllerHorizontalMenuChangeLinkTextTest extends Admin_AbstractCon
     $this->assertCount(2, $menus['menus'][0]['sous_menus']);
   }
 }
+
+
+
+
+/** @see http://forge.afi-sa.fr/issues/98351 */
+class WidgetControllerAddActionWithExisting2Columns
+  extends WidgetControllerWidgetConfigurationTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $this->_profil
+      ->setCfgAccueil('a:4:{s:7:"modules";a:9:{i:1;a:6:{s:11:"type_module";s:23:"CONTENEUR_DEUX_COLONNES";s:11:"preferences";a:9:{s:5:"titre";s:0:"";s:15:"col_gauche_type";s:4:"NEWS";s:15:"col_droite_type";s:4:"NEWS";s:5:"boite";s:0:"";s:9:"id_module";s:1:"1";s:10:"profile_id";s:1:"1";s:20:"col_gauche_module_id";s:4:"1000";s:20:"col_droite_module_id";s:4:"1001";s:8:"id_items";s:12:"104-104-104-";}s:10:"profile_id";s:1:"1";s:8:"division";s:1:"1";s:20:"col_gauche_module_id";s:4:"1000";s:20:"col_droite_module_id";s:4:"1001";}i:4;a:3:{s:8:"division";s:1:"1";s:11:"type_module";s:8:"CALENDAR";s:11:"preferences";a:21:{s:5:"titre";s:14:"À vos agendas";s:12:"id_categorie";s:566:"33-287-303-229-323-235-341-347-241-242-245-383-247-389-249-251-253-254-425-257-259-261-263-265-267-454-472-484-508-515-268-271-569-272-275-276-279-281-634-283-285-729-289-291-293-295-297-299-301-821-828-840-858-864-305-307-309-233-813-359-353-364-371-377-395-401-407-412-419-882-430-437-442-449-890-896-460-467-479-902-490-496-503-521-526-533-539-544-550-556-562-574-581-586-593-599-604-610-617-622-629-642-648-655-661-667-673-679-735-741-746-753-759-765-771-777-783-788-914-893-795-801-806-905-834-846-852-869-723-715-709-703-697-691-685-311-926-936-942-948-954-960";s:18:"display_cat_select";s:1:"0";s:18:"display_event_info";s:3:"bib";s:8:"rss_avis";s:1:"0";s:9:"ical_feed";s:1:"0";s:18:"display_next_event";s:1:"1";s:13:"display_order";s:16:"DateCreationDesc";s:12:"display_mode";s:5:"Title";s:17:"display_full_page";s:1:"0";s:9:"nb_events";s:1:"3";s:16:"display_calendar";s:1:"0";s:14:"mode-affichage";s:4:"wall";s:6:"layout";s:4:"grid";s:12:"event_filter";s:4:"none";s:15:"enabled_filters";s:0:"";s:5:"boite";s:0:"";s:9:"id_module";s:1:"4";s:10:"profile_id";s:1:"1";s:8:"id_items";s:0:"";s:13:"styles_reload";s:1:"0";}}i:5;a:3:{s:8:"division";s:1:"1";s:11:"type_module";s:7:"KIOSQUE";s:11:"preferences";a:26:{s:5:"titre";s:21:"ça vient de sortir !";s:11:"style_liste";s:21:"mycarousel_horizontal";s:10:"nb_notices";s:3:"200";s:8:"only_img";s:1:"1";s:9:"aleatoire";s:1:"0";s:3:"tri";s:1:"1";s:10:"nb_analyse";s:2:"50";s:14:"op_hauteur_img";s:3:"150";s:13:"op_transition";s:4:"zoom";s:14:"op_largeur_img";s:3:"120";s:16:"op_hauteur_boite";s:2:"80";s:11:"op_captions";s:4:"true";s:11:"op_autoplay";s:5:"false";s:10:"op_visible";s:1:"0";s:8:"op_speed";s:3:"100";s:7:"op_auto";s:1:"0";s:9:"op_scroll";s:1:"1";s:8:"rss_avis";s:1:"0";s:12:"id_catalogue";s:2:"21";s:9:"id_panier";s:0:"";s:15:"profil_redirect";s:2:"34";s:5:"boite";s:0:"";s:9:"id_module";s:1:"5";s:10:"profile_id";s:1:"1";s:13:"styles_reload";s:1:"0";s:10:"op_hauteur";s:3:"600";}}i:9;a:3:{s:8:"division";s:1:"1";s:11:"type_module";s:14:"DOMAIN_BROWSER";s:11:"preferences";a:9:{s:5:"titre";s:60:"<a href="/index/index/id_profil/37">Pour aller plus loin</a>";s:16:"allow_breadcrumb";s:1:"0";s:14:"root_domain_id";s:3:"144";s:3:"tri";s:10:"annee desc";s:12:"display_mode";s:1:"4";s:5:"boite";s:0:"";s:9:"id_module";s:1:"9";s:10:"profile_id";s:1:"1";s:8:"id_items";s:0:"";}}i:3;a:3:{s:8:"division";s:1:"1";s:11:"type_module";s:9:"CRITIQUES";s:11:"preferences";a:14:{s:5:"titre";s:14:"Coups de cœur";s:11:"nb_aff_avis";s:1:"2";s:8:"nb_words";s:2:"50";s:13:"display_order";s:6:"Random";s:8:"rss_avis";s:1:"1";s:8:"only_img";s:1:"1";s:9:"id_panier";s:0:"";s:12:"id_catalogue";s:0:"";s:11:"abon_ou_bib";s:3:"all";s:3:"tri";s:1:"0";s:12:"hierarchical";s:1:"0";s:5:"boite";s:0:"";s:9:"id_module";s:1:"3";s:10:"profile_id";s:1:"1";}}i:2;a:3:{s:8:"division";s:1:"4";s:11:"type_module";s:5:"LOGIN";s:11:"preferences";a:20:{s:5:"titre";s:10:"Mon compte";s:14:"titre_connecte";s:0:"";s:11:"identifiant";s:11:"Identifiant";s:19:"identifiant_exemple";s:0:"";s:12:"mot_de_passe";s:12:"Mot de passe";s:20:"mot_de_passe_exemple";s:0:"";s:14:"lien_connexion";s:12:"Se connecter";s:24:"lien_mot_de_passe_oublie";s:47:"Mot de passe oublié ? <br>Changer mot de passe";s:17:"lien_creer_compte";s:16:"Créer un compte";s:16:"pre-registration";s:0:"";s:16:"message_connecte";s:9:"Bienvenue";s:11:"lien_compte";s:10:"Mon compte";s:17:"lien_deconnection";s:15:"Se déconnecter";s:16:"pre_registration";s:0:"";s:16:"autocomplete_off";s:1:"1";s:15:"profil_redirect";s:0:"";s:22:"profil_logout_redirect";s:0:"";s:5:"boite";s:20:"boite_login_banniere";s:9:"id_module";s:1:"2";s:10:"profile_id";s:1:"1";}}i:8;a:3:{s:8:"division";s:1:"4";s:11:"type_module";s:11:"RECH_SIMPLE";s:11:"preferences";a:20:{s:5:"titre";s:0:"";s:7:"message";s:29:"Cherchez, réservez, profitez";s:7:"exemple";s:0:"";s:10:"select_bib";s:1:"0";s:10:"select_doc";s:1:"0";s:13:"select_annexe";s:1:"0";s:7:"largeur";s:3:"300";s:17:"recherche_avancee";s:1:"1";s:8:"type_doc";s:0:"";s:3:"tri";s:1:"*";s:8:"in_files";s:1:"0";s:15:"profil_redirect";s:0:"";s:11:"placeholder";s:18:"Titre, auteur, etc";s:13:"search_button";s:0:"";s:10:"domain_ids";s:0:"";s:19:"domain_select_style";s:6:"select";s:5:"boite";s:21:"boite_banniere_gauche";s:9:"id_module";s:1:"8";s:10:"profile_id";s:1:"1";s:8:"id_items";s:0:"";}}i:1000;a:5:{s:11:"type_module";s:4:"NEWS";s:11:"preferences";a:23:{s:5:"titre";s:8:"A la une";s:6:"anchor";s:0:"";s:19:"allow_link_on_title";s:1:"0";s:8:"type_aff";s:1:"1";s:12:"id_categorie";s:0:"";s:8:"id_items";s:23:"555-627-631-580-400-634";s:6:"nb_aff";s:1:"1";s:10:"nb_analyse";s:1:"5";s:13:"display_order";s:9:"Selection";s:19:"display_titles_only";s:1:"0";s:8:"rss_avis";s:1:"1";s:14:"op_largeur_img";s:3:"200";s:6:"layout";s:4:"grid";s:16:"op_hauteur_boite";s:3:"400";s:5:"boite";s:0:"";s:10:"profile_id";s:1:"1";s:11:"style_liste";s:20:"diaporama_navigation";s:13:"styles_reload";s:1:"0";s:18:"op_navigation_mode";s:13:"next_previous";s:18:"op_navigation_unit";s:2:"px";s:26:"op_navigation_window_width";s:3:"580";s:27:"op_navigation_window_height";s:3:"325";s:19:"op_navigation_cycle";s:4:"4000";}s:9:"id_module";s:4:"1000";s:9:"parent_id";s:1:"1";s:10:"profile_id";s:1:"1";}i:1001;a:5:{s:11:"type_module";s:4:"NEWS";s:11:"preferences";a:18:{s:5:"titre";s:17:"Numérique 24h/24";s:6:"anchor";s:0:"";s:19:"allow_link_on_title";s:1:"1";s:8:"type_aff";s:1:"1";s:12:"id_categorie";s:0:"";s:8:"id_items";s:3:"207";s:6:"nb_aff";s:1:"1";s:10:"nb_analyse";s:1:"5";s:13:"display_order";s:9:"Selection";s:19:"display_titles_only";s:1:"0";s:8:"rss_avis";s:1:"0";s:14:"op_largeur_img";s:3:"200";s:6:"layout";s:4:"grid";s:16:"op_hauteur_boite";s:3:"400";s:5:"boite";s:0:"";s:10:"profile_id";s:1:"1";s:11:"style_liste";s:4:"none";s:13:"styles_reload";s:1:"0";}s:9:"id_module";s:4:"1001";s:9:"parent_id";s:1:"1";s:10:"profile_id";s:1:"1";}}s:14:"use_parent_css";s:1:"1";s:7:"sitemap";s:1:"1";s:8:"page_css";s:0:"";}')
+      ->setNbDivisions(1)
+      ->assertSave()
+      ;
+
+    $this->dispatch('/admin/widget/add/id_profil/5/template/advanced/template_no/0');
+  }
+
+
+  /** @test */
+  public function cfgAccueilModulesShouldNotBeEmpty() {
+    $this->assertNotEmpty($this->_profil->getCfgAccueilAsArray()['modules']);
+  }
+
+
+  /** @test */
+  public function cfgAccueilModulesShouldHave10Items() {
+    $this->assertCount(10, $this->_profil->getCfgAccueilAsArray()['modules']);
+  }
+
+
+  /** @test */
+  public function leftColumnPreferencesShouldNotBeLost() {
+    $preferences = $this->_profil->getCfgAccueilAsArray()['modules'][1000]['preferences'];
+    $this->assertEquals(['titre' => 'A la une',
+                         'anchor' => '',
+                         'allow_link_on_title' => '0',
+                         'type_aff' => '1',
+                         'id_categorie' => '',
+                         'id_items' => '555-627-631-580-400-634',
+                         'nb_aff' => '1',
+                         'nb_analyse' => '5',
+                         'display_order' => 'Selection',
+                         'display_titles_only' => '0',
+                         'rss_avis' => '1',
+                         'op_largeur_img' => '200',
+                         'layout' => 'grid',
+                         'op_hauteur_boite' => '400',
+                         'boite' => '',
+                         'profile_id' => '1',
+                         'style_liste' => 'diaporama_navigation',
+                         'styles_reload' => '0',
+                         'op_navigation_mode' => 'next_previous',
+                         'op_navigation_unit' => 'px',
+                         'op_navigation_window_width' => '580',
+                         'op_navigation_window_height' => '325',
+                         'op_navigation_cycle' => '4000'],
+                        $preferences);
+  }
+
+
+  /** @test */
+  public function rightColumnPreferencesShouldNotBeLost() {
+    $preferences = $this->_profil->getCfgAccueilAsArray()['modules'][1001]['preferences'];
+    $this->assertEquals(['titre' => 'Numérique 24h/24',
+                         'anchor' => '',
+                         'allow_link_on_title' => '1',
+                         'type_aff' => '1',
+                         'id_categorie' => '',
+                         'id_items' => '207',
+                         'nb_aff' => '1',
+                         'nb_analyse' => '5',
+                         'display_order' => 'Selection',
+                         'display_titles_only' => '0',
+                         'rss_avis' => '0',
+                         'op_largeur_img' => '200',
+                         'layout' => 'grid',
+                         'op_hauteur_boite' => '400',
+                         'boite' => '',
+                         'profile_id' => '1',
+                         'style_liste' => 'none',
+                         'styles_reload' => '0'],
+                        $preferences);
+  }
+}
\ No newline at end of file
-- 
GitLab