diff gpp/shoutbox/views.py @ 1:dbd703f7d63a

Initial import of sg101 stuff from private repository.
author gremmie
date Mon, 06 Apr 2009 02:43:12 +0000
parents
children f408971657b9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/shoutbox/views.py	Mon Apr 06 02:43:12 2009 +0000
@@ -0,0 +1,103 @@
+"""
+Views for the Shoutbox application.
+"""
+
+import re
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+from django.http import HttpResponse
+from django.http import HttpResponseBadRequest
+from django.http import HttpResponseForbidden
+from django.http import HttpResponseRedirect
+from django.contrib.auth.decorators import login_required
+
+from core.paginator import DiggPaginator
+from shoutbox.forms import ShoutBoxForm
+from shoutbox.models import Shout
+
+SHOUTS_PER_PAGE = 10
+
+@login_required
+def shout(request):
+    if request.method == 'POST':
+        msg = request.POST.get('msg', '').strip()
+        if msg != '':
+            shout = Shout(user=request.user, shout=msg)
+            shout.save()
+            
+    return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
+
+
+def view(request, page=1):
+    """This view allows one to view the shoutbox history."""
+    paginator = DiggPaginator(Shout.objects.all(), SHOUTS_PER_PAGE, body=5, tail=3, margin=3, padding=2)
+    try:
+        the_page = paginator.page(int(page))
+    except InvalidPage:
+        raise Http404
+
+    return render_to_response('shoutbox/view.html', {
+        'page': the_page,
+        },
+        context_instance = RequestContext(request))
+   
+
+shout_id_re = re.compile(r'shout-(\d+)')
+
+def text(request):
+    """This view function retrieves the text of a shout; it is used in the in-place
+    editing of shouts on the shoutbox history view."""
+    if request.user.is_authenticated():
+        m = shout_id_re.match(request.GET.get('id', ''))
+        if m is None:
+            return HttpResponseBadRequest()
+        try:
+            shout = Shout.objects.get(pk=m.group(1))
+        except Shout.DoesNotExist:
+            return HttpResponseBadRequest()
+        return HttpResponse(shout.shout)
+
+    return HttpResponseForbidden()
+
+
+def edit(request):
+    """This view accepts a shoutbox edit from the shoutbox history view."""
+    if request.user.is_authenticated():
+        m = shout_id_re.match(request.POST.get('id', ''))
+        if m is None:
+            return HttpResponseBadRequest()
+        try:
+            shout = Shout.objects.get(pk=m.group(1))
+        except Shout.DoesNotExist:
+            return HttpResponseBadRequest()
+        if request.user != shout.user:
+            return HttpResponseForbidden()
+        new_shout = request.POST.get('value', '').strip()
+        if new_shout == '':
+            return HttpResponseBadRequest()
+        shout.shout = new_shout
+        shout.save()
+        return render_to_response('shoutbox/render_shout.html', {
+            'shout': shout,
+            },
+            context_instance = RequestContext(request))
+
+    return HttpResponseForbidden()
+
+
+def delete(request):
+    """This view deletes a shout. It is called by AJAX from the shoutbox history view."""
+    if request.user.is_authenticated():
+        id = request.POST.get('id', None)
+        if id is None or not id.isdigit():
+            return HttpResponseBadRequest()
+        try:
+            shout = Shout.objects.get(pk=id)
+        except Shout.DoesNotExist:
+            return HttpResponseBadRequest()
+        if request.user != shout.user:
+            return HttpResponseForbidden()
+        shout.delete()
+        return HttpResponse(id)
+
+    return HttpResponseForbidden()