oc-server3/htdocs/lib2/menu.class.php
2013-07-15 00:27:34 +02:00

278 lines
6.5 KiB
PHP

<?php
/***************************************************************************
* For license information see doc/license.txt
*
* Unicode Reminder メモ
***************************************************************************/
define('AUTH_LEVEL_ALL', 0);
define('AUTH_LEVEL_ADMIN', '2');
define('MNU_ROOT', 0);
global $opt;
require_once($opt['rootpath'] . 'lib2/translate.class.php');
$menu = new Menu();
class Menu
{
var $nSelectedItem = 0;
var $sMenuFilename = '';
function Menu()
{
global $opt;
$this->sMenuFilename = $opt['rootpath'] . 'cache2/menu-' . $opt['template']['locale'] . '.inc.php';
if (!file_exists($this->sMenuFilename))
$this->CreateCacheFile();
require_once($this->sMenuFilename);
}
function CreateCacheFile()
{
global $opt, $translate;
$f = fopen($this->sMenuFilename, 'w');
fwrite($f, "<?php\n");
fwrite($f, 'global $menuitem;' . "\n");
fwrite($f, "\n");
$rsDefines = sqlf("SELECT `id`, `id_string` FROM `sys_menu`");
while ($rDefine = sql_fetch_assoc($rsDefines))
fwrite($f, 'if (!defined(\'' . addslashes($rDefine['id_string']) . '\')) define(\'' . addslashes($rDefine['id_string']) . '\', ' . $rDefine['id'] . ");\n");
sql_free_result($rsDefines);
fwrite($f, "\n");
$aMenu = array();
$nPos = 0;
$rsSubmenu = sqlf("SELECT `id` FROM `sys_menu` WHERE `parent`=0 ORDER BY `parent` ASC, `position` ASC");
while ($rSubmenu = sql_fetch_assoc($rsSubmenu))
{
$aMenu[MNU_ROOT]['subitems'][$nPos] = $rSubmenu['id'];
$nPos++;
}
sql_free_result($rsSubmenu);
fwrite($f, "\n");
$rs = sqlf('SELECT `item`.`id`, `item`.`title`, `item`.`menustring`, `item`.`access`, `item`.`href`, `item`.`visible`, `item`.`parent` AS `parentid`, `item`.`color` AS `color` FROM `sys_menu` AS `item` LEFT JOIN `sys_menu` AS `parentitem` ON `item`.`parent`=`parentitem`.`id`');
while ($r = sql_fetch_assoc($rs))
{
$aMenu[$r['id']]['title'] = $translate->t($r['title'], '', basename(__FILE__), __LINE__);
$aMenu[$r['id']]['menustring'] = $translate->t($r['menustring'], '', basename(__FILE__), __LINE__);
$aMenu[$r['id']]['authlevel'] = ($r['access']==0) ? AUTH_LEVEL_ALL : AUTH_LEVEL_ADMIN;
if (substr($r['href'],0,1) == '!')
{
$aMenu[$r['id']]['href'] = substr($r['href'],1);
$aMenu[$r['id']]['target'] = 'target="_blank"';
}
else
{
$aMenu[$r['id']]['href'] = $r['href'];
$aMenu[$r['id']]['target'] = '';
}
$aMenu[$r['id']]['visible'] = ($r['visible'] == 1) ? true : false;
$aMenu[$r['id']]['sublevel'] = $this->pGetMenuSublevel($r['id']);
if ($r['parentid'] != 0)
$aMenu[$r['id']]['parent'] = $r['parentid'];
if ($r['color'] != null)
$aMenu[$r['id']]['color'] = $r['color'];
$nPos = 0;
$rsSubmenu = sqlf("SELECT `id` FROM `sys_menu` WHERE `parent`='&1' ORDER BY `parent` ASC, `position` ASC", $r['id']);
while ($rSubmenu = sql_fetch_assoc($rsSubmenu))
{
$aMenu[$r['id']]['subitems'][$nPos] = $rSubmenu['id'];
$nPos++;
}
sql_free_result($rsSubmenu);
}
sql_free_result($rs);
fwrite($f, '$menuitem = unserialize("' . str_replace('"', '\\"', serialize($aMenu)) . '");' . "\n");
fwrite($f, "?>");
fclose($f);
}
function clearCache()
{
global $opt;
$dir = $opt['rootpath'] . 'cache2/';
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if (filetype($dir . $file) == 'file')
{
if (preg_match('/^menu-[a-z]{2,2}.inc.php/', $file))
unlink($dir . $file);
}
}
closedir($dh);
}
}
function pGetMenuSublevel($id)
{
$parent = sqlf_value("SELECT `parent` FROM `sys_menu` WHERE `id`='&1'", 0, $id);
if ($parent != 0)
return $this->pGetMenuSublevel($parent) + 1;
return 0;
}
function SetSelectItem($item)
{
$this->nSelectedItem = $item;
}
function GetSelectItem($item)
{
return $this->nSelectedItem;
}
function GetBreadcrumb()
{
global $menuitem;
$retval = array();
$retval[] = $menuitem[$this->nSelectedItem];
$nCurItem = $this->nSelectedItem;
while ($nCurItem != MNU_ROOT)
{
if (isset($menuitem[$nCurItem]['parent']))
{
$nCurItem = $menuitem[$nCurItem]['parent'];
$retval[] = $menuitem[$nCurItem];
}
else
$nCurItem = MNU_ROOT;
}
return array_reverse($retval);
}
function GetTopMenu()
{
global $menuitem, $login;
$ids = $this->GetSelectedMenuIds();
$retval = array();
foreach ($menuitem[MNU_ROOT]['subitems'] AS $item)
{
if (($menuitem[$item]['authlevel'] != AUTH_LEVEL_ADMIN || $login->admin != 0) && $menuitem[$item]['visible'] == true)
{
$thisitem = $menuitem[$item];
$thisitem['selected'] = isset($ids[$item]);
$retval[] = $thisitem;
}
}
return $retval;
}
function GetSubMenu()
{
global $menuitem, $login;
$ids = $this->GetSelectedMenuIds();
$topmenu = array_pop($ids);
if (isset($menuitem[$topmenu]['parent']) && $menuitem[$topmenu]['parent'] != MNU_ROOT)
die('internal error Menu::GetSelectedMenuIds');
$ids[$topmenu] = $topmenu;
$retval = array();
if ($topmenu != MNU_ROOT)
{
$this->pAppendSubMenu($topmenu, $ids, $retval);
}
return $retval;
}
function pAppendSubMenu($menuid, $ids, &$items)
{
global $menuitem, $login;
if (isset($menuitem[$menuid]['subitems']))
{
foreach ($menuitem[$menuid]['subitems'] AS $item)
{
if (($menuitem[$item]['authlevel'] != AUTH_LEVEL_ADMIN || $login->admin != 0) && $menuitem[$item]['visible'] == true)
{
$thisitem = $menuitem[$item];
$thisitem['selected'] = isset($ids[$item]);
$items[] = $thisitem;
$this->pAppendSubMenu($item, $ids, $items);
}
}
}
}
function GetSelectedMenuIds()
{
global $menuitem;
$retval = array();
$retval[$this->nSelectedItem] = $this->nSelectedItem;
$nCurItem = $this->nSelectedItem;
while ($nCurItem != MNU_ROOT)
{
if (isset($menuitem[$nCurItem]['parent']))
{
$nCurItem = $menuitem[$nCurItem]['parent'];
$retval[$nCurItem] = $nCurItem;
}
else
$nCurItem = MNU_ROOT;
}
return $retval;
}
function getMenuColor()
{
global $menuitem;
$nCurItem = $this->nSelectedItem;
while (!isset($menuitem[$nCurItem]['color']) && $nCurItem != MNU_ROOT)
{
if (isset($menuitem[$nCurItem]['parent']))
{
$nCurItem = $menuitem[$nCurItem]['parent'];
}
else
$nCurItem = MNU_ROOT;
}
if (isset($menuitem[$nCurItem]['color']))
return $menuitem[$nCurItem]['color'];
else
return '';
}
function GetMenuTitle()
{
global $menuitem;
if (isset($menuitem[$this->nSelectedItem]))
{
return isset($menuitem[$this->nSelectedItem]['title']) ? $menuitem[$this->nSelectedItem]['title'] : '';
}
else
return '';
}
}
?>