#225 사이트맵에 temporary menu가 중복생성되는 오류 해결,

메뉴명을 'temporary menu'에서  'unlinked'로 변경하였으며 'unlinked' 메뉴는 무조건 하나 존재하게 됨.
기존의 temporary menu는 삭제하도록 했고, temporary menu에 있던 하위메뉴들은 'unlinked' 메뉴 하위로 이동됨
This commit is contained in:
khongchi 2014-01-22 21:23:57 +09:00
parent 6a5524abea
commit 82974b0438
4 changed files with 139 additions and 110 deletions

View file

@ -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)
{

View file

@ -0,0 +1,21 @@
<query id="updateMenuItems" action="update">
<tables>
<table name="menu_item" />
</tables>
<columns>
<column name="menu_srl" var="menu_srl" />
<column name="parent_srl" var="parent_srl" />
<column name="name" var="name" />
<column name="url" var="url" />
<column name="is_shortcut" var="is_shortcut" />
<column name="open_window" var="open_window" />
<column name="expand" var="expand" />
<column name="normal_btn" var="normal_btn" />
<column name="hover_btn" var="hover_btn" />
<column name="active_btn" var="active_btn" />
<column name="group_srls" var="group_srls" />
</columns>
<conditions>
<condition operation="equal" column="menu_srl" var="current_menu_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -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.
*

View file

@ -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
*/