Source code for wagtailapproval.menu
from django.contrib.auth import get_user
from django.core.urlresolvers import reverse, reverse_lazy
from django.utils.translation import ugettext_lazy as _, ungettext_lazy as _n
from wagtail.wagtailadmin.menu import MenuItem
from wagtail.wagtailadmin import messages
from .models import ApprovalStep
from .approvalitem import get_user_approval_items
[docs]class ApprovalMenuItem(MenuItem):
'''The menu item that shows in the wagtail sidebar'''
def __init__(self,
label=_('Approval'), url=reverse_lazy('wagtailapproval:index'),
classnames='icon icon-tick-inverse', order=200, **kwargs):
super().__init__(label, url, classnames=classnames, order=order, **kwargs)
[docs] def is_shown(self, request):
'''Only show the menu if the user is in an owned approval group'''
user = get_user(request)
groups = user.groups.all()
if ApprovalStep.objects.filter(group__in=groups).exists():
# Display the approval notification only outside of the approval paths
if not request.path.startswith(reverse('wagtailapproval:index')):
# Get the count of waiting approvals
waiting_approvals = sum(1 for _ in get_user_approval_items(user))
if waiting_approvals > 0:
messages.info(
request,
_n('{num:d} item waiting for approval', '{num:d} items waiting for approval', waiting_approvals).format(num=waiting_approvals),
buttons=[
messages.button(reverse('wagtailapproval:index'), _('Examine Now'))
]
)
return True
return False