diff options
Diffstat (limited to 'papillon/polls/views.py')
-rw-r--r-- | papillon/polls/views.py | 80 |
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: |