78 lines
3.2 KiB
Python
78 lines
3.2 KiB
Python
import datetime
|
|
from django.template import RequestContext
|
|
from django.core.paginator import Paginator, InvalidPage, EmptyPage
|
|
from django.core.urlresolvers import reverse
|
|
from django.shortcuts import get_object_or_404, render_to_response
|
|
from django.http import HttpResponseRedirect
|
|
from django.contrib.comments.models import Comment
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.views.decorators.http import require_POST
|
|
from brainstorm.models import Subsite, Idea
|
|
|
|
def idea_list(request, slug, ordering='-total_upvotes'):
|
|
subsite = get_object_or_404(Subsite, pk=slug)
|
|
ordering_db = {'most_popular': '-total_upvotes',
|
|
'latest': '-submit_date'}[ordering]
|
|
paginator = Paginator(Idea.objects.from_request(request).filter(subsite=subsite).order_by(ordering_db),
|
|
subsite.ideas_per_page)
|
|
|
|
try:
|
|
page = int(request.GET.get('page', '1'))
|
|
except ValueError:
|
|
page = 1
|
|
|
|
try:
|
|
ideas = paginator.page(page)
|
|
except (EmptyPage, InvalidPage):
|
|
ideas = paginator.page(paginator.num_pages)
|
|
|
|
return render_to_response('brainstorm/index.html',
|
|
{'subsite':subsite, 'ideas': ideas,
|
|
'ordering': ordering,
|
|
'user_can_post': subsite.user_can_post(request.user)},
|
|
context_instance=RequestContext(request))
|
|
|
|
def idea_detail(request, slug, id):
|
|
subsite = get_object_or_404(Subsite, pk=slug)
|
|
idea = get_object_or_404(Idea.objects.from_request(request),
|
|
subsite=slug, pk=id)
|
|
|
|
return render_to_response('brainstorm/idea.html',
|
|
{'subsite':subsite, 'idea': idea,
|
|
'user_can_post': subsite.user_can_post(request.user)},
|
|
context_instance=RequestContext(request))
|
|
|
|
@require_POST
|
|
def new_idea(request, slug):
|
|
subsite = get_object_or_404(Subsite, pk=slug)
|
|
if not subsite.user_can_post(request.user):
|
|
return HttpResponseRedirect(subsite.get_absolute_url())
|
|
title = request.POST['title']
|
|
description = request.POST['description']
|
|
if request.user.is_anonymous():
|
|
user = None
|
|
else:
|
|
user = request.user
|
|
idea = Idea.objects.create(title=title, description=description,
|
|
user=user, subsite=subsite)
|
|
return HttpResponseRedirect(idea.get_absolute_url())
|
|
|
|
@require_POST
|
|
def submit_comment(request):
|
|
from django.conf import settings
|
|
content_type = ContentType.objects.get_for_model(Idea).id
|
|
site = settings.SITE_ID
|
|
object_pk = request.POST['idea_id']
|
|
name = request.POST.get('name', 'anonymous')
|
|
email = request.POST.get('email', '')
|
|
url = request.POST.get('url', '')
|
|
comment = request.POST['comment']
|
|
date = datetime.datetime.now()
|
|
ip = request.META['REMOTE_ADDR']
|
|
c = Comment.objects.create(user_name=name, user_email=email, user_url=url,
|
|
comment=comment, submit_date=date, ip_address=ip,
|
|
site_id=site, content_type_id=content_type, object_pk=object_pk)
|
|
idea = Idea.objects.get(pk=object_pk)
|
|
linkback = '%s#c%s' % (idea.get_absolute_url(), c.id)
|
|
return HttpResponseRedirect(linkback)
|