Add support for top-level links for simple menus

also add 'messaging_enabled' to global template context, so can include (or
not) that stuff in the user menu
This commit is contained in:
Lance Edgar 2018-11-29 14:51:57 -06:00
parent 0eb394fb86
commit c1eaf28812
4 changed files with 91 additions and 57 deletions

View file

@ -33,12 +33,14 @@ from rattail.util import import_module_path
class MenuGroup(Object):
title = None
items = None
is_link = False
class MenuItem(Object):
title = None
url = None
target = None
is_link = True
is_sep = False
@ -62,44 +64,52 @@ def make_simple_menus(request):
final_menus = []
for topitem in raw_menus:
# figure out which ones the user has permission to access
allowed = []
for item in topitem['items']:
if topitem.get('type') == 'link':
final_menus.append(
MenuItem(title=topitem['title'],
url=topitem['url'],
target=topitem.get('target')))
if item.get('type') == 'sep':
allowed.append(item)
else: # assuming 'menu' type
if item.get('perm'):
if request.has_perm(item['perm']):
allowed.append(item)
else:
allowed.append(item)
# figure out which ones the user has permission to access
allowed = []
for item in topitem['items']:
if allowed:
# user must have access to something; construct items for the menu
menu_items = []
for item in allowed:
# separator
if item.get('type') == 'sep':
if menu_items and not menu_items[-1].is_sep:
menu_items.append(MenuSeparator())
allowed.append(item)
# menu item
if item.get('perm'):
if request.has_perm(item['perm']):
allowed.append(item)
else:
menu_items.append(
MenuItem(title=item['title'],
url=item['url'],
target=item.get('target')))
allowed.append(item)
# remove final separator if present
if menu_items and menu_items[-1].is_sep:
menu_items.pop()
if allowed:
# only add if we wound up with something
if menu_items:
final_menus.append(
MenuGroup(title=topitem['title'], items=menu_items))
# user must have access to something; construct items for the menu
menu_items = []
for item in allowed:
# separator
if item.get('type') == 'sep':
if menu_items and not menu_items[-1].is_sep:
menu_items.append(MenuSeparator())
# menu item
else:
menu_items.append(
MenuItem(title=item['title'],
url=item['url'],
target=item.get('target')))
# remove final separator if present
if menu_items and menu_items[-1].is_sep:
menu_items.pop()
# only add if we wound up with something
if menu_items:
final_menus.append(
MenuGroup(title=topitem['title'], items=menu_items))
return final_menus