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();
if($logged_info->is_admin=='Y') {
$orig_module->makeGnbUrl();
$orig_module->makeGnbUrl($forward->module);
$oModule->setLayoutPath("./modules/admin/tpl");
$oModule->setLayoutFile("layout.html");
}

View file

@ -3,6 +3,7 @@
class adminAdminModel extends admin
{
var $pwd;
var $gnbLangBuffer;
function getSFTPList()
{
@ -144,4 +145,36 @@
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;
$oAdminAdminModel = &getAdminModel('admin');
$lang->menu_gnb_sub = $oAdminAdminModel->getAdminMenuLang();
$oMenuAdminModel = &getAdminModel('menu');
$menu_info = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__');
@ -59,7 +62,44 @@
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('parentSrl', $parentSrl);
}
function loadSideBar()
@ -372,6 +412,19 @@
$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() {
if(Context::getResponseMethod() != 'HTML') return;

View file

@ -6,6 +6,7 @@
**/
class admin extends ModuleObject {
var $xeMenuTitle;
/**
* @brief install admin module
@ -19,8 +20,11 @@
* @brief if update is necessary it returns true
**/
function checkUpdate() {
$this->xeMenuTitle = '__XE_ADMIN__';
$oMenuAdminModel = &getAdminModel('menu');
$output = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__');
$output = $oMenuAdminModel->getMenuByTitle($this->xeMenuTitle);
//if(1)
if(!$output->menu_srl)
{
$this->_createXeAdminMenu();
@ -70,94 +74,125 @@
function _createXeAdminMenu()
{
//insert menu
$args->title = '__XE_ADMIN__';
$args->title = $this->xeMenuTitle;
$args->menu_srl = getNextSequence();
//$args->menu_srl = 3302;
$args->listorder = $args->menu_srl * -1;
$output = executeQuery('menu.insertMenu', $args);
$menuSrl = $args->menu_srl;
unset($args);
$adminUrl = getUrl('', 'module', 'admin');
$gnbList = array(
'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;
// gnb item create
$gnbList = array('dashboard', 'site', 'user', 'content', 'theme', 'extensions', 'configuration');
foreach($gnbList AS $key=>$value)
{
//insert menu item
$args->menu_srl = $menuSrl;
$args->menu_item_srl = getNextSequence();
$args->name = '{$lang->menu_gnb[\''.$key.'\']}';
$args->url = $value['url'];
$args->name = '{$lang->menu_gnb[\''.$value.'\']}';
if($value == 'dashboard') $args->url = getUrl('', 'module', 'admin');
else $args->url = '#';
$args->listorder = -1*$args->menu_item_srl;
$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;
$args2->open_window = 'N';
$args2->expand = 'N';
$args2->normal_btn = '';
$args2->hover_btn = '';
$args2->active_btn = '';
$args2->group_srls = $adminGroupSrl;
foreach($value['lnbList'] AS $key2=>$value2)
{
//insert menu item
$args2->menu_item_srl = getNextSequence();
$args2->parent_srl = $args->menu_item_srl;
$args2->name = '{$lang->menu_gnb_sub[\''.$key.'\'][\''.$key2.'\']}';
$args2->url = $value2;
$args2->listorder = -1*$args2->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args2);
}
//if($value->module == 'document')
//{
$moduleActionInfo = $oModuleModel->getModuleActionXml($value->module);
if(is_object($moduleActionInfo->menu))
{
foreach($moduleActionInfo->menu AS $key2=>$value2)
{
$gnbKey = "'".$this->_getGnbKey($key2)."'";
//insert menu item
$args->menu_item_srl = getNextSequence();
$args->parent_srl = $gnbDBList[$gnbKey];
//$args->name = '{$lang->menu_gnb_sub['.$gnbKey.'][\''.$key2.'\']}';
$args->name = '{$lang->menu_gnb_sub[\''.$key2.'\']}';
$args->url = getNotEncodedUrl('', 'module', 'admin', 'act', $value2->index);
$args->listorder = -1*$args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
}
}
//}
}
}
$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">
<ul>
<!--@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)-->
<ul>
<!--@foreach($gnbUrlList[$key]['list'] AS $key2=>$value2)-->

View file

@ -1,9 +1,9 @@
<div class="lnb">
<h2 class="h2">{$lang->menu_gnb[$category]}</h2>
<ul>
<!--@if(count($gnbSubUrlList[$category]) > 0)-->
<!--@foreach($gnbSubUrlList[$category] AS $key=>$value)-->
<li><a href="#">{$lang->menu_gnb_sub[$category][$key]}</a></li>
<!--@if(count($gnbUrlList[$parentSrl]['list']) > 0)-->
<!--@foreach($gnbUrlList[$parentSrl]['list'] AS $key=>$value)-->
<li><a href="{html_entity_decode($value['href'])}">{$value['text']}</a></li>
<!--@end-->
<!--@end-->
</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 {
/**
* @brief Initialization
**/
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_item_srl', $parent_srl);
$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);
}
/**
* @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
**/
@ -521,6 +598,7 @@
else $child_output = array("buff"=>"", "url_list"=>array());
// List variables
$names = $oMenuAdminModel->getMenuItemNames($node->name, $site_srl);
unset($name_arr_str);
foreach($names as $key => $val) {
$name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace(array('\\','"'),array('\\\\','&quot;'),$val));
}

View file

@ -107,6 +107,15 @@
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
*/

View file

@ -7,6 +7,7 @@
</columns>
<conditions>
<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>
<navigation>
<index var="sort_index" default="listorder" order="desc" />