summaryrefslogtreecommitdiff
path: root/polls
diff options
context:
space:
mode:
authoretienne2008-12-05 00:16:29 +0000
committeretienne2008-12-05 00:16:29 +0000
commitaedea8f1939ae9f894670b461abea9bea1be092e (patch)
treed65caa6dd02ca3a0ecb9db5377f64db861f6d684 /polls
parent34298e230277a8cc7a1a67f7e23e01768668142d (diff)
Public votes - Polls categories
Diffstat (limited to 'polls')
-rw-r--r--polls/models.py13
-rw-r--r--polls/views.py44
2 files changed, 48 insertions, 9 deletions
diff --git a/polls/models.py b/polls/models.py
index acc51d5..f4cf93a 100644
--- a/polls/models.py
+++ b/polls/models.py
@@ -24,6 +24,12 @@ Models management
from django.db import models
from django.utils.translation import gettext_lazy as _
+class Category(models.Model):
+ name = models.CharField(max_length=100)
+ description = models.TextField()
+ def __unicode__(self):
+ return self.name
+
class PollUser(models.Model):
name = models.CharField(max_length=100)
email = models.CharField(max_length=100)
@@ -34,12 +40,13 @@ class Poll(models.Model):
name = models.CharField(max_length=200)
description = models.CharField(max_length=1000)
author = models.ForeignKey(PollUser)
+ category = models.ForeignKey(Category, null=True, blank=True)
+ enddate = models.DateTimeField(null=True, blank=True)
base_url = models.CharField(max_length=100)
admin_url = models.CharField(max_length=100)
modification_date = models.DateTimeField(auto_now=True)
- STATUS = (('A', _('Available')),
- ('D', _('Disabled')),)
- status = models.CharField(max_length=1, choices=STATUS)
+ public = models.BooleanField(default=False)
+ open = models.BooleanField(default=True)
TYPE = (('P', _('Poll')),
('B', _('Balanced poll')),
('O', _('One choice poll')),)
diff --git a/polls/views.py b/polls/views.py
index 629caa1..4c6499d 100644
--- a/polls/views.py
+++ b/polls/views.py
@@ -31,7 +31,7 @@ from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from papillon.settings import LANGUAGES
-from papillon.polls.models import Poll, PollUser, Choice, Voter, Vote
+from papillon.polls.models import Poll, PollUser, Choice, Voter, Vote, Category
def getBaseResponse(request):
"""Manage basic fields for the template
@@ -55,11 +55,23 @@ def index(request):
response_dct, redirect = getBaseResponse(request)
if redirect:
return redirect
+ 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)
+def category(request, category_id):
+ "Page for a category"
+ response_dct, redirect = getBaseResponse(request)
+ if redirect:
+ return redirect
+ category = Category.objects.get(id=int(category_id))
+ response_dct['category'] = category
+ response_dct['polls'] = Poll.objects.filter(public=True, category=category)
+ return render_to_response('category.html', response_dct)
+
def createOrEdit(request, admin_url):
'''Creation or edition of a poll.
admin_url is given to identify a particular poll
@@ -103,9 +115,19 @@ def createOrEdit(request, admin_url):
author.save()
base_url = 'b' + genRandomURL()
admin_url = 'a' + genRandomURL()
+ category = None
+ if 'poll_category' in request.POST and request.POST['poll_category']:
+ category = Category.objects.get(id=int(request.POST['poll_category']))
+ public = False
+ if 'poll_public' in request.POST and request.POST['poll_public']:
+ value = False
+ if request.POST['poll_public'] == '1':
+ value = True
+ public = value
poll = Poll(name=request.POST['poll_name'],
description=request.POST['poll_desc'], author=author, base_url=base_url,
-admin_url=admin_url, status = 'D', type=request.POST['poll_type'])
+admin_url=admin_url, type=request.POST['poll_type'], category=category,
+public=public)
poll.save()
url = response_dct['admin_url'] + '/%s/' % poll.admin_url
return response_dct, HttpResponseRedirect(url)
@@ -126,14 +148,23 @@ admin_url=admin_url, status = 'D', type=request.POST['poll_type'])
if 'poll_desc' in request.POST and request.POST['poll_desc']:
updated = True
poll.description = request.POST['poll_desc']
+ if 'poll_open' in request.POST and request.POST['poll_open']:
+ updated = True
+ value = False
+ if request.POST['poll_open'] == '1':
+ value = True
+ poll.open = value
+ if 'poll_public' in request.POST and request.POST['poll_public']:
+ updated = True
+ value = False
+ if request.POST['poll_public'] == '1':
+ value = True
+ poll.public = value
if updated:
poll.save()
# base feed of the template
- new_dct = {'author_name':poll.author.name,
- 'poll_name':poll.name,
- 'poll_desc':poll.description,
+ new_dct = {'poll':poll,
'choices':Choice.objects.filter(poll=poll).order_by('order'),
- 'poll_status':poll.status,
'type_name':poll.getTypeLabel()}
response_dct.update(new_dct)
@@ -180,6 +211,7 @@ admin_url=admin_url, status = 'D', type=request.POST['poll_type'])
if redirect:
return redirect
response_dct['TYPES'] = Poll.TYPE
+ response_dct['categories'] = Category.objects.all()
response_dct['admin_url'] = \
"/".join(request.path.split('/')[:-2])
redirection = None