backoffice: refactor display of menu items (#6726)
This commit is contained in:
parent
d2fe05be5a
commit
18bb6483e2
|
@ -297,30 +297,14 @@ class RootDirectory(BackofficeRootDirectory):
|
|||
|
||||
def generate_header_menu(self, selected=None):
|
||||
s = ['<ul id="menu">\n']
|
||||
base_url = get_publisher().get_root_url() + 'backoffice'
|
||||
for item in self.get_menu_items():
|
||||
if len(item) == 2:
|
||||
k, v = item
|
||||
display_function = None
|
||||
elif len(item) == 3:
|
||||
k, v, display_function = item
|
||||
if k is None: # heading
|
||||
s.append('<li><strong>%s</strong></li>' % v)
|
||||
for menu_item in self.get_menu_items():
|
||||
if not 'icon' in menu_item:
|
||||
continue
|
||||
if k.strip('/') not in ('home', 'forms', 'workflows', 'users', 'roles',
|
||||
'categories', 'settings', 'management'):
|
||||
# skip items that do not have icons, they will have to be
|
||||
# accessed via the backoffice main page
|
||||
continue
|
||||
if k == '/':
|
||||
continue # skip root
|
||||
if display_function and not display_function(k):
|
||||
continue
|
||||
if k.rstrip('/') == selected:
|
||||
if menu_item.get('slug') == selected:
|
||||
s.append('<li class="active">')
|
||||
else:
|
||||
s.append('<li>')
|
||||
s.append('<a href="%s/%s">%s</a></li>\n' % (base_url, k, _(v)))
|
||||
s.append('<a href="%(url)s">%(label)s</a></li>\n' % menu_item)
|
||||
s.append('</ul>\n')
|
||||
return ''.join(s)
|
||||
|
||||
|
@ -329,38 +313,16 @@ class RootDirectory(BackofficeRootDirectory):
|
|||
r = TemplateIO(html=True)
|
||||
r += htmltext('<div class="bo-block"><p>%s</p></div>') % self.get_intro_text()
|
||||
|
||||
main_items = []
|
||||
more_items = []
|
||||
for item in self.get_menu_items():
|
||||
if len(item) == 2:
|
||||
item = list(item) + [None]
|
||||
k, v, display_function = item
|
||||
if not k.strip('/'):
|
||||
continue
|
||||
if display_function and not display_function(k):
|
||||
continue
|
||||
if k.strip('/') in ('home', 'forms', 'workflows', 'users', 'roles',
|
||||
'categories', 'settings', 'management'):
|
||||
# menu entries that have icons.
|
||||
main_items.append((k, v))
|
||||
else:
|
||||
more_items.append((k, v))
|
||||
|
||||
menu_items = self.get_menu_items()
|
||||
r += htmltext('<ul class="apps">')
|
||||
for k, v in main_items:
|
||||
r += htmltext('<li class="zone-%s"><a href="%s">') % (k.strip('/'), k)
|
||||
if callable(v):
|
||||
r += v()
|
||||
else:
|
||||
r += _(v)
|
||||
r += htmltext('</a></li>')
|
||||
for k, v in more_items:
|
||||
r += htmltext('<li class="zone-no-icon"><a href="%s">') % k
|
||||
if callable(v):
|
||||
r += v()
|
||||
else:
|
||||
r += _(v)
|
||||
r += htmltext('</a></li>')
|
||||
for menu_item in menu_items:
|
||||
if not 'icon' in menu_item:
|
||||
continue
|
||||
r += htmltext('<li class="zone-%(icon)s"><a href="%(url)s">%(label)s</a></li>') % menu_item
|
||||
for menu_item in menu_items:
|
||||
if 'icon' in menu_item:
|
||||
continue
|
||||
r += htmltext('<li class="zone-no-icon"><a href="%(url)s">%(label)s</a></li>') % menu_item
|
||||
r += htmltext('</ul>')
|
||||
r += htmltext('<br class="clear">')
|
||||
|
||||
|
@ -598,23 +560,34 @@ class RootDirectory(BackofficeRootDirectory):
|
|||
|
||||
def get_menu_items(self):
|
||||
if not get_request().user:
|
||||
return self.menu_items
|
||||
return []
|
||||
user_roles = set(get_request().user.roles or [])
|
||||
if not get_cfg('admin-permissions', {}):
|
||||
return self.menu_items
|
||||
menu_items = self.menu_items[:]
|
||||
for item in menu_items:
|
||||
menu_items = []
|
||||
backoffice_url = get_publisher().get_backoffice_url()
|
||||
if not backoffice_url.endswith('/'):
|
||||
backoffice_url += '/'
|
||||
for item in self.menu_items:
|
||||
if len(item) == 2:
|
||||
item = list(item) + [None]
|
||||
k, v, display_function = item
|
||||
k = k.strip(str('/'))
|
||||
if not k:
|
||||
slug = k.strip(str('/'))
|
||||
if not slug:
|
||||
continue
|
||||
if display_function and not display_function(k):
|
||||
if display_function and not display_function(slug):
|
||||
continue
|
||||
if is_accessible(k):
|
||||
if not is_accessible(slug):
|
||||
continue
|
||||
menu_items.remove((k+'/', v))
|
||||
if callable(v):
|
||||
label = v()
|
||||
else:
|
||||
label = _(v)
|
||||
menu_items.append({
|
||||
'label': label,
|
||||
'slug': slug,
|
||||
'url': backoffice_url + k})
|
||||
if slug in ('home', 'forms', 'workflows', 'users', 'roles',
|
||||
'categories', 'settings', 'management'):
|
||||
menu_items[-1]['icon'] = k.strip('/')
|
||||
return menu_items
|
||||
|
||||
class FakeField(object):
|
||||
|
|
Loading…
Reference in New Issue