def test_find_root_menu_items(self): sub_item = mommy.make(MenuItem, parent=self.root_menu_item) sub_sub_item = mommy.make(MenuItem, parent=self.sub_item) menu_items = [sub_sub_item, self.sub_sub_item, sub_item] root_menu_items = find_root_menu_items(menu_items) self.assertEqual(root_menu_items, set([self.root_menu_item]))
def menu_items_index(request): if not request.user.is_superuser and len( get_objects_for_user(request.user, MenuItem.CHANGE_CHILDREN_PERMISSION_NAME, klass=MenuItem)) == 0: raise PermissionDenied main_menu_items = [] footer_items = [] items = find_root_menu_items([ item for item in MenuItem.objects.filter(menu_type=MenuItem.MAIN_MENU, children=None) if item.can_view_in_list(request.user) ]) items = sorted(items, key=lambda x: x.order) for item in items: subitems = [ subitem for subitem in MenuItem.objects.filter( menu_type=MenuItem.MAIN_MENU, parent=item).order_by('order') if subitem.can_view_in_list(request.user) ] if subitems: for subitem in subitems: subsubitems = [ subsubitem for subsubitem in MenuItem.objects.filter(menu_type=MenuItem.MAIN_MENU, parent=subitem).order_by('order') if subsubitem.can_view_in_list(request.user) ] if subsubitems: subitem.subitems = subsubitems item.subitems = subitems main_menu_items.append(item) if request.user.is_superuser: # only allow editing of footer items for superusers for item in MenuItem.objects.filter(menu_type=MenuItem.FOOTER, parent=None).order_by('order'): footer_items.append(item) return render(request, 'menu_items_index.html', { 'main_menu_items': main_menu_items, 'footer_items': footer_items })
def menu_items_index(request): if not request.user.is_superuser and len(get_objects_for_user(request.user, MenuItem.CHANGE_CHILDREN_PERMISSION_NAME, klass=MenuItem)) == 0: raise PermissionDenied main_menu_items = [] footer_items = [] items = find_root_menu_items( [item for item in MenuItem.objects.filter(menu_type=MenuItem.MAIN_MENU, children=None) if item.can_view_in_list(request.user)] ) items = sorted(items, key=lambda x: x.order) for item in items: subitems = [ subitem for subitem in MenuItem.objects.filter(menu_type=MenuItem.MAIN_MENU, parent=item).order_by('order') if subitem.can_view_in_list(request.user) ] if subitems: for subitem in subitems: subsubitems = [ subsubitem for subsubitem in MenuItem.objects.filter(menu_type=MenuItem.MAIN_MENU, parent=subitem).order_by('order') if subsubitem.can_view_in_list(request.user) ] if subsubitems: subitem.subitems = subsubitems item.subitems = subitems main_menu_items.append(item) if request.user.is_superuser: # only allow editing of footer items for superusers for item in MenuItem.objects.filter(menu_type=MenuItem.FOOTER, parent=None).order_by('order'): footer_items.append(item) return render(request, 'menu_items_index.html', { 'main_menu_items': main_menu_items, 'footer_items': footer_items })