Skip to content
Snippets Groups Projects
views.py 2.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • George Hickman's avatar
    George Hickman committed
    from django.views.generic import CreateView
    
    Fredrik Jonsson's avatar
    Fredrik Jonsson committed
    from django.utils import timezone
    
    Todd Dembrey's avatar
    Todd Dembrey committed
    
    
    from opentech.apply.utils.views import DelegatedViewMixin
    
    from .forms import CommentForm
    
    Fredrik Jonsson's avatar
    Fredrik Jonsson committed
    from .messaging import messenger, MESSAGES
    from .models import Activity, COMMENT
    
    
    ACTIVITY_LIMIT = 50
    
    
    
    class AllActivityContextMixin:
        def get_context_data(self, **kwargs):
            extra = {
    
                'actions': Activity.actions.select_related(
    
                ).prefetch_related(
                    'source',
    
                    'related_object',
    
                )[:ACTIVITY_LIMIT],
    
                'comments': Activity.comments.select_related(
    
                ).prefetch_related(
                    'source',
    
                    'related_object',
    
                )[:ACTIVITY_LIMIT],
    
                'all_activity': Activity.objects.select_related(
    
                ).prefetch_related(
                    'source',
    
                    'related_object',
    
                )[:ACTIVITY_LIMIT],
    
            }
            return super().get_context_data(**extra, **kwargs)
    
    
    
    class ActivityContextMixin:
    
        def get_context_data(self, **kwargs):
    
            related_query = self.model.activities.rel.related_query_name
            query = {related_query: self.object}
    
                # Do not prefetch on the related_object__author as the models
                # are not homogeneous and this will fail
    
                'actions': Activity.actions.filter(**query).select_related(
    
                    'related_object',
    
                ).visible_to(self.request.user),
    
                'comments': Activity.comments.filter(**query).select_related(
    
                    'related_object',
    
                ).visible_to(self.request.user),
    
            }
            return super().get_context_data(**extra, **kwargs)
    
    
    
    Todd Dembrey's avatar
    Todd Dembrey committed
    class CommentFormView(DelegatedViewMixin, CreateView):
    
        form_class = CommentForm
    
        context_name = 'comment_form'
    
        def form_valid(self, form):
    
            source = self.kwargs['object']
    
            form.instance.user = self.request.user
    
            form.instance.source = source
    
            form.instance.type = COMMENT
    
            form.instance.timestamp = timezone.now()
    
    Todd Dembrey's avatar
    Todd Dembrey committed
            response = super().form_valid(form)
    
    Todd Dembrey's avatar
    Todd Dembrey committed
            messenger(
                MESSAGES.COMMENT,
    
    Todd Dembrey's avatar
    Todd Dembrey committed
                request=self.request,
    
    Todd Dembrey's avatar
    Todd Dembrey committed
                user=self.request.user,
    
                related=self.object,
    
    Todd Dembrey's avatar
    Todd Dembrey committed
            )
    
    Todd Dembrey's avatar
    Todd Dembrey committed
            return response
    
    
        def get_success_url(self):
    
            return self.object.source.get_absolute_url() + '#communications'
    
        def get_form_kwargs(self):
    
            # We dont want to pass the submission as the instance
    
            kwargs = super().get_form_kwargs()
            kwargs.pop('instance')
            return kwargs