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