From 2c33bc8c81ad89bb5f51623f3a026a7e63b4ae54 Mon Sep 17 00:00:00 2001 From: Peter Loeffler Date: Mon, 13 Feb 2017 11:30:56 +0100 Subject: [PATCH 1/5] Add staff_required to create menuitems only members of staff can see. --- menu/models.py | 7 +++++++ menu/templatetags/menubuilder.py | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/menu/models.py b/menu/models.py index 4117ba6..ab91f4b 100644 --- a/menu/models.py +++ b/menu/models.py @@ -80,6 +80,13 @@ class MenuItem(models.Model): help_text=_(u'Should this item only be shown to authenticated users?') ) + staff_required = models.BooleanField( + _(u'Staff required'), + blank=True, + default=False, + help_text=_(u'Should this item only be shown to members of staff?') + ) + anonymous_only = models.BooleanField( _(u'Anonymous only'), blank=True, diff --git a/menu/templatetags/menubuilder.py b/menu/templatetags/menubuilder.py index 96fdb75..2f3059b 100644 --- a/menu/templatetags/menubuilder.py +++ b/menu/templatetags/menubuilder.py @@ -92,7 +92,15 @@ def get_items(menu_name, current_path, user): if not menu: return [] - for i in MenuItem.objects.filter(menu=menu).order_by('order'): + if (str(user) == 'AnonymousUser' or str(user) == 'None'): + Items = MenuItem.objects.filter(menu=menu).filter(login_required__lt=1).filter(staff_required__lt=1).order_by('order') + else: + if user.is_staff: + Items = MenuItem.objects.filter(menu=menu).filter(login_required__lte=1).filter(staff_required__lte=1).order_by('order') + else: + Items = MenuItem.objects.filter(menu=menu).filter(login_required__lte=1).filter(staff_required__lt=1).order_by('order') + + for i in Items: if current_path: current = ( i.link_url != '/' and current_path.startswith(i.link_url)) or ( i.link_url == '/' and current_path == '/' ) if menu.base_url and i.link_url == menu.base_url and current_path != i.link_url: From bc2d531cc5e6b0d4aa190460e4314444cbc1fc8b Mon Sep 17 00:00:00 2001 From: Peter Loeffler Date: Mon, 13 Feb 2017 11:56:27 +0100 Subject: [PATCH 2/5] Add staff_required to create menuitems only members of staff can see. --- menu/migrations/0003_add_staff_required.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 menu/migrations/0003_add_staff_required.py diff --git a/menu/migrations/0003_add_staff_required.py b/menu/migrations/0003_add_staff_required.py new file mode 100644 index 0000000..91a2fe3 --- /dev/null +++ b/menu/migrations/0003_add_staff_required.py @@ -0,0 +1,18 @@ +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('menu', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='menuitem', + name='staff_required', + field=models.BooleanField(default=False, help_text='Should this item only be shown to members of staff?', verbose_name='Staff required'), + ), + ] From d5f198e185e43d9d984ef2652ee233f637eb116e Mon Sep 17 00:00:00 2001 From: sshkm Date: Tue, 14 Feb 2017 20:12:41 +0100 Subject: [PATCH 3/5] first tag from fork (rossp/django-menu) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index ffce182..887bd45 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ from fnmatch import fnmatchcase from setuptools import setup, find_packages -version = '0.1.10' +version = '0.1.10.1' # Provided as an attribute, so you can append to these instead # of replicating them: From c2950700dfe45b6a37b9230c4f5c6b13efd3d133 Mon Sep 17 00:00:00 2001 From: Peter Loeffler Date: Tue, 21 Feb 2017 11:33:28 +0100 Subject: [PATCH 4/5] bring the is_staff functionality in line with the previous structure --- menu/migrations/0003_add_staff_required.py | 1 + menu/templatetags/menubuilder.py | 17 ++++++----------- setup.py | 2 +- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/menu/migrations/0003_add_staff_required.py b/menu/migrations/0003_add_staff_required.py index 91a2fe3..7a600f8 100644 --- a/menu/migrations/0003_add_staff_required.py +++ b/menu/migrations/0003_add_staff_required.py @@ -7,6 +7,7 @@ class Migration(migrations.Migration): dependencies = [ ('menu', '0001_initial'), + ('menu', '0002_booleandefaults'), ] operations = [ diff --git a/menu/templatetags/menubuilder.py b/menu/templatetags/menubuilder.py index 2f3059b..61c1652 100644 --- a/menu/templatetags/menubuilder.py +++ b/menu/templatetags/menubuilder.py @@ -73,13 +73,15 @@ def get_items(menu_name, current_path, user): if user: is_authenticated = user.is_authenticated + is_staff = user.is_staff is_anonymous = user.is_anonymous else: is_authenticated = False + is_staff = False is_anonymous = True if cache_time >= 0 and not debug: - cache_key = 'django-menu-items/%s/%s/%s' % (menu_name, current_path, is_authenticated) + cache_key = 'django-menu-items/%s/%s/%s' % (menu_name, current_path, is_authenticated, is_staff) menuitems = cache.get(cache_key, []) if menuitems: return menuitems @@ -92,15 +94,7 @@ def get_items(menu_name, current_path, user): if not menu: return [] - if (str(user) == 'AnonymousUser' or str(user) == 'None'): - Items = MenuItem.objects.filter(menu=menu).filter(login_required__lt=1).filter(staff_required__lt=1).order_by('order') - else: - if user.is_staff: - Items = MenuItem.objects.filter(menu=menu).filter(login_required__lte=1).filter(staff_required__lte=1).order_by('order') - else: - Items = MenuItem.objects.filter(menu=menu).filter(login_required__lte=1).filter(staff_required__lt=1).order_by('order') - - for i in Items: + for i in MenuItem.objects.filter(menu=menu).order_by('order'): if current_path: current = ( i.link_url != '/' and current_path.startswith(i.link_url)) or ( i.link_url == '/' and current_path == '/' ) if menu.base_url and i.link_url == menu.base_url and current_path != i.link_url: @@ -110,7 +104,8 @@ def get_items(menu_name, current_path, user): show_anonymous = i.anonymous_only and is_anonymous show_auth = i.login_required and is_authenticated - if (not (i.login_required or i.anonymous_only)) or (i.login_required and show_auth) or (i.anonymous_only and show_anonymous): + show_staff = i.staff_required and is_staff + if (not (i.login_required or i.anonymous_only or i.staff_required)) or (i.login_required and show_auth) or (i.anonymous_only and show_anonymous) or (i.staff_required and show_staff == True): menuitems.append({'url': i.link_url, 'title': i.title, 'current': current,}) if cache_time >= 0 and not debug: diff --git a/setup.py b/setup.py index 887bd45..35abaf6 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ from fnmatch import fnmatchcase from setuptools import setup, find_packages -version = '0.1.10.1' +version = '0.1.11' # Provided as an attribute, so you can append to these instead # of replicating them: From dd40e7ada5071fe7338bbdcdd52cfd95f056428e Mon Sep 17 00:00:00 2001 From: Peter Loeffler Date: Thu, 23 Feb 2017 10:23:31 +0100 Subject: [PATCH 5/5] fix missing %s --- menu/templatetags/menubuilder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu/templatetags/menubuilder.py b/menu/templatetags/menubuilder.py index 61c1652..af412d7 100644 --- a/menu/templatetags/menubuilder.py +++ b/menu/templatetags/menubuilder.py @@ -81,7 +81,7 @@ def get_items(menu_name, current_path, user): is_anonymous = True if cache_time >= 0 and not debug: - cache_key = 'django-menu-items/%s/%s/%s' % (menu_name, current_path, is_authenticated, is_staff) + cache_key = 'django-menu-items/%s/%s/%s/%s' % (menu_name, current_path, is_authenticated, is_staff) menuitems = cache.get(cache_key, []) if menuitems: return menuitems