From 46c625df6a70d82930fe94209d968bf68bfa1e89 Mon Sep 17 00:00:00 2001 From: ovclas Date: Thu, 4 Oct 2012 02:00:32 +0000 Subject: [PATCH] issue 2364 menu item move bug fix git-svn-id: http://xe-core.googlecode.com/svn/branches/maserati@11575 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/menu/lang/lang.xml | 3 ++ modules/menu/menu.admin.controller.php | 52 +++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/modules/menu/lang/lang.xml b/modules/menu/lang/lang.xml index 17034cfac..c2edc37fe 100644 --- a/modules/menu/lang/lang.xml +++ b/modules/menu/lang/lang.xml @@ -597,4 +597,7 @@ Menu không phải là người quản lý, nhiệm vụ của nó chỉ là li + + + diff --git a/modules/menu/menu.admin.controller.php b/modules/menu/menu.admin.controller.php index f89799229..ed97276dd 100644 --- a/modules/menu/menu.admin.controller.php +++ b/modules/menu/menu.admin.controller.php @@ -599,11 +599,10 @@ */ function procMenuAdminMoveItem() { - //TODO 클라이언트가 넘기는 값을 그냥 사용하면 됨. parent_srl(부모), source_srl(같은 계층의 menu_item_srl), target_srl(나 자신의 menu_item_srl) - $mode = Context::get('mode'); - $parent_srl = Context::get('parent_srl'); - $source_srl = Context::get('source_srl'); - $target_srl = Context::get('target_srl'); + $mode = Context::get('mode'); //move + $parent_srl = Context::get('parent_srl'); // Parent menu item serial number + $source_srl = Context::get('source_srl'); // Same hierarchy's menu item serial number + $target_srl = Context::get('target_srl'); // Self menu item serial number if(!$mode || !$parent_srl || !$target_srl) return new Object(-1,'msg_invalid_request'); @@ -611,6 +610,24 @@ // get original menu item info for cache file recreate $originalItemInfo = $oMenuAdminModel->getMenuItemInfo($target_srl); + if(!$originalItemInfo->menu_item_srl) + { + return new Object(-1, 'msg_empty_menu_item'); + } + + // get menu properies with child menu + $phpFile = sprintf("./files/cache/menu/%s.php", $originalItemInfo->menu_srl); + $originMenu = NULL; + + if(is_readable(FileHandler::getRealPath($phpFile))) + { + @include(FileHandler::getRealPath($phpFile)); + + if(is_array($menu->list)) + { + $this->_searchMenu($menu->list, $originalItemInfo->menu_item_srl, $originMenu); + } + } // get target menu info for move $targetMenuItemInfo = $oMenuAdminModel->getMenuItemInfo($parent_srl); @@ -627,7 +644,11 @@ $parent_srl = 0; } - $this->moveMenuItem($menu_srl,$parent_srl,$source_srl,$target_srl,$mode); + $this->moveMenuItem($menu_srl, $parent_srl, $source_srl, $target_srl, $mode); + if(count($originMenu['list']) > 0) + { + $this->_recursiveUpdateMenuItem($originMenu['list'], $menu_srl); + } //recreate original menu $xml_file = $this->makeXmlFile($originalItemInfo->menu_srl); @@ -636,6 +657,25 @@ $xml_file = $this->makeXmlFile($menu_srl); } + private function _recursiveUpdateMenuItem($node, $menu_srl) + { + if(is_array($node)) + { + foreach($node AS $key=>$node) + { + unset($args); + $args->menu_srl = $menu_srl; + $args->menu_item_srl = $node['node_srl']; + $output = executeQuery('menu.updateMenuItemNode', $args); + + if(count($node['list']) > 0) + { + $this->_recursiveUpdateMenuItem($node['list'], $menu_srl); + } + } + } + } + /** * cop menu item * @return void