in Allura/allura/model/project.py [0:0]
def nav_data(self, admin_options=False, navbar_entries=None):
"""
Return data about project nav entries
:param bool admin_options: include admin options?
:param navbar_entries: for performance, include this if you already have grouped_navbar_entries data
:return:
"""
from allura.ext.admin.admin_main import ProjectAdminRestController
grouping_threshold = self.get_tool_data('allura', 'grouping_threshold', 1)
anchored_tools = self.neighborhood.get_anchored_tools()
children = []
def make_entry(s, app_config):
entry = dict(name=s.label,
url=s.url,
icon=s.ui_icon or 'tool-admin',
tool_name=s.tool_name or 'sub',
mount_point=s.mount_point,
is_anchored=s.tool_name in list(anchored_tools.keys()),
)
if admin_options and app_config:
try:
entry['admin_options'] = ProjectAdminRestController().admin_options(app_config)['options']
except exc.HTTPError:
log.debug('Could not get admin_options mount_point for tool: %s', s.url, exc_info=True)
if admin_options and not s.tool_name:
entry['admin_options'] = [dict(text='Subproject Admin', href=s.url + 'admin', className=None)]
return entry
if navbar_entries is None:
navbar_entries = self.grouped_navbar_entries()
tools_by_mount = {ac.options.mount_point: ac for ac in self.app_configs if ac.options.mount_point}
for s in navbar_entries:
entry = make_entry(s, tools_by_mount.get(s.mount_point))
if s.children:
entry['children'] = [make_entry(child, tools_by_mount.get(child.mount_point))
for child in s.children]
children.append(entry)
response = dict(grouping_threshold=grouping_threshold, menu=children)
if admin_options:
_href = '{}admin/install_tool?tool_name={}'
response['installable_tools'] = [dict(text=t['tool_label'],
href=_href.format(self.url(), t['name']),
tooltip=t['description'])
for t in ProjectAdminRestController().installable_tools()['tools']]
return response