summaryrefslogtreecommitdiff
path: root/papillon/polls/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'papillon/polls/views.py')
-rw-r--r--papillon/polls/views.py80
1 files changed, 45 insertions, 35 deletions
diff --git a/papillon/polls/views.py b/papillon/polls/views.py
index 43ff37f..54920b7 100644
--- a/papillon/polls/views.py
+++ b/papillon/polls/views.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2008-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
@@ -24,18 +24,19 @@ Views management
from random import choice as random_choice
import string
import time
-from datetime import datetime
-from django.shortcuts import render_to_response
-from django.http import HttpResponseRedirect
+from django.core.urlresolvers import reverse
from django.conf import settings
+from django.http import HttpResponseRedirect
+from django.shortcuts import render_to_response
+from django.template import RequestContext
from django.utils.translation import gettext_lazy as _
-from django.core.urlresolvers import reverse
from papillon.polls.models import Poll, PollUser, Choice, Voter, Vote, \
- Category, Comment
+ Category, Comment
from papillon.polls.forms import CreatePollForm, AdminPollForm, ChoiceForm, \
- DatedChoiceForm, CommentForm
+ DatedChoiceForm, CommentForm
+
def getBaseResponse(request):
"""Manage basic fields for the template
@@ -44,14 +45,15 @@ def getBaseResponse(request):
# setting the current language and available languages
if 'language' in request.GET:
if request.GET['language'] in \
- [language[0] for language in settings.LANGUAGES]:
+ [language[0] for language in settings.LANGUAGES]:
request.session['django_language'] = request.GET['language']
return None, HttpResponseRedirect(request.path)
languages = []
for language_code, language_label in settings.LANGUAGES:
languages.append((language_code, language_label))
- return {'media_url':settings.MEDIA_URL, 'languages':languages,
- 'admin_url':settings.ADMIN_MEDIA_PREFIX,}, None
+ return {'languages': languages,
+ 'admin_url': settings.ADMIN_MEDIA_PREFIX}, None
+
def index(request):
"Main page"
@@ -62,10 +64,11 @@ def index(request):
if response_dct['public']:
response_dct['polls'] = Poll.objects.filter(public=True, category=None)
response_dct['categories'] = Category.objects.all()
- error = ''
if 'bad_poll' in request.GET:
response_dct['error'] = _("The poll requested don't exist (anymore?)")
- return render_to_response('main.html', response_dct)
+ return render_to_response('main.html', response_dct,
+ context_instance=RequestContext(request))
+
def category(request, category_id):
"Page for a category"
@@ -77,6 +80,7 @@ def category(request, category_id):
response_dct['polls'] = Poll.objects.filter(public=True, category=category)
return render_to_response('category.html', response_dct)
+
def create(request):
'''Creation of a poll.
'''
@@ -84,7 +88,7 @@ def create(request):
"Generation of a random url"
url = ''
while not url or Poll.objects.filter(base_url=url).count() or\
- Poll.objects.filter(admin_url=url).count():
+ Poll.objects.filter(admin_url=url).count():
url = ''
chars = string.letters + string.digits
for i in xrange(6):
@@ -110,6 +114,7 @@ def create(request):
response_dct['form'] = form
return render_to_response('create.html', response_dct)
+
def edit(request, admin_url):
'''Edition of a poll.
'''
@@ -133,14 +138,15 @@ def edit(request, admin_url):
form = Form(instance=poll)
response_dct['form'] = form
response_dct['poll'] = poll
- response_dct['base_url'] = request.build_absolute_uri(reverse('poll',
- args=[poll.base_url]))
- response_dct['edit_url'] = request.build_absolute_uri(reverse('edit',
- args=[poll.admin_url]))
- response_dct['choices_url'] = request.build_absolute_uri(reverse(
- 'edit_choices_admin', args=[poll.admin_url]))
+ response_dct['base_url'] = request.build_absolute_uri(
+ reverse('poll', args=[poll.base_url]))
+ response_dct['edit_url'] = request.build_absolute_uri(
+ reverse('edit', args=[poll.admin_url]))
+ response_dct['choices_url'] = request.build_absolute_uri(
+ reverse('edit_choices_admin', args=[poll.admin_url]))
return render_to_response('edit.html', response_dct)
+
def editChoicesAdmin(request, admin_url):
response_dct, redirect = getBaseResponse(request)
if redirect:
@@ -153,6 +159,7 @@ def editChoicesAdmin(request, admin_url):
response_dct['poll'] = poll
return editChoices(request, response_dct, admin=True)
+
def editChoicesUser(request, poll_url):
response_dct, redirect = getBaseResponse(request)
if redirect:
@@ -167,6 +174,7 @@ def editChoicesUser(request, poll_url):
response_dct['poll'] = poll
return editChoices(request, response_dct)
+
def editChoices(request, response_dct, admin=False):
'''Edition of choices.
'''
@@ -182,7 +190,7 @@ def editChoices(request, response_dct, admin=False):
order += 1
except IndexError:
order = 0
- form = Form(initial={'poll':poll.id, 'order':str(order)})
+ form = Form(initial={'poll': poll.id, 'order': str(order)})
if request.method == 'POST':
# if a new choice is submitted
@@ -210,7 +218,8 @@ def editChoices(request, response_dct, admin=False):
for key in request.POST:
if key.startswith('delete_') and request.POST[key]:
try:
- choice = Choice.objects.get(id=int(key[len('delete_'):]))
+ choice = Choice.objects.get(
+ id=int(key[len('delete_'):]))
if choice.poll != poll:
raise ValueError
Vote.objects.filter(choice=choice).delete()
@@ -221,10 +230,9 @@ def editChoices(request, response_dct, admin=False):
if admin and request.method == 'GET':
for key in request.GET:
try:
- current_url = reverse('edit_choices_admin',
- args=[poll.admin_url]) if admin else \
- reverse('edit_choices_user',
- args=[poll.poll_url])
+ current_url = reverse(
+ 'edit_choices_admin', args=[poll.admin_url]) if admin else\
+ reverse('edit_choices_user', args=[poll.poll_url])
if 'up_choice' in key:
choice = Choice.objects.get(id=int(request.GET[key]))
if choice.poll != poll:
@@ -252,18 +260,18 @@ def editChoices(request, response_dct, admin=False):
response_dct['form_new_choice'] = form
return render_to_response(tpl, response_dct)
+
def poll(request, poll_url):
"""Display a poll
- poll_url is given to identify the poll. If '_' is in the poll_url the second
- part of the url is the unix time given to highlight a particular vote
- modification
+ poll_url is given to identify the poll. If '_' is in the poll_url the
+ second part of the url is the unix time given to highlight a particular
+ vote modification
"""
def modifyVote(request, choices):
"Modify user's votes"
try:
- voter = Voter.objects.filter(
- id=int(request.POST['voter']))[0]
+ voter = Voter.objects.filter(id=int(request.POST['voter']))[0]
except (ValueError, IndexError):
return
# if no author_name is given deletion of associated votes and
@@ -339,6 +347,7 @@ def poll(request, poll_url):
# a new choice
v = Vote(voter=voter, choice=choice, value=0)
v.save()
+
def newComment(request, poll):
"Comment the poll"
if poll.comments.count() >= settings.MAX_COMMENT_NB:
@@ -444,8 +453,8 @@ def poll(request, poll_url):
except ValueError:
pass
- response_dct.update({'poll':poll,
- 'VOTE':Vote.VOTE,})
+ response_dct.update({'poll': poll,
+ 'VOTE': Vote.VOTE})
response_dct['base_url'] = "/".join(request.path.split('/')[:-2]) \
+ '/%s/' % poll.base_url
@@ -455,7 +464,7 @@ def poll(request, poll_url):
for voter in voters:
# highlight a voter
if time.mktime(voter.modification_date.timetuple()) \
- == highlight_vote_date:
+ == highlight_vote_date:
voter.highlight = True
voter.votes = voter.getVotes(choice_ids)
# initialize undefined vote
@@ -464,7 +473,8 @@ def poll(request, poll_url):
if choice.id not in choice_vote_ids:
vote = Vote(voter=voter, choice=choice, value=None)
vote.save()
- voter.votes.sort(lambda x, y : cmp(choices.index(x.choice), choices.index(y.choice)))
+ voter.votes.sort(lambda x, y: cmp(choices.index(x.choice),
+ choices.index(y.choice)))
sums = [choice.getSum(poll.type == 'B') for choice in choices]
vote_max = max(sums)
c_idx = 0
@@ -479,7 +489,7 @@ def poll(request, poll_url):
response_dct['limit_set'] = None
for choice in choices:
if choice.limit:
- response_dct['limit_set'] = True
+ response_dct['limit_set'] = True
if choice.limit and sums[choices.index(choice)] >= choice.limit:
choice.available = False
else: