issue 70 menu auto setting completed

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@8615 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ovclas 2011-07-21 02:49:07 +00:00
parent f3df85dcca
commit bfa45bfde4
12 changed files with 400 additions and 81 deletions

View file

@ -275,7 +275,7 @@
$logged_info = $oMemberModel->getLoggedInfo(); $logged_info = $oMemberModel->getLoggedInfo();
if($logged_info->is_admin=='Y') { if($logged_info->is_admin=='Y') {
$orig_module->makeGnbUrl(); $orig_module->makeGnbUrl($forward->module);
$oModule->setLayoutPath("./modules/admin/tpl"); $oModule->setLayoutPath("./modules/admin/tpl");
$oModule->setLayoutFile("layout.html"); $oModule->setLayoutFile("layout.html");
} }

View file

@ -3,6 +3,7 @@
class adminAdminModel extends admin class adminAdminModel extends admin
{ {
var $pwd; var $pwd;
var $gnbLangBuffer;
function getSFTPList() function getSFTPList()
{ {
@ -144,4 +145,36 @@
return $param; return $param;
} }
function getAdminMenuLang()
{
$currentLang = Context::getLangType();
$cacheFile = sprintf('./files/cache/menu/adminMenu.%s.lang.php', $currentLang);
// Update if no cache file exists or it is older than xml file
if(!is_readable($cacheFile))
{
$oModuleModel = &getModel('module');
$installed_module_list = $oModuleModel->getModulesXmlInfo();
$this->gnbLangBuffer = '<?php ';
foreach($installed_module_list AS $key=>$value)
{
$moduleActionInfo = $oModuleModel->getModuleActionXml($value->module);
if(is_object($moduleActionInfo->menu))
{
foreach($moduleActionInfo->menu AS $key2=>$value2)
{
$lang->menu_gnb_sub[$key2] = $value2->title;
$this->gnbLangBuffer .=sprintf('$lang->menu_gnb_sub[\'%s\'] = \'%s\';', $key2, $value2->title);
}
}
}
$this->gnbLangBuffer .= ' ?>';
FileHandler::writeFile($cacheFile, $this->gnbLangBuffer);
}
else include $cacheFile;
return $lang->menu_gnb_sub;
}
} }

View file

@ -46,9 +46,12 @@
} }
function makeGnbUrl() function makeGnbUrl($module = 'admin')
{ {
global $lang; global $lang;
$oAdminAdminModel = &getAdminModel('admin');
$lang->menu_gnb_sub = $oAdminAdminModel->getAdminMenuLang();
$oMenuAdminModel = &getAdminModel('menu'); $oMenuAdminModel = &getAdminModel('menu');
$menu_info = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__'); $menu_info = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__');
@ -59,7 +62,44 @@
return; return;
} }
$oModuleModel = &getModel('module');
$moduleActionInfo = $oModuleModel->getModuleActionXml($module);
if(is_object($moduleActionInfo->menu))
{
$subMenuTitle = '';
foreach($moduleActionInfo->menu AS $key=>$value)
{
if($value->acts && in_array(Context::get('act'), $value->acts))
{
$subMenuTitle = $value->title;
break;
}
}
}
$parentSrl = 0;
if(is_array($menu->list))
{
foreach($menu->list AS $key=>$value)
{
$parentMenu = $value;
if(is_array($parentMenu['list']) && count($parentMenu['list']) > 0)
{
foreach($parentMenu['list'] AS $key2=>$value2)
{
$childMenu = $value2;
if($subMenuTitle == $childMenu['text'])
{
$parentSrl = $childMenu['parent_srl'];
break;
}
}
}
}
}
Context::set('gnbUrlList', $menu->list); Context::set('gnbUrlList', $menu->list);
Context::set('parentSrl', $parentSrl);
} }
function loadSideBar() function loadSideBar()
@ -372,6 +412,19 @@
$this->setTemplateFile('config'); $this->setTemplateFile('config');
} }
/**
* @brief Display Admin Menu Configuration(settings) page
* @return none
**/
function dispAdminMenuSetup()
{
$oMenuAdminModel = &getAdminModel('menu');
$output = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__');
Context::set('menu_srl', $output->menu_srl);
$this->setTemplateFile('menu_setup');
}
function showSendEnv() { function showSendEnv() {
if(Context::getResponseMethod() != 'HTML') return; if(Context::getResponseMethod() != 'HTML') return;

View file

@ -6,6 +6,7 @@
**/ **/
class admin extends ModuleObject { class admin extends ModuleObject {
var $xeMenuTitle;
/** /**
* @brief install admin module * @brief install admin module
@ -19,8 +20,11 @@
* @brief if update is necessary it returns true * @brief if update is necessary it returns true
**/ **/
function checkUpdate() { function checkUpdate() {
$this->xeMenuTitle = '__XE_ADMIN__';
$oMenuAdminModel = &getAdminModel('menu'); $oMenuAdminModel = &getAdminModel('menu');
$output = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__'); $output = $oMenuAdminModel->getMenuByTitle($this->xeMenuTitle);
//if(1)
if(!$output->menu_srl) if(!$output->menu_srl)
{ {
$this->_createXeAdminMenu(); $this->_createXeAdminMenu();
@ -70,94 +74,125 @@
function _createXeAdminMenu() function _createXeAdminMenu()
{ {
//insert menu //insert menu
$args->title = '__XE_ADMIN__'; $args->title = $this->xeMenuTitle;
$args->menu_srl = getNextSequence(); $args->menu_srl = getNextSequence();
//$args->menu_srl = 3302;
$args->listorder = $args->menu_srl * -1; $args->listorder = $args->menu_srl * -1;
$output = executeQuery('menu.insertMenu', $args); $output = executeQuery('menu.insertMenu', $args);
$menuSrl = $args->menu_srl;
unset($args);
$adminUrl = getUrl('', 'module', 'admin'); // gnb item create
$gnbList = array( $gnbList = array('dashboard', 'site', 'user', 'content', 'theme', 'extensions', 'configuration');
'dashboard'=>array(
'url'=>$adminUrl,
'lnbList'=>array()
),
'site'=>array(
'url'=>$adminUrl,
'lnbList'=>array()
),
'user'=>array(
'url'=>$adminUrl,
'lnbList'=>array('userList'=>$adminUrl, 'setting'=>$adminUrl, 'point'=>$adminUrl)
),
'content'=>array(
'url'=>getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList'),
'lnbList'=>array(
'document'=>getUrl('', 'module', 'admin', 'act', 'dispDocumentAdminList'),
'comment'=>$adminUrl,
'trackback'=>$adminUrl,
'file'=>$adminUrl,
'poll'=>$adminUrl,
'dataMigration'=>$adminUrl
)
),
'theme'=>array(
'url'=>$adminUrl,
'lnbList'=>array()
),
'extensions'=>array(
'url'=>$adminUrl,
'lnbList'=>array('easyInstaller'=>$adminUrl, 'installedLayout'=>$adminUrl, 'installedModule'=>$adminUrl, 'installedWidget'=>$adminUrl, 'installedAddon'=>$adminUrl, 'WYSIWYGEditor'=>$adminUrl, 'spamFilter'=>$adminUrl)
),
'configuration'=>array(
'url'=>$adminUrl,
'lnbList'=>array('general'=>$adminUrl, 'fileUpload'=>$adminUrl)
)
);
$oMemberModel = &getModel('member');
$output = $oMemberModel->getAdminGroup(array('group_srl'));
$adminGroupSrl = $output->group_srl;
// common argument setting
$args->open_window = 'N';
$args->expand = 'N';
$args->normal_btn = '';
$args->hover_btn = '';
$args->active_btn = '';
$args->group_srls = $adminGroupSrl;
foreach($gnbList AS $key=>$value) foreach($gnbList AS $key=>$value)
{ {
//insert menu item //insert menu item
$args->menu_srl = $menuSrl;
$args->menu_item_srl = getNextSequence(); $args->menu_item_srl = getNextSequence();
$args->name = '{$lang->menu_gnb[\''.$key.'\']}'; $args->name = '{$lang->menu_gnb[\''.$value.'\']}';
$args->url = $value['url']; if($value == 'dashboard') $args->url = getUrl('', 'module', 'admin');
else $args->url = '#';
$args->listorder = -1*$args->menu_item_srl; $args->listorder = -1*$args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args); $output = executeQuery('menu.insertMenuItem', $args);
}
if(is_array($value) && count($value)>0) $oMenuAdminModel = &getAdminModel('menu');
$columnList = array('menu_item_srl', 'name');
$output = $oMenuAdminModel->getMenuItems($menuSrl, 0, $columnList);
foreach($output->data AS $key=>$value)
{
preg_match('/\{\$lang->menu_gnb\[(.*?)\]\}/i', $value->name, $m);
$gnbDBList[$m[1]] = $value->menu_item_srl;
}
unset($args);
$oModuleModel = &getModel('module');
$installed_module_list = $oModuleModel->getModulesXmlInfo();
// gnb sub item create
if(is_array($installed_module_list))
{
$oMemberModel = &getModel('member');
$output = $oMemberModel->getAdminGroup(array('group_srl'));
$adminGroupSrl = $output->group_srl;
// common argument setting
$args->menu_srl = $menuSrl;
$args->open_window = 'N';
$args->expand = 'N';
$args->normal_btn = '';
$args->hover_btn = '';
$args->active_btn = '';
$args->group_srls = $adminGroupSrl;
foreach($installed_module_list AS $key=>$value)
{ {
$args2->menu_srl = $args->menu_srl; //if($value->module == 'document')
$args2->open_window = 'N'; //{
$args2->expand = 'N'; $moduleActionInfo = $oModuleModel->getModuleActionXml($value->module);
$args2->normal_btn = ''; if(is_object($moduleActionInfo->menu))
$args2->hover_btn = ''; {
$args2->active_btn = ''; foreach($moduleActionInfo->menu AS $key2=>$value2)
$args2->group_srls = $adminGroupSrl; {
foreach($value['lnbList'] AS $key2=>$value2) $gnbKey = "'".$this->_getGnbKey($key2)."'";
{
//insert menu item //insert menu item
$args2->menu_item_srl = getNextSequence(); $args->menu_item_srl = getNextSequence();
$args2->parent_srl = $args->menu_item_srl; $args->parent_srl = $gnbDBList[$gnbKey];
$args2->name = '{$lang->menu_gnb_sub[\''.$key.'\'][\''.$key2.'\']}'; //$args->name = '{$lang->menu_gnb_sub['.$gnbKey.'][\''.$key2.'\']}';
$args2->url = $value2; $args->name = '{$lang->menu_gnb_sub[\''.$key2.'\']}';
$args2->listorder = -1*$args2->menu_item_srl; $args->url = getNotEncodedUrl('', 'module', 'admin', 'act', $value2->index);
$output = executeQuery('menu.insertMenuItem', $args2); $args->listorder = -1*$args->menu_item_srl;
} $output = executeQuery('menu.insertMenuItem', $args);
}
}
//}
} }
} }
$oMenuAdminConroller = &getAdminController('menu'); $oMenuAdminConroller = &getAdminController('menu');
$oMenuAdminConroller->makeXmlFile($args->menu_srl); $oMenuAdminConroller->makeXmlFile($menuSrl);
}
function _getGnbKey($menuName)
{
switch($menuName) {
case 'site':
return 'site';
break;
case 'userList':
case 'userSetting':
case 'point':
return 'user';
break;
case 'document':
case 'comment':
case 'trackback':
case 'file':
case 'poll':
case 'importer':
return 'content';
break;
case 'theme':
return 'theme';
break;
case 'easyInstall':
case 'installedLayout':
case 'installedModule':
case 'installedWidget':
case 'installedAddon':
case 'editor':
case 'spamFilter':
return 'extensions';
break;
case 'adminConfiguration':
case 'adminMenuSetup':
case 'fileUpload':
return 'configuration';
break;
default:
return 'extensions';
}
} }
} }
?> ?>

View file

@ -30,7 +30,7 @@
<div class="gnb jx"> <div class="gnb jx">
<ul> <ul>
<!--@foreach($gnbUrlList AS $key=>$value)--> <!--@foreach($gnbUrlList AS $key=>$value)-->
<li <!--@if($category == $key)-->class="activeOn"<!--@end-->><a href="{html_entity_decode($value['href'])}">{$value['text']}</a> <li <!--@if($parentSrl == $key)-->class="activeOn"<!--@end-->><a href="{html_entity_decode($value['href'])}">{$value['text']}</a>
<!--@if(count($gnbUrlList[$key]['list']) > 0)--> <!--@if(count($gnbUrlList[$key]['list']) > 0)-->
<ul> <ul>
<!--@foreach($gnbUrlList[$key]['list'] AS $key2=>$value2)--> <!--@foreach($gnbUrlList[$key]['list'] AS $key2=>$value2)-->

View file

@ -1,9 +1,9 @@
<div class="lnb"> <div class="lnb">
<h2 class="h2">{$lang->menu_gnb[$category]}</h2> <h2 class="h2">{$lang->menu_gnb[$category]}</h2>
<ul> <ul>
<!--@if(count($gnbSubUrlList[$category]) > 0)--> <!--@if(count($gnbUrlList[$parentSrl]['list']) > 0)-->
<!--@foreach($gnbSubUrlList[$category] AS $key=>$value)--> <!--@foreach($gnbUrlList[$parentSrl]['list'] AS $key=>$value)-->
<li><a href="#">{$lang->menu_gnb_sub[$category][$key]}</a></li> <li><a href="{html_entity_decode($value['href'])}">{$value['text']}</a></li>
<!--@end--> <!--@end-->
<!--@end--> <!--@end-->
</ul> </ul>

View file

@ -0,0 +1,44 @@
jQuery(function($){
var menuList;
var parentSrl;
var editForm = $('#editForm');
var listForm = $('#listForm');
$('button._add').click(function(){
parentSrl = $(this).parent().prevAll('._parent_key').val();
editForm.find('input[name=parent_srl]').val(parentSrl);
if(!menuList)
{
var params = new Array();
var response_tags = new Array('menuList');
exec_xml("menu","procMenuAdminAllActList", params, completeGetActList, response_tags);
}
});
function completeGetActList(obj)
{
menuList = obj.menuList;
if(menuList)
{
var menuNameList = $('#menuNameList');
for(var x in menuList)
{
var menu = menuList[x];
menuNameList.append('<option value="'+x+'">'+menu.title+'</option>');
}
}
}
$('button._parent_delete').click(function() {
var menu_item_srl = $(this).parent().prevAll('._parent_key').val();
listForm.find('input[name=menu_item_srl]').val(menu_item_srl);
listForm.submit();
});
$('button._child_delete').click(function() {
var menu_item_srl = $(this).parents('li').prevAll('._child_key').val();
listForm.find('input[name=menu_item_srl]').val(menu_item_srl);
listForm.submit();
});
});

View file

@ -0,0 +1,56 @@
<load target="./js/menu_setup.js" />
<div class="content" id="content">
<form id="listForm" action="./">
<input type="hidden" name="act" value="procMenuAdminDeleteItem" />
<input type="hidden" name="menu_srl" value="{$menu_srl}" />
<input type="hidden" name="menu_item_srl" value="" />
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin', 'act', 'dispAdminMenuSetup')}" />
<h1 class="h1">Admin Menu Setup</h1>
<div class="portlet siteMap">
<h2 class="h2"><input value="Admin Menu" disabled /></h2>
<ul class="lined">
<!--@foreach($gnbUrlList AS $key=>$value)-->
<li>
<input type="hidden" value="{$key}" class="_parent_key" />
<input value="{$value['text']}" /> <span class="side"> <button type="button" class="modalAnchor _add">Add</button> | <button type="button" class="_parent_delete">Delete</button></span>
<!--@if(is_array($value['list']) && count($value['list'])>0)-->
<ul>
<!--@foreach($value['list'] AS $key2=>$value2)-->
<input type="hidden" value="{$key2}" class="_child_key" />
<li><input value="{$value2['text']}" /> <span class="side"><button type="button" class="_child_delete">Delete</button></span></li>
<!--@end-->
</ul>
<!--@end-->
</li>
<!--@end-->
</ul>
</div>
<div class="btnArea">
<span class="btn medium"><input type="submit" value="Save it" /></span>
<span class="btn medium"><button type="button">Add New Site Map...</button></span>
</div>
</form>
<div class="modal" id="editMenu">
<div class="fg">
<form id="editForm" action="./" class="form">
<input type="hidden" name="act" value="procMenuAdminInsertItemForAdminMenu" />
<input type="hidden" name="menu_srl" value="{$menu_srl}" />
<input type="hidden" name="parent_srl" value="" />
<h2 class="h2">My Navigation Setting</h2>
<ul>
<li>
<p class="q"><label for="name">Name</label></p>
<div class="a">
<select name="menu_name" id="menuNameList">
</select>
</div>
</li>
</ul>
<div class="btnArea">
<span class="btn"><input type="submit" value="Save" /></span>
</div>
</form>
</div>
</div>
</div>

View file

@ -6,11 +6,21 @@
**/ **/
class documentAdminView extends document { class documentAdminView extends document {
/** /**
* @brief Initialization * @brief Initialization
**/ **/
function init() { function init() {
// check current location in admin menu
$oModuleModel = &getModel('module');
$info = $oModuleModel->getModuleActionXml('document');
foreach($info->menu AS $key => $menu)
{
if(in_array($this->act, $menu->acts))
{
Context::set('currentMenu', $key);
break;
}
}
} }
/** /**

View file

@ -197,6 +197,12 @@
$this->add('menu_title', $menu_title); $this->add('menu_title', $menu_title);
$this->add('menu_item_srl', $parent_srl); $this->add('menu_item_srl', $parent_srl);
$this->setMessage('success_deleted'); $this->setMessage('success_deleted');
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminManagement', 'menu_srl', $args->menu_srl);
header('location:'.$returnUrl);
return;
}
} }
/** /**
@ -318,6 +324,77 @@
$this->add('target', $target); $this->add('target', $target);
} }
/**
* @brief get all act list for admin menu
**/
function procMenuAdminAllActList() {
$oModuleModel = &getModel('module');
$installed_module_list = $oModuleModel->getModulesXmlInfo();
if(is_array($installed_module_list))
{
$currentLang = Context::getLangType();
foreach($installed_module_list AS $key=>$value)
{
$cache_file = sprintf("./files/cache/module_info/%s.%s.php", $value->module, $currentLang);
if(is_readable($cache_file))
include $cache_file;
}
}
$this->add('menuList', $info->menu);
}
/**
* @brief get all act list for admin menu
**/
function procMenuAdminInsertItemForAdminMenu()
{
$requestArgs = Context::getRequestVars();
// variable setting
$logged_info = Context::get('logged_info');
$oMenuAdminModel = &getAdminModel('menu');
$oMemberModel = &getModel('member');
$parentMenuInfo = $oMenuAdminModel->getMenuItemInfo($requestArgs->parent_srl);
$groupSrlList = $oMemberModel->getMemberGroups($logged_info->member_srl);
preg_match('/\{\$lang->menu_gnb\[(.*?)\]\}/i', $parentMenuInfo->name, $m);
$cache_file = sprintf("./files/cache/module_info/%s.%s.php", $requestArgs->menu_name, Context::getLangType());
include $cache_file;
$args->menu_item_srl = (!$requestArgs->menu_item_srl) ? getNextSequence() : $requestArgs->menu_item_srl;
$args->parent_srl = $requestArgs->parent_srl;
$args->menu_srl = $requestArgs->menu_srl;
$args->name = sprintf('{$lang->menu_gnb_sub[%s][\'%s\']}', $m[1], $requestArgs->menu_name);
$args->url = getNotEncodedUrl('', 'module', 'admin', 'act', $info->menu->{$requestArgs->menu_name}->index);
$args->open_window = 'N';
$args->expand = 'N';
$args->normal_btn = '';
$args->hover_btn = '';
$args->active_btn = '';
$args->group_srls = implode(',', array_keys($groupSrlList));
$args->listorder = -1*$args->menu_item_srl;
// Check if already exists
$oMenuModel = &getAdminModel('menu');
$item_info = $oMenuModel->getMenuItemInfo($args->menu_item_srl);
// Update if exists
if($item_info->menu_item_srl == $args->menu_item_srl) {
$output = executeQuery('menu.updateMenuItem', $args);
if(!$output->toBool()) return $output;
// Insert if not exist
} else {
$args->listorder = -1*$args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
if(!$output->toBool()) return $output;
}
// Get information of the menu
$menu_info = $oMenuModel->getMenu($args->menu_srl);
$menu_title = $menu_info->title;
// Update the xml file and get its location
$xml_file = $this->makeXmlFile($args->menu_srl);
}
/** /**
* @brief Generate XML file for menu and return its location * @brief Generate XML file for menu and return its location
**/ **/
@ -521,6 +598,7 @@
else $child_output = array("buff"=>"", "url_list"=>array()); else $child_output = array("buff"=>"", "url_list"=>array());
// List variables // List variables
$names = $oMenuAdminModel->getMenuItemNames($node->name, $site_srl); $names = $oMenuAdminModel->getMenuItemNames($node->name, $site_srl);
unset($name_arr_str);
foreach($names as $key => $val) { foreach($names as $key => $val) {
$name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace(array('\\','"'),array('\\\\','&quot;'),$val)); $name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace(array('\\','"'),array('\\\\','&quot;'),$val));
} }

View file

@ -107,6 +107,15 @@
return $node; return $node;
} }
function getMenuItems($menu_srl, $parent_srl = null, $columnList = array())
{
$args->menu_srl = $menu_srl;
$args->parent_srl = $parent_srl;
$output = executeQueryArray('menu.getMenuItems', $args, $columnList);
return $output;
}
/** /**
* @brief Return menu name in each language to support multi-language * @brief Return menu name in each language to support multi-language
*/ */

View file

@ -7,6 +7,7 @@
</columns> </columns>
<conditions> <conditions>
<condition operation="equal" column="menu_srl" var="menu_srl" filter="number" notnull="notnull" /> <condition operation="equal" column="menu_srl" var="menu_srl" filter="number" notnull="notnull" />
<condition operation="equal" column="parent_srl" var="parent_srl" filter="number" pipe="and" />
</conditions> </conditions>
<navigation> <navigation>
<index var="sort_index" default="listorder" order="desc" /> <index var="sort_index" default="listorder" order="desc" />