~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to djangoratings/views.py

  • Committer: franku
  • Date: 2016-12-13 18:28:51 UTC
  • mto: This revision was merged to the branch mainline in revision 443.
  • Revision ID: somal@arcor.de-20161213182851-bo5ebf8pdvw5beua
run the script

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
from default_settings import RATINGS_VOTES_PER_IP
8
8
from wl_utils import get_real_ip
9
9
 
 
10
 
10
11
class AddRatingView(object):
 
12
 
11
13
    def __call__(self, request, content_type_id, object_id, field_name, score):
12
14
        """__call__(request, content_type_id, object_id, field_name, score)
13
 
        
14
 
        Adds a vote to the specified model field."""
15
 
        
 
15
 
 
16
        Adds a vote to the specified model field.
 
17
 
 
18
        """
 
19
 
16
20
        try:
17
21
            instance = self.get_instance(content_type_id, object_id)
18
22
        except ObjectDoesNotExist:
19
23
            raise Http404('Object does not exist')
20
 
        
 
24
 
21
25
        context = self.get_context(request)
22
26
        context['instance'] = instance
23
 
        
 
27
 
24
28
        try:
25
29
            field = getattr(instance, field_name)
26
30
        except AttributeError:
27
31
            return self.invalid_field_response(request, context)
28
 
        
 
32
 
29
33
        context.update({
30
34
            'field': field,
31
35
            'score': score,
32
36
        })
33
 
        
34
 
        had_voted = bool(field.get_rating_for_user(request.user, get_real_ip(request), request.COOKIES))
35
 
        
 
37
 
 
38
        had_voted = bool(field.get_rating_for_user(
 
39
            request.user, get_real_ip(request), request.COOKIES))
 
40
 
36
41
        context['had_voted'] = had_voted
37
 
                    
 
42
 
38
43
        try:
39
 
            adds = field.add(score, request.user, get_real_ip(request), request.COOKIES)
 
44
            adds = field.add(score, request.user,
 
45
                             get_real_ip(request), request.COOKIES)
40
46
        except IPLimitReached:
41
47
            return self.too_many_votes_from_ip_response(request, context)
42
48
        except AuthRequired:
50
56
        if had_voted:
51
57
            return self.rating_changed_response(request, context, adds)
52
58
        return self.rating_added_response(request, context, adds)
53
 
    
 
59
 
54
60
    def get_context(self, request, context={}):
55
61
        return context
56
 
    
 
62
 
57
63
    def render_to_response(self, template, context, request):
58
64
        raise NotImplementedError
59
65
 
60
66
    def too_many_votes_from_ip_response(self, request, context):
61
 
        response = HttpResponse('Too many votes from this IP address for this object.')
 
67
        response = HttpResponse(
 
68
            'Too many votes from this IP address for this object.')
62
69
        return response
63
70
 
64
71
    def rating_changed_response(self, request, context, adds={}):
68
75
            if 'deleted' in adds:
69
76
                response.delete_cookie(cookie_name)
70
77
            else:
71
 
                response.set_cookie(cookie_name, cookie, 31536000, path='/') # TODO: move cookie max_age to settings
 
78
                # TODO: move cookie max_age to settings
 
79
                response.set_cookie(cookie_name, cookie, 31536000, path='/')
72
80
        return response
73
 
    
 
81
 
74
82
    def rating_added_response(self, request, context, adds={}):
75
83
        response = HttpResponse('Vote recorded.')
76
84
        if 'cookie' in adds:
78
86
            if 'deleted' in adds:
79
87
                response.delete_cookie(cookie_name)
80
88
            else:
81
 
                response.set_cookie(cookie_name, cookie, 31536000, path='/') # TODO: move cookie max_age to settings
 
89
                # TODO: move cookie max_age to settings
 
90
                response.set_cookie(cookie_name, cookie, 31536000, path='/')
82
91
        return response
83
92
 
84
93
    def authentication_required_response(self, request, context):
85
94
        response = HttpResponse('You must be logged in to vote.')
86
95
        response.status_code = 403
87
96
        return response
88
 
    
 
97
 
89
98
    def cannot_change_vote_response(self, request, context):
90
99
        response = HttpResponse('You have already voted.')
91
100
        response.status_code = 403
92
101
        return response
93
 
    
 
102
 
94
103
    def cannot_delete_vote_response(self, request, context):
95
104
        response = HttpResponse('You can\'t delete this vote.')
96
105
        response.status_code = 403
97
106
        return response
98
 
    
 
107
 
99
108
    def invalid_field_response(self, request, context):
100
109
        response = HttpResponse('Invalid field name.')
101
110
        response.status_code = 403
102
111
        return response
103
 
    
 
112
 
104
113
    def invalid_rating_response(self, request, context):
105
114
        response = HttpResponse('Invalid rating value.')
106
115
        response.status_code = 403
107
116
        return response
108
 
        
 
117
 
109
118
    def get_instance(self, content_type_id, object_id):
110
119
        return ContentType.objects.get(pk=content_type_id)\
111
120
            .get_object_for_this_type(pk=object_id)
112
121
 
113
122
 
114
123
class AddRatingFromModel(AddRatingView):
 
124
 
115
125
    def __call__(self, request, model, app_label, object_id, field_name, score):
116
126
        """__call__(request, model, app_label, object_id, field_name, score)
117
 
        
118
 
        Adds a vote to the specified model field."""
 
127
 
 
128
        Adds a vote to the specified model field.
 
129
 
 
130
        """
119
131
        try:
120
 
            content_type = ContentType.objects.get(model=model, app_label=app_label)
 
132
            content_type = ContentType.objects.get(
 
133
                model=model, app_label=app_label)
121
134
        except ContentType.DoesNotExist:
122
135
            raise Http404('Invalid `model` or `app_label`.')
123
 
        
 
136
 
124
137
        return super(AddRatingFromModel, self).__call__(request, content_type.id,
125
138
                                                        object_id, field_name, score)