annotate gpp/shoutbox/views.py @ 133:c515b7401078

Use the new common way to apply markItUp to textareas and to get the smiley and markdown help dialogs for all the remaining apps except for forums and comments.
author Brian Neal <bgneal@gmail.com>
date Fri, 27 Nov 2009 00:21:47 +0000
parents a20b2c492d55
children e1d1a70d312d
rev   line source
gremmie@1 1 """
gremmie@1 2 Views for the Shoutbox application.
gremmie@1 3 """
gremmie@1 4
gremmie@1 5 import re
gremmie@1 6 from django.shortcuts import render_to_response
gremmie@1 7 from django.template import RequestContext
bgneal@92 8 from django.core.paginator import InvalidPage
gremmie@1 9 from django.http import HttpResponse
gremmie@1 10 from django.http import HttpResponseBadRequest
gremmie@1 11 from django.http import HttpResponseForbidden
gremmie@1 12 from django.http import HttpResponseRedirect
gremmie@1 13 from django.contrib.auth.decorators import login_required
bgneal@12 14 from django.views.decorators.http import require_POST
gremmie@1 15
gremmie@1 16 from core.paginator import DiggPaginator
bgneal@13 17 from core.functions import email_admins
gremmie@1 18 from shoutbox.forms import ShoutBoxForm
gremmie@1 19 from shoutbox.models import Shout
bgneal@13 20 from shoutbox.models import ShoutFlag
gremmie@1 21
gremmie@1 22 SHOUTS_PER_PAGE = 10
gremmie@1 23
gremmie@1 24 @login_required
bgneal@12 25 @require_POST
gremmie@1 26 def shout(request):
bgneal@12 27 msg = request.POST.get('msg', '').strip()
bgneal@12 28 if msg == '':
bgneal@12 29 return HttpResponse('')
bgneal@12 30
bgneal@12 31 shout = Shout(user=request.user, shout=msg)
bgneal@12 32 shout.save()
bgneal@12 33 return render_to_response('shoutbox/shout.html', {
bgneal@12 34 'shout': shout,
bgneal@12 35 },
bgneal@12 36 context_instance = RequestContext(request))
gremmie@1 37
gremmie@1 38
bgneal@13 39 def view_shout(request, id):
bgneal@13 40 """This view is for viewing an individual shout."""
bgneal@13 41 try:
bgneal@13 42 shout = Shout.objects.get(pk=id)
bgneal@13 43 except Shout.DoesNotExist:
bgneal@13 44 return render_to_response('shoutbox/missing_shout.html', {},
bgneal@13 45 context_instance = RequestContext(request))
bgneal@13 46
bgneal@13 47 return render_to_response('shoutbox/view_shout.html', {
bgneal@13 48 'shout': shout,
bgneal@13 49 },
bgneal@13 50 context_instance = RequestContext(request))
bgneal@13 51
bgneal@13 52
bgneal@13 53 def view_history(request, page=1):
gremmie@1 54 """This view allows one to view the shoutbox history."""
bgneal@118 55 paginator = DiggPaginator(Shout.objects.all().select_related(),
bgneal@118 56 SHOUTS_PER_PAGE, body=5, tail=3, margin=3, padding=2)
gremmie@1 57 try:
gremmie@1 58 the_page = paginator.page(int(page))
gremmie@1 59 except InvalidPage:
gremmie@1 60 raise Http404
gremmie@1 61
gremmie@1 62 return render_to_response('shoutbox/view.html', {
gremmie@1 63 'page': the_page,
gremmie@1 64 },
gremmie@1 65 context_instance = RequestContext(request))
gremmie@1 66
gremmie@1 67
gremmie@1 68 shout_id_re = re.compile(r'shout-(\d+)')
gremmie@1 69
gremmie@1 70 def text(request):
gremmie@1 71 """This view function retrieves the text of a shout; it is used in the in-place
gremmie@1 72 editing of shouts on the shoutbox history view."""
gremmie@1 73 if request.user.is_authenticated():
gremmie@1 74 m = shout_id_re.match(request.GET.get('id', ''))
gremmie@1 75 if m is None:
gremmie@1 76 return HttpResponseBadRequest()
gremmie@1 77 try:
gremmie@1 78 shout = Shout.objects.get(pk=m.group(1))
gremmie@1 79 except Shout.DoesNotExist:
gremmie@1 80 return HttpResponseBadRequest()
gremmie@1 81 return HttpResponse(shout.shout)
gremmie@1 82
gremmie@1 83 return HttpResponseForbidden()
gremmie@1 84
gremmie@1 85
gremmie@1 86 def edit(request):
gremmie@1 87 """This view accepts a shoutbox edit from the shoutbox history view."""
gremmie@1 88 if request.user.is_authenticated():
gremmie@1 89 m = shout_id_re.match(request.POST.get('id', ''))
gremmie@1 90 if m is None:
gremmie@1 91 return HttpResponseBadRequest()
gremmie@1 92 try:
gremmie@1 93 shout = Shout.objects.get(pk=m.group(1))
gremmie@1 94 except Shout.DoesNotExist:
gremmie@1 95 return HttpResponseBadRequest()
gremmie@1 96 if request.user != shout.user:
gremmie@1 97 return HttpResponseForbidden()
gremmie@1 98 new_shout = request.POST.get('value', '').strip()
gremmie@1 99 if new_shout == '':
gremmie@1 100 return HttpResponseBadRequest()
gremmie@1 101 shout.shout = new_shout
gremmie@1 102 shout.save()
gremmie@1 103 return render_to_response('shoutbox/render_shout.html', {
gremmie@1 104 'shout': shout,
gremmie@1 105 },
gremmie@1 106 context_instance = RequestContext(request))
gremmie@1 107
gremmie@1 108 return HttpResponseForbidden()
gremmie@1 109
gremmie@1 110
gremmie@1 111 def delete(request):
gremmie@1 112 """This view deletes a shout. It is called by AJAX from the shoutbox history view."""
gremmie@1 113 if request.user.is_authenticated():
gremmie@1 114 id = request.POST.get('id', None)
gremmie@1 115 if id is None or not id.isdigit():
gremmie@1 116 return HttpResponseBadRequest()
gremmie@1 117 try:
gremmie@1 118 shout = Shout.objects.get(pk=id)
gremmie@1 119 except Shout.DoesNotExist:
gremmie@1 120 return HttpResponseBadRequest()
gremmie@1 121 if request.user != shout.user:
gremmie@1 122 return HttpResponseForbidden()
gremmie@1 123 shout.delete()
gremmie@1 124 return HttpResponse(id)
gremmie@1 125
gremmie@1 126 return HttpResponseForbidden()
bgneal@12 127
bgneal@13 128
bgneal@13 129 @require_POST
bgneal@13 130 def flag(request):
bgneal@13 131 """
bgneal@13 132 This function handles the flagging of shouts by users. This function should
bgneal@13 133 be the target of an AJAX post.
bgneal@13 134 """
bgneal@13 135 if not request.user.is_authenticated():
bgneal@13 136 return HttpResponse('Please login or register to flag a shout.')
bgneal@13 137
bgneal@13 138 id = request.POST.get('id', None)
bgneal@13 139 if id is None:
bgneal@13 140 return HttpResponseBadRequest('No id')
bgneal@13 141
bgneal@13 142 try:
bgneal@13 143 shout = Shout.objects.get(pk=id)
bgneal@13 144 except Shout.DoesNotExist:
bgneal@13 145 return HttpResponseBadRequest('No shout with id %s' % id)
bgneal@13 146
bgneal@13 147 flag = ShoutFlag(user=request.user, shout=shout)
bgneal@13 148 flag.save()
bgneal@13 149 email_admins('A Shout Has Been Flagged', """Hello,
bgneal@13 150
bgneal@13 151 A user has flagged a shout for review.
bgneal@13 152 """)
bgneal@13 153 return HttpResponse('The shout was flagged. A moderator will review the shout shortly. ' \
bgneal@13 154 'Thanks for helping to improve the quality of this site.')
bgneal@13 155
bgneal@12 156 # vim: ts=4 sw=4