diff --git a/library/Class/Profil.php b/library/Class/Profil.php index 517a2457f7529a6559907db7693ac6ae36d125b4..f14753384db9eecc1871d94126cf87f5118f3334 100644 --- a/library/Class/Profil.php +++ b/library/Class/Profil.php @@ -895,10 +895,12 @@ class Class_Profil extends Storm_Model_Abstract { try { $unserialized = ZendAfi_Filters_Serialize::unserialize($data); } catch (Exception $e) { - $unserialized = array(); + $unserialized = []; } - if (!$unserialized) return array(); + if (!$unserialized) + return []; + return $unserialized; } diff --git a/library/Class/Systeme/Widget/Abstract.php b/library/Class/Systeme/Widget/Abstract.php index 7cb12ffa0f26f56ef29dc8095bd759f56d8fc013..b20785f13475c194e22dc4d90eb53c4132cbe5dd 100644 --- a/library/Class/Systeme/Widget/Abstract.php +++ b/library/Class/Systeme/Widget/Abstract.php @@ -23,17 +23,9 @@ abstract class Class_Systeme_Widget_Abstract extends Class_Entity { use Trait_Translator; public function load() { - if(!$this->getProfileId()) - return null; - - if(!$profil = Class_Profil::find($this->getProfileId())) + if(!$this->init()) return null; - if('' == (String) $this->getId()) - return null; - - $this->setProfile($profil); - if(!$this->_load()) return null; @@ -52,6 +44,21 @@ abstract class Class_Systeme_Widget_Abstract extends Class_Entity { } + public function init() { + if(!$this->getProfileId()) + return null; + + if(!$profil = Class_Profil::find($this->getProfileId())) + return null; + + if('' == (String) $this->getId()) + return null; + + $this->setProfile($profil); + return $this; + } + + protected function _getTitle() { return $this->_getWidgetResources()->getTitle(); } diff --git a/library/Class/Systeme/Widget/Menu.php b/library/Class/Systeme/Widget/Menu.php index 5e489a0711e06f24287364c3a70d20c448082de6..3114fab3b2c4c57cd9b6d1c8cf561d20598d9a53 100644 --- a/library/Class/Systeme/Widget/Menu.php +++ b/library/Class/Systeme/Widget/Menu.php @@ -22,10 +22,30 @@ class Class_Systeme_Widget_Menu extends Class_Systeme_Widget_Abstract { + public static function findAllAsArray() { + $all = []; + $profil = Class_Profil::getCurrentProfil(); + $datas = $profil->getCfgMenusAsArray(); + foreach($datas as $key => $params) + $all[$key] = (new static()) + ->setId($key) + ->setProfileId($profil->getId()) + ->find(); + + return $all; + } + + protected function _load() { - return $this->_transmute($this->hasParent() - ? $this->_findLeaf($this->getId()) - : $this->_findNode($this->getId())); + return $this->_transmute($this->find()); + } + + + public function find() { + return $this->init() + ->hasParent() + ? $this->_findLeaf($this->getId()) + : $this->_findNode($this->getId()); } diff --git a/library/ZendAfi/View/Helper/Accueil/MenuVertical.php b/library/ZendAfi/View/Helper/Accueil/MenuVertical.php index 6667e2f3c01b1f736bb52d7bba8505d8e74f2b99..b9e66873235a0a6391b5bc76cb45c5f68fd98567 100644 --- a/library/ZendAfi/View/Helper/Accueil/MenuVertical.php +++ b/library/ZendAfi/View/Helper/Accueil/MenuVertical.php @@ -64,7 +64,7 @@ class ZendAfi_View_Helper_Accueil_MenuVertical extends ZendAfi_View_Helper_Accue $menu_deplie ? "" : "display:none"); $id_profil = $profil->getId(); - $menus = $profil->getCfgMenusAsArray(); + $menus = Class_Systeme_Widget_Menu::findAllAsArray(); if (!isset($menus[$menu])) $menus = Class_Profil::getPortail()->getCfgMenusAsArray(); diff --git a/library/ZendAfi/View/Helper/Admin/Menus.php b/library/ZendAfi/View/Helper/Admin/Menus.php index 75bfb6273382d0ea81cd031efdb3f398f15a85ef..947d81c9d315f81348a0b31cf40064e1ec0eff30 100644 --- a/library/ZendAfi/View/Helper/Admin/Menus.php +++ b/library/ZendAfi/View/Helper/Admin/Menus.php @@ -25,8 +25,9 @@ class ZendAfi_View_Helper_Admin_Menus extends Zendafi_View_Helper_Basehelper { public function menus() { $this->_profil = Class_Profil::getCurrentProfil(); - $datas = $this->_profil->getCfgMenusAsArray(); - $datas['H']['menus'] = (new Class_Systeme_MenuHorizontal($datas['H']['menus']))->asCfgProfil(); + + $datas = Class_Systeme_Widget_Menu::findAllAsArray(); + $html = [$this->_renderNav($datas['H'])]; unset($datas['H']); diff --git a/public/admin/css/subModal.css b/public/admin/css/subModal.css index 8a70a5cdc3715f05be6721e1a6b5e274b7bf43a9..18e0fe7ed915a3e8af2d9f8e1346a33d25d8d59d 100644 --- a/public/admin/css/subModal.css +++ b/public/admin/css/subModal.css @@ -77,4 +77,18 @@ a[data-popup="true"].image-loading-status { a[data-popup="true"].image-loading-status img { visibility: hidden; -} \ No newline at end of file +} + + +.ui-dialog { + height: 0 !important; +} + +.ui-dialog.fixed_popup { + position: fixed !important; +} + +.ui-dialog.fixed_popup, +.ui-dialog.fixed_popup > * { + height: auto !important; +} diff --git a/tests/scenarios/Widgets/WidgetsTest.php b/tests/scenarios/Widgets/WidgetsTest.php index 6c817fdce8f8b7c3e0230d33f58348d3225c9cab..c42f886c17c36aa843eded0b91caa9470437658c 100644 --- a/tests/scenarios/Widgets/WidgetsTest.php +++ b/tests/scenarios/Widgets/WidgetsTest.php @@ -475,4 +475,34 @@ class WidgetsPostEditVerticalMenuTest extends WidgetsSimpleTestCase { 'picto' => '', 'menus' => []], Class_Profil::getCurrentProfil()->getCfgMenusAsArray()[0]); } -} \ No newline at end of file +} + + + + +class WidgetsVerticalMenuWithDeepMenuTest extends WidgetsSimpleTestCase { + + public function setUp() { + parent::setUp(); + $profil = Class_Profil::getCurrentProfil(); + $cfg = $profil->getCfgMenusAsArray(); + $h = $cfg['H']; + $cfg['V'] = $h; + + $profil->setCfgMenus($cfg)->save(); + + $this->dispatch('admin/profil/menusindex/id_profil/2', true); + } + + + /** @test */ + public function editMenuShouldBePresent() { + $this->assertXPath('//a[contains(@href, "admin/widget/edit-menu/id/3/id_profil/2/parent/V/")][contains(@title, "Modifier le menu")]'); + } + + + /** @test */ + public function editFirstSubMenuEntryShouldBePresent() { + $this->assertXPath('//ul//li//ul//li//a[contains(@href, "admin/widget/edit-menu/id/4/id_profil/2/parent/V/")][contains(@title, "Modifier l\'entrée")]'); + } +}