WorkshopAccessMixin   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 16
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
c 1
b 0
f 0
dl 0
loc 16
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A dispatch() 0 14 4
1
# from django.contrib import messages
2
# from django.core.exceptions import PermissionDenied
3
# from django.core.urlresolvers import reverse
4
# from django.http import Http404
5
from django.http import HttpResponseForbidden
6
# from django.http import HttpResponseRedirect, JsonResponse
7
# from django.shortcuts import render
8
9
# from wye.base.constants import WorkshopStatus, FeedbackType
10
from wye.base.emailer import send_mail
11
# from wye.organisations.models import Organisation
12
from wye.profiles.models import Profile
13
from wye.regions.models import RegionalLead
14
15
from .models import Workshop
16
17
18
class WorkshopAccessMixin(object):
19
20
    def dispatch(self, request, *args, **kwargs):
21
        user = request.user
22
        pk = self.kwargs.get(self.pk_url_kwarg, None)
23
        workshop = Workshop.objects.get(id=pk)
24
        is_admin = Profile.is_admin(user)
25
        is_lead = (Profile.is_regional_lead(user) and
26
                   RegionalLead.is_regional_lead(user, workshop.location))
27
        is_organiser = (Profile.is_organiser(user) and
28
                        user in workshop.requester.user.all())
29
30
        if not (is_admin or is_lead or is_organiser):
31
            return HttpResponseForbidden("Not sufficent permission")
32
        return super(WorkshopAccessMixin, self).dispatch(
33
            request, *args, **kwargs)
34
35
36
class WorkshopEmailMixin(object):
37
38
    def send_mail_to_presenter(self, user, context):
39
        """
40
        Send email to presenter.
41
        @param user: Is user object
42
        @param context: Is dict of data required by email template.
43
        """
44
45
        # Send email to presenter
46
        return send_mail([user.email], context, self.email_dir)
47
48
    def send_mail_to_group(self, context, exclude_emails=None):
49
        """
50
        Send email to org/group users.
51
        @param context: Is dict of data required by email template.
52
        @exclude_emails: Is list of email to be excluded from
53
        email update.
54
        """
55
56
        if exclude_emails is None:
57
            exclude_emails = []
58
59
        # Collage POC and admin email
60
        poc_admin_user = Profile.get_user_with_type(
61
            user_type=['Collage POC', 'admin']
62
        ).values_list('email', flat=True)
63
        # Org user email
64
        org_user_emails = self.object.requester.user.filter(
65
            is_active=True
66
        ).values_list('email', flat=True)
67
        # all presenter if any
68
        all_presenter_email = self.object.presenter.values_list(
69
            'email', flat=True
70
        )
71
        # List of tutor who have shown interest in that location
72
        region_interested_member = Profile.objects.filter(
73
            interested_locations=self.object.requester.location,
74
            usertype__slug='tutor'
75
        ).values_list('user__email', flat=True)
76
77
        all_email = []
78
        all_email.extend(org_user_emails)
79
        all_email.extend(all_presenter_email)
80
        all_email.extend(poc_admin_user)
81
        all_email.extend(region_interested_member)
82
        all_email = set(all_email)
83
        all_email = list(all_email.difference(exclude_emails))
84
        send_mail(all_email, context, self.email_dir)
85