gremmie@1: """ gremmie@1: Views for the Shoutbox application. gremmie@1: """ gremmie@1: gremmie@1: import re gremmie@1: from django.shortcuts import render_to_response gremmie@1: from django.template import RequestContext gremmie@1: from django.http import HttpResponse gremmie@1: from django.http import HttpResponseBadRequest gremmie@1: from django.http import HttpResponseForbidden gremmie@1: from django.http import HttpResponseRedirect gremmie@1: from django.contrib.auth.decorators import login_required gremmie@1: gremmie@1: from core.paginator import DiggPaginator gremmie@1: from shoutbox.forms import ShoutBoxForm gremmie@1: from shoutbox.models import Shout gremmie@1: gremmie@1: SHOUTS_PER_PAGE = 10 gremmie@1: gremmie@1: @login_required gremmie@1: def shout(request): gremmie@1: if request.method == 'POST': gremmie@1: msg = request.POST.get('msg', '').strip() gremmie@1: if msg != '': gremmie@1: shout = Shout(user=request.user, shout=msg) gremmie@1: shout.save() gremmie@1: gremmie@1: return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) gremmie@1: gremmie@1: gremmie@1: def view(request, page=1): gremmie@1: """This view allows one to view the shoutbox history.""" gremmie@1: paginator = DiggPaginator(Shout.objects.all(), SHOUTS_PER_PAGE, body=5, tail=3, margin=3, padding=2) gremmie@1: try: gremmie@1: the_page = paginator.page(int(page)) gremmie@1: except InvalidPage: gremmie@1: raise Http404 gremmie@1: gremmie@1: return render_to_response('shoutbox/view.html', { gremmie@1: 'page': the_page, gremmie@1: }, gremmie@1: context_instance = RequestContext(request)) gremmie@1: gremmie@1: gremmie@1: shout_id_re = re.compile(r'shout-(\d+)') gremmie@1: gremmie@1: def text(request): gremmie@1: """This view function retrieves the text of a shout; it is used in the in-place gremmie@1: editing of shouts on the shoutbox history view.""" gremmie@1: if request.user.is_authenticated(): gremmie@1: m = shout_id_re.match(request.GET.get('id', '')) gremmie@1: if m is None: gremmie@1: return HttpResponseBadRequest() gremmie@1: try: gremmie@1: shout = Shout.objects.get(pk=m.group(1)) gremmie@1: except Shout.DoesNotExist: gremmie@1: return HttpResponseBadRequest() gremmie@1: return HttpResponse(shout.shout) gremmie@1: gremmie@1: return HttpResponseForbidden() gremmie@1: gremmie@1: gremmie@1: def edit(request): gremmie@1: """This view accepts a shoutbox edit from the shoutbox history view.""" gremmie@1: if request.user.is_authenticated(): gremmie@1: m = shout_id_re.match(request.POST.get('id', '')) gremmie@1: if m is None: gremmie@1: return HttpResponseBadRequest() gremmie@1: try: gremmie@1: shout = Shout.objects.get(pk=m.group(1)) gremmie@1: except Shout.DoesNotExist: gremmie@1: return HttpResponseBadRequest() gremmie@1: if request.user != shout.user: gremmie@1: return HttpResponseForbidden() gremmie@1: new_shout = request.POST.get('value', '').strip() gremmie@1: if new_shout == '': gremmie@1: return HttpResponseBadRequest() gremmie@1: shout.shout = new_shout gremmie@1: shout.save() gremmie@1: return render_to_response('shoutbox/render_shout.html', { gremmie@1: 'shout': shout, gremmie@1: }, gremmie@1: context_instance = RequestContext(request)) gremmie@1: gremmie@1: return HttpResponseForbidden() gremmie@1: gremmie@1: gremmie@1: def delete(request): gremmie@1: """This view deletes a shout. It is called by AJAX from the shoutbox history view.""" gremmie@1: if request.user.is_authenticated(): gremmie@1: id = request.POST.get('id', None) gremmie@1: if id is None or not id.isdigit(): gremmie@1: return HttpResponseBadRequest() gremmie@1: try: gremmie@1: shout = Shout.objects.get(pk=id) gremmie@1: except Shout.DoesNotExist: gremmie@1: return HttpResponseBadRequest() gremmie@1: if request.user != shout.user: gremmie@1: return HttpResponseForbidden() gremmie@1: shout.delete() gremmie@1: return HttpResponse(id) gremmie@1: gremmie@1: return HttpResponseForbidden()