94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
import os
|
|
import shutil
|
|
|
|
from support import SupportYaml, d
|
|
|
|
from framework import F
|
|
|
|
|
|
class MenuManager:
|
|
menu_map = None
|
|
|
|
@classmethod
|
|
def __load_menu_yaml(cls):
|
|
menu_yaml_filepath = os.path.join(F.config['path_data'], 'db', 'menu.yaml')
|
|
if os.path.exists(menu_yaml_filepath) == False:
|
|
shutil.copy(
|
|
os.path.join(F.config['path_app'], 'files', 'menu.yaml.template'),
|
|
menu_yaml_filepath
|
|
)
|
|
cls.menu_map = SupportYaml.read_yaml(menu_yaml_filepath)
|
|
|
|
|
|
@classmethod
|
|
def init_menu(cls):
|
|
cls.__load_menu_yaml()
|
|
from .init_plugin import PluginManager
|
|
plugin_menus = PluginManager.plugin_menus
|
|
copy_map = []
|
|
|
|
for category in cls.menu_map:
|
|
if 'uri' in category:
|
|
copy_map.append(category)
|
|
continue
|
|
cate_count = 0
|
|
|
|
tmp_cate_list = []
|
|
for item in category['list']:
|
|
if item['uri'] in plugin_menus:
|
|
plugin_menus[item['uri']]['match'] = True
|
|
tmp_cate_list.append(plugin_menus[item['uri']]['menu'])
|
|
cate_count += 1
|
|
elif item['uri'].startswith('http'):
|
|
tmp_cate_list.append({
|
|
'uri': item['uri'],
|
|
'name': item['name'],
|
|
'target': item.get('target', '_blank')
|
|
})
|
|
cate_count += 1
|
|
elif (len(item['uri'].split('/')) > 1 and item['uri'].split('/')[0] in plugin_menus) or item['uri'].startswith('javascript') or item['uri'] in ['-']:
|
|
tmp_cate_list.append({
|
|
'uri': item['uri'],
|
|
'name': item.get('name', ''),
|
|
})
|
|
cate_count += 1
|
|
elif item['uri'] == 'setting':
|
|
if len(PluginManager.setting_menus) > 0:
|
|
tmp_cate_list.append({
|
|
'uri': item['uri'],
|
|
'name': item.get('name', ''),
|
|
'list': PluginManager.setting_menus
|
|
})
|
|
|
|
if cate_count > 0:
|
|
copy_map.append({
|
|
'name': category['name'],
|
|
'list': tmp_cate_list,
|
|
'count': cate_count
|
|
})
|
|
cls.menu_map = copy_map
|
|
|
|
make_dummy_cate = False
|
|
for name, plugin_menu in plugin_menus.items():
|
|
#F.logger.info(d(plugin_menu))
|
|
#if 'uri' not in plugin_menu['menu']:
|
|
# continue
|
|
if plugin_menu['match'] == False:
|
|
if make_dummy_cate == False:
|
|
make_dummy_cate = True
|
|
cls.menu_map.insert(len(cls.menu_map)-1, {
|
|
'name':'미분류', 'count':0, 'list':[]
|
|
})
|
|
|
|
c = cls.menu_map[-2]
|
|
c['count'] += 1
|
|
c['list'].append(plugin_menu['menu'])
|
|
|
|
#F.logger.warning(d(cls.menu_map))
|
|
|
|
|
|
@classmethod
|
|
def get_menu_map(cls):
|
|
#F.logger.warning(d(cls.menu_map))
|
|
return cls.menu_map
|