Skip to content

Instantly share code, notes, and snippets.

@cnk
Created December 16, 2021 00:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cnk/caf6b84d255f4513be18f166e77aaa45 to your computer and use it in GitHub Desktop.
Save cnk/caf6b84d255f4513be18f166e77aaa45 to your computer and use it in GitHub Desktop.
Creating folders of menu items in the wagtail admin
class CoursesAdminMenu(Menu):
"""
A Courses-specific submenu in the wagtail admin sidebar
"""
def __init__(self):
super().__init__(register_hook_name='register_courses_admin_menu_item')
class CoursesAdminSubmenu(SubmenuMenuItem):
def __init__(self):
super().__init__(
'Courses',
CoursesAdminMenu(),
classnames='icon icon-fa-institution',
order=115
)
def is_shown(self, request):
"""
Hide this menu unless we have a CoursIndexPge the current user has permission to use it.
"""
user_has_perms = request.user.is_admin_or_editor(site)
course_listing_exists = CourseIndexPage2.objects.in_site(site).exists()
return user_has_perms and course_listing_exists
@hooks.register('register_admin_menu_item')
def register_admin_courses_menu():
return CoursesAdminSubmenu()
class CourseManagementDashboardMenuItem(MenuItem):
def __init__(self):
# Rather than specifying these in the constructor, we let the class hard-code them for itself.
super().__init__(
label='Course Management Dashboard',
url=reverse('caltech_sites_admin:course_management_dashboard'),
classnames='icon icon-doc-full',
order=102
)
def is_shown(self, request):
site = Site.find_for_request(request)
return CourseIndexPage2.objects.in_site(site) and request.user.is_admin_or_editor(site)
@hooks.register('register_courses_admin_menu_item')
def register_course_management_dashboard():
return CourseManagementDashboardMenuItem()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment