From 9ee5d3682e5cd8b4037243010c8ce0fe510da0e6 Mon Sep 17 00:00:00 2001
From: pbarroca <pbarroca@git-test.afi-sa.fr>
Date: Thu, 7 Jun 2012 16:44:36 +0000
Subject: [PATCH] =?UTF-8?q?D=C3=A9but=20drag'n'drop=20des=20boites=20sur?=
 =?UTF-8?q?=20le=20portail?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../admin/controllers/ProfilController.php    | 15 ++++-
 .../modules/opac/views/scripts/head.phtml     | 33 +++++++++++
 .../modules/opac/views/scripts/portail.phtml  | 58 +++++++++----------
 library/Class/Profil.php                      |  2 +-
 library/ZendAfi/View/Helper/Division.php      |  9 +--
 5 files changed, 80 insertions(+), 37 deletions(-)

diff --git a/application/modules/admin/controllers/ProfilController.php b/application/modules/admin/controllers/ProfilController.php
index dbe2e1efad9..f2180abaabe 100644
--- a/application/modules/admin/controllers/ProfilController.php
+++ b/application/modules/admin/controllers/ProfilController.php
@@ -39,7 +39,7 @@ class Admin_ProfilController extends Zend_Controller_Action {
 		if (!$this->_profil = Class_Profil::getLoader()->find($id_profil_param)) {
 			if (!in_array(
 							$this->_request->getActionName(),
-							array('index', 'redirect-to-index', 'add', 'genres'))
+							array('index', 'redirect-to-index', 'add', 'genres', 'module-sort'))
 			) {
 				$this->_forward('redirect-to-index');
 				return;
@@ -468,6 +468,19 @@ class Admin_ProfilController extends Zend_Controller_Action {
 	}
 
 
+	public function moduleSortAction() {
+		$this->getHelper('ViewRenderer')->setNoRender();
+		if (!$profil = Class_Profil::getLoader()->find($this->_getParam('profil')))
+			return;
+
+		$profil->moveModuleOldDivPosNewDivPos($this->_getParam('fromDivision'), 
+																					$this->_getParam('fromPosition'), 
+																					$this->_getParam('toDivision'), 
+																					$this->_getParam('toPosition'));
+		$profil->save();
+	}
+
+
 	public function deleteAction()	{
 		$profil = Class_Profil::getLoader()->find($this->id_profil);
 		$profil->delete();
diff --git a/application/modules/opac/views/scripts/head.phtml b/application/modules/opac/views/scripts/head.phtml
index 31cd53b33ee..22d6082ab34 100644
--- a/application/modules/opac/views/scripts/head.phtml
+++ b/application/modules/opac/views/scripts/head.phtml
@@ -30,6 +30,39 @@ $head_scripts = Class_ScriptLoader::newInstance()
 	->addJQueryReady('setupAnchorsTarget()')
 	->showNotifications();
 
+
+if (($user = Class_Users::getLoader()->getIdentity())
+		&& $user->isAdmin())
+	$head_scripts->addJQueryReady('
+    var currentPositions = [0, 0, 0];
+    $("div.layout-division>div>div").each(function(k, item) {
+      var division = $(item).parents("div.layout-division").attr("id").split("-").pop();
+      $(item).attr("data-position", currentPositions[division-1]);
+      currentPositions[division-1]++;
+      $(item).attr("data-division", division);
+    });
+
+    $("div.layout-division>div").sortable({
+      cursor:"move",
+      connectWith:"div.layout-division>div",
+      stop: function(event, ui){
+        var newDivision = $(ui.item).parents("div.layout-division").attr("id").split("-").pop();
+        var newPosition = $(ui.item).prevAll().length;
+        if (newDivision == $(ui.item).attr("data-division")
+            && newPosition == $(ui.item).attr("data-position")) 
+          return;
+
+        $.ajax("' . $this->url(array('module' => 'admin',
+																					'controller' => 'profil',
+																					'action' => 'module-sort'), null, true) . '",
+               {data: {fromDivision: $(ui.item).attr("data-division"),
+                      toDivision: newDivision,
+                      fromPosition: $(ui.item).attr("data-position"),
+                      toPosition: newPosition,
+                      profil:' . $current_profil->getId() . '}});
+      }});
+  ');
+
 if (file_exists(PATH_SKIN.'/css/bib.css'))
 	$head_scripts->addSkinStyleSheet('bib');
 
diff --git a/application/modules/opac/views/scripts/portail.phtml b/application/modules/opac/views/scripts/portail.phtml
index 678986e142c..ab316447f23 100644
--- a/application/modules/opac/views/scripts/portail.phtml
+++ b/application/modules/opac/views/scripts/portail.phtml
@@ -2,38 +2,34 @@
 ob_start();
 echo '<body '.$this->bodyParam.'>';
 ?>
-
-
 <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;
-
-					case 2:
-					echo $this->division($this->profil, 1, 'colGauche');
-					echo $this->division($this->profil, 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 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 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 -->
 
 
diff --git a/library/Class/Profil.php b/library/Class/Profil.php
index 1758ea9f4e0..abbb36c2027 100644
--- a/library/Class/Profil.php
+++ b/library/Class/Profil.php
@@ -1214,7 +1214,7 @@ class Class_Profil extends Storm_Model_Abstract {
 		$i = 0;
 		foreach($cfg_accueil['modules'] as $module_id => $module) {
 			if ($i == $new_pos)
-				$new_modules[$id] = $module;
+				$new_modules[$id] = $moved_module;
 			$new_modules[$module_id] = $module;
 			$i++;
 		}
diff --git a/library/ZendAfi/View/Helper/Division.php b/library/ZendAfi/View/Helper/Division.php
index f2d6e1519c4..9c48821f1b2 100644
--- a/library/ZendAfi/View/Helper/Division.php
+++ b/library/ZendAfi/View/Helper/Division.php
@@ -24,7 +24,7 @@
 
 class ZendAfi_View_Helper_Division extends ZendAfi_View_Helper_BaseHelper {
 	public function division($profil, $division, $html_id, $content=null) {
-		$width = $profil->_get('largeur_division'.$division);
+		$width = $profil->_get('largeur_division' . $division);
 		if ($html_id == "colContenu"  and  $profil->getNbDivisions() == 3)
 			$width += $profil->getLargeurDivision3();
 
@@ -32,8 +32,6 @@ class ZendAfi_View_Helper_Division extends ZendAfi_View_Helper_BaseHelper {
 		$style = "float:left;overflow:hidden;width:".$width."px;max-width:".$width."px";
 		$style_inner = "padding-left:".$marge."px;padding-right:".$marge."px";
 
-		$template_div = '<div class="%1$s" style="%2$s"><div id="%1$sInner" style="%3$s">%4$s %5$s</div></div>';
-
 		$barre_nav = '';
 		if (in_array($html_id, array('colContenu', 'colMilieu'))	and ($profil->getBarreNavOn()))
 			$barre_nav = $this->view->barreNav();
@@ -43,7 +41,10 @@ class ZendAfi_View_Helper_Division extends ZendAfi_View_Helper_BaseHelper {
 			$content = $boites[$division];
 		}
 
-		return sprintf($template_div, $html_id, $style, $style_inner, $barre_nav, $content);
+		return sprintf('<div class="%1$s layout-division" id="layout-division-%6$s" style="%2$s">
+                      <div id="%1$sInner" style="%3$s">%4$s %5$s</div>
+                   </div>', 
+									 $html_id, $style, $style_inner, $barre_nav, $content, $division);
 	}
 }
 
-- 
GitLab