From bfc2c5dba5ddcd58dbe58e4999ca950669dabf8f Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@git-test.afi-sa.fr>
Date: Mon, 26 Aug 2013 11:03:02 +0000
Subject: [PATCH] Ajout option pour inverser l'ordre des colonnes d'un profil

---
 .../views/scripts/profil/_formProfil.phtml    | 12 ++++
 .../modules/opac/views/scripts/accueil.phtml  | 55 ++++++++++---------
 .../modules/opac/views/scripts/contenu.phtml  | 19 ++++---
 library/Class/Profil.php                      | 10 ++++
 public/admin/css/global.css                   |  4 ++
 .../controllers/ProfilControllerTest.php      | 14 ++++-
 .../ProfilOptionsControllerTest.php           | 35 +++++++++---
 7 files changed, 108 insertions(+), 41 deletions(-)

diff --git a/application/modules/admin/views/scripts/profil/_formProfil.phtml b/application/modules/admin/views/scripts/profil/_formProfil.phtml
index 5d81d1d5f31..fc89e7861be 100644
--- a/application/modules/admin/views/scripts/profil/_formProfil.phtml
+++ b/application/modules/admin/views/scripts/profil/_formProfil.phtml
@@ -246,6 +246,18 @@ Class_ScriptLoader::getInstance()
 					</td>
 				</tr>
 
+				<tr class="only_browser">
+					<td align="right"><?php echo $this->traduire('Ordre des divisons'); ?></td>
+					<td class="gauche" style="padding-left:5px">
+            <?php 
+            echo $this->formRadioButtons("ordre_divisions", 
+																		     $this->profil->getOrdreDivisions(), 
+                                         ["1 (toujours visible) - 2 (remplacée par le contenu)- 3 (seulement page accueil)",
+                                          "3  (seulement page accueil) - 2 (remplacée par le contenu) - 1 (toujours visible)"]);
+            ?>
+					</td>
+				</tr>
+
 				<tr class="only_browser">
 					<td colspan="2">
 						<div style="width:300px;margin-left:139px">
diff --git a/application/modules/opac/views/scripts/accueil.phtml b/application/modules/opac/views/scripts/accueil.phtml
index d3a0538b4a3..56ec5f8bd78 100644
--- a/application/modules/opac/views/scripts/accueil.phtml
+++ b/application/modules/opac/views/scripts/accueil.phtml
@@ -1,29 +1,32 @@
 <div id="site_web_wrapper" style="width:<?php echo $this->profil->getLargeurSite(); ?>px; margin-left:auto; margin-right:auto">
-<div class="siteWeb portail_background_img">
-	<div id="site_web_content">
-		<?php	echo $this->partial("banniere.phtml", array("profil" => $this->profil));	?>	
-		<div id="col_wrapper">
-			<?php
-	switch ($this->profil->getNbDivisions()) {
-	case 1:
-		echo $this->division($this->profil, 1, 'colContenu');
-		break;
+  <div class="siteWeb portail_background_img">
+	  <div id="site_web_content">
+		  <?php	echo $this->partial("banniere.phtml", array("profil" => $this->profil));	?>	
+		  <div id="col_wrapper">
+			  <?php
+	      switch ($this->profil->getNbDivisions()) {
+	        case 1:
+		        echo $this->division($this->profil, 1, 'colContenu');
+		        break;
 
-	case 2:
-		echo $this->division($this->profil, 1, 'colGauche');
-		echo $this->division($this->profil, 2, 'colContenu');
-		break;
+	        case 2:
+            echo $this->divisionMap($this->profil, 
+                                    $this->profil->isDivisionsFromRightToLeft() 
+                                        ? [2 => 'colContenu', 1 => 'colDroite']
+                                        : [1 => 'colGauche', 2 => 'colContenu']);
+		        break;
 
-	case 3:
-		echo '<div id="right_col_color">';
-		echo $this->division($this->profil, 1, 'colGauche');
-		echo $this->division($this->profil, 2, 'colMilieu');
-		echo $this->division($this->profil, 3, 'colDroite');
-		echo '</div>';
-		break;
-	}
-			?>
-			<div class="clear"></div>
-		</div> <!-- col_wrapper -->
-	</div> <!-- site_web_content -->
-</div> <!-- siteWeb -->
+	        case 3:
+		        echo '<div id="right_col_color">';
+            echo $this->divisionMap($this->profil, 
+                                    $this->profil->isDivisionsFromRightToLeft() 
+                                     ? [3 => 'colGauche', 2 => 'colContenu', 1 => 'colDroite']
+                                     : [1 => 'colGauche', 2 => 'colContenu', 3 => 'colDroite']);
+		        echo '</div>';
+		        break;
+	      }
+			  ?>
+			  <div class="clear"></div>
+		  </div> <!-- col_wrapper -->
+	  </div> <!-- site_web_content -->
+  </div> <!-- siteWeb -->
diff --git a/application/modules/opac/views/scripts/contenu.phtml b/application/modules/opac/views/scripts/contenu.phtml
index 4748175deab..de63e766330 100644
--- a/application/modules/opac/views/scripts/contenu.phtml
+++ b/application/modules/opac/views/scripts/contenu.phtml
@@ -1,18 +1,23 @@
 <div id="site_web_wrapper" style="width:<?php echo $this->profil->getLargeurSite(); ?>px; margin-left:auto; margin-right:auto">
 	<div class="siteWeb module_background_img module">
 		<div id="site_web_content">
-	
+	    
 			<?php	echo $this->partial("banniere.phtml", array("profil" => $this->profil));	?>
 
 
 			<div id="col_wrapper">
 				<?php
-					if ($this->profil->getNbDivisions() == 1) {
-						echo $this->division($this->profil, 1, 'colContenu', $this->actionContent);
-					} else {
-						echo $this->division($this->profil, 1, 'colGauche');
-						echo $this->division($this->profil, 2, 'colContenu', $this->actionContent);
-					}
+				if ($this->profil->getNbDivisions() == 1) {
+					echo $this->division($this->profil, 1, 'colContenu', $this->actionContent);
+				} else {
+          if ($this->profil->isDivisionsFromRightToLeft()) {
+					  echo $this->division($this->profil, 2, 'colContenu', $this->actionContent);
+					  echo $this->division($this->profil, 1, 'colDroite');
+          } else {
+            echo $this->division($this->profil, 1, 'colGauche');
+					  echo $this->division($this->profil, 2, 'colContenu', $this->actionContent);
+          }
+				}
 				?>
 				<div class="clear"></div>
 			</div> <!-- col_wrapper -->
diff --git a/library/Class/Profil.php b/library/Class/Profil.php
index 0c2b0991630..52ca8a14b4a 100644
--- a/library/Class/Profil.php
+++ b/library/Class/Profil.php
@@ -145,6 +145,7 @@ class Class_Profil extends Storm_Model_Abstract {
 																		'largeur_division1',
 																		'largeur_site',
 																		'nb_divisions',
+																		'ordre_divisions',
 																		'hauteur_banniere',
 																		'couleur_lien_bandeau',
 																		'couleur_texte_bandeau',
@@ -193,6 +194,7 @@ class Class_Profil extends Storm_Model_Abstract {
 				 'skin' => 'original',
 				 'largeur_site' => 1000,
 				 'nb_divisions' => 3,
+				 'ordre_divisions' => 0,
 				 'largeur_division1' => 250,
 				 'marge_division1' => 10,
 				 'largeur_division2' => 550,
@@ -1250,6 +1252,14 @@ class Class_Profil extends Storm_Model_Abstract {
 	}
 
 
+	/**
+	 * @return bool
+	 */
+	public function isDivisionsFromRightToLeft() {
+		return 1 == $this->getOrdreDivisions();
+	}
+
+
 	/**
 	 * Créé une copie profil (non récursif)
 	 * @return Class_Profil
diff --git a/public/admin/css/global.css b/public/admin/css/global.css
index e54af41bb3f..e35f4739ed4 100644
--- a/public/admin/css/global.css
+++ b/public/admin/css/global.css
@@ -1046,4 +1046,8 @@ img.article_edit {
 
 div.modules div.pager span {
     margin:0px 3px;
+}
+
+#ZFDebug {
+		display:none;
 }
\ No newline at end of file
diff --git a/tests/application/modules/admin/controllers/ProfilControllerTest.php b/tests/application/modules/admin/controllers/ProfilControllerTest.php
index 7a6b47e8f84..d0ce6ae141e 100644
--- a/tests/application/modules/admin/controllers/ProfilControllerTest.php
+++ b/tests/application/modules/admin/controllers/ProfilControllerTest.php
@@ -38,7 +38,8 @@ abstract class Admin_ProfilControllerProfilJeunesseTestCase extends Admin_Abstra
 											'logo_droite_link' => 'http://macommune.fr',
 											'header_social_network' => true,
 											'header_css' => '/userfiles/css/my.css',
-											'header_js' => '/userfiles/js/my.js');
+											'header_js' => '/userfiles/js/my.js',
+											'ordre_divisions' => 1);
 
 		$cfg_notice = array('exemplaires' => array('grouper' => 1,
 																							 'section' => 1,
@@ -85,6 +86,7 @@ class Admin_ProfilControllerEditProfilJeunesseTest extends Admin_ProfilControlle
 		$this->dispatch('/admin/profil/edit/id_profil/5');
 	}
 
+
 	/**
 	 * @test
 	 */
@@ -180,6 +182,16 @@ class Admin_ProfilControllerEditProfilJeunesseTest extends Admin_ProfilControlle
 		$this->assertXPath("//input[@type='checkbox'][@name='accessibilite_on'][not(@checked)]");
 	}
 
+	/** @test */
+	public function radioButtonOrdreDivision123ShouldNotBeChecked() {
+		$this->assertXPath("//input[@type='radio'][@name='ordre_divisions'][@value='0'][not(@checked)]");
+	}
+
+	/** @test */
+	public function radioButtonOrdreDivision321ShouldBeChecked() {
+		$this->assertXPath("//input[@type='radio'][@name='ordre_divisions'][@value='1'][@checked='checked']");
+	}
+
 	/** @test */
 	public function checkBoxLiensSortantsOffShouldBeChecked() {
 		$this->assertXPath("//input[@type='checkbox'][@name='liens_sortants_off'][@checked='checked']");
diff --git a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php
index 26352bd064b..bd207b7edc4 100644
--- a/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php
+++ b/tests/application/modules/opac/controllers/ProfilOptionsControllerTest.php
@@ -543,7 +543,7 @@ abstract class ProfilOptionsControllerProfilJeunesseWithPagesJeuxMusiqueTestCase
 																									 'type_module' => 'PRETS',
 																									 'preferences' => ['titre' => 'Mes documents']],
 
-																					 '10' => ['division' => '2',
+																					 '10' => ['division' => '1',
 																									 'type_module' => 'NEWSLETTERS',
 																									 'preferences' => ['titre' => 'Lettres d\'informations']],
 
@@ -603,6 +603,11 @@ abstract class ProfilOptionsControllerProfilJeunesseWithPagesJeuxMusiqueTestCase
 			->setLibelle('Musique');
 
 		$_SERVER["REQUEST_URI"] = '/';
+
+
+		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Newsletter')
+			->whenCalled('count')->answers(5)
+			->whenCalled('findAll')->answers([Class_Newsletter::newInstanceWithId(23, ['titre' => 'Nouveautés'])]);
 	}
 }
 
@@ -717,10 +722,6 @@ class ProfilOptionsControllerViewProfilJeunesseAccueilTest extends ProfilOptions
 																->whenCalled('fileExists')
 																->answers(true));
 
-		Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Newsletter')
-			->whenCalled('count')->answers(5)
-			->whenCalled('findAll')->answers([Class_Newsletter::newInstanceWithId(23, ['titre' => 'Nouveautés'])]);
-
 
 		$this->dispatch('/opac/', true);
 	}
@@ -823,8 +824,8 @@ class ProfilOptionsControllerViewProfilJeunesseAccueilTest extends ProfilOptions
 
 
 	/** @test */
-	public function boiteNewslettersShouldBeVisibleInProfilJeunesse() {
-		$this->assertXPath("//div[@class='boite_newsletters']",$this->_response->getBody());
+	public function boiteNewslettersShouldBeVisibleInProfilJeunesseInColGauche() {
+		$this->assertXPath("//div[contains(@class, 'colGauche')]//div[@class='boite_newsletters']",$this->_response->getBody());
 	}
 
 
@@ -891,6 +892,26 @@ class ProfilOptionsControllerViewProfilJeunesseAccueilTest extends ProfilOptions
 
 
 
+class ProfilOptionsControllerProfilJeunesseWithOrdreDivisionsReversedTest extends ProfilOptionsControllerProfilJeunesseWithPagesJeuxMusiqueTestCase {
+	protected function _loginHook($account) {}
+
+	public function setUp() {
+		parent::setUp();
+
+		$this->profil_jeunesse->setOrdreDivisions(1);		
+		$this->dispatch('/opac/', true);
+	}
+
+
+	/** @test */
+	public function boiteNewslettersShouldBeVisibleInProfilJeunesseInColDroite() {
+		$this->assertXPath("//div[contains(@class, 'colDroite')]//div[@class='boite_newsletters']",$this->_response->getBody());
+	}
+}
+
+
+
+
 class UserRoleLevelThreeViewPrivateProfilTest extends AbstractControllerTestCase {
 	protected function _loginHook($account) {
 		$account->ROLE = "";
-- 
GitLab