From 82974b04383a00baa9766d5b970c44d60d42f99c Mon Sep 17 00:00:00 2001 From: khongchi Date: Wed, 22 Jan 2014 21:23:57 +0900 Subject: [PATCH] =?UTF-8?q?#225=20=EC=82=AC=EC=9D=B4=ED=8A=B8=EB=A7=B5?= =?UTF-8?q?=EC=97=90=20temporary=20menu=EA=B0=80=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EB=90=98=EB=8A=94=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0,=20=EB=A9=94=EB=89=B4=EB=AA=85=EC=9D=84=20't?= =?UTF-8?q?emporary=20menu'=EC=97=90=EC=84=9C=20=20'unlinked'=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=ED=95=98=EC=98=80=EC=9C=BC=EB=A9=B0=20'unlin?= =?UTF-8?q?ked'=20=EB=A9=94=EB=89=B4=EB=8A=94=20=EB=AC=B4=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=ED=95=98=EB=82=98=20=EC=A1=B4=EC=9E=AC=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EB=90=A8.=20=EA=B8=B0=EC=A1=B4=EC=9D=98=20temporar?= =?UTF-8?q?y=20menu=EB=8A=94=20=EC=82=AD=EC=A0=9C=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=ED=96=88=EA=B3=A0,=20temporary=20menu=EC=97=90=20?= =?UTF-8?q?=EC=9E=88=EB=8D=98=20=ED=95=98=EC=9C=84=EB=A9=94=EB=89=B4?= =?UTF-8?q?=EB=93=A4=EC=9D=80=20'unlinked'=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=ED=95=98=EC=9C=84=EB=A1=9C=20=EC=9D=B4=EB=8F=99=EB=90=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/menu/menu.admin.model.php | 8 +- modules/menu/queries/updateMenuItems.xml | 21 +++ modules/module/module.class.php | 171 +++++++++++------------ modules/module/module.controller.php | 49 ++++--- 4 files changed, 139 insertions(+), 110 deletions(-) create mode 100644 modules/menu/queries/updateMenuItems.xml diff --git a/modules/menu/menu.admin.model.php b/modules/menu/menu.admin.model.php index 59defe1a9..7c72a4eb8 100644 --- a/modules/menu/menu.admin.model.php +++ b/modules/menu/menu.admin.model.php @@ -529,15 +529,13 @@ class menuAdminModel extends menu unset($menu); unset($menuItems); $value->php_file = sprintf(_XE_PATH_ . 'files/cache/menu/%s.php',$value->menu_srl); - if(file_exists($value->php_file)) - { - include($value->php_file); - } - else + if(!file_exists($value->php_file)) { $oMenuAdminController->makeXmlFile($value->menu_srl); } + include($value->php_file); + $isMenuFixed = false; if(count($menu->list) > 0) { diff --git a/modules/menu/queries/updateMenuItems.xml b/modules/menu/queries/updateMenuItems.xml new file mode 100644 index 000000000..82ea01b65 --- /dev/null +++ b/modules/menu/queries/updateMenuItems.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/module/module.class.php b/modules/module/module.class.php index 7da18ea90..097d6b480 100644 --- a/modules/module/module.class.php +++ b/modules/module/module.class.php @@ -101,10 +101,6 @@ class module extends ModuleObject } // XE 1.7 - $args->site_srl = 0; - $output = executeQueryArray('module.getNotLinkedModuleBySiteSrl',$args); - - if($output->toBool() && $output->data && count($output->data) > 0) return true; // check fix mskin if(!$oDB->isColumnExists("modules", "is_mskin_fix")) return true; @@ -113,12 +109,25 @@ class module extends ModuleObject $moduleConfig = $oModuleModel->getModuleConfig('module'); if(!$moduleConfig->isUpdateFixedValue) return true; - // check lost module - if(!$moduleConfig->isUpdateLostModule) + // 'unlinked' menu 존재여부 확인 + if(!$moduleConfig->unlinked_menu_srl) return true; + else + { + $menuArgs = new stdClass; + $menuArgs->menu_srl = $moduleConfig->unlinked_menu_srl; + $menuOutput = executeQuery('menu.getMenu', $menuArgs); + if(!$menuOutput->data) return true; + } + + // menu_srl이 등록되지 않은 mid가 있는지 검사(지정된 menu_srl이 있을 경우, 지정된 menu_item도 있다고 가정) + $args = new stdClass; + $args->site_srl = 0; + $output = executeQueryArray('module.getNotLinkedModuleBySiteSrl',$args); + if($output->toBool() && $output->data && count($output->data) > 0) { return true; } - return false; + } /** @@ -414,29 +423,6 @@ class module extends ModuleObject $output = executeQuery('module.updateMobileSkinFixModules'); } - $args = new stdClass; - $args->site_srl = 0; - $output = executeQueryArray('module.getNotLinkedModuleBySiteSrl',$args); - - if($output->toBool() && $output->data && count($output->data) > 0) - { - //create temp menu. - $args->title = 'Temporary menu'; - $menuSrl = $args->menu_srl = getNextSequence(); - $args->listorder = $args->menu_srl * -1; - - $output = executeQuery('menu.insertMenu', $args); - - if(!$output->toBool()) - { - return $output; - } - - //getNotLinkedModuleBySiteSrl - $soutput = executeQueryArray('module.getNotLinkedModuleBySiteSrl', $args); - $uoutput = $this->updateLinkModule($soutput->data, $menuSrl); - } - $oModuleModel = getModel('module'); $moduleConfig = $oModuleModel->getModuleConfig('module'); if(!$moduleConfig->isUpdateFixedValue) @@ -449,69 +435,82 @@ class module extends ModuleObject $moduleConfig->isUpdateFixedValue = TRUE; $output = $oModuleController->updateModuleConfig('module', $moduleConfig); } + + // menu(sitemap)에 링크되지 않은 모듈인스턴스 링크 + $output1 = $this->linkAllModuleInstancesToSitemap(); + if(!$output1->toBool()) return $output1; + + return new Object(0, 'success_updated'); + } + + private function linkAllModuleInstancesToSitemap() + { + // 'unlinked' menu가 있는지 검사 + $oModuleController = getController('module'); + $oModuleModel = getModel('module'); + $moduleConfig = $oModuleModel->getModuleConfig('module'); - // check lost module - if(!$moduleConfig->isUpdateLostModule) + // 'unlinked menu 생성 + $menuSrl = 0; + if(!$moduleConfig->unlinked_menu_srl) { - $args = new stdClass(); - $args->site_srl = 0; - $output = executeQueryArray('module.getMidList', $args); - if(!$output->toBool()) + $menuSrl = $oModuleController->makeUnlinkedMenu(); + } + else + { + $menuArgs = new stdClass; + $menuArgs->menu_srl = $moduleConfig->unlinked_menu_srl; + $menuOutput = executeQuery('menu.getMenu', $menuArgs); + if(!$menuOutput->data) { - return $output; - } - if($output->data) - { - $oMenuAdminModel = getAdminModel('menu'); /* @var $oMenuAdminModel menuAdminModel */ - foreach($output->data as $row) - { - $args = new stdClass(); - $args->url = $row->mid; - $output2 = executeQuery('module.getMenuItem', $args); - - if(!$output2->data->count) - { - $menuInfo = $oMenuAdminModel->getMenuByTitle('Temporary menu'); - - if(!$menuInfo) - { - $args = new stdClass(); - $args->title = 'Temporary menu'; - $menuSrl = $args->menu_srl = getNextSequence(); - $args->listorder = $args->menu_srl * -1; - - $ioutput = executeQuery('menu.insertMenu', $args); - if(!$ioutput->toBool()) - { - return $ioutput; - } - } - else - { - $menuSrl = $menuInfo->menu_srl; - } - - $uoutput = $this->updateLinkModule(array($row), $menuSrl); - if(!$uoutput->toBool()) - { - return $uoutput; - } - } - } - } - - $oModuleController = getController('module'); - $moduleConfig->isUpdateLostModule = TRUE; - $output = $oModuleController->updateModuleConfig('module', $moduleConfig); - if(!$output->toBool()) - { - return $output; + $menuSrl = $oModuleController->makeUnlinkedMenu(); } } - return new Object(0, 'success_updated'); - } + // 'unlinked' menu를 module config에 저장 + if($menuSrl) + { + $moduleConfig->unlinked_menu_srl = $menuSrl; + $oModuleController->updateModuleConfig('module', $moduleConfig); + } + + // for 1.7.4 update, 기존에 생성된 Temporary menu 항목 정리 + $oMenuAdminModel = getAdminModel('menu'); // @var $oMenuAdminModel menuAdminModel + $args = new stdClass(); + $args->title = array("Temporary menu"); + $temp_menus = executeQueryArray('menu.getMenuByTitle', $args); + $args = new stdClass(); + foreach($temp_menus->data as $menu) + { + $args->current_menu_srl = $menu->menu_srl; + $args->menu_srl = $moduleConfig->unlinked_menu_srl; + $output3 = executeQuery('menu.updateMenuItems', $args); + + if($output3->toBool()) + { + // delete + $oMenuAdminController = getAdminController('menu'); + $oMenuAdminController->deleteMenu($menu->menu_srl); + } + } + + // menu_srl이 지정되지 않은 mid가 있는지 검사 + $args = new stdClass; + $args->site_srl = 0; + $output1 = executeQueryArray('module.getNotLinkedModuleBySiteSrl',$args); + if($output1->toBool() && $output1->data && count($output1->data) > 0) + { + $output2 = $this->updateLinkModule($output1->data, $menuSrl); + if(!$output2->toBool()) + { + return $output2; + } + } + + return new Object(0,'success'); + } + /** * insert menu when not linked module. * diff --git a/modules/module/module.controller.php b/modules/module/module.controller.php index 3f224870c..b53b20d48 100644 --- a/modules/module/module.controller.php +++ b/modules/module/module.controller.php @@ -418,32 +418,27 @@ class moduleController extends module { $menuArgs = new stdClass; $menuArgs->menu_srl = $args->menu_srl; - $menuOutput = executeQuery('menu.getMenu', $menuArgs); + $menuOutput = executeQuery('menu.getMenu', $menuArgs); // if menu is not created, create menu also. and does not supported that in virtual site. if(!$menuOutput->data && !$args->site_srl) { $oMenuAdminModel = getAdminModel('menu'); - $tempMenu = $oMenuAdminModel->getMenuByTitle(array('Temporary menu')); - - if(!$tempMenu) + + $oModuleModel = getModel('module'); + $moduleConfig = $oModuleModel->getModuleConfig('module'); + + $menuSrl = $moduleConfig->unlinked_menu_srl; + if(!$menuSrl) { - $siteMapArgs = new stdClass; - $siteMapArgs->site_srl = 0; - $siteMapArgs->title = 'Temporary menu'; - $siteMapArgs->listorder = $siteMapArgs->menu_srl * -1; - $tempMenu = new stdClass; - $tempMenu->menu_srl = $siteMapArgs->menu_srl = getNextSequence(); - - $siteMapOutput = executeQuery('menu.insertMenu', $siteMapArgs); - if(!$siteMapOutput->toBool()) - { - $oDB->rollback(); - return $siteMapOutput; - } + $menuSrl = $this->makeUnlinkedMenu(); + + // 'unlinked' menu를 module config에 저장 + $moduleConfig->unlinked_menu_srl = $menuSrl; + $this->updateModuleConfig('module', $moduleConfig); } - $menuArgs->menu_srl = $tempMenu->menu_srl; + $menuArgs->menu_srl = $menuSrl; $menuArgs->menu_item_srl = getNextSequence(); $menuArgs->parent_srl = 0; $menuArgs->open_window = 'N'; @@ -461,7 +456,7 @@ class moduleController extends module } $oMenuAdminController = getAdminController('menu'); - $oMenuAdminController->makeXmlFile($tempMenu->menu_srl); + $oMenuAdminController->makeXmlFile($menuSrl); } } @@ -489,6 +484,22 @@ class moduleController extends module return $output; } + function makeUnlinkedMenu() + { + $args = new stdClass(); + $args->title = 'unlinked'; + $menuSrl = $args->menu_srl = getNextSequence(); + $args->listorder = $args->menu_srl * -1; + + $output = executeQuery('menu.insertMenu', $args); + if($output->toBool()) + { + return $menuSrl; + } + + return false; + } + /** * @brief Modify module information */