utils.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from django.contrib.contenttypes.models import ContentType
  2. from wagtail.core import hooks
  3. from wagtail.core.models import UserPagePermissionsProxy, get_page_models
  4. _FORM_CONTENT_TYPES = None
  5. def get_form_types():
  6. global _FORM_CONTENT_TYPES
  7. if _FORM_CONTENT_TYPES is None:
  8. from wagtail.contrib.forms.models import AbstractForm
  9. form_models = [
  10. model for model in get_page_models()
  11. if issubclass(model, AbstractForm)
  12. ]
  13. _FORM_CONTENT_TYPES = list(
  14. ContentType.objects.get_for_models(*form_models).values()
  15. )
  16. return _FORM_CONTENT_TYPES
  17. def get_forms_for_user(user):
  18. """
  19. Return a queryset of form pages that this user is allowed to access the submissions for
  20. """
  21. editable_forms = UserPagePermissionsProxy(user).editable_pages()
  22. editable_forms = editable_forms.filter(content_type__in=get_form_types())
  23. # Apply hooks
  24. for fn in hooks.get_hooks('filter_form_submissions_for_user'):
  25. editable_forms = fn(user, editable_forms)
  26. return editable_forms