Mercurial > public > sg101
comparison gpp/forums/spam.py @ 215:8c1832b9d815
Implement #84; additional checks on spammers; implement stranger status.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 29 May 2010 04:51:28 +0000 |
parents | fad7548b7f6e |
children |
comparison
equal
deleted
inserted
replaced
214:28988cce138b | 215:8c1832b9d815 |
---|---|
1 """ | 1 """ |
2 This module contains views for dealing with spam and spammers. | 2 This module contains views for dealing with spam and spammers. |
3 """ | 3 """ |
4 import datetime | 4 import datetime |
5 import logging | |
6 import textwrap | |
5 | 7 |
6 from django.contrib.auth.decorators import login_required | 8 from django.contrib.auth.decorators import login_required |
7 from django.core.urlresolvers import reverse | 9 from django.core.urlresolvers import reverse |
8 from django.http import HttpResponseRedirect | 10 from django.http import HttpResponseRedirect |
11 from django.http import HttpResponseForbidden | |
9 from django.shortcuts import get_object_or_404 | 12 from django.shortcuts import get_object_or_404 |
10 from django.shortcuts import render_to_response | 13 from django.shortcuts import render_to_response |
11 from django.template import RequestContext | 14 from django.template import RequestContext |
12 from django.contrib.auth.models import User | 15 from django.contrib.auth.models import User |
13 | 16 |
37 | 40 |
38 Comment.objects.filter(user=user).delete() | 41 Comment.objects.filter(user=user).delete() |
39 delete_user_posts(user) | 42 delete_user_posts(user) |
40 | 43 |
41 | 44 |
45 def promote_stranger(user): | |
46 """This function upgrades the user from stranger status to a regular user. | |
47 """ | |
48 profile = user.get_profile() | |
49 if user.is_active and profile.status == bio.models.STA_STRANGER: | |
50 profile.status = bio.models.STA_ACTIVE | |
51 profile.status_date = datetime.datetime.now() | |
52 profile.save() | |
53 | |
54 | |
42 @login_required | 55 @login_required |
43 def spammer(request, post_id): | 56 def spammer(request, post_id): |
44 """This view allows moderators to deactivate spammer accounts.""" | 57 """This view allows moderators to deactivate spammer accounts.""" |
45 | 58 |
46 post = get_object_or_404(Post.objects.select_related(), pk=post_id) | 59 post = get_object_or_404(Post.objects.select_related(), pk=post_id) |
60 poster = post.user | |
61 poster_profile = poster.get_profile() | |
47 | 62 |
48 can_moderate = request.user.is_superuser or ( | 63 can_moderate = request.user.is_superuser or ( |
49 request.user in post.topic.forum.moderators.all()) | 64 request.user in post.topic.forum.moderators.all()) |
50 | 65 |
51 if request.method == "POST": | 66 can_deactivate = (poster_profile.status == bio.models.STA_STRANGER and not |
52 if can_moderate: | 67 poster.is_superuser) |
53 deactivate_spammer(post.user) | |
54 | 68 |
55 email_admins(SPAMMER_NAILED_SUBJECT % post.user.username, | 69 if request.method == "POST" and can_moderate and can_deactivate: |
56 SPAMMER_NAILED_MSG_BODY % ( | 70 deactivate_spammer(poster) |
57 request.user.username, post.user.username)) | |
58 | 71 |
59 return HttpResponseRedirect(reverse('forums-spammer_nailed', args=[ | 72 email_admins(SPAMMER_NAILED_SUBJECT % poster.username, |
60 post.user.id])) | 73 SPAMMER_NAILED_MSG_BODY % ( |
74 request.user.username, poster.username)) | |
75 | |
76 logging.info(textwrap.dedent("""\ | |
77 SPAMMER DEACTIVATED: %s nailed %s for spam. | |
78 IP: %s | |
79 Message: | |
80 %s | |
81 """ % (request.user.username, poster.username, post.user_ip, | |
82 post.body))) | |
83 | |
84 return HttpResponseRedirect(reverse('forums-spammer_nailed', args=[ | |
85 poster.id])) | |
61 | 86 |
62 return render_to_response('forums/spammer.html', { | 87 return render_to_response('forums/spammer.html', { |
63 'can_moderate': can_moderate, | 88 'can_moderate': can_moderate, |
89 'can_deactivate': can_deactivate, | |
64 'post': post, | 90 'post': post, |
65 }, | 91 }, |
66 context_instance=RequestContext(request)) | 92 context_instance=RequestContext(request)) |
67 | 93 |
68 | 94 |
79 return render_to_response('forums/spammer_nailed.html', { | 105 return render_to_response('forums/spammer_nailed.html', { |
80 'spammer': user, | 106 'spammer': user, |
81 'success': success, | 107 'success': success, |
82 }, | 108 }, |
83 context_instance=RequestContext(request)) | 109 context_instance=RequestContext(request)) |
110 | |
111 | |
112 @login_required | |
113 def stranger(request, post_id): | |
114 """This view allows a forum moderator or super user to promote a user from | |
115 stranger status to regular user. | |
116 """ | |
117 post = get_object_or_404(Post.objects.select_related(), pk=post_id) | |
118 poster = post.user | |
119 poster_profile = poster.get_profile() | |
120 | |
121 can_moderate = request.user.is_superuser or ( | |
122 request.user in post.topic.forum.moderators.all()) | |
123 | |
124 can_promote = poster_profile.status == bio.models.STA_STRANGER | |
125 | |
126 if request.method == "POST" and can_moderate and can_promote: | |
127 promote_stranger(poster) | |
128 | |
129 logging.info("STRANGER PROMOTED: %s promoted %s." % ( | |
130 request.user.username, poster.username)) | |
131 | |
132 return HttpResponseRedirect(post.get_absolute_url()) | |
133 | |
134 return render_to_response('forums/stranger.html', { | |
135 'can_moderate': can_moderate, | |
136 'can_promote': can_promote, | |
137 'post': post, | |
138 }, | |
139 context_instance=RequestContext(request)) |