rhymix/modules/menu/menu.class.php
2013-12-30 17:35:02 +09:00

194 lines
4.8 KiB
PHP

<?php
/* Copyright (C) NAVER <http://www.navercorp.com> */
/**
* menu class
* high class of the menu module
*
* @author NAVER (developers@xpressengine.com)
* @package /modules/menu
* @version 0.1
*/
class menu extends ModuleObject
{
/**
* Implement if additional tasks are necessary when installing
* @return Object
*/
function moduleInstall()
{
// Create a directory to use menu
FileHandler::makeDir('./files/cache/menu');
return new Object();
}
/**
* 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;
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'));
}
// 1.7(maserati) shortcut column add and mirgration
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))
{
$menuItemUniqueList = array();
$menuItemAllList = array();
foreach($output AS $key=>$value)
{
unset($args);
$args->menu_srl = $value->menu_srl;
$output2 = executeQueryArray('menu.getMenuItems', $args);
if(is_array($output2->data))
{
foreach($output2->data AS $key2=>$value2)
{
$menuItemAllList[$value2->menu_item_srl] = $value2->url;
if(!in_array($value2->url, $menuItemUniqueList))
{
$menuItemUniqueList[$value2->menu_item_srl] = $value2->url;
}
// if url is empty, change type to shortcurt
if($value2->is_shortcut == 'N' && (!$value2->url || strncasecmp('http', $value2->url, 4) === 0))
{
$value2->is_shortcut = 'Y';
$output3 = executeQuery('menu.updateMenuItem', $value2);
}
}
}
}
$oModuleModel = getModel('module');
// if duplicate reference, change type to shortcut
$shortcutItemList = array_diff_assoc($menuItemAllList, $menuItemUniqueList);
foreach($output AS $key=>$value)
{
unset($args);
$args->menu_srl = $value->menu_srl;
$output2 = executeQueryArray('menu.getMenuItems', $args);
if(is_array($output2->data))
{
foreach($output2->data AS $key2=>$value2)
{
if(!empty($value2->url) && strncasecmp('http', $value2->url, 4) !== 0)
{
$moduleInfo = $oModuleModel->getModuleInfoByMid($value2->url);
if(!$moduleInfo->module_srl)
{
$value2->url = Context::getDefaultUrl();
if(!$value2->url) $value2->url = '#';
$value2->is_shortcut = 'Y';
$updateOutput = executeQuery('menu.updateMenuItem', $value2);
}
}
if($shortcutItemList[$value2->menu_item_srl])
{
$value2->is_shortcut = 'Y';
$output3 = executeQuery('menu.updateMenuItem', $value2);
}
}
}
}
}
$this->recompileCache();
}
return new Object(0, 'success_updated');
}
/**
* Re-generate the cache file
* @return void
*/
function recompileCache()
{
$oMenuAdminController = getAdminController('menu');
$oMenuAdminModel = getAdminModel('menu');
// get home module id
$oModuleModel = getModel('module');
$columnList = array('modules.mid',);
$output = $oModuleModel->getSiteInfo(0, $columnList);
$homeModuleMid = $output->mid;
$homeMenuSrl = NULL;
// 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);
// for homeSitemap.php regenrate
if(!$homeMenuSrl)
{
$menuItemList = $oMenuAdminModel->getMenuItems($menu_srl);
if(is_array($menuItemList->data))
{
foreach($menuItemList->data AS $key=>$value)
{
if($homeModuleMid == $value->url)
{
$homeMenuSrl = $menu_srl;
break;
}
}
}
}
}
if($homeMenuSrl)
{
$oMenuAdminController->makeHomemenuCacheFile($homeMenuSrl);
}
}
}
/* End of file menu.class.php */
/* Location: ./modules/menu/menu.class.php */