From 8cf5fcb9f0c66e8c8d19efe6e6373f385c1f468c Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@afi-sa.fr>
Date: Tue, 5 Jul 2016 17:10:12 +0200
Subject: [PATCH] hotline #45558 fix profil saving for modules in backoffice

---
 VERSIONS_HOTLINE/45558                        |  1 +
 .../admin/controllers/ProfilController.php    | 10 ++--
 .../ProfilControllerPageAccueilTest.php       | 46 +++++++++++++++++--
 3 files changed, 49 insertions(+), 8 deletions(-)
 create mode 100644 VERSIONS_HOTLINE/45558

diff --git a/VERSIONS_HOTLINE/45558 b/VERSIONS_HOTLINE/45558
new file mode 100644
index 00000000000..0ee08f8c30f
--- /dev/null
+++ b/VERSIONS_HOTLINE/45558
@@ -0,0 +1 @@
+ - ticket #45558 : Lille: boites qui sautent en sauvegardant le profil
\ No newline at end of file
diff --git a/application/modules/admin/controllers/ProfilController.php b/application/modules/admin/controllers/ProfilController.php
index 0730553caef..96796e35225 100644
--- a/application/modules/admin/controllers/ProfilController.php
+++ b/application/modules/admin/controllers/ProfilController.php
@@ -235,9 +235,9 @@ class Admin_ProfilController extends ZendAfi_Controller_Action {
       return $enreg;
     $profil = Class_Profil::find($this->id_profil);
     // Decoupage des modules
-    $modules = explode(';box',$cfg_module);
+    $modules = array_filter(explode(';box',$cfg_module));
     foreach ($modules as $module) {
-      $elem=explode('|',$module);
+      $elem = explode('|', $module);
       $division=substr($elem[0],-1);
 
       $id_module=$elem[1];
@@ -259,7 +259,9 @@ class Admin_ProfilController extends ZendAfi_Controller_Action {
           $preferences[$names_vals[0]]=$names_vals[1];
         }
       }
-      $enreg["modules"][$id_module]=compact("division","type_module","preferences");
+      $enreg["modules"][$id_module]=compact("division",
+                                            "type_module",
+                                            "preferences");
     }
     return $enreg;
   }
@@ -311,7 +313,7 @@ class Admin_ProfilController extends ZendAfi_Controller_Action {
     $profil->setLibelle($this->_getParam('libelle',
                                          $profil->getLibelle()));
 
-    $cfg_module = $this->_getParam('saveContent');
+    $cfg_module = urldecode($this->_getParam('saveContent'));
     $enreg = $this->_parseSaveContentString($cfg_module);
 
     $enreg["use_parent_css"] = $this->_getParam('use_parent_css', $profil->getUseParentCss());
diff --git a/tests/application/modules/admin/controllers/ProfilControllerPageAccueilTest.php b/tests/application/modules/admin/controllers/ProfilControllerPageAccueilTest.php
index c0d543ca18f..46a3895e4cb 100644
--- a/tests/application/modules/admin/controllers/ProfilControllerPageAccueilTest.php
+++ b/tests/application/modules/admin/controllers/ProfilControllerPageAccueilTest.php
@@ -18,7 +18,6 @@
  * along with BOKEH; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
-require_once 'AdminAbstractControllerTestCase.php';
 
 abstract class Admin_ProfilControllerPageAccueilJeunesseTestCase extends Admin_AbstractControllerTestCase {
   public function setUp() {
@@ -879,13 +878,15 @@ class Admib_ProfilControllerPageAccueilWithWidgetInBannerPostDispatchTest extend
 
   /** @test */
   public function afterDeleteNewsWidgetShouldNotBePresent() {
-    $this->assertFalse(array_key_exists(1, Class_Profil::find(3)->getBoitesDivision(Class_Profil::DIV_BANNIERE)));
+    $this->assertFalse(array_key_exists(1,
+                                        Class_Profil::find(3)->getBoitesDivision(Class_Profil::DIV_BANNIERE)));
   }
 
 
   /** @test */
   public function afterDeleteOnlyOneLoginWidgetShouldBePresent() {
-    $this->assertFalse(array_key_exists(4, Class_Profil::find(3)->getBoitesDivision(Class_Profil::DIV_BANNIERE)));
+    $this->assertFalse(array_key_exists(4,
+                                        Class_Profil::find(3)->getBoitesDivision(Class_Profil::DIV_BANNIERE)));
   }
 }
 
@@ -909,7 +910,7 @@ class Admin_ProfilControllerPageAccueilWithMenuBoiteEnabledTest extends Admin_Ab
 
     $this->fixture('Class_AdminVar',['id'=>'MENU_BOITE', 'valeur' => 1]);
 
-    $cfg_module = "box1|2|NEWS|titre=Articles/type_aff=1/id_categorie=/id_items=/nb_aff=1/nb_analyse=5/display_order=Selection/display_titles_only=/rss_avis=1/op_largeur_img=200/op_hauteur_boite=400/boite=/=/;box1|3|NEWS|titre=Articles/type_aff=1/id_categorie=/id_items=/nb_aff=1/nb_analyse=5/display_order=Selection/display_titles_only=/rss_avis=1/op_largeur_img=200/op_hauteur_boite=400/boite=/=/;box1|1|KIOSQUE|titre=Kiosque/style_liste=slide_show/nb_notices=20/only_img=1/aleatoire=1/tri=1/nb_analyse=50/op_hauteur_img=0/op_transition=/op_largeur_img=0/op_hauteur_boite=0/op_captions=0/op_autoplay=0/op_visible=0/op_speed=0/op_auto=0/op_scroll=1/rss_avis=1/id_catalogue=0/id_panier=0/profil_redirect=/boite=/=/;box1|4|KIOSQUE|titre=Kiosque/style_liste=slide_show/nb_notices=20/only_img=1/aleatoire=1/tri=1/nb_analyse=50/op_hauteur_img=0/op_transition=/op_largeur_img=0/op_hauteur_boite=0/op_captions=0/op_autoplay=0/op_visible=0/op_speed=0/op_auto=0/op_scroll=1/rss_avis=1/id_catalogue=0/id_panier=0/profil_redirect=/boite=/=/;box2|8|MENU_VERTICAL|menu=V/afficher_titre=1/menu_deplie=0/new_html=0/boite=/titre=/=/;box2|5|MENU_VERTICAL|menu=V/afficher_titre=1/menu_deplie=0/new_html=0/boite=/titre=/=/;box3|10|PANIER|titre=Panier/boite=/=/;box3|new|PANIER|;box4|6|LOGIN|titre=Mon compte lecteur/titre_connecte=/identifiant=N° de carte/identifiant_exemple=/mot_de_passe=Année de naissance/mot_de_passe_exemple=/lien_connexion=Se connecter/lien_mot_de_passe_oublie=» Mot de passe oublié ?/lien_creer_compte=» S'enregistrer/message_connecte=Bienvenue/lien_compte=Mon compte/lien_deconnection=Se déconnecter/autocomplete_off=1/profil_redirect=/profil_logout_redirect=/boite=boite_banniere_droite/";
+    $cfg_module = "box1|2|NEWS|titre=Articles---type_aff=1---id_categorie=---id_items=---nb_aff=1---nb_analyse=5---display_order=Selection---display_titles_only=---rss_avis=1---op_largeur_img=200---op_hauteur_boite=400---boite=---=---;box1|3|NEWS|titre=Articles---type_aff=1---id_categorie=---id_items=---nb_aff=1---nb_analyse=5---display_order=Selection---display_titles_only=---rss_avis=1---op_largeur_img=200---op_hauteur_boite=400---boite=---=---;box1|1|KIOSQUE|titre=Kiosque---style_liste=slide_show---nb_notices=20---only_img=1---aleatoire=1---tri=1---nb_analyse=50---op_hauteur_img=0---op_transition=---op_largeur_img=0---op_hauteur_boite=0---op_captions=0---op_autoplay=0---op_visible=0---op_speed=0---op_auto=0---op_scroll=1---rss_avis=1---id_catalogue=0---id_panier=0---profil_redirect=---boite=---=---;box1|4|KIOSQUE|titre=Kiosque---style_liste=slide_show---nb_notices=20---only_img=1---aleatoire=1---tri=1---nb_analyse=50---op_hauteur_img=0---op_transition=---op_largeur_img=0---op_hauteur_boite=0---op_captions=0---op_autoplay=0---op_visible=0---op_speed=0---op_auto=0---op_scroll=1---rss_avis=1---id_catalogue=0---id_panier=0---profil_redirect=---boite=---=---;box2|8|MENU_VERTICAL|menu=V---afficher_titre=1---menu_deplie=0---new_html=0---boite=---titre=---=---;box2|5|MENU_VERTICAL|menu=V---afficher_titre=1---menu_deplie=0---new_html=0---boite=---titre=---=---;box3|10|PANIER|titre=Favoris---boite=---=---;box3|new|PANIER|;box4|6|LOGIN|titre=Mon compte lecteur---titre_connecte=---identifiant=N° de carte---identifiant_exemple=---mot_de_passe=Année de naissance---mot_de_passe_exemple=---lien_connexion=Se connecter---lien_mot_de_passe_oublie=» Mot de passe oublié ?---lien_creer_compte=» S'enregistrer---message_connecte=Bienvenue---lien_compte=Mon compte---lien_deconnection=Se déconnecter---autocomplete_off=1---profil_redirect=---profil_logout_redirect=---boite=boite_banniere_droite---";
 
 
     $this
@@ -926,5 +927,42 @@ class Admin_ProfilControllerPageAccueilWithMenuBoiteEnabledTest extends Admin_Ab
     $cfg_accueil = $profil->getCfgAccueilAsArray();
     $this->assertCount(9, $cfg_accueil['modules']);
   }
+
+  /** @test */
+  public function moduleTenTitleShouldBeFavoris() {
+    $this->assertEquals('Favoris',
+                        Class_Profil::find(713)->getModuleAccueilPreferences(10, 'PANIER')['titre']);
+  }
+}
+
+
+
+class Admin_ProfilControllerPageAccueilRegression45558Test extends Admin_ProfilControllerPageAccueilJeunesseTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $post_cfg = 'box1|2|NEWS|menu%3D15-1---afficher_titre%3D1---menu_deplie%3D0---new_html%3D0---boite%3D---titre%3D%2A%2A+Nouvelle+bo%C3%AEte+%2A%2A---id_module%3D3---Valider%3DValider---%3D';
+
+
+    $this->fixture('Class_Profil', ['id' => 23,
+                                    'libelle' => 'My page']);
+    $this->postDispatch('/admin/profil/accueil/id_profil/23',
+                        ['saveContent' => $post_cfg]);
+  }
+
+
+  /** @test */
+  public function menuWidgetTitleShouldBeNouvelleBoite() {
+    $this->assertEquals('** Nouvelle boîte **',
+                        Class_Profil::find(23)->getModuleAccueilPreferences(2, 'MENU')['titre']);
+  }
+
+
+  /** @test */
+  public function menuWidgetAfficherTitreShouldBeOne() {
+    $this->assertEquals('1',
+                        Class_Profil::find(23)->getModuleAccueilPreferences(2, 'MENU')['afficher_titre']);
+  }
 }
+
 ?>
\ No newline at end of file
-- 
GitLab