# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.http import Http404 from django.utils.translation import get_language from newsbox_cms import compat class NewsboxCMSEditModeMixinView(object): """ Restrict to published content even if user has change permission. Display drafts, only if us has change permisssion (newsbox.views feature) AND cms toolbar is in "use draft mode" (edit_mode or build_mode) If related app page does not exists, raise a 404 to avoid reverse not match into the template """ def get(self, request, *args, **kwargs): if request.resolver_match._func_path.split('.')[0] == 'cms': page = compat.get_page_from_request(request) if page.publisher_is_draft: page = page.publisher_draft if not page.is_published(get_language()): raise Http404 return super(NewsboxCMSEditModeMixinView, self).get(request, *args, **kwargs) def get_queryset(self): queryset = super(NewsboxCMSEditModeMixinView, self).get_queryset() if not compat.toolbar_use_draft(self.request): queryset = queryset.filter(self.model.q_published()) return queryset