diff --git a/modules/menu/menu.admin.controller.php b/modules/menu/menu.admin.controller.php index aaf06d665..78bcdcaa3 100644 --- a/modules/menu/menu.admin.controller.php +++ b/modules/menu/menu.admin.controller.php @@ -1,730 +1,153 @@ setTemplatePath($this->module_path.'tpl'); + //$this->homeMenuCacheFile = sprintf('./files/cache/menu/homeSitemap.php'); + } + + /** + * Add a menu + * @return void|object + */ + function procMenuAdminInsert() + { + // List variables + $site_module_info = Context::get('site_module_info'); + $args->site_srl = (int)$site_module_info->site_srl; + $args->title = Context::get('title'); + + $args->menu_srl = getNextSequence(); + $args->listorder = $args->menu_srl * -1; + + $output = executeQuery('menu.insertMenu', $args); + if(!$output->toBool()) return $output; + + $this->add('menu_srl', $args->menu_srl); + $this->setMessage('success_registed'); + + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent'); + $this->setRedirectUrl($returnUrl); + } + + /** + * Change the menu title + * @return void|object + */ + function procMenuAdminUpdate() + { + // List variables + $args->title = Context::get('title'); + $args->menu_srl = Context::get('menu_srl'); + + $output = executeQuery('menu.updateMenu', $args); + if(!$output->toBool()) return $output; + + $this->setMessage('success_registed'); + + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminManagement', 'menu_srl', $args->menu_srl); + $this->setRedirectUrl($returnUrl); + } + + /** + * Delete menu process method + * @return void|Object + */ + function procMenuAdminDelete() + { + $menu_srl = Context::get('menu_srl'); + + $oMenuAdminModel = &getAdminModel('menu'); + $menu_info = $oMenuAdminModel->getMenu($menu_srl); + + $oAdmin = &getClass('admin'); + if($menu_info->title == $oAdmin->getAdminMenuName()) + return new Object(-1, 'msg_adminmenu_cannot_delete'); + + $this->deleteMenu($menu_srl); + + $this->setMessage('success_deleted', 'info'); + + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminSiteMap'); + $this->setRedirectUrl($returnUrl); + } + + /** + * Delete menu + * Delete menu_item and xml cache files + * @return Object + */ + function deleteMenu($menu_srl) + { + $oDB = DB::getInstance(); + $oDB->begin(); + + $args->menu_srl = $menu_srl; + + // Delete modules + $output = executeQueryArray('menu.getMenuItems', $args); + if(!$output->toBool()) { - $this->setTemplatePath($this->module_path.'tpl'); - //$this->homeMenuCacheFile = sprintf('./files/cache/menu/homeSitemap.php'); - } - - /** - * Add a menu - * @return void|object - */ - function procMenuAdminInsert() { - // List variables - $site_module_info = Context::get('site_module_info'); - $args->site_srl = (int)$site_module_info->site_srl; - $args->title = Context::get('title'); - - $args->menu_srl = getNextSequence(); - $args->listorder = $args->menu_srl * -1; - - $output = executeQuery('menu.insertMenu', $args); - if(!$output->toBool()) return $output; - - $this->add('menu_srl', $args->menu_srl); - $this->setMessage('success_registed'); - - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminContent'); - $this->setRedirectUrl($returnUrl); - } - - /** - * Change the menu title - * @return void|object - */ - function procMenuAdminUpdate() { - // List variables - $args->title = Context::get('title'); - $args->menu_srl = Context::get('menu_srl'); - - $output = executeQuery('menu.updateMenu', $args); - if(!$output->toBool()) return $output; - - $this->setMessage('success_registed'); - - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminManagement', 'menu_srl', $args->menu_srl); - $this->setRedirectUrl($returnUrl); - } - - /** - * Delete menu process method - * @return void|Object - */ - function procMenuAdminDelete() { - $menu_srl = Context::get('menu_srl'); - - $oMenuAdminModel = &getAdminModel('menu'); - $menu_info = $oMenuAdminModel->getMenu($menu_srl); - - $oAdmin = &getClass('admin'); - if($menu_info->title == $oAdmin->getAdminMenuName()) - return new Object(-1, 'msg_adminmenu_cannot_delete'); - - $this->deleteMenu($menu_srl); - - $this->setMessage('success_deleted', 'info'); - - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminSiteMap'); - $this->setRedirectUrl($returnUrl); - } - - /** - * Delete menu - * Delete menu_item and xml cache files - * @return Object - */ - function deleteMenu($menu_srl) { - $oDB = DB::getInstance(); - $oDB->begin(); - - $args->menu_srl = $menu_srl; - - // Delete modules - $output = executeQueryArray('menu.getMenuItems', $args); - if(!$output->toBool()) - { - return $output; - } - - $oModuleController = getController('module'); - $oModuleModel = getModel('module'); - - foreach($output->data as $itemInfo) - { - if($itemInfo->is_shortcut != 'Y' && !preg_match('/^http/i',$itemInfo->url)) - { - $moduleInfo = $oModuleModel->getModuleInfoByMid($itemInfo->url, $menuInfo->site_srl); - if($moduleInfo->module_srl) - { - $output = $oModuleController->deleteModule($moduleInfo->module_srl); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - } - } - } - - // Delete menu items - $output = executeQuery("menu.deleteMenuItems", $args); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - // Delete the menu - $output = executeQuery("menu.deleteMenu", $args); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - - // Delete cache files - $cache_list = FileHandler::readDir("./files/cache/menu","",false,true); - if(count($cache_list)) { - foreach($cache_list as $cache_file) { - $pos = strpos($cache_file, $menu_srl.'.'); - if($pos>0)FileHandler::removeFile($cache_file); - } - } - // Delete images of menu buttons - $image_path = sprintf('./files/attach/menu_button/%s', $menu_srl); - FileHandler::removeDir($image_path); - - $oDB->commit(); - - return new Object(0,'success_deleted'); - } - - - /** - * Add an item to the menu, simple version - * @return void - */ - public function procMenuAdminInsertItem($request = NULL) - { - $isProc = false; - if(!$request) - { - $isProc = true; - $request = Context::getRequestVars(); - } - - if(!$request->parent_srl || !$request->menu_name) - { - return new Object(-1, 'msg_invalid_request'); - } - - $this->_setMenuSrl($request->parent_srl, $request->menu_srl); - if(!$request->menu_srl) - { - return new Object(-1, 'msg_invalid_request'); - } - - if($request->is_shortcut == 'Y') - { - $result = $this->_insertShortcut($request); - } - else - { - $result = $this->_insertMenu($request, $isProc); - } - - if($result->error < 0) - { - return new Object($result->error, $result->message); - } - - // recreate menu cache file - $this->makeXmlFile($request->menu_srl); - - if(!$isProc) - { - return $args->menu_item_srl; - } - } - - private function _setMenuSrl(&$parent_srl, &$menu_srl) - { - // set menu srl - $oMenuAdminModel = &getAdminModel('menu'); - $itemInfo = $oMenuAdminModel->getMenuItemInfo($parent_srl); - // parent_srl is parent menu item's srl - if($itemInfo->menu_srl) - { - $menu_srl = $itemInfo->menu_srl; - } - // in this case, parent_srl is menu srl - else - { - $output = $oMenuAdminModel->getMenu($parent_srl); - if($output->menu_srl == $parent_srl) - { - $menu_srl = $output->menu_srl; - $parent_srl = 0; - } - } - } - - private function _insertShortcut(&$request) - { - $oDB = DB::getInstance(); - $oDB->begin(); - - // type is url - if(preg_match('/^http/i', $request->shortcut_target)) - { - // set menu variable - $args->menu_srl = $request->menu_srl; - $args->parent_srl = $request->parent_srl; - $args->open_window = $request->menu_open_window; - $args->expand = $request->menu_expand; - $args->expand = $request->menu_expand; - $args->is_shortcut = $request->is_shortcut; - $args->url = $request->shortcut_target; - - if(!$args->open_window) $args->open_window = 'N'; - if(!$args->expand) $args->expand = 'N'; - if(!$args->is_shortcut) $args->is_shortcut = 'Y'; - - if($request->menu_name_key) $args->name = $request->menu_name_key; - else $args->name = $request->menu_name; - } - // type is module short cut - else if(is_numeric($request->shortcut_target)) - { - // Get original information - $oMenuAdminModel = &getAdminModel('menu'); - $itemInfo = $oMenuAdminModel->getMenuItemInfo($request->shortcut_target); - if(!$itemInfo->menu_item_srl) - { - return new Object(-1, 'msg_invalid_request'); - } - - $args = $itemInfo; - if(count($args->group_srls) == 0) - { - unset($args->group_srls); - } - $args->menu_srl = $request->menu_srl; - $args->name = $request->menu_name; - $args->parent_srl = $request->parent_srl; - $args->is_shortcut = $request->is_shortcut; - } - // empty target shortcut - else - { - $args->menu_srl = $request->menu_srl; - $args->name = $request->menu_name; - $args->parent_srl = $request->parent_srl; - $args->is_shortcut = $request->is_shortcut; - } - - $args->menu_item_srl = getNextSequence(); - $args->listorder = -1*$args->menu_item_srl; - $output = executeQuery('menu.insertMenuItem', $args); - if(!$output->toBool()) return $output; - - $oDB->commit(); - - $this->add('menu_item_srl', $args->menu_item_srl); - $this->setMessage('success_registed', 'info'); - } - - private function _insertMenu(&$request, $isProc) - { - $oDB = DB::getInstance(); - $oDB->begin(); - - // set menu variable - $args->menu_srl = $request->menu_srl; - $args->parent_srl = $request->parent_srl; - $args->open_window = $request->menu_open_window; - $args->expand = $request->menu_expand; - $args->expand = $request->menu_expand; - $args->is_shortcut = $request->is_shortcut; - - if(!$args->open_window) $args->open_window = 'N'; - if(!$args->expand) $args->expand = 'N'; - if(!$args->is_shortcut) $args->is_shortcut = 'N'; - - if($request->menu_name_key) $args->name = $request->menu_name_key; - else $args->name = $request->menu_name; - - if($request->module_id && preg_match('/^http/i', $request->module_id)) - { - return new Object(-1, 'msg_invalid_request'); - } - - // when menu copy, module already copied - if($isProc) - { - $result = $this->_insertModule($request, $args); - if(!$result->toBool()) - { - return new Object(-1, $result->message); - } - } - - // if setting button variables, set argument button variables for db insert. but not upload in this method - if($request->normal_btn) $args->normal_btn = $request->normal_btn; - if($request->hover_btn) $args->hover_btn = $request->hover_btn; - if($request->active_btn) $args->active_btn = $request->active_btn; - - if(!$request->module_id) - { - return new Object(-1, 'msg_invalid_request'); - } - - $args->url = $request->module_id; - $args->menu_item_srl = getNextSequence(); - $args->listorder = -1*$args->menu_item_srl; - $output = executeQuery('menu.insertMenuItem', $args); - if(!$output->toBool()) return $output; - - $oDB->commit(); - - $this->add('menu_item_srl', $args->menu_item_srl); - $this->setMessage('success_registed', 'info'); - } - - /** - * insert module by men create value - * @request value of client request - * @args value for menu create - * @return bool result of create module - */ - private function _insertModule(&$request, &$args) - { - switch ($request->module_type) - { - case 'WIDGET' : - case 'ARTICLE' : - case 'OUTSIDE' : - $cmArgs->module = 'page'; - $cmArgs->page_type = $request->module_type; - break; - default: - $cmArgs->module = $request->module_type; - unset($cmArgs->page_type); - } - - //module create - $site_module_info = Context::get('site_module_info'); - $cmArgs->site_srl = (int)$site_module_info->site_srl; - $cmArgs->browser_title = $args->name; - $cmArgs->menu_srl = $request->menu_srl; - $cmArgs->layout_srl = -1; - $cmArgs->mlayout_srl = -1; - $cmArgs->is_skin_fix = 'N'; - $cmArgs->is_mskin_fix = 'N'; - - // if mid is empty, auto create mid - if(!$request->module_id) - { - $randomMid = $this->_makeRandomMid(); - $request->module_id = $cmArgs->module.'_'.$randomMid; - } - $cmArgs->mid = $request->module_id; - - // check already created module instance - $oModuleModel = &getModel('module'); - $output = $oModuleModel->getModuleInfoByMid($request->module_id); - if($output->module_srl) - { - return new Object(-1, 'msg_module_name_exists'); - } - - $oModuleController = &getController('module'); - $output = $oModuleController->insertModule($cmArgs); - return $output; } - /** - * Update an item to the menu, simple version - * @return void - */ - public function procMenuAdminUpdateItem() + $oModuleController = getController('module'); + $oModuleModel = getModel('module'); + + foreach($output->data as $itemInfo) { - $request = Context::getRequestVars(); - - if(!$request->menu_item_srl || !$request->menu_name) + if($itemInfo->is_shortcut != 'Y' && !preg_match('/^http/i',$itemInfo->url)) { - return new Object(-1, 'msg_invalid_request'); - } - - // variables set - if($request->menu_open_window != "Y") $request->menu_open_window = "N"; - if($request->menu_expand != "Y") $request->menu_expand = "N"; - - // Get original information - $oMenuAdminModel = &getAdminModel('menu'); - $itemInfo = $oMenuAdminModel->getMenuItemInfo($request->menu_item_srl); - $args = $itemInfo; - - // if menu type is module, check exists module and update - if($itemInfo->is_shortcut == 'Y') - { - // type is url - if(preg_match('/^http/i', $request->shortcut_target)) - { - $args->url = $request->shortcut_target; - } - // type is module short cut - else if(is_numeric($request->shortcut_target)) - { - // Get new original information - $newItemInfo = $oMenuAdminModel->getMenuItemInfo($request->shortcut_target); - if(!$newItemInfo->menu_item_srl) - { - return new Object(-1, 'msg_invalid_request'); - } - - $args->url = $newItemInfo->url; - $args->is_shortcut = 'Y'; - } - else - { - return new Object(-1, 'msg_invalid_request'); - } - } - else - { - // check already created module instance - $oModuleModel = &getModel('module'); - if($request->module_id != $itemInfo->url) - { - $output = $oModuleModel->getModuleInfoByMid($request->module_id); - if($output->module_srl) - { - return new Object(-1, 'msg_module_name_exists'); - } - } - - // if not exist module, return error - $moduleInfo = $oModuleModel->getModuleInfoByMid($itemInfo->url); - if(!$moduleInfo) - { - return new Object(-1, 'msg_invalid_request'); - } - - $moduleInfo->mid = $request->module_id; - $oModuleController = &getController('module'); - $oModuleController->updateModule($moduleInfo); - $args->url = $request->module_id; - } - - if($request->menu_name_key) - { - $args->name = $request->menu_name_key; - } - else - { - $args->name = $request->menu_name; - } - - if(count($args->group_srls) == 0) - { - unset($args->group_srls); - } - $args->open_window = $request->menu_open_window; - $args->expand = $request->menu_expand; - $output = executeQuery('menu.updateMenuItem', $args); - - $this->makeXmlFile($args->menu_srl); - - $this->add('menu_item_srl', $args->menu_item_srl); - $this->setMessage('success_updated', 'info'); - } - - /** - * upload button - * @retun void - */ - public function procMenuAdminButtonUpload() - { - $args = Context::getRequestVars(); - - $oMenuAdminModel = &getAdminModel('menu'); - $item_info = $oMenuAdminModel->getMenuItemInfo($args->menu_item_srl); - $args->menu_srl = $item_info->menu_srl; - - $btnOutput = $this->_uploadButton($args); - - if($btnOutput['normal_btn']) - { - $this->add('normal_btn', $btnOutput['normal_btn']); - $item_info->normal_btn = $btnOutput['normal_btn']; - } - if($btnOutput['hover_btn']) - { - $this->add('hover_btn', $btnOutput['hover_btn']); - $item_info->hover_btn = $btnOutput['hover_btn']; - } - if($btnOutput['active_btn']) - { - $this->add('active_btn', $btnOutput['active_btn']); - $item_info->active_btn = $btnOutput['active_btn']; - } - - // group_srls check - if(count($item_info->group_srls) == 0) - { - unset($item_info->group_srls); - } - - // Button delete check - if(!$btnOutput['normal_btn'] && $args->isNormalDelete == 'Y') - { - $item_info->normal_btn = ''; - } - if(!$btnOutput['hover_btn'] && $args->isHoverDelete == 'Y') - { - $item_info->hover_btn = ''; - } - if(!$btnOutput['active_btn'] && $args->isActiveDelete == 'Y') - { - $item_info->active_btn = ''; - } - - $output = executeQuery('menu.updateMenuItem', $item_info); - - // recreate menu cache file - $this->makeXmlFile($args->menu_srl); - } - - /** - * Delete menu item(menu of the menu) - * @return void|Object - */ - function procMenuAdminDeleteItem() { - // List variables - $args = Context::getRequestVars(); - - $oModuleModel = &getModel('module'); - $oMenuAdminModel = &getAdminModel('menu'); - - // Get original information - $itemInfo = $oMenuAdminModel->getMenuItemInfo($args->menu_item_srl); - $args->menu_srl = $itemInfo->menu_srl; - - // Display an error that the category cannot be deleted if it has a child node 603 - if($args->is_force != 'Y') - { - $output = executeQuery('menu.getChildMenuCount', $args); - if(!$output->toBool()) return $output; - if($output->data->count > 0) - { - return new Object(-1001, 'msg_cannot_delete_for_child'); - } - } - - // Get information of the menu - $menuInfo = $oMenuAdminModel->getMenu($args->menu_srl); - $menu_title = $menuInfo->title; - - // check admin menu delete - $oAdmin = &getClass('admin'); - if($menu_title == $oAdmin->getAdminMenuName() && $itemInfo->parent_srl == 0) - { - return $this->stop('msg_cannot_delete_for_admin_topmenu'); - } - - if($itemInfo->parent_srl) $parent_srl = $itemInfo->parent_srl; - - // get menu properies with child menu - $phpFile = sprintf("./files/cache/menu/%s.php", $args->menu_srl); - $originMenu = NULL; - - if(is_readable(FileHandler::getRealPath($phpFile))) - { - @include(FileHandler::getRealPath($phpFile)); - - if(is_array($menu->list)) - { - $this->_searchMenu($menu->list, $args->menu_item_srl, $originMenu); - } - } - - // check home menu in originMenu - $siteInfo = $oModuleModel->getSiteInfo($menuInfo->site_srl); - $isStartmenuInclude = false; - $this->_checkHomeMenuInOriginMenu($originMenu, $siteInfo->mid, $isStartmenuInclude); - if($isStartmenuInclude) - { - return new Object(-1, 'msg_cannot_delete_homemenu'); - } - - $oDB = DB::getInstance(); - $oDB->begin(); - - $this->_recursiveDeleteMenuItem($oDB, $menuInfo, $originMenu); - - $oDB->commit(); - - // recreate menu cache file - $this->makeXmlFile($args->menu_srl); - - $this->add('xml_file', $xml_file); - $this->add('menu_title', $menu_title); - $this->add('menu_item_srl', $parent_srl); - $this->setMessage('success_deleted'); - - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminManagement', 'menu_srl', $args->menu_srl); - $this->setRedirectUrl($returnUrl); - } - - private function _checkHomeMenuInOriginMenu($originMenu, $startMid, &$isStartmenuInclude) - { - if($originMenu['url'] == $startMid) - { - $isStartmenuInclude = true; - } - - if(!$isStartmenuInclude && is_array($originMenu['list'])) - { - foreach($originMenu['list'] AS $key=>$value) - { - $this->_checkHomeMenuInOriginMenu($value, $startMid, $isStartmenuInclude); - } - } - } - - private function _deleteMenuItem(&$oDB, &$menuInfo, $node) - { - // Remove from the DB - $args->menu_srl = $menuSrl; - $args->menu_item_srl = $node['node_srl']; - $output = executeQuery("menu.deleteMenuItem", $args); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - - // Update the xml file and get its location - $xml_file = $this->makeXmlFile($args->menu_srl); - // Delete all of image buttons - if($node['normal_btn']) FileHandler::removeFile($node['normal_btn']); - if($node['hover_btn']) FileHandler::removeFile($node['hover_btn']); - if($node['active_btn']) FileHandler::removeFile($node['active_btn']); - - // Delete module - if($node['is_shortcut'] != 'Y' && !preg_match('/^http/i',$node['url'])) - { - $oModuleController = getController('module'); - $oModuleModel = &getModel('module'); - - // reference menu's url modify - $args->url = $node['url']; - $args->site_srl = $menuInfo->site_srl; - $args->is_shortcut = 'Y'; - $output = executeQuery('menu.getMenuItemByUrl', $args); - if($output->data->menu_item_srl) - { - $output->data->url = ''; - $referenceItem = $output->data; - $output = executeQuery('menu.updateMenuItem', $referenceItem); - if(!$output->toBool()) - { - $oDB->rollback(); - return $output; - } - } - - $moduleInfo = $oModuleModel->getModuleInfoByMid($node['url'], $menuInfo->site_srl); + $moduleInfo = $oModuleModel->getModuleInfoByMid($itemInfo->url, $menuInfo->site_srl); if($moduleInfo->module_srl) { $output = $oModuleController->deleteModule($moduleInfo->module_srl); @@ -735,1167 +158,1791 @@ } } } - return new Object(0, 'success'); } - private function _recursiveDeleteMenuItem(&$oDB, &$menuInfo, $node) + // Delete menu items + $output = executeQuery("menu.deleteMenuItems", $args); + if(!$output->toBool()) { - $output = $this->_deleteMenuItem($oDB, $menuInfo, $node); - if(!$output->toBool()) - { - return new Object(-1, $output->message); - } - - if(is_array($node['list'])) - { - foreach($node['list'] AS $key=>$value) - { - $this->_recursiveDeleteMenuItem($oDB, $menuInfo, $value); - } - } + $oDB->rollback(); + return $output; + } + // Delete the menu + $output = executeQuery("menu.deleteMenu", $args); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; } - /** - * Move menu items - * @return void - */ - function procMenuAdminMoveItem() + // Delete cache files + $cache_list = FileHandler::readDir("./files/cache/menu","",false,true); + if(count($cache_list)) { - $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'); - - $oMenuAdminModel = &getAdminModel('menu'); - - // get original menu item info for cache file recreate - $originalItemInfo = $oMenuAdminModel->getMenuItemInfo($target_srl); - if(!$originalItemInfo->menu_item_srl) + foreach($cache_list as $cache_file) { - return new Object(-1, 'msg_empty_menu_item'); + $pos = strpos($cache_file, $menu_srl.'.'); + if($pos>0)FileHandler::removeFile($cache_file); } + } + // Delete images of menu buttons + $image_path = sprintf('./files/attach/menu_button/%s', $menu_srl); + FileHandler::removeDir($image_path); - // get menu properies with child menu - $phpFile = sprintf("./files/cache/menu/%s.php", $originalItemInfo->menu_srl); - $originMenu = NULL; + $oDB->commit(); - if(is_readable(FileHandler::getRealPath($phpFile))) + return new Object(0,'success_deleted'); + } + + /** + * Add an item to the menu, simple version + * @return void + */ + public function procMenuAdminInsertItem($request = NULL) + { + $isProc = false; + if(!$request) + { + $isProc = true; + $request = Context::getRequestVars(); + } + + if(!$request->parent_srl || !$request->menu_name) + { + return new Object(-1, 'msg_invalid_request'); + } + + $this->_setMenuSrl($request->parent_srl, $request->menu_srl); + if(!$request->menu_srl) + { + return new Object(-1, 'msg_invalid_request'); + } + + if($request->is_shortcut == 'Y') + { + $result = $this->_insertShortcut($request); + } + else + { + $result = $this->_insertMenu($request, $isProc); + } + + if($result->error < 0) + { + return new Object($result->error, $result->message); + } + + // recreate menu cache file + $this->makeXmlFile($request->menu_srl); + + if(!$isProc) + { + return $args->menu_item_srl; + } + } + + private function _setMenuSrl(&$parent_srl, &$menu_srl) + { + // set menu srl + $oMenuAdminModel = &getAdminModel('menu'); + $itemInfo = $oMenuAdminModel->getMenuItemInfo($parent_srl); + // parent_srl is parent menu item's srl + if($itemInfo->menu_srl) + { + $menu_srl = $itemInfo->menu_srl; + } + // in this case, parent_srl is menu srl + else + { + $output = $oMenuAdminModel->getMenu($parent_srl); + if($output->menu_srl == $parent_srl) { - @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); - // if move in same sitemap - if($targetMenuItemInfo->menu_item_srl) - { - $menu_srl = $targetMenuItemInfo->menu_srl; - } - // if move to other sitemap - else - { - $targetMenuInfo = $oMenuAdminModel->getMenu($parent_srl); - $menu_srl = $targetMenuInfo->menu_srl; + $menu_srl = $output->menu_srl; $parent_srl = 0; } - - if(!$this->homeModuleMid) - { - $oModuleModel = &getModel('module'); - $oMenuAdminController = &getAdminController('menu'); - $columnList = array('modules.mid',); - $output = $oModuleModel->getSiteInfo(0, $columnList); - if($output->mid) - { - $this->homeModuleMid = $output->mid; - } - } - - $this->moveMenuItem($menu_srl, $parent_srl, $source_srl, $target_srl, $mode, $originMenu['is_shortcut'], $originMenu['url']); - if(count($originMenu['list']) > 0) - { - $this->_recursiveUpdateMenuItem($originMenu['list'], $menu_srl); - } - - //recreate original menu - $xml_file = $this->makeXmlFile($originalItemInfo->menu_srl); - - //recreate target menu - $xml_file = $this->makeXmlFile($menu_srl); } + } - private function _recursiveUpdateMenuItem($node, $menu_srl) + private function _insertShortcut(&$request) + { + $oDB = DB::getInstance(); + $oDB->begin(); + + // type is url + if(preg_match('/^http/i', $request->shortcut_target)) { - 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); + // set menu variable + $args->menu_srl = $request->menu_srl; + $args->parent_srl = $request->parent_srl; + $args->open_window = $request->menu_open_window; + $args->expand = $request->menu_expand; + $args->expand = $request->menu_expand; + $args->is_shortcut = $request->is_shortcut; + $args->url = $request->shortcut_target; - //module's menu_srl move also - if($node['is_shortcut'] == 'N' && !empty($node['url'])) - { - $oModuleModel = &getModel('module'); - $moduleInfo = $oModuleModel->getModuleInfoByMid($node['url']); - if($menu_srl != $moduleInfo->menu_srl) - { - $moduleInfo->menu_srl = $menu_srl; - $oModuleController = &getController('module'); - $output = $oModuleController->updateModule($moduleInfo); - } - } + if(!$args->open_window) $args->open_window = 'N'; + if(!$args->expand) $args->expand = 'N'; + if(!$args->is_shortcut) $args->is_shortcut = 'Y'; - if(count($node['list']) > 0) - { - $this->_recursiveUpdateMenuItem($node['list'], $menu_srl); - } - } - } + if($request->menu_name_key) $args->name = $request->menu_name_key; + else $args->name = $request->menu_name; } - - /** - * cop menu item - * @return void - */ - public function procMenuAdminCopyItem() - { - $parentSrl = Context::get('parent_srl'); - $menuItemSrl = Context::get('menu_item_srl'); - - $oMenuModel = &getAdminModel('menu'); - $itemInfo = $oMenuModel->getMenuItemInfo($menuItemSrl); - $menuSrl = $itemInfo->menu_srl; - - // get menu properies with child menu - $phpFile = sprintf("./files/cache/menu/%s.php", $menuSrl); - $originMenu = NULL; - - if(is_readable(FileHandler::getRealPath($phpFile))) - { - @include(FileHandler::getRealPath($phpFile)); - - if(is_array($menu->list)) - { - $this->_searchMenu($menu->list, $menuItemSrl, $originMenu); - } - } - - // copy the menu item with recursively - if(is_array($originMenu)) - { - $this->_copyMenu($menuSrl, $parentSrl, $originMenu); - } - $this->add('insertedMenuItemSrlList', $this->insertedMenuItemSrlList); - } - - /** - * search menu_item in full menu with recursively - * @param $menuList menu list - * @param $menuItemSrl current menu item serial number - * @param $originMenu find result menu - * @return void - */ - private function _searchMenu(&$menuList, $menuItemSrl, &$originMenu) - { - if(array_key_exists($menuItemSrl, $menuList)) - { - $originMenu = $menuList[$menuItemSrl]; - return; - } - - foreach($menuList AS $key=>$value) - { - if(count($value['list']) > 0) - { - $this->_searchMenu($value['list'], $menuItemSrl, $originMenu); - } - } - } - - private function _copyMenu($menuSrl, $parentSrl, &$originMenu) + // type is module short cut + else if(is_numeric($request->shortcut_target)) { + // Get original information $oMenuAdminModel = &getAdminModel('menu'); - $menuItemInfo = $oMenuAdminModel->getMenuItemInfo($originMenu['node_srl']); - - // default argument setting - $args->menu_srl = $menuSrl; - if($parentSrl == 0) $args->parent_srl = $menuSrl; - else $args->parent_srl = $parentSrl; - $args->menu_name_key = $originMenu['text']; - $args->menu_name = $originMenu['text']; - $args->menu_open_window = $originMenu['open_window']; - $args->menu_expand = $originMenu['expand']; - $args->normal_btn = $menuItemInfo->normal_btn; - $args->hover_btn = $menuItemInfo->hover_btn; - $args->active_btn = $menuItemInfo->active_btn; - $args->is_shortcut = $menuItemInfo->is_shortcut; - - $isModuleCopySuccess = false; - // if menu have a reference of module instance - if($menuItemInfo->is_shortcut == 'N' && !preg_match('/^http/i', $originMenu['url'])) + $itemInfo = $oMenuAdminModel->getMenuItemInfo($request->shortcut_target); + if(!$itemInfo->menu_item_srl) { - $oModuleModel = &getModel('module'); - $moduleInfo = $oModuleModel->getModuleInfoByMid($originMenu['url']); - - $args->module_type = $moduleInfo->module; - $randomMid = $this->_makeRandomMid(); - $args->module_id = $moduleInfo->module.'_'.$randomMid; - $args->layout_srl = $moduleInfo->layout_srl; - - $oModuleAdminController = &getAdminController('module'); - $copyArg->module_srl = $moduleInfo->module_srl; - $copyArg->mid_1 = $args->module_id; - $copyArg->browser_title_1 = $moduleInfo->browser_title; - $copiedModuleSrl = $oModuleAdminController->procModuleAdminCopyModule($copyArg); - - $args->module_srl = $copiedModuleSrl; - - if($copiedModuleSrl) - { - $isModuleCopySuccess = true; - } - } - // if menu type is shortcut - else if($menuItemInfo->is_shortcut == 'Y') - { - $args->shortcut_target = $originMenu['url']; - $isModuleCopySuccess = true; + return new Object(-1, 'msg_invalid_request'); } - if($isModuleCopySuccess) + $args = $itemInfo; + if(count($args->group_srls) == 0) { - // if have a group permission - if($menuItemInfo->group_srls) + unset($args->group_srls); + } + $args->menu_srl = $request->menu_srl; + $args->name = $request->menu_name; + $args->parent_srl = $request->parent_srl; + $args->is_shortcut = $request->is_shortcut; + } + // empty target shortcut + else + { + $args->menu_srl = $request->menu_srl; + $args->name = $request->menu_name; + $args->parent_srl = $request->parent_srl; + $args->is_shortcut = $request->is_shortcut; + } + + $args->menu_item_srl = getNextSequence(); + $args->listorder = -1*$args->menu_item_srl; + $output = executeQuery('menu.insertMenuItem', $args); + if(!$output->toBool()) return $output; + + $oDB->commit(); + + $this->add('menu_item_srl', $args->menu_item_srl); + $this->setMessage('success_registed', 'info'); + } + + private function _insertMenu(&$request, $isProc) + { + $oDB = DB::getInstance(); + $oDB->begin(); + + // set menu variable + $args->menu_srl = $request->menu_srl; + $args->parent_srl = $request->parent_srl; + $args->open_window = $request->menu_open_window; + $args->expand = $request->menu_expand; + $args->expand = $request->menu_expand; + $args->is_shortcut = $request->is_shortcut; + + if(!$args->open_window) $args->open_window = 'N'; + if(!$args->expand) $args->expand = 'N'; + if(!$args->is_shortcut) $args->is_shortcut = 'N'; + + if($request->menu_name_key) $args->name = $request->menu_name_key; + else $args->name = $request->menu_name; + + if($request->module_id && preg_match('/^http/i', $request->module_id)) + { + return new Object(-1, 'msg_invalid_request'); + } + + // when menu copy, module already copied + if($isProc) + { + $result = $this->_insertModule($request, $args); + if(!$result->toBool()) + { + return new Object(-1, $result->message); + } + } + + // if setting button variables, set argument button variables for db insert. but not upload in this method + if($request->normal_btn) $args->normal_btn = $request->normal_btn; + if($request->hover_btn) $args->hover_btn = $request->hover_btn; + if($request->active_btn) $args->active_btn = $request->active_btn; + + if(!$request->module_id) + { + return new Object(-1, 'msg_invalid_request'); + } + + $args->url = $request->module_id; + $args->menu_item_srl = getNextSequence(); + $args->listorder = -1*$args->menu_item_srl; + $output = executeQuery('menu.insertMenuItem', $args); + if(!$output->toBool()) return $output; + + $oDB->commit(); + + $this->add('menu_item_srl', $args->menu_item_srl); + $this->setMessage('success_registed', 'info'); + } + + /** + * insert module by men create value + * @request value of client request + * @args value for menu create + * @return bool result of create module + */ + private function _insertModule(&$request, &$args) + { + switch ($request->module_type) + { + case 'WIDGET' : + case 'ARTICLE' : + case 'OUTSIDE' : + $cmArgs->module = 'page'; + $cmArgs->page_type = $request->module_type; + break; + default: + $cmArgs->module = $request->module_type; + unset($cmArgs->page_type); + } + + //module create + $site_module_info = Context::get('site_module_info'); + $cmArgs->site_srl = (int)$site_module_info->site_srl; + $cmArgs->browser_title = $args->name; + $cmArgs->menu_srl = $request->menu_srl; + $cmArgs->layout_srl = -1; + $cmArgs->mlayout_srl = -1; + $cmArgs->is_skin_fix = 'N'; + $cmArgs->is_mskin_fix = 'N'; + + // if mid is empty, auto create mid + if(!$request->module_id) + { + $randomMid = $this->_makeRandomMid(); + $request->module_id = $cmArgs->module.'_'.$randomMid; + } + $cmArgs->mid = $request->module_id; + + // check already created module instance + $oModuleModel = &getModel('module'); + $output = $oModuleModel->getModuleInfoByMid($request->module_id); + if($output->module_srl) + { + return new Object(-1, 'msg_module_name_exists'); + } + + $oModuleController = &getController('module'); + $output = $oModuleController->insertModule($cmArgs); + + return $output; + } + + /** + * Update an item to the menu, simple version + * @return void + */ + public function procMenuAdminUpdateItem() + { + $request = Context::getRequestVars(); + + if(!$request->menu_item_srl || !$request->menu_name) + { + return new Object(-1, 'msg_invalid_request'); + } + + // variables set + if($request->menu_open_window != "Y") $request->menu_open_window = "N"; + if($request->menu_expand != "Y") $request->menu_expand = "N"; + + // Get original information + $oMenuAdminModel = &getAdminModel('menu'); + $itemInfo = $oMenuAdminModel->getMenuItemInfo($request->menu_item_srl); + $args = $itemInfo; + + // if menu type is module, check exists module and update + if($itemInfo->is_shortcut == 'Y') + { + // type is url + if(preg_match('/^http/i', $request->shortcut_target)) + { + $args->url = $request->shortcut_target; + } + // type is module short cut + else if(is_numeric($request->shortcut_target)) + { + // Get new original information + $newItemInfo = $oMenuAdminModel->getMenuItemInfo($request->shortcut_target); + if(!$newItemInfo->menu_item_srl) { - $args->group_srls = $menuItemInfo->group_srls; + return new Object(-1, 'msg_invalid_request'); } - // menu copy - $output = $this->procMenuAdminInsertItem($args); - /*if($output && !$output->toBool()) + $args->url = $newItemInfo->url; + $args->is_shortcut = 'Y'; + } + else + { + return new Object(-1, 'msg_invalid_request'); + } + } + else + { + // check already created module instance + $oModuleModel = &getModel('module'); + if($request->module_id != $itemInfo->url) + { + $output = $oModuleModel->getModuleInfoByMid($request->module_id); + if($output->module_srl) { + return new Object(-1, 'msg_module_name_exists'); + } + } + + // if not exist module, return error + $moduleInfo = $oModuleModel->getModuleInfoByMid($itemInfo->url); + if(!$moduleInfo) + { + return new Object(-1, 'msg_invalid_request'); + } + + $moduleInfo->mid = $request->module_id; + $oModuleController = &getController('module'); + $oModuleController->updateModule($moduleInfo); + $args->url = $request->module_id; + } + + if($request->menu_name_key) + { + $args->name = $request->menu_name_key; + } + else + { + $args->name = $request->menu_name; + } + + if(count($args->group_srls) == 0) + { + unset($args->group_srls); + } + $args->open_window = $request->menu_open_window; + $args->expand = $request->menu_expand; + $output = executeQuery('menu.updateMenuItem', $args); + + $this->makeXmlFile($args->menu_srl); + + $this->add('menu_item_srl', $args->menu_item_srl); + $this->setMessage('success_updated', 'info'); + } + + /** + * upload button + * @retun void + */ + public function procMenuAdminButtonUpload() + { + $args = Context::getRequestVars(); + + $oMenuAdminModel = &getAdminModel('menu'); + $item_info = $oMenuAdminModel->getMenuItemInfo($args->menu_item_srl); + $args->menu_srl = $item_info->menu_srl; + + $btnOutput = $this->_uploadButton($args); + + if($btnOutput['normal_btn']) + { + $this->add('normal_btn', $btnOutput['normal_btn']); + $item_info->normal_btn = $btnOutput['normal_btn']; + } + if($btnOutput['hover_btn']) + { + $this->add('hover_btn', $btnOutput['hover_btn']); + $item_info->hover_btn = $btnOutput['hover_btn']; + } + if($btnOutput['active_btn']) + { + $this->add('active_btn', $btnOutput['active_btn']); + $item_info->active_btn = $btnOutput['active_btn']; + } + + // group_srls check + if(count($item_info->group_srls) == 0) + { + unset($item_info->group_srls); + } + + // Button delete check + if(!$btnOutput['normal_btn'] && $args->isNormalDelete == 'Y') + { + $item_info->normal_btn = ''; + } + if(!$btnOutput['hover_btn'] && $args->isHoverDelete == 'Y') + { + $item_info->hover_btn = ''; + } + if(!$btnOutput['active_btn'] && $args->isActiveDelete == 'Y') + { + $item_info->active_btn = ''; + } + + $output = executeQuery('menu.updateMenuItem', $item_info); + + // recreate menu cache file + $this->makeXmlFile($args->menu_srl); + } + + /** + * Delete menu item(menu of the menu) + * @return void|Object + */ + function procMenuAdminDeleteItem() + { + // List variables + $args = Context::getRequestVars(); + + $oModuleModel = &getModel('module'); + $oMenuAdminModel = &getAdminModel('menu'); + + // Get original information + $itemInfo = $oMenuAdminModel->getMenuItemInfo($args->menu_item_srl); + $args->menu_srl = $itemInfo->menu_srl; + + // Display an error that the category cannot be deleted if it has a child node 603 + if($args->is_force != 'Y') + { + $output = executeQuery('menu.getChildMenuCount', $args); + if(!$output->toBool()) return $output; + if($output->data->count > 0) + { + return new Object(-1001, 'msg_cannot_delete_for_child'); + } + } + + // Get information of the menu + $menuInfo = $oMenuAdminModel->getMenu($args->menu_srl); + $menu_title = $menuInfo->title; + + // check admin menu delete + $oAdmin = &getClass('admin'); + if($menu_title == $oAdmin->getAdminMenuName() && $itemInfo->parent_srl == 0) + { + return $this->stop('msg_cannot_delete_for_admin_topmenu'); + } + + if($itemInfo->parent_srl) $parent_srl = $itemInfo->parent_srl; + + // get menu properies with child menu + $phpFile = sprintf("./files/cache/menu/%s.php", $args->menu_srl); + $originMenu = NULL; + + if(is_readable(FileHandler::getRealPath($phpFile))) + { + @include(FileHandler::getRealPath($phpFile)); + + if(is_array($menu->list)) + { + $this->_searchMenu($menu->list, $args->menu_item_srl, $originMenu); + } + } + + // check home menu in originMenu + $siteInfo = $oModuleModel->getSiteInfo($menuInfo->site_srl); + $isStartmenuInclude = false; + $this->_checkHomeMenuInOriginMenu($originMenu, $siteInfo->mid, $isStartmenuInclude); + if($isStartmenuInclude) + { + return new Object(-1, 'msg_cannot_delete_homemenu'); + } + + $oDB = DB::getInstance(); + $oDB->begin(); + + $this->_recursiveDeleteMenuItem($oDB, $menuInfo, $originMenu); + + $oDB->commit(); + + // recreate menu cache file + $this->makeXmlFile($args->menu_srl); + + $this->add('xml_file', $xml_file); + $this->add('menu_title', $menu_title); + $this->add('menu_item_srl', $parent_srl); + $this->setMessage('success_deleted'); + + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminManagement', 'menu_srl', $args->menu_srl); + $this->setRedirectUrl($returnUrl); + } + + private function _checkHomeMenuInOriginMenu($originMenu, $startMid, &$isStartmenuInclude) + { + if($originMenu['url'] == $startMid) + { + $isStartmenuInclude = true; + } + + if(!$isStartmenuInclude && is_array($originMenu['list'])) + { + foreach($originMenu['list'] AS $key=>$value) + { + $this->_checkHomeMenuInOriginMenu($value, $startMid, $isStartmenuInclude); + } + } + } + + private function _deleteMenuItem(&$oDB, &$menuInfo, $node) + { + // Remove from the DB + $args->menu_srl = $menuSrl; + $args->menu_item_srl = $node['node_srl']; + $output = executeQuery("menu.deleteMenuItem", $args); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + // Update the xml file and get its location + $xml_file = $this->makeXmlFile($args->menu_srl); + // Delete all of image buttons + if($node['normal_btn']) FileHandler::removeFile($node['normal_btn']); + if($node['hover_btn']) FileHandler::removeFile($node['hover_btn']); + if($node['active_btn']) FileHandler::removeFile($node['active_btn']); + + // Delete module + if($node['is_shortcut'] != 'Y' && !preg_match('/^http/i',$node['url'])) + { + $oModuleController = getController('module'); + $oModuleModel = &getModel('module'); + + // reference menu's url modify + $args->url = $node['url']; + $args->site_srl = $menuInfo->site_srl; + $args->is_shortcut = 'Y'; + $output = executeQuery('menu.getMenuItemByUrl', $args); + if($output->data->menu_item_srl) + { + $output->data->url = ''; + $referenceItem = $output->data; + $output = executeQuery('menu.updateMenuItem', $referenceItem); + if(!$output->toBool()) + { + $oDB->rollback(); return $output; - }*/ - - // if have a button, copy a button image also - $insertedMenuItemSrl = $this->get('menu_item_srl'); - if($menuItemInfo->normal_btn || $menuItemInfo->hover_btn || $menuItemInfo->active_btn) - { - $this->_copyButton($insertedMenuItemSrl, $menuItemInfo); - } - array_push($this->insertedMenuItemSrlList, $insertedMenuItemSrl); - } - - // if have a child menu, copy child menu also - $childMenu = array_shift($originMenu['list']); - if(count($childMenu) > 0) - { - $this->_copyMenu($menuSrl, $insertedMenuItemSrl, $childMenu); - } - } - - private function _makeRandomMid() - { - $time = time(); - $randomString = ""; - for($i=0;$i<4;$i++) - { - $case = rand(0, 1); - if($case) $doc = rand(65, 90); - else $doc = rand(97, 122); - - $randomString .= chr($doc); - } - - return $randomString.substr($time, -2); - } - - /** - * Arrange menu items - * @return void|object - */ - function procMenuAdminArrangeItem() - { - $this->menuSrl = Context::get('menu_srl'); - $args->title = Context::get('title'); - $parentKeyList = Context::get('parent_key'); - $this->itemKeyList = Context::get('item_key'); - - // menu name update - $args->menu_srl = $this->menuSrl; - $output = executeQuery('menu.updateMenu', $args); - if(!$output->toBool()) return $output; - - $this->map = array(); - if(is_array($parentKeyList)) - { - foreach($parentKeyList as $no=>$srl) - { - if ($srl === 0) continue; - if (!is_array($this->map[$srl]))$this->map[$srl] = array(); - $this->map[$srl][] = $no; } } - $result = array(); - if(is_array($this->itemKeyList)) + $moduleInfo = $oModuleModel->getModuleInfoByMid($node['url'], $menuInfo->site_srl); + if($moduleInfo->module_srl) { - foreach($this->itemKeyList as $srl) + $output = $oModuleController->deleteModule($moduleInfo->module_srl); + if(!$output->toBool()) { - if (!$this->checked[$srl]){ - unset($target); - $this->checked[$srl] = 1; - $target->node = $srl; - $target->child= array(); - - while(count($this->map[$srl])){ - $this->_setParent($srl, array_shift($this->map[$srl]), $target); - } - $result[] = $target; - } + $oDB->rollback(); + return $output; } } + } + return new Object(0, 'success'); + } - if(is_array($result)) + private function _recursiveDeleteMenuItem(&$oDB, &$menuInfo, $node) + { + $output = $this->_deleteMenuItem($oDB, $menuInfo, $node); + if(!$output->toBool()) + { + return new Object(-1, $output->message); + } + + if(is_array($node['list'])) + { + foreach($node['list'] AS $key=>$value) { - $i = 0; - foreach($result AS $key=>$node) - { - $this->moveMenuItem($this->menuSrl, 0, $i, $node->node, 'move'); //move parent node - $this->_recursiveMoveMenuItem($node); //move child node - $i = $node->node; - } + $this->_recursiveDeleteMenuItem($oDB, $menuInfo, $value); } + } + } - $this->setMessage('success_updated', 'info'); + /** + * Move menu items + * @return void + */ + function procMenuAdminMoveItem() + { + $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 - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminManagement', 'menu_srl', $args->menu_srl); - $this->setRedirectUrl($returnUrl); + if(!$mode || !$parent_srl || !$target_srl) return new Object(-1,'msg_invalid_request'); + + $oMenuAdminModel = &getAdminModel('menu'); + + // 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'); } - /** - * Set parent number to child - * @param int $parent_srl - * @param int $child_index - * @param object $target - * @return void - */ - function _setParent($parent_srl, $child_index, &$target) + // get menu properies with child menu + $phpFile = sprintf("./files/cache/menu/%s.php", $originalItemInfo->menu_srl); + $originMenu = NULL; + + if(is_readable(FileHandler::getRealPath($phpFile))) { - $child_srl = $this->itemKeyList[$child_index]; - $this->checked[$child_srl] = 1; + @include(FileHandler::getRealPath($phpFile)); - $child_node->node = $child_srl; - $child_node->parent_node = $parent_srl; - $child_node->child = array(); - $target->child[] = $child_node; - - while(count($this->map[$child_srl])){ - $this->_setParent($child_srl, array_shift($this->map[$child_srl]), $child_node); - } - //return $target; - } - - /** - * move item with sub directory(recursive) - * @param object $result - * @return void - */ - function _recursiveMoveMenuItem($result) - { - $i = 0; - while(count($result->child)) + if(is_array($menu->list)) { - unset($node); - $node = array_shift($result->child); - - $this->moveMenuItem($this->menuSrl, $node->parent_node, $i, $node->node, 'move'); - $this->_recursiveMoveMenuItem($node); - $i = $node->node; + $this->_searchMenu($menu->list, $originalItemInfo->menu_item_srl, $originMenu); } } - /** - * move menu item - * @param int $menu_srl - * @param int $parent_srl - * @param int $source_srl - * @param int $target_srl - * @param string $mode 'move' or 'insert' - * @return void - */ - function moveMenuItem($menu_srl, $parent_srl, $source_srl, $target_srl, $mode, $isShortcut='Y', $url=NULL) + // get target menu info for move + $targetMenuItemInfo = $oMenuAdminModel->getMenuItemInfo($parent_srl); + // if move in same sitemap + if($targetMenuItemInfo->menu_item_srl) { - // Get the original menus - $oMenuAdminModel = &getAdminModel('menu'); + $menu_srl = $targetMenuItemInfo->menu_srl; + } + // if move to other sitemap + else + { + $targetMenuInfo = $oMenuAdminModel->getMenu($parent_srl); + $menu_srl = $targetMenuInfo->menu_srl; + $parent_srl = 0; + } - $target_item = $oMenuAdminModel->getMenuItemInfo($target_srl); - if($target_item->menu_item_srl != $target_srl) return new Object(-1,'msg_invalid_request'); - // Move the menu location(change the order menu appears) - if($mode == 'move') { - $args->parent_srl = $parent_srl; - $args->menu_srl = $menu_srl; + if(!$this->homeModuleMid) + { + $oModuleModel = &getModel('module'); + $oMenuAdminController = &getAdminController('menu'); + $columnList = array('modules.mid',); + $output = $oModuleModel->getSiteInfo(0, $columnList); + if($output->mid) + { + $this->homeModuleMid = $output->mid; + } + } - if($source_srl) { - $source_item = $oMenuAdminModel->getMenuItemInfo($source_srl); - if($source_item->menu_item_srl != $source_srl) return new Object(-1,'msg_invalid_request'); - $args->listorder = $source_item->listorder-1; - } else { - $output = executeQuery('menu.getMaxListorder', $args); - if(!$output->toBool()) return $output; - $args->listorder = (int)$output->data->listorder; - if(!$args->listorder) $args->listorder= 0; - } - $args->parent_srl = $parent_srl; - $output = executeQuery('menu.updateMenuItemListorder', $args); - if(!$output->toBool()) return $output; + $this->moveMenuItem($menu_srl, $parent_srl, $source_srl, $target_srl, $mode, $originMenu['is_shortcut'], $originMenu['url']); + if(count($originMenu['list']) > 0) + { + $this->_recursiveUpdateMenuItem($originMenu['list'], $menu_srl); + } - $args->parent_srl = $parent_srl; - $args->menu_item_srl = $target_srl; - $output = executeQuery('menu.updateMenuItemNode', $args); - if(!$output->toBool()) return $output; + //recreate original menu + $xml_file = $this->makeXmlFile($originalItemInfo->menu_srl); + + //recreate target menu + $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); //module's menu_srl move also - if($isShortcut == 'N' && !empty($url)) + if($node['is_shortcut'] == 'N' && !empty($node['url'])) { $oModuleModel = &getModel('module'); - $moduleInfo = $oModuleModel->getModuleInfoByMid($url); + $moduleInfo = $oModuleModel->getModuleInfoByMid($node['url']); if($menu_srl != $moduleInfo->menu_srl) { $moduleInfo->menu_srl = $menu_srl; $oModuleController = &getController('module'); $output = $oModuleController->updateModule($moduleInfo); } + } - // change home menu cache file - if($url == $this->homeModuleMid) + if(count($node['list']) > 0) + { + $this->_recursiveUpdateMenuItem($node['list'], $menu_srl); + } + } + } + } + + /** + * cop menu item + * @return void + */ + public function procMenuAdminCopyItem() + { + $parentSrl = Context::get('parent_srl'); + $menuItemSrl = Context::get('menu_item_srl'); + + $oMenuModel = &getAdminModel('menu'); + $itemInfo = $oMenuModel->getMenuItemInfo($menuItemSrl); + $menuSrl = $itemInfo->menu_srl; + + // get menu properies with child menu + $phpFile = sprintf("./files/cache/menu/%s.php", $menuSrl); + $originMenu = NULL; + + if(is_readable(FileHandler::getRealPath($phpFile))) + { + @include(FileHandler::getRealPath($phpFile)); + + if(is_array($menu->list)) + { + $this->_searchMenu($menu->list, $menuItemSrl, $originMenu); + } + } + + // copy the menu item with recursively + if(is_array($originMenu)) + { + $this->_copyMenu($menuSrl, $parentSrl, $originMenu); + } + $this->add('insertedMenuItemSrlList', $this->insertedMenuItemSrlList); + } + + /** + * search menu_item in full menu with recursively + * @param $menuList menu list + * @param $menuItemSrl current menu item serial number + * @param $originMenu find result menu + * @return void + */ + private function _searchMenu(&$menuList, $menuItemSrl, &$originMenu) + { + if(array_key_exists($menuItemSrl, $menuList)) + { + $originMenu = $menuList[$menuItemSrl]; + return; + } + + foreach($menuList AS $key=>$value) + { + if(count($value['list']) > 0) + { + $this->_searchMenu($value['list'], $menuItemSrl, $originMenu); + } + } + } + + private function _copyMenu($menuSrl, $parentSrl, &$originMenu) + { + $oMenuAdminModel = &getAdminModel('menu'); + $menuItemInfo = $oMenuAdminModel->getMenuItemInfo($originMenu['node_srl']); + + // default argument setting + $args->menu_srl = $menuSrl; + if($parentSrl == 0) $args->parent_srl = $menuSrl; + else $args->parent_srl = $parentSrl; + $args->menu_name_key = $originMenu['text']; + $args->menu_name = $originMenu['text']; + $args->menu_open_window = $originMenu['open_window']; + $args->menu_expand = $originMenu['expand']; + $args->normal_btn = $menuItemInfo->normal_btn; + $args->hover_btn = $menuItemInfo->hover_btn; + $args->active_btn = $menuItemInfo->active_btn; + $args->is_shortcut = $menuItemInfo->is_shortcut; + + $isModuleCopySuccess = false; + // if menu have a reference of module instance + if($menuItemInfo->is_shortcut == 'N' && !preg_match('/^http/i', $originMenu['url'])) + { + $oModuleModel = &getModel('module'); + $moduleInfo = $oModuleModel->getModuleInfoByMid($originMenu['url']); + + $args->module_type = $moduleInfo->module; + $randomMid = $this->_makeRandomMid(); + $args->module_id = $moduleInfo->module.'_'.$randomMid; + $args->layout_srl = $moduleInfo->layout_srl; + + $oModuleAdminController = &getAdminController('module'); + $copyArg->module_srl = $moduleInfo->module_srl; + $copyArg->mid_1 = $args->module_id; + $copyArg->browser_title_1 = $moduleInfo->browser_title; + $copiedModuleSrl = $oModuleAdminController->procModuleAdminCopyModule($copyArg); + + $args->module_srl = $copiedModuleSrl; + + if($copiedModuleSrl) + { + $isModuleCopySuccess = true; + } + } + // if menu type is shortcut + else if($menuItemInfo->is_shortcut == 'Y') + { + $args->shortcut_target = $originMenu['url']; + $isModuleCopySuccess = true; + } + + if($isModuleCopySuccess) + { + // if have a group permission + if($menuItemInfo->group_srls) + { + $args->group_srls = $menuItemInfo->group_srls; + } + + // menu copy + $output = $this->procMenuAdminInsertItem($args); + /*if($output && !$output->toBool()) + { + return $output; + }*/ + + // if have a button, copy a button image also + $insertedMenuItemSrl = $this->get('menu_item_srl'); + if($menuItemInfo->normal_btn || $menuItemInfo->hover_btn || $menuItemInfo->active_btn) + { + $this->_copyButton($insertedMenuItemSrl, $menuItemInfo); + } + array_push($this->insertedMenuItemSrlList, $insertedMenuItemSrl); + } + + // if have a child menu, copy child menu also + $childMenu = array_shift($originMenu['list']); + if(count($childMenu) > 0) + { + $this->_copyMenu($menuSrl, $insertedMenuItemSrl, $childMenu); + } + } + + private function _makeRandomMid() + { + $time = time(); + $randomString = ""; + for($i=0;$i<4;$i++) + { + $case = rand(0, 1); + if($case) $doc = rand(65, 90); + else $doc = rand(97, 122); + + $randomString .= chr($doc); + } + + return $randomString.substr($time, -2); + } + + /** + * Arrange menu items + * @return void|object + */ + function procMenuAdminArrangeItem() + { + $this->menuSrl = Context::get('menu_srl'); + $args->title = Context::get('title'); + $parentKeyList = Context::get('parent_key'); + $this->itemKeyList = Context::get('item_key'); + + // menu name update + $args->menu_srl = $this->menuSrl; + $output = executeQuery('menu.updateMenu', $args); + if(!$output->toBool()) return $output; + + $this->map = array(); + if(is_array($parentKeyList)) + { + foreach($parentKeyList as $no=>$srl) + { + if($srl === 0) continue; + if(!is_array($this->map[$srl]))$this->map[$srl] = array(); + $this->map[$srl][] = $no; + } + } + + $result = array(); + if(is_array($this->itemKeyList)) + { + foreach($this->itemKeyList as $srl) + { + if(!$this->checked[$srl]) + { + unset($target); + $this->checked[$srl] = 1; + $target->node = $srl; + $target->child= array(); + + while(count($this->map[$srl])) { - if(file_exists($this->homeMenuCacheFile)) - { - @include($this->homeMenuCacheFile); - } - if(!$homeMenuSrl || $homeMenuSrl != $menu_srl) - { - $this->makeHomemenuCacheFile($menu_srl); - } + $this->_setParent($srl, array_shift($this->map[$srl]), $target); + } + $result[] = $target; + } + } + } + + if(is_array($result)) + { + $i = 0; + foreach($result AS $key=>$node) + { + $this->moveMenuItem($this->menuSrl, 0, $i, $node->node, 'move'); //move parent node + $this->_recursiveMoveMenuItem($node); //move child node + $i = $node->node; + } + } + + $this->setMessage('success_updated', 'info'); + + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMenuAdminManagement', 'menu_srl', $args->menu_srl); + $this->setRedirectUrl($returnUrl); + } + + /** + * Set parent number to child + * @param int $parent_srl + * @param int $child_index + * @param object $target + * @return void + */ + function _setParent($parent_srl, $child_index, &$target) + { + $child_srl = $this->itemKeyList[$child_index]; + $this->checked[$child_srl] = 1; + + $child_node->node = $child_srl; + $child_node->parent_node = $parent_srl; + $child_node->child = array(); + $target->child[] = $child_node; + + while(count($this->map[$child_srl])) + { + $this->_setParent($child_srl, array_shift($this->map[$child_srl]), $child_node); + } + //return $target; + } + + /** + * move item with sub directory(recursive) + * @param object $result + * @return void + */ + function _recursiveMoveMenuItem($result) + { + $i = 0; + while(count($result->child)) + { + unset($node); + $node = array_shift($result->child); + + $this->moveMenuItem($this->menuSrl, $node->parent_node, $i, $node->node, 'move'); + $this->_recursiveMoveMenuItem($node); + $i = $node->node; + } + } + + /** + * move menu item + * @param int $menu_srl + * @param int $parent_srl + * @param int $source_srl + * @param int $target_srl + * @param string $mode 'move' or 'insert' + * @return void + */ + function moveMenuItem($menu_srl, $parent_srl, $source_srl, $target_srl, $mode, $isShortcut='Y', $url=NULL) + { + // Get the original menus + $oMenuAdminModel = &getAdminModel('menu'); + + $target_item = $oMenuAdminModel->getMenuItemInfo($target_srl); + if($target_item->menu_item_srl != $target_srl) return new Object(-1,'msg_invalid_request'); + // Move the menu location(change the order menu appears) + if($mode == 'move') + { + $args->parent_srl = $parent_srl; + $args->menu_srl = $menu_srl; + + if($source_srl) + { + $source_item = $oMenuAdminModel->getMenuItemInfo($source_srl); + if($source_item->menu_item_srl != $source_srl) return new Object(-1,'msg_invalid_request'); + $args->listorder = $source_item->listorder-1; + } + else + { + $output = executeQuery('menu.getMaxListorder', $args); + if(!$output->toBool()) return $output; + $args->listorder = (int)$output->data->listorder; + if(!$args->listorder) $args->listorder= 0; + } + $args->parent_srl = $parent_srl; + $output = executeQuery('menu.updateMenuItemListorder', $args); + if(!$output->toBool()) return $output; + + $args->parent_srl = $parent_srl; + $args->menu_item_srl = $target_srl; + $output = executeQuery('menu.updateMenuItemNode', $args); + if(!$output->toBool()) return $output; + + //module's menu_srl move also + if($isShortcut == 'N' && !empty($url)) + { + $oModuleModel = &getModel('module'); + $moduleInfo = $oModuleModel->getModuleInfoByMid($url); + if($menu_srl != $moduleInfo->menu_srl) + { + $moduleInfo->menu_srl = $menu_srl; + $oModuleController = &getController('module'); + $output = $oModuleController->updateModule($moduleInfo); + } + + // change home menu cache file + if($url == $this->homeModuleMid) + { + if(file_exists($this->homeMenuCacheFile)) + { + @include($this->homeMenuCacheFile); + } + if(!$homeMenuSrl || $homeMenuSrl != $menu_srl) + { + $this->makeHomemenuCacheFile($menu_srl); } } - // Add a child - } elseif($mode == 'insert') { - $args->menu_item_srl = $target_srl; - $args->parent_srl = $parent_srl; - $args->listorder = -1*getNextSequence(); - $output = executeQuery('menu.updateMenuItemNode', $args); - if(!$output->toBool()) return $output; - } - - $xml_file = $this->makeXmlFile($menu_srl); - return $xml_file; - } - - /** - * Update xml file - * XML file is not often generated after setting menus on the admin page\n - * For this occasional cases, manually update was implemented. \n - * It looks unnecessary at this moment however no need to eliminate the feature. Just leave it. - * @return void - */ - function procMenuAdminMakeXmlFile() { - // Check input value - $menu_srl = Context::get('menu_srl'); - // Get information of the menu - $oMenuAdminModel = &getAdminModel('menu'); - $menu_info = $oMenuAdminModel->getMenu($menu_srl); - $menu_title = $menu_info->title; - // Re-generate the xml file - $xml_file = $this->makeXmlFile($menu_srl); - // Set return value - $this->add('menu_title',$menu_title); - $this->add('xml_file',$xml_file); - } - - /** - * Register a menu image button - * @return void - */ - function procMenuAdminUploadButton() { - $menu_srl = Context::get('menu_srl'); - $menu_item_srl = Context::get('menu_item_srl'); - $target = Context::get('target'); - $target_file = Context::get($target); - // Error occurs when the target is neither a uploaded file nor a valid file - if(!$menu_srl || !$menu_item_srl || !$target_file || !is_uploaded_file($target_file['tmp_name']) || !preg_match('/\.(gif|jpeg|jpg|png)/i',$target_file['name'])) { - Context::set('error_messge', Context::getLang('msg_invalid_request')); - // Move the file to a specific director if the uploaded file meets requirement - } else { - $tmp_arr = explode('.',$target_file['name']); - $ext = $tmp_arr[count($tmp_arr)-1]; - - $path = sprintf('./files/attach/menu_button/%d/', $menu_srl); - $filename = sprintf('%s%d.%s.%s', $path, $menu_item_srl, $target, $ext); - - if(!is_dir($path)) FileHandler::makeDir($path); - - move_uploaded_file($target_file['tmp_name'], $filename); - Context::set('filename', $filename); - } - - - $this->setTemplatePath($this->module_path.'tpl'); - $this->setTemplateFile('menu_file_uploaded'); - } - - /** - * Remove the menu image button - * @return void - */ - function procMenuAdminDeleteButton() { - $menu_srl = Context::get('menu_srl'); - $menu_item_srl = Context::get('menu_item_srl'); - $target = Context::get('target'); - $filename = Context::get('filename'); - FileHandler::removeFile($filename); - - $this->add('target', $target); - } - - /** - * Get all act list for admin menu - * @return void - */ - function procMenuAdminAllActList() { - $oModuleModel = &getModel('module'); - $installed_module_list = $oModuleModel->getModulesXmlInfo(); - if(is_array($installed_module_list)) - { - $currentLang = Context::getLangType(); - $menuList = array(); - foreach($installed_module_list AS $key=>$value) - { - $info = $oModuleModel->getModuleActionXml($value->module); - if($info->menu) $menuList[$value->module] = $info->menu; - unset($info->menu); - } } - $this->add('menuList', $menuList); - } - - /** - * Get all act list for admin menu - * @return void|object - */ - function procMenuAdminInsertItemForAdminMenu() + // Add a child + } + elseif($mode == 'insert') { - $requestArgs = Context::getRequestVars(); - $tmpMenuName = explode(':', $requestArgs->menu_name); - $moduleName = $tmpMenuName[0]; - $menuName = $tmpMenuName[1]; - - // 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); - $oModuleModel = &getModel('module'); - //$info = $oModuleModel->getModuleInfoXml($moduleName); - $info = $oModuleModel->getModuleActionXml($moduleName); - - $url = getNotEncodedFullUrl('', 'module', 'admin', 'act', $info->menu->{$menuName}->index); - if(empty($url)) $url = getNotEncodedFullUrl('', 'module', 'admin', 'act', $info->admin_index_act); - if(empty($url)) $url = getNotEncodedFullUrl('', 'module', 'admin'); - $dbInfo = Context::getDBInfo(); - - $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\']}', $menuName); - //if now page is https... - if(strpos($url, 'https') !== false) - { - $args->url = str_replace('https'.substr($dbInfo->default_url, 4), '', $url); - } - else - { - $args->url = str_replace($dbInfo->default_url, '', $url); - } - $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); - - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup'); - $this->setRedirectUrl($returnUrl); + $args->menu_item_srl = $target_srl; + $args->parent_srl = $parent_srl; + $args->listorder = -1*getNextSequence(); + $output = executeQuery('menu.updateMenuItemNode', $args); + if(!$output->toBool()) return $output; } - /** - * Update menu auth (Exposure and Access) - * @return void - */ - public function procMenuAdminUpdateAuth() + $xml_file = $this->makeXmlFile($menu_srl); + return $xml_file; + } + + /** + * Update xml file + * XML file is not often generated after setting menus on the admin page\n + * For this occasional cases, manually update was implemented. \n + * It looks unnecessary at this moment however no need to eliminate the feature. Just leave it. + * @return void + */ + function procMenuAdminMakeXmlFile() + { + // Check input value + $menu_srl = Context::get('menu_srl'); + // Get information of the menu + $oMenuAdminModel = &getAdminModel('menu'); + $menu_info = $oMenuAdminModel->getMenu($menu_srl); + $menu_title = $menu_info->title; + // Re-generate the xml file + $xml_file = $this->makeXmlFile($menu_srl); + // Set return value + $this->add('menu_title',$menu_title); + $this->add('xml_file',$xml_file); + } + + /** + * Register a menu image button + * @return void + */ + function procMenuAdminUploadButton() + { + $menu_srl = Context::get('menu_srl'); + $menu_item_srl = Context::get('menu_item_srl'); + $target = Context::get('target'); + $target_file = Context::get($target); + // Error occurs when the target is neither a uploaded file nor a valid file + if(!$menu_srl || !$menu_item_srl || !$target_file || !is_uploaded_file($target_file['tmp_name']) || !preg_match('/\.(gif|jpeg|jpg|png)/i',$target_file['name'])) { - $menuItemSrl = Context::get('menu_item_srl'); - $exposure = Context::get('exposure'); - $htPerm = Context::get('htPerm'); - - $oMenuModel = &getAdminModel('menu'); - $itemInfo = $oMenuModel->getMenuItemInfo($menuItemSrl); - $args = $itemInfo; - - // Menu Exposure update - // if exposure target is only login user... - if(!$exposure) - { - $args->group_srls = ''; - } - else - { - if(is_array($exposure)) - { - $args->group_srls = implode(',', $exposure); - } - else if($exposure && in_array($exposure,array('-1','-3'))) - { - $args->group_srls = $exposure; - } - } - - $output = executeQuery('menu.updateMenuItem', $args); - if(!$output->toBool()) - { - return $output; - } - - // Module Access update - unset($args); - $oMenuAdminModel = &getAdminModel('menu'); - $menuInfo = $oMenuAdminModel->getMenu($itemInfo->menu_srl); - - $oModuleModel = &getModel('module'); - $moduleInfo = $oModuleModel->getModuleInfoByMid($itemInfo->url, $menuInfo->site_srl); - - $xml_info = $oModuleModel->getModuleActionXML($moduleInfo->module); - - $grantList = $xml_info->grant; - $grantList->access->default = 'guest'; - $grantList->manager->default = 'manager'; - - foreach($grantList AS $grantName=>$grantInfo) - { - if(!$htPerm[$grantName]) - { - continue; - } - - // users in a particular group - if(is_array($htPerm[$grantName])) - { - $grant->{$grantName} = $htPerm[$grantName]; - continue; - } - // -1 = Log-in user only, -2 = site members only, 0 = all users - else - { - $grant->{$grantName}[] = $htPerm[$grantName]; - continue; - } - $grant->{$group_srls} = array(); - } - if(count($grant)) - { - $oModuleController = getController('module'); - $oModuleController->insertModuleGrants($moduleInfo->module_srl, $grant); - } - - // recreate menu cache file - $this->makeXmlFile($itemInfo->menu_srl); + Context::set('error_messge', Context::getLang('msg_invalid_request')); + // Move the file to a specific director if the uploaded file meets requirement } - - /** - * Generate XML file for menu and return its location - * @param int $menu_srl - * @return string - */ - function makeXmlFile($menu_srl) { - // Return if there is no information when creating the xml file - if(!$menu_srl) return; - // Get menu informaton - $args->menu_srl = $menu_srl; - $output = executeQuery('menu.getMenu', $args); - if(!$output->toBool() || !$output->data) return $output; - $site_srl = (int)$output->data->site_srl; - - if($site_srl) { - $oModuleModel = &getModel('module'); - $columnList = array('sites.domain'); - $site_info = $oModuleModel->getSiteInfo($site_srl, $columnList); - $domain = $site_info->domain; - } - // Get a list of menu items corresponding to menu_srl by listorder - $args->menu_srl = $menu_srl; - $args->sort_index = 'listorder'; - $output = executeQuery('menu.getMenuItems', $args); - if(!$output->toBool()) return; - // Specify the name of the cache file - $xml_file = sprintf("./files/cache/menu/%s.xml.php", $menu_srl); - $php_file = sprintf("./files/cache/menu/%s.php", $menu_srl); - // If no data found, generate an XML file without node data - $list = $output->data; - if(!$list) { - $xml_buff = ""; - FileHandler::writeFile($xml_file, $xml_buff); - FileHandler::writeFile($php_file, ''); - return $xml_file; - } - // Change to an array if only a single data is obtained - if(!is_array($list)) $list = array($list); - // Create a tree for loop - $list_count = count($list); - for($i=0;$i<$list_count;$i++) { - $node = $list[$i]; - $menu_item_srl = $node->menu_item_srl; - $parent_srl = $node->parent_srl; - - $tree[$parent_srl][$menu_item_srl] = $node; - } - // A common header to set permissions of the cache file and groups - $header_script = - '$lang_type = Context::getLangType(); '. - '$is_logged = Context::get(\'is_logged\'); '. - '$logged_info = Context::get(\'logged_info\'); '. - '$site_srl = '.$site_srl.';'. - '$site_admin = false;'. - 'if($site_srl) { '. - '$oModuleModel = &getModel(\'module\');'. - '$site_module_info = $oModuleModel->getSiteInfo($site_srl); '. - 'if($site_module_info) Context::set(\'site_module_info\',$site_module_info);'. - 'else $site_module_info = Context::get(\'site_module_info\');'. - '$grant = $oModuleModel->getGrant($site_module_info, $logged_info); '. - 'if($grant->manager ==1) $site_admin = true;'. - '}'. - 'if($is_logged) {'. - 'if($logged_info->is_admin=="Y") $is_admin = true; '. - 'else $is_admin = false; '. - '$group_srls = array_keys($logged_info->group_list); '. - '} else { '. - '$is_admin = false; '. - '$group_srls = array(); '. - '}'; - // Create the xml cache file (a separate session is needed for xml cache) - $xml_buff = sprintf( - 'init(); '. - 'header("Content-Type: text/xml; charset=UTF-8"); '. - 'header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); '. - 'header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); '. - 'header("Cache-Control: no-store, no-cache, must-revalidate"); '. - 'header("Cache-Control: post-check=0, pre-check=0", false); '. - 'header("Pragma: no-cache"); '. - '%s '. - '$oContext->close(); '. - '?>'. - '%s', - $header_script, - $this->getXmlTree($tree[0], $tree, $site_srl, $domain) - ); - // Create php cache file - $php_output = $this->getPhpCacheCode($tree[0], $tree, $site_srl, $domain); - $php_buff = sprintf( - 'list = array(%s); '. - 'Context::set("included_menu", $menu); '. - '?>', - $header_script, - $php_output['name'], - $php_output['buff'] - ); - // Save File - FileHandler::writeFile($xml_file, $xml_buff); - FileHandler::writeFile($php_file, $php_buff); - return $xml_file; - } - - /** - * Create xml data recursively looping for array nodes by referencing to parent_srl - * menu xml file uses a tag named "node" and this XML configures menus on admin page. - * (Implement tree menu by reading the xml file in tree_menu.js) - * @param array $source_node - * @param array $tree - * @param int $site_srl - * @param string $domain - * @return string - */ - function getXmlTree($source_node, $tree, $site_srl, $domain) { - if(!$source_node) return; - - $oMenuAdminModel = &getAdminModel('menu'); - - foreach($source_node as $menu_item_srl => $node) { - $child_buff = ""; - // Get data of the child nodes - if($menu_item_srl&&$tree[$menu_item_srl]) $child_buff = $this->getXmlTree($tree[$menu_item_srl], $tree, $site_srl, $domain); - // List variables - $names = $oMenuAdminModel->getMenuItemNames($node->name, $site_srl); - foreach($names as $key => $val) { - $name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace('\\','\\\\',htmlspecialchars($val))); - } - $name_str = sprintf('$_names = array(%s); print $_names[$lang_type];', $name_arr_str); - - $url = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->url); - if(preg_match('/^([0-9a-zA-Z\_\-]+)$/', $node->url)) { - $href = getSiteUrl($domain, '','mid',$node->url); - $pos = strpos($href, $_SERVER['HTTP_HOST']); - if($pos !== false) $href = substr($href, $pos+strlen($_SERVER['HTTP_HOST'])); - } else $href = $url; - $is_shortcut = $node->is_shortcut; - $open_window = $node->open_window; - $expand = $node->expand; - - $normal_btn = $node->normal_btn; - if($normal_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$normal_btn)) $normal_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$normal_btn); - else $normal_btn = ''; - $hover_btn = $node->hover_btn; - if($hover_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$hover_btn)) $hover_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$hover_btn); - else $hover_btn = ''; - $active_btn = $node->active_btn; - if($active_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$active_btn)) $active_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$active_btn); - else $active_btn = ''; - - $group_srls = $node->group_srls; - - if($normal_btn) { - if(preg_match('/\.png$/',$normal_btn)) $classname = 'class="iePngFix"'; - else $classname = ''; - if($hover_btn) $hover_str = sprintf('onmouseover="this.src=\'%s\'"', $hover_btn); else $hover_str = ''; - if($active_btn) $active_str = sprintf('onmousedown="this.src=\'%s\'"', $active_btn); else $active_str = ''; - $link = sprintf('<img src="%s" onmouseout="this.src=\'%s\'" alt="" %s %s %s />', $normal_btn, $normal_btn, $hover_str, $active_str, $classname); - } else { - $link = ''; - } - // If the value of node->group_srls exists - if($group_srls)$group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s))))||($is_logged&&%s))',$group_srls,$group_srls == -1?1:0); - else $group_check_code = "true"; - $attribute = sprintf( - 'node_srl="%s" parent_srl="%s" menu_name_key=\'%s\' text="" url="" href="" is_shortcut="%s" open_window="%s" expand="%s" normal_btn="%s" hover_btn="%s" active_btn="%s" link="%s"', - $menu_item_srl, - $node->parent_srl, - addslashes($node->name), - $group_check_code, - $name_str, - $group_check_code, - $url, - $group_check_code, - $href, - $is_shortcut, - $open_window, - $expand, - $normal_btn, - $hover_btn, - $active_btn, - $group_check_code, - $link - ); - - if($child_buff) $buff .= sprintf('%s', $attribute, $child_buff); - else $buff .= sprintf('', $attribute); - } - return $buff; - } - - /** - * Return php code converted from nodes in an array - * Although xml data can be used for tpl, menu to menu, it needs to use javascript separately - * By creating cache file in php and then you can get menu information without DB - * This cache includes in ModuleHandler::displayContent() and then Context::set() - * @param array $source_node - * @param array $tree - * @param int $site_srl - * @param string $domain - * @return array - */ - function getPhpCacheCode($source_node, $tree, $site_srl, $domain) { - $output = array("buff"=>"", "url_list"=>array()); - if(!$source_node) return $output; - - $oMenuAdminModel = &getAdminModel('menu'); - - foreach($source_node as $menu_item_srl => $node) { - // Get data from child nodes if exist. - if($menu_item_srl&&$tree[$menu_item_srl]) $child_output = $this->getPhpCacheCode($tree[$menu_item_srl], $tree, $site_srl, $domain); - 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('\\\\','"'),$val)); - } - $name_str = sprintf('$_menu_names[%d] = array(%s); %s', $node->menu_item_srl, $name_arr_str, $child_output['name']); - // If url value is not empty in the current node, put the value into an array url_list - if($node->url) $child_output['url_list'][] = $node->url; - $output['url_list'] = array_merge($output['url_list'], $child_output['url_list']); - // If node->group_srls value exists - if($node->group_srls)$group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s))))||($is_logged && %s))',$node->group_srls,$node->group_srls == -1?1:0); - else $group_check_code = "true"; - // List variables - $href = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->href); - $url = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->url); - if(preg_match('/^([0-9a-zA-Z\_\-]+)$/i', $node->url)) { - $href = getSiteUrl($domain, '','mid',$node->url); - $pos = strpos($href, $_SERVER['HTTP_HOST']); - if($pos !== false) $href = substr($href, $pos+strlen($_SERVER['HTTP_HOST'])); - } else $href = $url; - $is_shortcut = $node->is_shortcut; - $open_window = $node->open_window; - $normal_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->normal_btn); - $hover_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->hover_btn); - $active_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->active_btn); - - foreach($child_output['url_list'] as $key =>$val) - { - $child_output['url_list'][$key] = addslashes($val); - } - - $selected = '"'.implode('","',$child_output['url_list']).'"'; - $child_buff = $child_output['buff']; - $expand = $node->expand; - - $normal_btn = $node->normal_btn; - if($normal_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$normal_btn)) $normal_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$normal_btn); - else $normal_btn = ''; - - $hover_btn = $node->hover_btn; - if($hover_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$hover_btn)) $hover_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$hover_btn); - else $hover_btn = ''; - - $active_btn = $node->active_btn; - if($active_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$active_btn)) $active_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$active_btn); - else $active_btn = ''; - - $group_srls = $node->group_srls; - - if($normal_btn) { - if(preg_match('/\.png$/',$normal_btn)) $classname = 'class=\"iePngFix\"'; - else $classname = ''; - if($hover_btn) $hover_str = sprintf('onmouseover=\"this.src=\'%s\'\"', $hover_btn); else $hover_str = ''; - if($active_btn) $active_str = sprintf('onmousedown=\"this.src=\'%s\'\"', $active_btn); else $active_str = ''; - $link = sprintf('"\"".$_menu_names[%d][$lang_type]."\""', $normal_btn, $normal_btn, $node->menu_item_srl, $hover_str, $active_str, $classname); - if($active_btn) $link_active = sprintf('"\"".$_menu_names[%d][$lang_type]."\""', $active_btn, $node->menu_item_srl, $classname); - else $link_active = $link; - } else { - $link_active = $link = sprintf('$_menu_names[%d][$lang_type]', $node->menu_item_srl); - } - // Create properties (check if it belongs to the menu node by url_list. It looks a trick but fast and powerful) - $attribute = sprintf( - '"node_srl"=>"%s","parent_srl"=>"%s","menu_name_key"=>\'%s\',"text"=>(%s?$_menu_names[%d][$lang_type]:""),"href"=>(%s?"%s":""),"url"=>(%s?"%s":""),"is_shortcut"=>"%s","open_window"=>"%s","normal_btn"=>"%s","hover_btn"=>"%s","active_btn"=>"%s","selected"=>(array(%s)&&in_array(Context::get("mid"),array(%s))?1:0),"expand"=>"%s", "list"=>array(%s), "link"=>(%s? ( array(%s)&&in_array(Context::get("mid"),array(%s)) ?%s:%s):""),', - $node->menu_item_srl, - $node->parent_srl, - addslashes($node->name), - $group_check_code, - $node->menu_item_srl, - $group_check_code, - $href, - $group_check_code, - $url, - $is_shortcut, - $open_window, - $normal_btn, - $hover_btn, - $active_btn, - $selected, - $selected, - $expand, - $child_buff, - $group_check_code, - $selected, - $selected, - $link_active, - $link - ); - // Generate buff data - $output['buff'] .= sprintf('%s=>array(%s),', $node->menu_item_srl, $attribute); - $output['name'] .= $name_str; - } - return $output; - } - - /** - * Mapping menu and layout - * When setting menu on the layout, map the default layout - * @param int $layout_srl - * @param array $menu_srl_list - */ - function updateMenuLayout($layout_srl, $menu_srl_list) { - if(!count($menu_srl_list)) return; - // Delete the value of menu_srls - $args->menu_srls = implode(',',$menu_srl_list); - $output = executeQuery('menu.deleteMenuLayout', $args); - if(!$output->toBool()) return $output; - - $args->layout_srl = $layout_srl; - // Mapping menu_srls, layout_srl - for($i=0;$imenu_srl = $menu_srl_list[$i]; - $output = executeQuery('menu.insertMenuLayout', $args); - if(!$output->toBool()) return $output; - } - } - - /** - * Register a menu image button - * @param object $args - * @return array - */ - function _uploadButton($args) + else { - // path setting - $path = sprintf('./files/attach/menu_button/%d/', $args->menu_srl); - if($args->menu_normal_btn || $args->menu_hover_btn || $args->menu_active_btn && !is_dir($path)) - { - FileHandler::makeDir($path); - } - - if($args->isNormalDelete == 'Y' || $args->isHoverDelete == 'Y' || $args->isActiveDelete == 'Y') - { - $oMenuModel = &getAdminModel('menu'); - $itemInfo = $oMenuModel->getMenuItemInfo($args->menu_item_srl); - - if($args->isNormalDelete == 'Y' && $itemInfo->normal_btn) FileHandler::removeFile($itemInfo->normal_btn); - if($args->isHoverDelete == 'Y' && $itemInfo->hover_btn) FileHandler::removeFile($itemInfo->hover_btn); - if($args->isActiveDelete == 'Y' && $itemInfo->active_btn) FileHandler::removeFile($itemInfo->active_btn); - } - - $returnArray = array(); - $date = date('YmdHis'); - // normal button - if($args->menu_normal_btn) - { - $tmp_arr = explode('.',$args->menu_normal_btn['name']); - $ext = $tmp_arr[count($tmp_arr)-1]; - - $filename = sprintf('%s%d.%s.%s.%s', $path, $args->menu_item_srl, $date, 'menu_normal_btn', $ext); - move_uploaded_file($args->menu_normal_btn['tmp_name'], $filename); - $returnArray['normal_btn'] = $filename; - } - - // hover button - if($args->menu_hover_btn) - { - $tmp_arr = explode('.',$args->menu_hover_btn['name']); - $ext = $tmp_arr[count($tmp_arr)-1]; - - $filename = sprintf('%s%d.%s.%s.%s', $path, $args->menu_item_srl, $date, 'menu_hover_btn', $ext); - move_uploaded_file($args->menu_hover_btn['tmp_name'], $filename); - $returnArray['hover_btn'] = $filename; - } - - // active button - if($args->menu_active_btn) - { - $tmp_arr = explode('.',$args->menu_active_btn['name']); - $ext = $tmp_arr[count($tmp_arr)-1]; - - $filename = sprintf('%s%d.%s.%s.%s', $path, $args->menu_item_srl, $date, 'menu_active_btn', $ext); - move_uploaded_file($args->menu_active_btn['tmp_name'], $filename); - $returnArray['active_btn'] = $filename; - } - return $returnArray; - } - - /** - * When copy a menu, button copied also. - * @param $args menuItemInfo with button values - */ - private function _copyButton($insertedMenuItemSrl, &$menuItemInfo) - { - //normal_btn - if($menuItemInfo->normal_btn) - { - $originFile = FileHandler::getRealPath($menuItemInfo->normal_btn); - $targetFile = $this->_changeMenuItemSrlInButtonPath($menuItemInfo->normal_btn, $menuItemInfo->menu_srl, $insertedMenuItemSrl, 'normal'); - - FileHandler::copyFile($originFile, $targetFile); - } - - //hover_btn - if($menuItemInfo->hover_btn) - { - $originFile = FileHandler::getRealPath($menuItemInfo->hover_btn); - $targetFile = $this->_changeMenuItemSrlInButtonPath($menuItemInfo->hover_btn, $menuItemInfo->menu_srl, $insertedMenuItemSrl, 'hover'); - - FileHandler::copyFile($originFile, $targetFile); - } - - //active_btn - if($menuItemInfo->active_btn) - { - $originFile = FileHandler::getRealPath($menuItemInfo->active_btn); - $targetFile = $this->_changeMenuItemSrlInButtonPath($menuItemInfo->active_btn, $menuItemInfo->menu_srl, $insertedMenuItemSrl, 'active'); - - FileHandler::copyFile($originFile, $targetFile); - } - } - - private function _changeMenuItemSrlInButtonPath($buttonPath, $menuSrl, $menuItemSrl, $mode) - { - $path = sprintf('./files/attach/menu_button/%d/', $menuSrl); - $tmp_arr = explode('.', $buttonPath); + $tmp_arr = explode('.',$target_file['name']); $ext = $tmp_arr[count($tmp_arr)-1]; - return sprintf('%s%d.%s.%s', $path, $menuItemSrl, 'menu_'.$mode.'_btn', $ext); + + $path = sprintf('./files/attach/menu_button/%d/', $menu_srl); + $filename = sprintf('%s%d.%s.%s', $path, $menu_item_srl, $target, $ext); + + if(!is_dir($path)) FileHandler::makeDir($path); + + move_uploaded_file($target_file['tmp_name'], $filename); + Context::set('filename', $filename); } - public function makeHomemenuCacheFile($menuSrl) + $this->setTemplatePath($this->module_path.'tpl'); + $this->setTemplateFile('menu_file_uploaded'); + } + + /** + * Remove the menu image button + * @return void + */ + function procMenuAdminDeleteButton() + { + $menu_srl = Context::get('menu_srl'); + $menu_item_srl = Context::get('menu_item_srl'); + $target = Context::get('target'); + $filename = Context::get('filename'); + FileHandler::removeFile($filename); + + $this->add('target', $target); + } + + /** + * Get all act list for admin menu + * @return void + */ + function procMenuAdminAllActList() + { + $oModuleModel = &getModel('module'); + $installed_module_list = $oModuleModel->getModulesXmlInfo(); + if(is_array($installed_module_list)) { - $cacheBuff .= sprintf('homeMenuCacheFile, $cacheBuff); + $currentLang = Context::getLangType(); + $menuList = array(); + foreach($installed_module_list AS $key=>$value) + { + $info = $oModuleModel->getModuleActionXml($value->module); + if($info->menu) $menuList[$value->module] = $info->menu; + unset($info->menu); + } } + $this->add('menuList', $menuList); + } - public function getHomeMenuCacheFile() + /** + * Get all act list for admin menu + * @return void|object + */ + function procMenuAdminInsertItemForAdminMenu() + { + $requestArgs = Context::getRequestVars(); + $tmpMenuName = explode(':', $requestArgs->menu_name); + $moduleName = $tmpMenuName[0]; + $menuName = $tmpMenuName[1]; + + // 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); + $oModuleModel = &getModel('module'); + //$info = $oModuleModel->getModuleInfoXml($moduleName); + $info = $oModuleModel->getModuleActionXml($moduleName); + + $url = getNotEncodedFullUrl('', 'module', 'admin', 'act', $info->menu->{$menuName}->index); + if(empty($url)) $url = getNotEncodedFullUrl('', 'module', 'admin', 'act', $info->admin_index_act); + if(empty($url)) $url = getNotEncodedFullUrl('', 'module', 'admin'); + $dbInfo = Context::getDBInfo(); + + $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\']}', $menuName); + //if now page is https... + if(strpos($url, 'https') !== false) { - return $this->homeMenuCacheFile; + $args->url = str_replace('https'.substr($dbInfo->default_url, 4), '', $url); } - } -?> + else + { + $args->url = str_replace($dbInfo->default_url, '', $url); + } + $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); + + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup'); + $this->setRedirectUrl($returnUrl); + } + + /** + * Update menu auth (Exposure and Access) + * @return void + */ + public function procMenuAdminUpdateAuth() + { + $menuItemSrl = Context::get('menu_item_srl'); + $exposure = Context::get('exposure'); + $htPerm = Context::get('htPerm'); + + $oMenuModel = &getAdminModel('menu'); + $itemInfo = $oMenuModel->getMenuItemInfo($menuItemSrl); + $args = $itemInfo; + + // Menu Exposure update + // if exposure target is only login user... + if(!$exposure) + { + $args->group_srls = ''; + } + else + { + if(is_array($exposure)) + { + $args->group_srls = implode(',', $exposure); + } + else if($exposure && in_array($exposure,array('-1','-3'))) + { + $args->group_srls = $exposure; + } + } + + $output = executeQuery('menu.updateMenuItem', $args); + if(!$output->toBool()) + { + return $output; + } + + // Module Access update + unset($args); + $oMenuAdminModel = &getAdminModel('menu'); + $menuInfo = $oMenuAdminModel->getMenu($itemInfo->menu_srl); + + $oModuleModel = &getModel('module'); + $moduleInfo = $oModuleModel->getModuleInfoByMid($itemInfo->url, $menuInfo->site_srl); + + $xml_info = $oModuleModel->getModuleActionXML($moduleInfo->module); + + $grantList = $xml_info->grant; + $grantList->access->default = 'guest'; + $grantList->manager->default = 'manager'; + + foreach($grantList AS $grantName=>$grantInfo) + { + if(!$htPerm[$grantName]) + { + continue; + } + + // users in a particular group + if(is_array($htPerm[$grantName])) + { + $grant->{$grantName} = $htPerm[$grantName]; + continue; + } + // -1 = Log-in user only, -2 = site members only, 0 = all users + else + { + $grant->{$grantName}[] = $htPerm[$grantName]; + continue; + } + $grant->{$group_srls} = array(); + } + if(count($grant)) + { + $oModuleController = getController('module'); + $oModuleController->insertModuleGrants($moduleInfo->module_srl, $grant); + } + + // recreate menu cache file + $this->makeXmlFile($itemInfo->menu_srl); + } + + /** + * Generate XML file for menu and return its location + * @param int $menu_srl + * @return string + */ + function makeXmlFile($menu_srl) + { + // Return if there is no information when creating the xml file + if(!$menu_srl) return; + // Get menu informaton + $args->menu_srl = $menu_srl; + $output = executeQuery('menu.getMenu', $args); + if(!$output->toBool() || !$output->data) return $output; + $site_srl = (int)$output->data->site_srl; + + if($site_srl) + { + $oModuleModel = &getModel('module'); + $columnList = array('sites.domain'); + $site_info = $oModuleModel->getSiteInfo($site_srl, $columnList); + $domain = $site_info->domain; + } + // Get a list of menu items corresponding to menu_srl by listorder + $args->menu_srl = $menu_srl; + $args->sort_index = 'listorder'; + $output = executeQuery('menu.getMenuItems', $args); + if(!$output->toBool()) return; + // Specify the name of the cache file + $xml_file = sprintf("./files/cache/menu/%s.xml.php", $menu_srl); + $php_file = sprintf("./files/cache/menu/%s.php", $menu_srl); + // If no data found, generate an XML file without node data + $list = $output->data; + if(!$list) + { + $xml_buff = ""; + FileHandler::writeFile($xml_file, $xml_buff); + FileHandler::writeFile($php_file, ''); + return $xml_file; + } + // Change to an array if only a single data is obtained + if(!is_array($list)) $list = array($list); + // Create a tree for loop + $list_count = count($list); + for($i=0;$i<$list_count;$i++) + { + $node = $list[$i]; + $menu_item_srl = $node->menu_item_srl; + $parent_srl = $node->parent_srl; + + $tree[$parent_srl][$menu_item_srl] = $node; + } + // A common header to set permissions of the cache file and groups + $header_script = + '$lang_type = Context::getLangType(); '. + '$is_logged = Context::get(\'is_logged\'); '. + '$logged_info = Context::get(\'logged_info\'); '. + '$site_srl = '.$site_srl.';'. + '$site_admin = false;'. + 'if($site_srl) { '. + '$oModuleModel = &getModel(\'module\');'. + '$site_module_info = $oModuleModel->getSiteInfo($site_srl); '. + 'if($site_module_info) Context::set(\'site_module_info\',$site_module_info);'. + 'else $site_module_info = Context::get(\'site_module_info\');'. + '$grant = $oModuleModel->getGrant($site_module_info, $logged_info); '. + 'if($grant->manager ==1) $site_admin = true;'. + '}'. + 'if($is_logged) {'. + 'if($logged_info->is_admin=="Y") $is_admin = true; '. + 'else $is_admin = false; '. + '$group_srls = array_keys($logged_info->group_list); '. + '} else { '. + '$is_admin = false; '. + '$group_srls = array(); '. + '}'; + // Create the xml cache file (a separate session is needed for xml cache) + $xml_buff = sprintf( + 'init(); '. + 'header("Content-Type: text/xml; charset=UTF-8"); '. + 'header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); '. + 'header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); '. + 'header("Cache-Control: no-store, no-cache, must-revalidate"); '. + 'header("Cache-Control: post-check=0, pre-check=0", false); '. + 'header("Pragma: no-cache"); '. + '%s '. + '$oContext->close(); '. + '?>'. + '%s', + $header_script, + $this->getXmlTree($tree[0], $tree, $site_srl, $domain) + ); + // Create php cache file + $php_output = $this->getPhpCacheCode($tree[0], $tree, $site_srl, $domain); + $php_buff = sprintf( + 'list = array(%s); '. + 'Context::set("included_menu", $menu); '. + '?>', + $header_script, + $php_output['name'], + $php_output['buff'] + ); + // Save File + FileHandler::writeFile($xml_file, $xml_buff); + FileHandler::writeFile($php_file, $php_buff); + return $xml_file; + } + + /** + * Create xml data recursively looping for array nodes by referencing to parent_srl + * menu xml file uses a tag named "node" and this XML configures menus on admin page. + * (Implement tree menu by reading the xml file in tree_menu.js) + * @param array $source_node + * @param array $tree + * @param int $site_srl + * @param string $domain + * @return string + */ + function getXmlTree($source_node, $tree, $site_srl, $domain) + { + if(!$source_node) return; + + $oMenuAdminModel = &getAdminModel('menu'); + + foreach($source_node as $menu_item_srl => $node) + { + $child_buff = ""; + // Get data of the child nodes + if($menu_item_srl&&$tree[$menu_item_srl]) $child_buff = $this->getXmlTree($tree[$menu_item_srl], $tree, $site_srl, $domain); + // List variables + $names = $oMenuAdminModel->getMenuItemNames($node->name, $site_srl); + foreach($names as $key => $val) + { + $name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace('\\','\\\\',htmlspecialchars($val))); + } + $name_str = sprintf('$_names = array(%s); print $_names[$lang_type];', $name_arr_str); + + $url = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->url); + if(preg_match('/^([0-9a-zA-Z\_\-]+)$/', $node->url)) + { + $href = getSiteUrl($domain, '','mid',$node->url); + $pos = strpos($href, $_SERVER['HTTP_HOST']); + if($pos !== false) $href = substr($href, $pos+strlen($_SERVER['HTTP_HOST'])); + } + else $href = $url; + $is_shortcut = $node->is_shortcut; + $open_window = $node->open_window; + $expand = $node->expand; + + $normal_btn = $node->normal_btn; + if($normal_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$normal_btn)) $normal_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$normal_btn); + else $normal_btn = ''; + $hover_btn = $node->hover_btn; + if($hover_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$hover_btn)) $hover_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$hover_btn); + else $hover_btn = ''; + $active_btn = $node->active_btn; + if($active_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$active_btn)) $active_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$active_btn); + else $active_btn = ''; + + $group_srls = $node->group_srls; + + if($normal_btn) + { + if(preg_match('/\.png$/',$normal_btn)) $classname = 'class="iePngFix"'; + else $classname = ''; + if($hover_btn) $hover_str = sprintf('onmouseover="this.src=\'%s\'"', $hover_btn); else $hover_str = ''; + if($active_btn) $active_str = sprintf('onmousedown="this.src=\'%s\'"', $active_btn); else $active_str = ''; + $link = sprintf('<img src="%s" onmouseout="this.src=\'%s\'" alt="" %s %s %s />', $normal_btn, $normal_btn, $hover_str, $active_str, $classname); + } + else + { + $link = ''; + } + // If the value of node->group_srls exists + if($group_srls)$group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s))))||($is_logged&&%s))',$group_srls,$group_srls == -1?1:0); + else $group_check_code = "true"; + $attribute = sprintf( + 'node_srl="%s" parent_srl="%s" menu_name_key=\'%s\' text="" url="" href="" is_shortcut="%s" open_window="%s" expand="%s" normal_btn="%s" hover_btn="%s" active_btn="%s" link="%s"', + $menu_item_srl, + $node->parent_srl, + addslashes($node->name), + $group_check_code, + $name_str, + $group_check_code, + $url, + $group_check_code, + $href, + $is_shortcut, + $open_window, + $expand, + $normal_btn, + $hover_btn, + $active_btn, + $group_check_code, + $link + ); + + if($child_buff) $buff .= sprintf('%s', $attribute, $child_buff); + else $buff .= sprintf('', $attribute); + } + return $buff; + } + + /** + * Return php code converted from nodes in an array + * Although xml data can be used for tpl, menu to menu, it needs to use javascript separately + * By creating cache file in php and then you can get menu information without DB + * This cache includes in ModuleHandler::displayContent() and then Context::set() + * @param array $source_node + * @param array $tree + * @param int $site_srl + * @param string $domain + * @return array + */ + function getPhpCacheCode($source_node, $tree, $site_srl, $domain) + { + $output = array("buff"=>"", "url_list"=>array()); + if(!$source_node) return $output; + + $oMenuAdminModel = &getAdminModel('menu'); + + foreach($source_node as $menu_item_srl => $node) + { + // Get data from child nodes if exist. + if($menu_item_srl&&$tree[$menu_item_srl]) $child_output = $this->getPhpCacheCode($tree[$menu_item_srl], $tree, $site_srl, $domain); + 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('\\\\','"'),$val)); + } + $name_str = sprintf('$_menu_names[%d] = array(%s); %s', $node->menu_item_srl, $name_arr_str, $child_output['name']); + // If url value is not empty in the current node, put the value into an array url_list + if($node->url) $child_output['url_list'][] = $node->url; + $output['url_list'] = array_merge($output['url_list'], $child_output['url_list']); + // If node->group_srls value exists + if($node->group_srls)$group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s))))||($is_logged && %s))',$node->group_srls,$node->group_srls == -1?1:0); + else $group_check_code = "true"; + // List variables + $href = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->href); + $url = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->url); + if(preg_match('/^([0-9a-zA-Z\_\-]+)$/i', $node->url)) + { + $href = getSiteUrl($domain, '','mid',$node->url); + $pos = strpos($href, $_SERVER['HTTP_HOST']); + if($pos !== false) $href = substr($href, $pos+strlen($_SERVER['HTTP_HOST'])); + } + else $href = $url; + $is_shortcut = $node->is_shortcut; + $open_window = $node->open_window; + $normal_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->normal_btn); + $hover_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->hover_btn); + $active_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->active_btn); + + foreach($child_output['url_list'] as $key =>$val) + { + $child_output['url_list'][$key] = addslashes($val); + } + + $selected = '"'.implode('","',$child_output['url_list']).'"'; + $child_buff = $child_output['buff']; + $expand = $node->expand; + + $normal_btn = $node->normal_btn; + if($normal_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$normal_btn)) $normal_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$normal_btn); + else $normal_btn = ''; + + $hover_btn = $node->hover_btn; + if($hover_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$hover_btn)) $hover_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$hover_btn); + else $hover_btn = ''; + + $active_btn = $node->active_btn; + if($active_btn && preg_match('/^\.\/files\/attach\/menu_button/i',$active_btn)) $active_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$active_btn); + else $active_btn = ''; + + $group_srls = $node->group_srls; + + if($normal_btn) + { + if(preg_match('/\.png$/',$normal_btn)) $classname = 'class=\"iePngFix\"'; + else $classname = ''; + if($hover_btn) $hover_str = sprintf('onmouseover=\"this.src=\'%s\'\"', $hover_btn); else $hover_str = ''; + if($active_btn) $active_str = sprintf('onmousedown=\"this.src=\'%s\'\"', $active_btn); else $active_str = ''; + $link = sprintf('"\"".$_menu_names[%d][$lang_type]."\""', $normal_btn, $normal_btn, $node->menu_item_srl, $hover_str, $active_str, $classname); + if($active_btn) $link_active = sprintf('"\"".$_menu_names[%d][$lang_type]."\""', $active_btn, $node->menu_item_srl, $classname); + else $link_active = $link; + } + else + { + $link_active = $link = sprintf('$_menu_names[%d][$lang_type]', $node->menu_item_srl); + } + // Create properties (check if it belongs to the menu node by url_list. It looks a trick but fast and powerful) + $attribute = sprintf( + '"node_srl"=>"%s","parent_srl"=>"%s","menu_name_key"=>\'%s\',"text"=>(%s?$_menu_names[%d][$lang_type]:""),"href"=>(%s?"%s":""),"url"=>(%s?"%s":""),"is_shortcut"=>"%s","open_window"=>"%s","normal_btn"=>"%s","hover_btn"=>"%s","active_btn"=>"%s","selected"=>(array(%s)&&in_array(Context::get("mid"),array(%s))?1:0),"expand"=>"%s", "list"=>array(%s), "link"=>(%s? ( array(%s)&&in_array(Context::get("mid"),array(%s)) ?%s:%s):""),', + $node->menu_item_srl, + $node->parent_srl, + addslashes($node->name), + $group_check_code, + $node->menu_item_srl, + $group_check_code, + $href, + $group_check_code, + $url, + $is_shortcut, + $open_window, + $normal_btn, + $hover_btn, + $active_btn, + $selected, + $selected, + $expand, + $child_buff, + $group_check_code, + $selected, + $selected, + $link_active, + $link + ); + // Generate buff data + $output['buff'] .= sprintf('%s=>array(%s),', $node->menu_item_srl, $attribute); + $output['name'] .= $name_str; + } + return $output; + } + + /** + * Mapping menu and layout + * When setting menu on the layout, map the default layout + * @param int $layout_srl + * @param array $menu_srl_list + */ + function updateMenuLayout($layout_srl, $menu_srl_list) + { + if(!count($menu_srl_list)) return; + // Delete the value of menu_srls + $args->menu_srls = implode(',',$menu_srl_list); + $output = executeQuery('menu.deleteMenuLayout', $args); + if(!$output->toBool()) return $output; + + $args->layout_srl = $layout_srl; + // Mapping menu_srls, layout_srl + for($i=0;$imenu_srl = $menu_srl_list[$i]; + $output = executeQuery('menu.insertMenuLayout', $args); + if(!$output->toBool()) return $output; + } + } + + /** + * Register a menu image button + * @param object $args + * @return array + */ + function _uploadButton($args) + { + // path setting + $path = sprintf('./files/attach/menu_button/%d/', $args->menu_srl); + if($args->menu_normal_btn || $args->menu_hover_btn || $args->menu_active_btn && !is_dir($path)) + { + FileHandler::makeDir($path); + } + + if($args->isNormalDelete == 'Y' || $args->isHoverDelete == 'Y' || $args->isActiveDelete == 'Y') + { + $oMenuModel = &getAdminModel('menu'); + $itemInfo = $oMenuModel->getMenuItemInfo($args->menu_item_srl); + + if($args->isNormalDelete == 'Y' && $itemInfo->normal_btn) FileHandler::removeFile($itemInfo->normal_btn); + if($args->isHoverDelete == 'Y' && $itemInfo->hover_btn) FileHandler::removeFile($itemInfo->hover_btn); + if($args->isActiveDelete == 'Y' && $itemInfo->active_btn) FileHandler::removeFile($itemInfo->active_btn); + } + + $returnArray = array(); + $date = date('YmdHis'); + // normal button + if($args->menu_normal_btn) + { + $tmp_arr = explode('.',$args->menu_normal_btn['name']); + $ext = $tmp_arr[count($tmp_arr)-1]; + + $filename = sprintf('%s%d.%s.%s.%s', $path, $args->menu_item_srl, $date, 'menu_normal_btn', $ext); + move_uploaded_file($args->menu_normal_btn['tmp_name'], $filename); + $returnArray['normal_btn'] = $filename; + } + + // hover button + if($args->menu_hover_btn) + { + $tmp_arr = explode('.',$args->menu_hover_btn['name']); + $ext = $tmp_arr[count($tmp_arr)-1]; + + $filename = sprintf('%s%d.%s.%s.%s', $path, $args->menu_item_srl, $date, 'menu_hover_btn', $ext); + move_uploaded_file($args->menu_hover_btn['tmp_name'], $filename); + $returnArray['hover_btn'] = $filename; + } + + // active button + if($args->menu_active_btn) + { + $tmp_arr = explode('.',$args->menu_active_btn['name']); + $ext = $tmp_arr[count($tmp_arr)-1]; + + $filename = sprintf('%s%d.%s.%s.%s', $path, $args->menu_item_srl, $date, 'menu_active_btn', $ext); + move_uploaded_file($args->menu_active_btn['tmp_name'], $filename); + $returnArray['active_btn'] = $filename; + } + return $returnArray; + } + + /** + * When copy a menu, button copied also. + * @param $args menuItemInfo with button values + */ + private function _copyButton($insertedMenuItemSrl, &$menuItemInfo) + { + //normal_btn + if($menuItemInfo->normal_btn) + { + $originFile = FileHandler::getRealPath($menuItemInfo->normal_btn); + $targetFile = $this->_changeMenuItemSrlInButtonPath($menuItemInfo->normal_btn, $menuItemInfo->menu_srl, $insertedMenuItemSrl, 'normal'); + + FileHandler::copyFile($originFile, $targetFile); + } + + //hover_btn + if($menuItemInfo->hover_btn) + { + $originFile = FileHandler::getRealPath($menuItemInfo->hover_btn); + $targetFile = $this->_changeMenuItemSrlInButtonPath($menuItemInfo->hover_btn, $menuItemInfo->menu_srl, $insertedMenuItemSrl, 'hover'); + + FileHandler::copyFile($originFile, $targetFile); + } + + //active_btn + if($menuItemInfo->active_btn) + { + $originFile = FileHandler::getRealPath($menuItemInfo->active_btn); + $targetFile = $this->_changeMenuItemSrlInButtonPath($menuItemInfo->active_btn, $menuItemInfo->menu_srl, $insertedMenuItemSrl, 'active'); + + FileHandler::copyFile($originFile, $targetFile); + } + } + + private function _changeMenuItemSrlInButtonPath($buttonPath, $menuSrl, $menuItemSrl, $mode) + { + $path = sprintf('./files/attach/menu_button/%d/', $menuSrl); + $tmp_arr = explode('.', $buttonPath); + $ext = $tmp_arr[count($tmp_arr)-1]; + return sprintf('%s%d.%s.%s', $path, $menuItemSrl, 'menu_'.$mode.'_btn', $ext); + } + + public function makeHomemenuCacheFile($menuSrl) + { + $cacheBuff .= sprintf('homeMenuCacheFile, $cacheBuff); + } + + public function getHomeMenuCacheFile() + { + return $this->homeMenuCacheFile; + } +} +/* End of file menu.admin.controller.php */ +/* Location: ./modules/menu/menu.admin.controller.php */ diff --git a/modules/menu/menu.admin.model.php b/modules/menu/menu.admin.model.php index 3952c7374..f0171b9b6 100644 --- a/modules/menu/menu.admin.model.php +++ b/modules/menu/menu.admin.model.php @@ -1,556 +1,576 @@ site_srl) { - $site_module_info = Context::get('site_module_info'); - $obj->site_srl = (int)$site_module_info->site_srl; - } - $args->site_srl = $obj->site_srl; - $args->sort_index = $obj->sort_index; - $args->page = $obj->page?$obj->page:1; - $args->list_count = $obj->list_count?$obj->list_count:20; - $args->page_count = $obj->page_count?$obj->page_count:10; - // document.getDocumentList query execution - $output = executeQuery('menu.getMenuList', $args); - // Return if no result or an error occurs - if(!$output->toBool()||!count($output->data)) return $output; - - return $output; - } - - /** - * Return all menus - * @param int $site_srl - * @return array - */ - function getMenus($site_srl = null) { - if(!isset($site_srl)) { - $site_module_info = Context::get('site_module_info'); - $site_srl = (int)$site_module_info->site_srl; - } - // Get information from the DB - $args->site_srl = $site_srl ; - $args->menu_srl = $menu_srl; - $output = executeQueryArray('menu.getMenus', $args); - if(!$output->data) return; - $menus = $output->data; - return $menus; - } - - /** - * Get information of a new menu from the DB - * Return DB and XML information of the menu - * @param int $menu_srl - * @return object - */ - function getMenu($menu_srl) { - // Get information from the DB - $args->menu_srl = $menu_srl; - $output = executeQuery('menu.getMenu', $args); - if(!$output->data) return; - - $menu_info = $output->data; - $menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_srl); - $menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_srl); - return $menu_info; - } - - /** - * Get information of a new menu from the DB, search condition is menu title - * Return DB and XML information of the menu - * @param string $title - * @return object - */ - function getMenuByTitle($title) { - // Get information from the DB - $args->title = $title; - $output = executeQuery('menu.getMenuByTitle', $args); - if(!$output->data) return; - - if(is_array($output->data)) $menu_info = $output->data[0]; - else $menu_info = $output->data; - - if($menu_info->menu_srl) - { - $menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_info->menu_srl); - $menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_info->menu_srl); - } - return $menu_info; - } - - /** - * Return item information of the menu_srl - * group_srls uses a seperator with comma(,) and converts to an array by explode - * @param int $menu_item_srl - * @return object - */ - function getMenuItemInfo($menu_item_srl) { - // Get the menu information if menu_item_srl exists - $args->menu_item_srl = $menu_item_srl; - $output = executeQuery('menu.getMenuItem', $args); - $node = $output->data; - settype($node,'object'); - if($node->group_srls) $node->group_srls = explode(',',$node->group_srls); - else $node->group_srls = array(); - - $tmp_name = unserialize($node->name); - if($tmp_name && count($tmp_name) ) { - $selected_lang = array(); - $rand_name = $tmp_name[Context::getLangType()]; - if(!$rand_name) $rand_name = array_shift($tmp_name); - $node->name = $rand_name; - } - return $node; - } - - /** - * Return item information of the menu_srl - * @return void - */ - function getMenuAdminItemInfo() + /** + * Get a list of all menus + * @param object $obj + * @return object + */ + function getMenuList($obj) + { + if(!$obj->site_srl) { - $menuItemSrl = Context::get('menu_item_srl'); - $menuItem = $this->getMenuItemInfo($menuItemSrl); - - if(!$menuItem->url) - { - $menuItem->moduleType = null; - } - else if(!preg_match('/^http/i',$menuItem->url)) - { - $oModuleModel = &getModel('module'); - $moduleInfo = $oModuleModel->getModuleInfoByMid($menuItem->url, 0); - if(!$moduleInfo) $menuItem->moduleType = 'url'; - else - { - if($moduleInfo->mid == $menuItem->url) { - $menuItem->moduleType = $moduleInfo->module; - $menuItem->pageType = $moduleInfo->page_type; - $menuItem->layoutSrl = $moduleInfo->layout_srl; - } - } - } - else $menuItem->moduleType = 'url'; - - // grant setting - if(is_array($menuItem->group_srls) && count($menuItem->group_srls) > 0) - { - if($menuItem->group_srls[0] == -1) - { - $menuItem->grant = 'member'; - } - else if($menuItem->group_srls[0] == -3) - { - $menuItem->grant = 'manager'; - } - else - { - $menuItem->grant = 'group'; - } - } - - // get groups - $oMemberModel = &getModel('member'); - $oModuleAdminModel = &getAdminModel('module'); - $output = $oMemberModel->getGroups(); - if(is_array($output)) - { - $groupList = array(); - foreach($output AS $key=>$value) - { - - $groupList[$value->group_srl]->group_srl = $value->group_srl; - if(substr($value->title,0,12)=='$user_lang->') { - $tmp = $oModuleAdminModel->getLangCode(0, $value->title); - $groupList[$value->group_srl]->title = $tmp[Context::getLangType()]; - } - else $groupList[$value->group_srl]->title = $value->title; - - if(in_array($key, $menuItem->group_srls)) $groupList[$value->group_srl]->isChecked = true; - else $groupList[$value->group_srl]->isChecked = false; - } - } - $menuItem->groupList = $groupList; - - $oModuleController = &getController('module'); - $menuItem->name_key = $menuItem->name; - $oModuleController->replaceDefinedLangCode($menuItem->name); - - $this->add('menu_item', $menuItem); - } - - /** - * Return menu item list by menu number - * @param int $menu_srl - * @param int $parent_srl - * @param array $columnList - * @return object - */ - 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; + $site_module_info = Context::get('site_module_info'); + $obj->site_srl = (int)$site_module_info->site_srl; } + $args->site_srl = $obj->site_srl; + $args->sort_index = $obj->sort_index; + $args->page = $obj->page?$obj->page:1; + $args->list_count = $obj->list_count?$obj->list_count:20; + $args->page_count = $obj->page_count?$obj->page_count:10; + // document.getDocumentList query execution + $output = executeQuery('menu.getMenuList', $args); + // Return if no result or an error occurs + if(!$output->toBool()||!count($output->data)) return $output; - /** - * Return menu name in each language to support multi-language - * @param string $source_name - * @param int $site_srl - * @return array - */ - function getMenuItemNames($source_name, $site_srl = null) { - if(!$site_srl) { - $site_module_info = Context::get('site_module_info'); - $site_srl = (int)$site_module_info->site_srl; - } - // Get language code - $oModuleAdminModel = &getAdminModel('module'); - return $oModuleAdminModel->getLangCode($site_srl, $source_name); - } + return $output; + } - /** - * Get a template by using the menu_srl and retrun. - * Return html after compiling tpl on the server in order to add menu information on the admin page - * @return void - */ - function getMenuAdminTplInfo() { - // Get information on the menu for the parameter settings - $menu_item_srl = Context::get('menu_item_srl'); - $parent_srl = Context::get('parent_srl'); - // Get a list of member groups - $oMemberModel = &getModel('member'); - $group_list = $oMemberModel->getGroups(); - Context::set('group_list', $group_list); - // Add a sub-menu if there is parent_srl but not menu_item_srl - if(!$menu_item_srl && $parent_srl) { - // Get information of the parent menu - $parent_info = $this->getMenuItemInfo($parent_srl); - // Default parameter settings for a new menu - $item_info->menu_item_srl = getNextSequence(); - $item_info->parent_srl = $parent_srl; - $item_info->parent_menu_name = $parent_info->name; - // In case of modifying the existing menu or addting a new menu to the root - } else { - // Get information of the menu if menu_item_srl exists - if($menu_item_srl) $item_info = $this->getMenuItemInfo($menu_item_srl); - // Get only menu_item_srl if no values found, considering it as adding a new menu - if(!$item_info->menu_item_srl) { - $item_info->menu_item_srl = getNextSequence(); - } - } - Context::set('item_info', $item_info); - //Security - $security = new Security(); - $security->encodeHTML('group_list..title'); - $security->encodeHTML('item_info.url'); - $security->encodeHTML('item_info.name'); - - // Compile the template file into tpl variable and then return it - $oTemplate = &TemplateHandler::getInstance(); - $tpl = $oTemplate->compile($this->module_path.'tpl', 'menu_item_info'); - - $this->add('tpl', str_replace("\n"," ",$tpl)); - } - - /** - * get installed menu type api - */ - function getMenuAdminInstalledMenuType() + /** + * Return all menus + * @param int $site_srl + * @return array + */ + function getMenus($site_srl = null) + { + if(!isset($site_srl)) { - $this->add('menu_types', $this->getModuleListInSitemap(0)); + $site_module_info = Context::get('site_module_info'); + $site_srl = (int)$site_module_info->site_srl; } + // Get information from the DB + $args->site_srl = $site_srl ; + $args->menu_srl = $menu_srl; + $output = executeQueryArray('menu.getMenus', $args); + if(!$output->data) return; + $menus = $output->data; + return $menus; + } - /** - * @brief when menu add in sitemap, select module list - * this menu showing with trigger - * @param int $site_srl - * @return array - */ - function getModuleListInSitemap($site_srl = 0) + /** + * Get information of a new menu from the DB + * Return DB and XML information of the menu + * @param int $menu_srl + * @return object + */ + function getMenu($menu_srl) + { + // Get information from the DB + $args->menu_srl = $menu_srl; + $output = executeQuery('menu.getMenu', $args); + if(!$output->data) return; + + $menu_info = $output->data; + $menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_srl); + $menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_srl); + return $menu_info; + } + + /** + * Get information of a new menu from the DB, search condition is menu title + * Return DB and XML information of the menu + * @param string $title + * @return object + */ + function getMenuByTitle($title) + { + // Get information from the DB + $args->title = $title; + $output = executeQuery('menu.getMenuByTitle', $args); + if(!$output->data) return; + + if(is_array($output->data)) $menu_info = $output->data[0]; + else $menu_info = $output->data; + + if($menu_info->menu_srl) + { + $menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_info->menu_srl); + $menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_info->menu_srl); + } + return $menu_info; + } + + /** + * Return item information of the menu_srl + * group_srls uses a seperator with comma(,) and converts to an array by explode + * @param int $menu_item_srl + * @return object + */ + function getMenuItemInfo($menu_item_srl) + { + // Get the menu information if menu_item_srl exists + $args->menu_item_srl = $menu_item_srl; + $output = executeQuery('menu.getMenuItem', $args); + $node = $output->data; + settype($node,'object'); + if($node->group_srls) $node->group_srls = explode(',',$node->group_srls); + else $node->group_srls = array(); + + $tmp_name = unserialize($node->name); + if($tmp_name && count($tmp_name)) + { + $selected_lang = array(); + $rand_name = $tmp_name[Context::getLangType()]; + if(!$rand_name) $rand_name = array_shift($tmp_name); + $node->name = $rand_name; + } + return $node; + } + + /** + * Return item information of the menu_srl + * @return void + */ + function getMenuAdminItemInfo() + { + $menuItemSrl = Context::get('menu_item_srl'); + $menuItem = $this->getMenuItemInfo($menuItemSrl); + + if(!$menuItem->url) + { + $menuItem->moduleType = null; + } + else if(!preg_match('/^http/i',$menuItem->url)) { $oModuleModel = &getModel('module'); - $columnList = array('module'); - $moduleList = array('page'); - - $output = $oModuleModel->getModuleListByInstance($site_srl, $columnList); - if(is_array($output->data)) + $moduleInfo = $oModuleModel->getModuleInfoByMid($menuItem->url, 0); + if(!$moduleInfo) $menuItem->moduleType = 'url'; + else { - foreach($output->data AS $key=>$value) + if($moduleInfo->mid == $menuItem->url) { - array_push($moduleList, $value->module); + $menuItem->moduleType = $moduleInfo->module; + $menuItem->pageType = $moduleInfo->page_type; + $menuItem->layoutSrl = $moduleInfo->layout_srl; } } - - // after trigger - $output = ModuleHandler::triggerCall('menu.getModuleListInSitemap', 'after', $moduleList); - if(!$output->toBool()) return $output; - - $moduleList = array_unique($moduleList); - - $oAutoinstallModel = getModel('autoinstall'); - - $moduleInfoList = array(); - Context::loadLang('modules/page/lang'); - if(is_array($moduleList)) - { - foreach($moduleList AS $key=>$value) - { - $moduleInfo = $oModuleModel->getModuleInfoXml($value); - $defaultSkin = $oModuleModel->getModuleDefaultSkin($value, 'P'); - $defaultMobileSkin = $oModuleModel->getModuleDefaultSkin($value, 'M'); - $skinInfo = $oModuleModel->loadSkinInfo(ModuleHandler::getModulePath($value), $defaultSkin); - $mobileSkinInfo = $oModuleModel->loadSkinInfo(ModuleHandler::getModulePath($value), $defaultMobileSkin); - $moduleInfo->defaultSkin = new stdClass(); - $moduleInfo->defaultSkin->skin = $defaultSkin; - $moduleInfo->defaultSkin->title = $skinInfo->title ? $skinInfo->title : $defaultSkin; - $moduleInfo->defaultMobileSkin = new stdClass(); - $moduleInfo->defaultMobileSkin->skin = $defaultMobileSkin; - $moduleInfo->defaultMobileSkin->title = $mobileSkinInfo->title ? $mobileSkinInfo->title : $defaultMobileSkin; - - $moduleInfo->package_srl = $oAutoinstallModel->getPackageSrlByPath('./modules/' . $value); - $moduleInfo->url = _XE_LOCATION_SITE_ . '?mid=download&package_srl=' . $moduleInfo->package_srl; - - if($value == 'page') - { - $pageTypeName = Context::getLang('page_type_name'); - $moduleInfo->title = $pageTypeName['ARTICLE']; - $moduleInfoList['ARTICLE'] = $moduleInfo; - $wModuleInfo = clone $moduleInfo; - unset($wModuleInfo->default_skin); - unset($wModuleInfo->default_mskin); - $wModuleInfo->title = $pageTypeName['WIDGET']; - $wModuleInfo->no_skin = 'Y'; - $moduleInfoList['WIDGET'] = $wModuleInfo; - $oModuleInfo = clone $moduleInfo; - unset($oModuleInfo->default_skin); - unset($oModuleInfo->default_mskin); - $oModuleInfo->title = $pageTypeName['OUTSIDE']; - $oModuleInfo->no_skin = 'Y'; - $moduleInfoList['OUTSIDE'] = $oModuleInfo; - } - else - { - $moduleInfoList[$value] = $moduleInfo; - } - } - } - - return $moduleInfoList; } + else $menuItem->moduleType = 'url'; - public function getMenuAdminSiteMap() + // grant setting + if(is_array($menuItem->group_srls) && count($menuItem->group_srls) > 0) { - $menuSrl = Context::get('menu_srl'); - - $oModuleModel = &getModel('module'); - $oMenuAdminController = &getAdminController('menu'); - $columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl'); - $start_module = $oModuleModel->getSiteInfo(0, $columnList); - - $menuList = array(); - if($menuSrl) + if($menuItem->group_srls[0] == -1) { - $isMenuFixed = false; - $output = $this->getMenu($menuSrl); - $php_file = sprintf('./files/cache/menu/%s.php',$output->menu_srl); - if(file_exists($php_file)) @include($php_file); - else - { - $oMenuAdminController->makeXmlFile($menuSrl); - } - - if(count($menu->list)>0) - { - foreach($menu->list AS $key=>$value) - { - $this->_menuInfoSetting($menu->list[$key], $start_module, $isMenuFixed, $menuSrl); - } - } - - // menu recreate - if($isMenuFixed) - { - $oMenuAdminController->makeXmlFile($menuSrl); - } - - $menuItems->menuSrl = $output->menu_srl; - $menuItems->title = $output->title; - $menuItems->menuItems = $menu; - array_push($menuList, $menuItems); + $menuItem->grant = 'member'; + } + else if($menuItem->group_srls[0] == -3) + { + $menuItem->grant = 'manager'; } else { - $menuListFromDB = $this->getMenus(); - if(is_array($menuListFromDB)) + $menuItem->grant = 'group'; + } + } + + // get groups + $oMemberModel = &getModel('member'); + $oModuleAdminModel = &getAdminModel('module'); + $output = $oMemberModel->getGroups(); + if(is_array($output)) + { + $groupList = array(); + foreach($output AS $key=>$value) + { + + $groupList[$value->group_srl]->group_srl = $value->group_srl; + if(substr($value->title,0,12)=='$user_lang->') { - $oAdmin = &getClass('admin'); - foreach($menuListFromDB AS $key=>$value) + $tmp = $oModuleAdminModel->getLangCode(0, $value->title); + $groupList[$value->group_srl]->title = $tmp[Context::getLangType()]; + } + else $groupList[$value->group_srl]->title = $value->title; + + if(in_array($key, $menuItem->group_srls)) $groupList[$value->group_srl]->isChecked = true; + else $groupList[$value->group_srl]->isChecked = false; + } + } + $menuItem->groupList = $groupList; + + $oModuleController = &getController('module'); + $menuItem->name_key = $menuItem->name; + $oModuleController->replaceDefinedLangCode($menuItem->name); + + $this->add('menu_item', $menuItem); + } + + /** + * Return menu item list by menu number + * @param int $menu_srl + * @param int $parent_srl + * @param array $columnList + * @return object + */ + 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; + } + + /** + * Return menu name in each language to support multi-language + * @param string $source_name + * @param int $site_srl + * @return array + */ + function getMenuItemNames($source_name, $site_srl = null) + { + if(!$site_srl) + { + $site_module_info = Context::get('site_module_info'); + $site_srl = (int)$site_module_info->site_srl; + } + // Get language code + $oModuleAdminModel = &getAdminModel('module'); + return $oModuleAdminModel->getLangCode($site_srl, $source_name); + } + + /** + * Get a template by using the menu_srl and retrun. + * Return html after compiling tpl on the server in order to add menu information on the admin page + * @return void + */ + function getMenuAdminTplInfo() + { + // Get information on the menu for the parameter settings + $menu_item_srl = Context::get('menu_item_srl'); + $parent_srl = Context::get('parent_srl'); + // Get a list of member groups + $oMemberModel = &getModel('member'); + $group_list = $oMemberModel->getGroups(); + Context::set('group_list', $group_list); + // Add a sub-menu if there is parent_srl but not menu_item_srl + if(!$menu_item_srl && $parent_srl) + { + // Get information of the parent menu + $parent_info = $this->getMenuItemInfo($parent_srl); + // Default parameter settings for a new menu + $item_info->menu_item_srl = getNextSequence(); + $item_info->parent_srl = $parent_srl; + $item_info->parent_menu_name = $parent_info->name; + // In case of modifying the existing menu or addting a new menu to the root + } + else + { + // Get information of the menu if menu_item_srl exists + if($menu_item_srl) $item_info = $this->getMenuItemInfo($menu_item_srl); + // Get only menu_item_srl if no values found, considering it as adding a new menu + if(!$item_info->menu_item_srl) + { + $item_info->menu_item_srl = getNextSequence(); + } + } + Context::set('item_info', $item_info); + //Security + $security = new Security(); + $security->encodeHTML('group_list..title'); + $security->encodeHTML('item_info.url'); + $security->encodeHTML('item_info.name'); + + // Compile the template file into tpl variable and then return it + $oTemplate = &TemplateHandler::getInstance(); + $tpl = $oTemplate->compile($this->module_path.'tpl', 'menu_item_info'); + + $this->add('tpl', str_replace("\n"," ",$tpl)); + } + + /** + * get installed menu type api + */ + function getMenuAdminInstalledMenuType() + { + $this->add('menu_types', $this->getModuleListInSitemap(0)); + } + + /** + * @brief when menu add in sitemap, select module list + * this menu showing with trigger + * @param int $site_srl + * @return array + */ + function getModuleListInSitemap($site_srl = 0) + { + $oModuleModel = &getModel('module'); + $columnList = array('module'); + $moduleList = array('page'); + + $output = $oModuleModel->getModuleListByInstance($site_srl, $columnList); + if(is_array($output->data)) + { + foreach($output->data AS $key=>$value) + { + array_push($moduleList, $value->module); + } + } + + // after trigger + $output = ModuleHandler::triggerCall('menu.getModuleListInSitemap', 'after', $moduleList); + if(!$output->toBool()) return $output; + + $moduleList = array_unique($moduleList); + + $oAutoinstallModel = getModel('autoinstall'); + + $moduleInfoList = array(); + Context::loadLang('modules/page/lang'); + if(is_array($moduleList)) + { + foreach($moduleList AS $key=>$value) + { + $moduleInfo = $oModuleModel->getModuleInfoXml($value); + $defaultSkin = $oModuleModel->getModuleDefaultSkin($value, 'P'); + $defaultMobileSkin = $oModuleModel->getModuleDefaultSkin($value, 'M'); + $skinInfo = $oModuleModel->loadSkinInfo(ModuleHandler::getModulePath($value), $defaultSkin); + $mobileSkinInfo = $oModuleModel->loadSkinInfo(ModuleHandler::getModulePath($value), $defaultMobileSkin); + $moduleInfo->defaultSkin = new stdClass(); + $moduleInfo->defaultSkin->skin = $defaultSkin; + $moduleInfo->defaultSkin->title = $skinInfo->title ? $skinInfo->title : $defaultSkin; + $moduleInfo->defaultMobileSkin = new stdClass(); + $moduleInfo->defaultMobileSkin->skin = $defaultMobileSkin; + $moduleInfo->defaultMobileSkin->title = $mobileSkinInfo->title ? $mobileSkinInfo->title : $defaultMobileSkin; + + $moduleInfo->package_srl = $oAutoinstallModel->getPackageSrlByPath('./modules/' . $value); + $moduleInfo->url = _XE_LOCATION_SITE_ . '?mid=download&package_srl=' . $moduleInfo->package_srl; + + if($value == 'page') + { + $pageTypeName = Context::getLang('page_type_name'); + $moduleInfo->title = $pageTypeName['ARTICLE']; + $moduleInfoList['ARTICLE'] = $moduleInfo; + $wModuleInfo = clone $moduleInfo; + unset($wModuleInfo->default_skin); + unset($wModuleInfo->default_mskin); + $wModuleInfo->title = $pageTypeName['WIDGET']; + $wModuleInfo->no_skin = 'Y'; + $moduleInfoList['WIDGET'] = $wModuleInfo; + $oModuleInfo = clone $moduleInfo; + unset($oModuleInfo->default_skin); + unset($oModuleInfo->default_mskin); + $oModuleInfo->title = $pageTypeName['OUTSIDE']; + $oModuleInfo->no_skin = 'Y'; + $moduleInfoList['OUTSIDE'] = $oModuleInfo; + } + else + { + $moduleInfoList[$value] = $moduleInfo; + } + } + } + + return $moduleInfoList; + } + + public function getMenuAdminSiteMap() + { + $menuSrl = Context::get('menu_srl'); + + $oModuleModel = &getModel('module'); + $oMenuAdminController = &getAdminController('menu'); + $columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl'); + $start_module = $oModuleModel->getSiteInfo(0, $columnList); + + $menuList = array(); + if($menuSrl) + { + $isMenuFixed = false; + $output = $this->getMenu($menuSrl); + $php_file = sprintf('./files/cache/menu/%s.php',$output->menu_srl); + if(file_exists($php_file)) @include($php_file); + else + { + $oMenuAdminController->makeXmlFile($menuSrl); + } + + if(count($menu->list)>0) + { + foreach($menu->list AS $key=>$value) + { + $this->_menuInfoSetting($menu->list[$key], $start_module, $isMenuFixed, $menuSrl); + } + } + + // menu recreate + if($isMenuFixed) + { + $oMenuAdminController->makeXmlFile($menuSrl); + } + + $menuItems->menuSrl = $output->menu_srl; + $menuItems->title = $output->title; + $menuItems->menuItems = $menu; + array_push($menuList, $menuItems); + } + else + { + $menuListFromDB = $this->getMenus(); + if(is_array($menuListFromDB)) + { + $oAdmin = &getClass('admin'); + foreach($menuListFromDB AS $key=>$value) + { + if($value->title == $oAdmin->getAdminMenuName()) unset($output[$key]); + else { - if($value->title == $oAdmin->getAdminMenuName()) unset($output[$key]); + unset($menu); + unset($menuItems); + $value->php_file = sprintf('./files/cache/menu/%s.php',$value->menu_srl); + if(file_exists($value->php_file)) @include($value->php_file); else { - unset($menu); - unset($menuItems); - $value->php_file = sprintf('./files/cache/menu/%s.php',$value->menu_srl); - if(file_exists($value->php_file)) @include($value->php_file); - else - { - $oMenuAdminController->makeXmlFile($value->menu_srl); - } + $oMenuAdminController->makeXmlFile($value->menu_srl); + } - $isMenuFixed = false; - if(count($menu->list)>0) + $isMenuFixed = false; + if(count($menu->list)>0) + { + foreach($menu->list AS $key2=>$value2) { - foreach($menu->list AS $key2=>$value2) - { - $this->_menuInfoSetting($menu->list[$key2], $start_module, $isMenuFixed, $value->menu_srl); - } + $this->_menuInfoSetting($menu->list[$key2], $start_module, $isMenuFixed, $value->menu_srl); } + } - // menu recreate - if($isMenuFixed) - { - $oMenuAdminController->makeXmlFile($value->menu_srl); - } + // menu recreate + if($isMenuFixed) + { + $oMenuAdminController->makeXmlFile($value->menu_srl); + } - $menuItems->menuSrl = $value->menu_srl; - $menuItems->title = $value->title; - $menuItems->menuItems = $menu; + $menuItems->menuSrl = $value->menu_srl; + $menuItems->title = $value->title; + $menuItems->menuItems = $menu; - if($value->menu_srl == $this->menuSrlWithinHome) - { - $menuList[-1] = $menuItems; - } - else - { - array_push($menuList, $menuItems); - } + if($value->menu_srl == $this->menuSrlWithinHome) + { + $menuList[-1] = $menuItems; + } + else + { + array_push($menuList, $menuItems); } } } } - ksort($menuList); - - $this->add('menuList', $menuList); } + ksort($menuList); - /** - * Get module's detail setup contents - * @return void - */ - public function getMenuAdminDetailSetup() + $this->add('menuList', $menuList); + } + + /** + * Get module's detail setup contents + * @return void + */ + public function getMenuAdminDetailSetup() + { + $menuItemSrl = Context::get('menu_item_srl'); + if(!$menuItemSrl) { - $menuItemSrl = Context::get('menu_item_srl'); - if(!$menuItemSrl) - { - return new Object(-1, 'msg_invalid_request'); - } - - $menuItemInfo = $this->getMenuItemInfo($menuItemSrl); - - // if menu is shortcut - if($menuItemInfo->is_shortcut == 'Y') - { - return new Object(-1, 'msg_invalid_request'); - } - - // get module info - $oModuleModel = &getModel('module'); - $moduleInfo = $oModuleModel->getModuleInfoByMid($menuItemInfo->url); - - // get xml info - $moduleConfInfo = $oModuleModel->getModuleInfoXml($moduleInfo->module); - - $setupUrl = sprintf('index.php?module=admin&act=%s&module_srl=%s&isLayoutDrop=1', $moduleConfInfo->setup_index_act, $moduleInfo->module_srl); - $this->add('setupUrl', $setupUrl); - - $this->setRedirectUrl($setupUrl); + return new Object(-1, 'msg_invalid_request'); } - /** - * Setting menu information(recursive) - * @param array $menu - * @return void - */ - private function _menuInfoSetting(&$menu, &$start_module, &$isMenuFixed, $menuSrl) + $menuItemInfo = $this->getMenuItemInfo($menuItemSrl); + + // if menu is shortcut + if($menuItemInfo->is_shortcut == 'Y') { - $oModuleModel = &getModel('module'); - // if url is empty and is_shortcut is 'N', change to is_shortcut 'Y' - if(!$menu['url'] && $menu['is_shortcut'] == 'N') + return new Object(-1, 'msg_invalid_request'); + } + + // get module info + $oModuleModel = &getModel('module'); + $moduleInfo = $oModuleModel->getModuleInfoByMid($menuItemInfo->url); + + // get xml info + $moduleConfInfo = $oModuleModel->getModuleInfoXml($moduleInfo->module); + + $setupUrl = sprintf('index.php?module=admin&act=%s&module_srl=%s&isLayoutDrop=1', $moduleConfInfo->setup_index_act, $moduleInfo->module_srl); + $this->add('setupUrl', $setupUrl); + + $this->setRedirectUrl($setupUrl); + } + + /** + * Setting menu information(recursive) + * @param array $menu + * @return void + */ + private function _menuInfoSetting(&$menu, &$start_module, &$isMenuFixed, $menuSrl) + { + $oModuleModel = &getModel('module'); + // if url is empty and is_shortcut is 'N', change to is_shortcut 'Y' + if(!$menu['url'] && $menu['is_shortcut'] == 'N') + { + $menu['is_shortcut'] = 'Y'; + + unset($args); + $args->menu_item_srl = $menu['node_srl']; + $args->is_shortcut = 'Y'; + if($menu['menu_name_key']) $args->name = $menu['menu_name_key']; + else $args->name = $menu['menu_name']; + $output = executeQuery('menu.updateMenuItem', $args); + + $isMenuFixed = true; + } + + //if menu type is module menu + if(!empty($menu['url']) && !preg_match('/^http/i', $menu['url'])) + { + unset($midInfo); + unset($moduleInfo); + $midInfo = $oModuleModel->getModuleInfoByMid($menu['url'], 0); + $moduleInfo = $oModuleModel->getModuleInfoXml($midInfo->module); + if($moduleInfo->setup_index_act) { - $menu['is_shortcut'] = 'Y'; - - unset($args); - $args->menu_item_srl = $menu['node_srl']; - $args->is_shortcut = 'Y'; - if($menu['menu_name_key']) $args->name = $menu['menu_name_key']; - else $args->name = $menu['menu_name']; - $output = executeQuery('menu.updateMenuItem', $args); - - $isMenuFixed = true; + $menu['module_srl'] = $midInfo->module_srl; + $menu['module'] = $midInfo->module; + if($midInfo->page_type) + { + $menu['module_type'] = $midInfo->page_type; + } + else + { + $menu['module_type'] = $midInfo->module; + } + $menu['setup_index_act'] = $moduleInfo->setup_index_act; } - - //if menu type is module menu - if(!empty($menu['url']) && !preg_match('/^http/i', $menu['url'])) + if($menu['is_shortcut'] == 'N' && $midInfo->mid == $start_module->mid) { - unset($midInfo); - unset($moduleInfo); - $midInfo = $oModuleModel->getModuleInfoByMid($menu['url'], 0); - $moduleInfo = $oModuleModel->getModuleInfoXml($midInfo->module); - if($moduleInfo->setup_index_act) - { - $menu['module_srl'] = $midInfo->module_srl; - $menu['module'] = $midInfo->module; - if($midInfo->page_type) - { - $menu['module_type'] = $midInfo->page_type; - } - else - { - $menu['module_type'] = $midInfo->module; - } - $menu['setup_index_act'] = $moduleInfo->setup_index_act; - } - if($menu['is_shortcut'] == 'N' && $midInfo->mid == $start_module->mid) - { - $menu['is_start_module'] = true; - $this->menuSrlWithinHome = $menuSrl; - } - // setting layout srl for layout management - $menu['layout_srl'] = $midInfo->layout_srl; + $menu['is_start_module'] = true; + $this->menuSrlWithinHome = $menuSrl; } - if(count($menu['list']) > 0) + // setting layout srl for layout management + $menu['layout_srl'] = $midInfo->layout_srl; + } + if(count($menu['list']) > 0) + { + foreach($menu['list'] AS $key=>$value) { - foreach($menu['list'] AS $key=>$value) - { - $this->_menuInfoSetting($menu['list'][$key], &$start_module, $isMenuFixed, $menuSrl); - } + $this->_menuInfoSetting($menu['list'][$key], $start_module, $isMenuFixed, $menuSrl); } } - } -?> + } +} +/* End of file menu.admin.model.php */ +/* Location: ./modules/menu/menu.admin.model.php */ diff --git a/modules/menu/menu.admin.view.php b/modules/menu/menu.admin.view.php index 9519f7095..58e262c01 100644 --- a/modules/menu/menu.admin.view.php +++ b/modules/menu/menu.admin.view.php @@ -1,324 +1,331 @@ setTemplatePath($this->module_path.'tpl'); + } - /** - * Initialization - * @return void - */ - function init() { - $this->setTemplatePath($this->module_path.'tpl'); - } + /** + * The first page of the menu admin + * @return void + */ + function dispMenuAdminContent() + { + // Get a list of registered menus + $obj->page = Context::get('page'); + $obj->sort_index = 'listorder'; + $obj->list_count = 20; + $obj->page_count = 20; - /** - * The first page of the menu admin - * @return void - */ - function dispMenuAdminContent() { - // Get a list of registered menus - $obj->page = Context::get('page'); - $obj->sort_index = 'listorder'; - $obj->list_count = 20; - $obj->page_count = 20; + $oMenuModel = &getAdminModel('menu'); + $output = $oMenuModel->getMenuList($obj); - $oMenuModel = &getAdminModel('menu'); - $output = $oMenuModel->getMenuList($obj); + Context::set('total_count', $output->total_count); + Context::set('total_page', $output->total_page); + Context::set('page', $output->page); + Context::set('menu_list', $output->data); + Context::set('page_navigation', $output->page_navigation); - Context::set('total_count', $output->total_count); - Context::set('total_page', $output->total_page); - Context::set('page', $output->page); - Context::set('menu_list', $output->data); - Context::set('page_navigation', $output->page_navigation); + //Security + $security = new Security(); + $security->encodeHTML('menu_list..title'); - //Security - $security = new Security(); - $security->encodeHTML('menu_list..title'); + $this->setTemplateFile('index'); + } - $this->setTemplateFile('index'); - } + /** + * Page to insert a menu + * @return void + */ + function dispMenuAdminInsert() + { + // Set the menu with menu information + $menu_srl = Context::get('menu_srl'); - /** - * Page to insert a menu - * @return void - */ - function dispMenuAdminInsert() { - // Set the menu with menu information - $menu_srl = Context::get('menu_srl'); - - if($menu_srl) { - // Get information of the menu - $oMenuModel = &getAdminModel('menu'); - $menu_info = $oMenuModel->getMenu($menu_srl); - if($menu_info->menu_srl == $menu_srl) Context::set('menu_info', $menu_info); - } - - $this->setTemplateFile('menu_insert'); - } - - /** - * Menu admin page - * @return void - */ - function dispMenuAdminManagement() { - // Get information of the menu - $menu_srl = Context::get('menu_srl'); - - if(!$menu_srl) return $this->dispMenuAdminContent(); - // Get information of the menu - $oMenuModel = &getAdminModel('menu'); - $menu_info = $oMenuModel->getMenu($menu_srl); - if($menu_info->menu_srl != $menu_srl) return $this->dispMenuAdminContent(); - - Context::set('menu_info', $menu_info); - - //Security - $security = new Security(); - $security->encodeHTML('menu_info..title'); - - // Set the layout to be pop-up - $this->setTemplateFile('menu_management'); - } - - - /** - * Display a mid list to be able to select on the menu - * Perphaps this method not use - * @return void - */ - function dispMenuAdminMidList() { - $oModuleModel = &getModel('module'); - // Get a list of module categories - $module_category = $oModuleModel->getModuleCategories(); - Context::set('module_category', $module_category); - // Get a list of modules - $module_list = $oModuleModel->getModuleList(); - Context::set('module_list', $module_list); - // Get a list of mid - $args->module_category_srl = Context::get('module_category_srl'); - $args->module = Context::get('target_module'); - $columnList = array('module_srl', 'module', 'module_category_srl', 'browser_title'); - $mid_list = $oModuleModel->getMidList($args, $columnList); - Context::set('mid_list', $mid_list); - // Set the menu as a pop-up - $this->setLayoutFile('popup_layout'); - //Security - $security = new Security(); - $security->encodeHTML('module_category..title'); - $security->encodeHTML('module_list..module'); - $security->encodeHTML('mid_list..module'); - $security->encodeHTML('mid_list..browser_title'); - - // Set a template file - $this->setTemplateFile('mid_list'); - } - - /** - * Site map admin menu index page - * @return void - */ - function dispMenuAdminSiteMap() + if($menu_srl) { - Context::loadLang(_XE_PATH_.'modules/document/lang/'); - Context::loadLang(_XE_PATH_.'modules/layout/lang/'); - Context::loadLang(_XE_PATH_.'modules/autoinstall/lang/'); - $site_srl = Context::get('site_srl'); - $site_module_info = Context::get('site_module_info'); + // Get information of the menu + $oMenuModel = &getAdminModel('menu'); + $menu_info = $oMenuModel->getMenu($menu_srl); + if($menu_info->menu_srl == $menu_srl) Context::set('menu_info', $menu_info); + } - if(!$site_srl) + $this->setTemplateFile('menu_insert'); + } + + /** + * Menu admin page + * @return void + */ + function dispMenuAdminManagement() + { + // Get information of the menu + $menu_srl = Context::get('menu_srl'); + + if(!$menu_srl) return $this->dispMenuAdminContent(); + // Get information of the menu + $oMenuModel = &getAdminModel('menu'); + $menu_info = $oMenuModel->getMenu($menu_srl); + if($menu_info->menu_srl != $menu_srl) return $this->dispMenuAdminContent(); + + Context::set('menu_info', $menu_info); + + //Security + $security = new Security(); + $security->encodeHTML('menu_info..title'); + + // Set the layout to be pop-up + $this->setTemplateFile('menu_management'); + } + + /** + * Display a mid list to be able to select on the menu + * Perphaps this method not use + * @return void + */ + function dispMenuAdminMidList() + { + $oModuleModel = &getModel('module'); + // Get a list of module categories + $module_category = $oModuleModel->getModuleCategories(); + Context::set('module_category', $module_category); + // Get a list of modules + $module_list = $oModuleModel->getModuleList(); + Context::set('module_list', $module_list); + // Get a list of mid + $args->module_category_srl = Context::get('module_category_srl'); + $args->module = Context::get('target_module'); + $columnList = array('module_srl', 'module', 'module_category_srl', 'browser_title'); + $mid_list = $oModuleModel->getMidList($args, $columnList); + Context::set('mid_list', $mid_list); + // Set the menu as a pop-up + $this->setLayoutFile('popup_layout'); + //Security + $security = new Security(); + $security->encodeHTML('module_category..title'); + $security->encodeHTML('module_list..module'); + $security->encodeHTML('mid_list..module'); + $security->encodeHTML('mid_list..browser_title'); + + // Set a template file + $this->setTemplateFile('mid_list'); + } + + /** + * Site map admin menu index page + * @return void + */ + function dispMenuAdminSiteMap() + { + Context::loadLang(_XE_PATH_.'modules/document/lang/'); + Context::loadLang(_XE_PATH_.'modules/layout/lang/'); + Context::loadLang(_XE_PATH_.'modules/autoinstall/lang/'); + $site_srl = Context::get('site_srl'); + $site_module_info = Context::get('site_module_info'); + + if(!$site_srl) + { + if($logged_info->is_admin == 'Y' && !$site_keyword) $site_srl = 0; + else $site_srl = (int)$site_module_info->site_srl; + } + + $oAdmin = &getClass('admin'); + + $oMenuAdminModel = &getAdminModel('menu'); + $menuListFromDB = $oMenuAdminModel->getMenus(); + if(is_array($menuListFromDB)) $output = array_reverse($menuListFromDB); + + $menuList = array(); + if(is_array($output)) + { + $menuItems = array(); + foreach($output AS $key=>$value) { - if($logged_info->is_admin == 'Y' && !$site_keyword) $site_srl = 0; - else $site_srl = (int)$site_module_info->site_srl; - } - - $oAdmin = &getClass('admin'); - - $oMenuAdminModel = &getAdminModel('menu'); - $menuListFromDB = $oMenuAdminModel->getMenus(); - if(is_array($menuListFromDB)) $output = array_reverse($menuListFromDB); - - $menuList = array(); - if(is_array($output)) - { - $menuItems = array(); - foreach($output AS $key=>$value) + if($value->title == $oAdmin->getAdminMenuName()) unset($output[$key]); + else { - if($value->title == $oAdmin->getAdminMenuName()) unset($output[$key]); - else - { - unset($menu); - unset($menuItems); - //$value->xml_file = sprintf('./files/cache/menu/%s.xml.php',$value->menu_srl); - $value->php_file = sprintf('./files/cache/menu/%s.php',$value->menu_srl); - if(file_exists($value->php_file)) @include($value->php_file); + unset($menu); + unset($menuItems); + //$value->xml_file = sprintf('./files/cache/menu/%s.xml.php',$value->menu_srl); + $value->php_file = sprintf('./files/cache/menu/%s.php',$value->menu_srl); + if(file_exists($value->php_file)) @include($value->php_file); - if(count($menu->list)>0) + if(count($menu->list)>0) + { + foreach($menu->list AS $key2=>$value2) { - foreach($menu->list AS $key2=>$value2) - { - $this->_menuInfoSetting($menu->list[$key2]); - } + $this->_menuInfoSetting($menu->list[$key2]); } - - //array_push($menuList, $value->xml_file); - $menuItems->menuSrl = $value->menu_srl; - $menuItems->title = $value->title; - $menuItems->menuItems = $menu; - array_push($menuList, $menuItems); } + + //array_push($menuList, $value->xml_file); + $menuItems->menuSrl = $value->menu_srl; + $menuItems->title = $value->title; + $menuItems->menuItems = $menu; + array_push($menuList, $menuItems); } } - Context::set('menu_list', $menuList); - - // get installed module list - $oPageController = &getController('page'); //for lang - $resultModuleList = $oMenuAdminModel->getModuleListInSitemap($site_srl); - Context::set('module_list', $resultModuleList); - - $oLayoutModel = &getModel('layout'); - $layoutList = $oLayoutModel->getLayoutList(); - Context::set('layout_list', $layoutList); - - // choice theme file - $theme_file = _XE_PATH_.'files/theme/theme_info.php'; - if(is_readable($theme_file)) - { - @include($theme_file); - Context::set('current_layout', $theme_info->layout); - } - else - { - $oModuleModel = &getModel('module'); - $default_mid = $oModuleModel->getDefaultMid(); - Context::set('current_layout', $default_mid->layout_srl); - } - - // get default group list - $oMemberModel = &getModel('member'); - $output = $oMemberModel->getGroups(); - if(is_array($output)) - { - $groupList = array(); - foreach($output AS $key=>$value) - { - $groupList[$value->group_srl]->group_srl = $value->group_srl; - $groupList[$value->group_srl]->title = $value->title; - } - } - Context::set('group_list', $groupList); - - $this->setTemplateFile('sitemap'); } + Context::set('menu_list', $menuList); - /** - * Site design admin page - * @return void - */ - public function dispMenuAdminSiteDesign() + // get installed module list + $oPageController = &getController('page'); //for lang + $resultModuleList = $oMenuAdminModel->getModuleListInSitemap($site_srl); + Context::set('module_list', $resultModuleList); + + $oLayoutModel = &getModel('layout'); + $layoutList = $oLayoutModel->getLayoutList(); + Context::set('layout_list', $layoutList); + + // choice theme file + $theme_file = _XE_PATH_.'files/theme/theme_info.php'; + if(is_readable($theme_file)) { - $this->setTemplateFile('sitemap'); + @include($theme_file); + Context::set('current_layout', $theme_info->layout); } - - /** - * Module skin setup common page - * @return void - */ - public function dispMenuAdminSkinSetup() - { - $menuItemSrl = Context::get('menu_item_srl'); - if(!$menuItemSrl) - { - return new Object(-1, 'msg_invalid_request'); - } - - $oMenuAdminModel = &getAdminModel('menu'); - $menuItemInfo = $oMenuAdminModel->getMenuItemInfo($menuItemSrl); - if(!$menuItemInfo->menu_item_srl) - { - return new Object(-1, 'msg_invalid_request'); - } - - // If menu type is not module - if(empty($menuItemInfo->url) || preg_match('/^http/i', $menuItemInfo->url)) - { - return new Object(-1, 'msg_invalid_request'); - } - - $oModuleModel = &getModel('module'); - $moduleInfo = $oModuleModel->getModuleInfoByMid($menuItemInfo->url); - - // get the grant infotmation from admin module - $oModuleAdminModel = &getAdminModel('module'); - $skin_content = $oModuleAdminModel->getModuleSkinHTML($moduleInfo->module_srl); - Context::set('skin_content', $skin_content); - - $this->setLayoutPath('common/tpl'); - $this->setLayoutFile('default_layout'); - $this->setTemplateFile('skin_info'); - } - - /** - * Setting menu information(recursive) - * @param array $menu - * @return void - */ - function _menuInfoSetting(&$menu) + else { $oModuleModel = &getModel('module'); - if($menu['url'] && !preg_match('/^http/i', $menu['url'])) - { - unset($midInfo); - unset($moduleInfo); - $midInfo = $oModuleModel->getModuleInfoByMid($menu['url'], 0); - $moduleInfo = $oModuleModel->getModuleInfoXml($midInfo->module); - if($moduleInfo->setup_index_act) - { - $menu['module_srl'] = $midInfo->module_srl; - $menu['setup_index_act'] = $moduleInfo->setup_index_act; - } - // setting layout srl for layout management - $menu['layout_srl'] = $midInfo->layout_srl; - } - if(count($menu['list']) > 0) - { - foreach($menu['list'] AS $key=>$value) - { - $this->_menuInfoSetting($menu['list'][$key]); - } - } + $default_mid = $oModuleModel->getDefaultMid(); + Context::set('current_layout', $default_mid->layout_srl); } - /** - * Tree-shaped sorting - * @param array $menuItems - * @return array - */ - function _arrangeMenuItem($menuItems) + // get default group list + $oMemberModel = &getModel('member'); + $output = $oMemberModel->getGroups(); + if(is_array($output)) { - if(is_array($menuItems)) + $groupList = array(); + foreach($output AS $key=>$value) { - $arrangedMenuItemList = array(); - foreach($menuItems AS $key=>$value) - { - if($value->parent_srl == 0) - { - $arrangedMenuItemList[$value->menu_item_srl] = array('name'=>$value->name, 'subMenu'=>array()); - } + $groupList[$value->group_srl]->group_srl = $value->group_srl; + $groupList[$value->group_srl]->title = $value->title; + } + } + Context::set('group_list', $groupList); - if($value->parent_srl > 0 && isset($arrangedMenuItemList[$value->parent_srl])) - { - $arrangedMenuItemList[$value->parent_srl]['subMenu'][$value->menu_item_srl] = $value; - } + $this->setTemplateFile('sitemap'); + } + + /** + * Site design admin page + * @return void + */ + public function dispMenuAdminSiteDesign() + { + $this->setTemplateFile('sitemap'); + } + + /** + * Module skin setup common page + * @return void + */ + public function dispMenuAdminSkinSetup() + { + $menuItemSrl = Context::get('menu_item_srl'); + if(!$menuItemSrl) + { + return new Object(-1, 'msg_invalid_request'); + } + + $oMenuAdminModel = &getAdminModel('menu'); + $menuItemInfo = $oMenuAdminModel->getMenuItemInfo($menuItemSrl); + if(!$menuItemInfo->menu_item_srl) + { + return new Object(-1, 'msg_invalid_request'); + } + + // If menu type is not module + if(empty($menuItemInfo->url) || preg_match('/^http/i', $menuItemInfo->url)) + { + return new Object(-1, 'msg_invalid_request'); + } + + $oModuleModel = &getModel('module'); + $moduleInfo = $oModuleModel->getModuleInfoByMid($menuItemInfo->url); + + // get the grant infotmation from admin module + $oModuleAdminModel = &getAdminModel('module'); + $skin_content = $oModuleAdminModel->getModuleSkinHTML($moduleInfo->module_srl); + Context::set('skin_content', $skin_content); + + $this->setLayoutPath('common/tpl'); + $this->setLayoutFile('default_layout'); + $this->setTemplateFile('skin_info'); + } + + /** + * Setting menu information(recursive) + * @param array $menu + * @return void + */ + function _menuInfoSetting(&$menu) + { + $oModuleModel = &getModel('module'); + if($menu['url'] && !preg_match('/^http/i', $menu['url'])) + { + unset($midInfo); + unset($moduleInfo); + $midInfo = $oModuleModel->getModuleInfoByMid($menu['url'], 0); + $moduleInfo = $oModuleModel->getModuleInfoXml($midInfo->module); + if($moduleInfo->setup_index_act) + { + $menu['module_srl'] = $midInfo->module_srl; + $menu['setup_index_act'] = $moduleInfo->setup_index_act; + } + // setting layout srl for layout management + $menu['layout_srl'] = $midInfo->layout_srl; + } + if(count($menu['list']) > 0) + { + foreach($menu['list'] AS $key=>$value) + { + $this->_menuInfoSetting($menu['list'][$key]); + } + } + } + + /** + * Tree-shaped sorting + * @param array $menuItems + * @return array + */ + function _arrangeMenuItem($menuItems) + { + if(is_array($menuItems)) + { + $arrangedMenuItemList = array(); + foreach($menuItems AS $key=>$value) + { + if($value->parent_srl == 0) + { + $arrangedMenuItemList[$value->menu_item_srl] = array('name'=>$value->name, 'subMenu'=>array()); + } + + if($value->parent_srl > 0 && isset($arrangedMenuItemList[$value->parent_srl])) + { + $arrangedMenuItemList[$value->parent_srl]['subMenu'][$value->menu_item_srl] = $value; } } - return $arrangedMenuItemList; } - } -?> + return $arrangedMenuItemList; + } +} +/* End of file menu.admin.view.php */ +/* Location: ./modules/menu/menu.admin.view.php */ diff --git a/modules/menu/menu.class.php b/modules/menu/menu.class.php index 9519dfbde..9c6d6600b 100644 --- a/modules/menu/menu.class.php +++ b/modules/menu/menu.class.php @@ -1,113 +1,116 @@ isColumnExists('menu', 'site_srl')) return true; + /** + * A method to check if successfully installed + * @return bool + */ + function checkUpdate() + { + $oDB = &DB::getInstance(); + // 2009. 02. 11 menu added to the table site_srl + if(!$oDB->isColumnExists('menu', 'site_srl')) return true; - // 2012. 02. 01 title index check - if(!$oDB->isIndexExists("menu", "idx_title")) return true; + // 2012. 02. 01 title index check + if(!$oDB->isIndexExists("menu", "idx_title")) return true; - if(!$oDB->isColumnExists('menu_item', 'is_shortcut')) + if(!$oDB->isColumnExists('menu_item', 'is_shortcut')) + { + return TRUE; + } + return false; + } + + /** + * Execute update + * @return Object + */ + function moduleUpdate() { + $oDB = &DB::getInstance(); + // 2009. 02. 11 menu added to the table site_srl + if(!$oDB->isColumnExists('menu', 'site_srl')) + { + $oDB->addColumn('menu','site_srl','number',11,0,true); + } + + // 2012. 02. 01 title index check + if(!$oDB->isIndexExists("menu","idx_title")) + { + $oDB->addIndex('menu', 'idx_title', array('title')); + } + + if(!$oDB->isColumnExists('menu_item', 'is_shortcut')) + { + $oDB->addColumn('menu_item', 'is_shortcut', 'char', 1, 'N'); + + // check empty url and change shortcut type + $oMenuAdminModel = &getAdminModel('menu'); + $output = $oMenuAdminModel->getMenus(); + + if(is_array($output)) { - return TRUE; - } - return false; - } - - /** - * Execute update - * @return Object - } - - /** - * Execute update - * @return Object - */ - function moduleUpdate() { - $oDB = &DB::getInstance(); - // 2009. 02. 11 menu added to the table site_srl - if(!$oDB->isColumnExists('menu', 'site_srl')) { - $oDB->addColumn('menu','site_srl','number',11,0,true); - } - - // 2012. 02. 01 title index check - if(!$oDB->isIndexExists("menu","idx_title")) { - $oDB->addIndex('menu', 'idx_title', array('title')); - } - - if(!$oDB->isColumnExists('menu_item', 'is_shortcut')) - { - $oDB->addColumn('menu_item', 'is_shortcut', 'char', 1, 'N'); - - // check empty url and change shortcut type - $oMenuAdminModel = &getAdminModel('menu'); - $output = $oMenuAdminModel->getMenus(); - - if(is_array($output)) + foreach($output AS $key=>$value) { - foreach($output AS $key=>$value) + unset($args); + $args->menu_srl = $value->menu_srl; + $output2 = executeQueryArray('menu.getMenuItems', $args); + if(is_array($output2->data)) { - unset($args); - $args->menu_srl = $value->menu_srl; - $output2 = executeQueryArray('menu.getMenuItems', $args); - if(is_array($output2->data)) + foreach($output2->data AS $key2=>$value2) { - foreach($output2->data AS $key2=>$value2) + if($value2->is_shortcut == 'N' && !$value2->url) { - if($value2->is_shortcut == 'N' && !$value2->url) - { - $value2->is_shortcut = 'Y'; + $value2->is_shortcut = 'Y'; - $output3 = executeQuery('menu.updateMenuItem', $value2); - } + $output3 = executeQuery('menu.updateMenuItem', $value2); } } } } } + } - return new Object(0, 'success_updated'); - } + return new Object(0, 'success_updated'); + } - /** - * Re-generate the cache file - * @return void - */ - function recompileCache() { - $oMenuAdminController = &getAdminController('menu'); - // Wanted list of all the blog module - $output = executeQueryArray("menu.getMenus"); - $list = $output->data; - if(!count($list)) return; - // The menu module is used in the re-create all the menu list - foreach($list as $menu_item) { - $menu_srl = $menu_item->menu_srl; - $oMenuAdminController->makeXmlFile($menu_srl); - } - } - } -?> + /** + * Re-generate the cache file + * @return void + */ + function recompileCache() + { + $oMenuAdminController = &getAdminController('menu'); + // Wanted list of all the blog module + $output = executeQueryArray("menu.getMenus"); + $list = $output->data; + if(!count($list)) return; + // The menu module is used in the re-create all the menu list + foreach($list as $menu_item) + { + $menu_srl = $menu_item->menu_srl; + $oMenuAdminController->makeXmlFile($menu_srl); + } + } +} +/* End of file menu.class.php */ +/* Location: ./modules/menu/menu.class.php */ diff --git a/modules/menu/menu.mobile.php b/modules/menu/menu.mobile.php index b2f9201cb..714c23859 100644 --- a/modules/menu/menu.mobile.php +++ b/modules/menu/menu.mobile.php @@ -7,7 +7,8 @@ * @package /modules/menu * @version 0.1 */ -class menuMobile extends moduleObject { +class menuMobile extends moduleObject +{ /** * Result data list * @var array @@ -36,7 +37,8 @@ class menuMobile extends moduleObject { * Display menu * @return void */ - function dispMenuMenu() { + function dispMenuMenu() + { $menu_srl = Context::get('menu_srl'); $oAdminModel =& getAdminModel('menu'); $menu_info = $oAdminModel->getMenu($menu_srl); @@ -50,7 +52,7 @@ class menuMobile extends moduleObject { $this->setTemplatePath(sprintf("%stpl/",$this->module_path)); $this->setTemplateFile('menu.html'); - } } -?> +/* End of file menu.mobile.php */ +/* Location: ./modules/menu/menu.mobile.php */ diff --git a/modules/message/message.admin.controller.php b/modules/message/message.admin.controller.php index e472b5621..3d169e9d0 100644 --- a/modules/message/message.admin.controller.php +++ b/modules/message/message.admin.controller.php @@ -1,33 +1,35 @@ insertModuleConfig('message',$args); + if(!$output->toBool()) return $output; - /** - * @brief Initialization - **/ - function init() { - } + $this->setMessage('success_updated'); - /** - * @brief Configuration - **/ - function procMessageAdminInsertConfig() { - // Get information - $args = Context::gets('skin', 'mskin'); - // Create a module Controller object - $oModuleController = &getController('module'); - $output = $oModuleController->insertModuleConfig('message',$args); - if(!$output->toBool()) return $output; - - $this->setMessage('success_updated'); - - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMessageAdminConfig'); - $this->setRedirectUrl($returnUrl); - } - } -?> + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMessageAdminConfig'); + $this->setRedirectUrl($returnUrl); + } +} +/* End of file message.admin.controller.php */ +/* Location: ./modules/message/message.admin.controller.php */ diff --git a/modules/message/message.admin.view.php b/modules/message/message.admin.view.php index bf6893536..502494a3a 100644 --- a/modules/message/message.admin.view.php +++ b/modules/message/message.admin.view.php @@ -1,45 +1,45 @@ getskins($this->module_path); + Context::set('skin_list', $skin_list); - /** - * @brief Configuration - **/ - function dispMessageAdminConfig() { - // Get a list of skins(themes) - $oModuleModel = &getModel('module'); + $mskin_list = $oModuleModel->getSkins($this->module_path, "m.skins"); + Context::set('mskin_list', $mskin_list); - $skin_list = $oModuleModel->getskins($this->module_path); - Context::set('skin_list', $skin_list); + // Get configurations (using module model object) + $config = $oModuleModel->getModuleConfig('message'); + Context::set('config',$config); - $mskin_list = $oModuleModel->getSkins($this->module_path, "m.skins"); - Context::set('mskin_list', $mskin_list); + // Set a template file + $this->setTemplatePath($this->module_path.'tpl'); - // Get configurations (using module model object) - $config = $oModuleModel->getModuleConfig('message'); - Context::set('config',$config); + //Security + $security = new Security(); + $security->encodeHTML('skin_list..title', 'mskin_list..title'); - // Set a template file - $this->setTemplatePath($this->module_path.'tpl'); - - - //Security - $security = new Security(); - $security->encodeHTML('skin_list..title', 'mskin_list..title'); - - $this->setTemplateFile('config'); - } - - } -?> + $this->setTemplateFile('config'); + } +} +/* End of file message.admin.view.php */ +/* Location: ./modules/message/message.admin.view.php */ diff --git a/modules/message/message.class.php b/modules/message/message.class.php index 9635a7cd2..dcae16cc6 100644 --- a/modules/message/message.class.php +++ b/modules/message/message.class.php @@ -1,68 +1,70 @@ getModuleConfig('message'); - /** - * @brief Implement if additional tasks are necessary when installing - **/ - function moduleInstall() { - return new Object(); - } - - /** - * @brief a method to check if successfully installed - **/ - function checkUpdate() + if($config->skin) { - $oModuleModel = &getModel('module'); - $config = $oModuleModel->getModuleConfig('message'); - - if($config->skin) + $config_parse = explode('.', $config->skin); + if (count($config_parse) > 1) { - $config_parse = explode('.', $config->skin); - if (count($config_parse) > 1) + $template_path = sprintf('./themes/%s/modules/message/', $config_parse[0]); + if(is_dir($template_path)) return true; + } + } + return false; + } + + /** + * @brief Execute update + */ + function moduleUpdate() + { + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('message'); + + if($config->skin) + { + $config_parse = explode('.', $config->skin); + if (count($config_parse) > 1) + { + $template_path = sprintf('./themes/%s/modules/message/', $config_parse[0]); + if(is_dir($template_path)) { - $template_path = sprintf('./themes/%s/modules/message/', $config_parse[0]); - if(is_dir($template_path)) return true; + $config->skin = implode('|@|', $config_parse); + $oModuleController = &getController('module'); + $oModuleController->updateModuleConfig('message', $config); } } - return false; - } + } + return new Object(); + } - /** - * @brief Execute update - **/ - function moduleUpdate() - { - $oModuleModel = &getModel('module'); - $config = $oModuleModel->getModuleConfig('message'); - - if($config->skin) - { - $config_parse = explode('.', $config->skin); - if (count($config_parse) > 1) - { - $template_path = sprintf('./themes/%s/modules/message/', $config_parse[0]); - if(is_dir($template_path)) - { - $config->skin = implode('|@|', $config_parse); - $oModuleController = &getController('module'); - $oModuleController->updateModuleConfig('message', $config); - } - } - } - return new Object(); - } - - /** - * @brief Re-generate the cache file - **/ - function recompileCache() { - } - } -?> + /** + * @brief Re-generate the cache file + */ + function recompileCache() + { + } +} +/* End of file message.class.php */ +/* Location: ./modules/message/message.class.php */ diff --git a/modules/message/message.mobile.php b/modules/message/message.mobile.php index afbdeb42a..c57c02a14 100644 --- a/modules/message/message.mobile.php +++ b/modules/message/message.mobile.php @@ -1,43 +1,45 @@ getModuleConfig('message'); + if(!$config->mskin) $config->mskin = 'default'; + // Set the template path + $template_path = sprintf('%sm.skins/%s', $this->module_path, $config->mskin); + // Get the member configuration + $oModuleModel = &getModel('module'); + $member_config = $oModuleModel->getModuleConfig('member'); + Context::set('member_config', $member_config); + // Set a flag to check if the https connection is made when using SSL and create https url + $ssl_mode = false; + if($member_config->enable_ssl == 'Y') + { + if(preg_match('/^https:\/\//i',Context::getRequestUri())) $ssl_mode = true; + } + Context::set('ssl_mode',$ssl_mode); - /** - * @brief Initialization - **/ - function init() { - } + Context::set('system_message', nl2br($this->getMessage())); - /** - * @brief Message output - **/ - function dispMessage() { - // Get configurations (using module model object) - $oModuleModel = &getModel('module'); - $config = $oModuleModel->getModuleConfig('message'); - if(!$config->mskin) $config->mskin = 'default'; - // Set the template path - $template_path = sprintf('%sm.skins/%s', $this->module_path, $config->mskin); - // Get the member configuration - $oModuleModel = &getModel('module'); - $member_config = $oModuleModel->getModuleConfig('member'); - Context::set('member_config', $member_config); - // Set a flag to check if the https connection is made when using SSL and create https url - $ssl_mode = false; - if($member_config->enable_ssl == 'Y') { - if(preg_match('/^https:\/\//i',Context::getRequestUri())) $ssl_mode = true; - } - Context::set('ssl_mode',$ssl_mode); + Context::set('act', 'procMemberLogin'); + Context::set('mid', ''); - Context::set('system_message', nl2br($this->getMessage())); - - Context::set('act', 'procMemberLogin'); - Context::set('mid', ''); - - $this->setTemplatePath($template_path); - $this->setTemplateFile('system_message'); - } - - } -?> + $this->setTemplatePath($template_path); + $this->setTemplateFile('system_message'); + } +} +/* End of file message.mobile.php */ +/* Location: ./modules/message/message.mobile.php */ diff --git a/modules/message/message.view.php b/modules/message/message.view.php index 99e90b111..190b5f652 100644 --- a/modules/message/message.view.php +++ b/modules/message/message.view.php @@ -3,27 +3,25 @@ * @class messageView * @author NHN (developers@xpressengine.com) * @brief view class of the message module - **/ - -class messageView extends message { - + */ +class messageView extends message +{ /** * @brief Initialization - **/ - function init() + */ + function init() { - } /** * @brief Display messages - **/ - function dispMessage() + */ + function dispMessage() { // Get configurations (using module model object) $oModuleModel = &getModel('module'); $this->module_config = $config = $oModuleModel->getModuleConfig('message', $this->module_info->site_srl); - + if(!$config->skin) { $config->skin = 'default'; @@ -50,7 +48,8 @@ class messageView extends message { Context::set('member_config', $member_config); // Set a flag to check if the https connection is made when using SSL and create https url $ssl_mode = false; - if($member_config->enable_ssl == 'Y') { + if($member_config->enable_ssl == 'Y') + { if(preg_match('/^https:\/\//i',Context::getRequestUri())) $ssl_mode = true; } Context::set('ssl_mode',$ssl_mode); @@ -60,4 +59,5 @@ class messageView extends message { $this->setTemplateFile('system_message'); } } -?> +/* End of file message.view.php */ +/* Location: ./modules/message/message.view.php */