summaryrefslogtreecommitdiff
path: root/polls
diff options
context:
space:
mode:
Diffstat (limited to 'polls')
-rw-r--r--polls/forms.py25
-rw-r--r--polls/models.py16
-rw-r--r--polls/templatetags/__init__.py0
-rw-r--r--polls/templatetags/get_range.py25
-rw-r--r--polls/views.py20
5 files changed, 70 insertions, 16 deletions
diff --git a/polls/forms.py b/polls/forms.py
index 6ac97a1..3a151aa 100644
--- a/polls/forms.py
+++ b/polls/forms.py
@@ -27,7 +27,7 @@ from django import forms
from django.contrib.admin import widgets as adminwidgets
from django.utils.translation import gettext_lazy as _
-from papillon.polls.models import Poll, Category, Choice
+from papillon.polls.models import Poll, Category, Choice, Comment
from papillon import settings
class TextareaWidget(forms.Textarea):
@@ -51,6 +51,21 @@ class CreatePollForm(PollForm):
if not Category.objects.all():
exclude.append('category')
+class CommentForm(forms.ModelForm):
+ class Meta:
+ model = Comment
+ exclude = ['date',]
+ def __init__(self, *args, **kwargs):
+ super(CommentForm, self).__init__(*args, **kwargs)
+ self.fields['text'].widget = TextareaWidget()
+
+# workaround for SplitDateTime with required=False
+class SplitDateTimeJSField(forms.SplitDateTimeField):
+ def __init__(self, *args, **kwargs):
+ super(SplitDateTimeJSField, self).__init__(*args, **kwargs)
+ self.widget.widgets[0].attrs = {'class': 'vDateField'}
+ self.widget.widgets[1].attrs = {'class': 'vTimeField'}
+
class AdminPollForm(PollForm):
class Meta:
model = Poll
@@ -58,14 +73,14 @@ class AdminPollForm(PollForm):
'dated_choices', 'type']
if not Category.objects.all():
exclude.append('category')
- def __init__(self, *args, **kwargs):
- super(AdminPollForm, self).__init__(*args, **kwargs)
- self.fields['enddate'].widget = adminwidgets.AdminSplitDateTime()
+ enddate = SplitDateTimeJSField(widget=adminwidgets.AdminSplitDateTime(),
+ required=False, label=Poll._meta.get_field('enddate').verbose_name,
+ help_text=Poll._meta.get_field('enddate').help_text)
class ChoiceForm(forms.ModelForm):
class Meta:
model = Choice
- fields = ('name', 'limit', 'poll', 'order')
+ fields = ('name', 'limit', 'poll', 'order',)
def __init__(self, *args, **kwargs):
super(ChoiceForm, self).__init__(*args, **kwargs)
self.fields['poll'].widget = forms.HiddenInput()
diff --git a/polls/models.py b/polls/models.py
index f5b9cbb..f8b3b22 100644
--- a/polls/models.py
+++ b/polls/models.py
@@ -65,7 +65,7 @@ modify the current poll"))
- "Yes/No poll" is the appropriate type for a simple multi-choice poll
- "Yes/No/Maybe poll" allows voters to stay undecided
- "One choice poll" gives only one option to choose from
- - "Valuable choice poll" permit users to give a note between 0 to 10 to \
+ - "Valuable choice poll" permit users to give a note between 0 to 9 to \
different choices
"""))
dated_choices = models.BooleanField(verbose_name=_("Choices are dates"),
@@ -85,7 +85,7 @@ verbose_name=_("Hide votes to new voters"), help_text=_("Check this option to \
hide poll results to new users"))
open = models.BooleanField(default=True,
verbose_name=_("State of the poll"), help_text=_("Uncheck this option to close \
-the poll/check the poll to reopen it"))
+the poll/check this option to reopen it"))
def getTypeLabel(self):
idx = [type[0] for type in self.TYPE].index(self.type)
@@ -173,6 +173,18 @@ class Choice(models.Model):
class Meta:
ordering = ['order']
+ def get_date(self):
+ if not self.poll.dated_choices:
+ return self.name
+ return datetime.datetime.strptime(self.name, '%Y-%m-%d %H:%M:%S')
+
+ def set_date(self, value):
+ self._date = value
+ #if not self.poll.dated_choices:
+ # self.name = value
+ #self.name = datetime.strftime(value, '%Y-%m-%d %H:%M:%S')
+ date = property(get_date, set_date)
+
def getSum(self, balanced_poll=None):
'''Get the sum of votes for this choice'''
sum = 0
diff --git a/polls/templatetags/__init__.py b/polls/templatetags/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/polls/templatetags/__init__.py
diff --git a/polls/templatetags/get_range.py b/polls/templatetags/get_range.py
new file mode 100644
index 0000000..b9d8328
--- /dev/null
+++ b/polls/templatetags/get_range.py
@@ -0,0 +1,25 @@
+from django.template import Library
+
+register = Library()
+
+@register.filter
+def get_range( value ):
+ """
+ Filter - returns a list containing range made from given value
+ Usage (in template):
+
+ <ul>{% for i in 3|get_range %}
+ <li>{{ i }}. Do something</li>
+{% endfor %}</ul>
+
+Results with the HTML:
+<ul>
+<li>0. Do something</li>
+<li>1. Do something</li>
+<li>2. Do something</li>
+</ul>
+
+Instead of 3 one may use the variable set in the views
+ """
+ return range(value)
+
diff --git a/polls/views.py b/polls/views.py
index 7abd3a3..fdbeb6e 100644
--- a/polls/views.py
+++ b/polls/views.py
@@ -34,7 +34,7 @@ from papillon.settings import LANGUAGES, BASE_SITE
from papillon.polls.models import Poll, PollUser, Choice, Voter, Vote, \
Category, Comment
from papillon.polls.forms import CreatePollForm, AdminPollForm, ChoiceForm, \
- DatedChoiceForm
+ DatedChoiceForm, CommentForm
def getBaseResponse(request):
"""Manage basic fields for the template
@@ -149,7 +149,7 @@ def editChoicesUser(request, poll_url):
if redirect:
return redirect
try:
- poll = Poll.objects.filter(poll_url=poll_url)[0]
+ poll = Poll.objects.filter(base_url=poll_url)[0]
except IndexError:
poll = None
if not poll or not poll.opened_admin:
@@ -234,8 +234,8 @@ def editChoices(request, response_dct, admin=False):
pass
choices = Choice.objects.filter(poll=poll).order_by('order')
for choice in choices:
- if poll.dated_choices:
- choice.name = datetime.strptime(choice.name, '%Y-%m-%d %H:%M:%S')
+ if admin and poll.dated_choices:
+ choice.name = choice.date
choice.form = Form(instance=choice)
response_dct['choices'] = choices
response_dct['form_new_choice'] = form
@@ -479,9 +479,11 @@ def poll(request, poll_url):
response_dct['choices'] = choices
response_dct['comments'] = Comment.objects.filter(poll=poll)
# verify if vote's result has to be displayed
- response_dct['hide_vote'] = True
- if u'display_result' in request.GET:
- request.session['knowned_vote_' + poll.base_url] = 1
- if 'knowned_vote_' + poll.base_url in request.session:
- response_dct['hide_vote'] = False
+ response_dct['hide_vote'] = poll.hide_choices
+ if poll.hide_choices:
+ if u'display_result' in request.GET:
+ request.session['knowned_vote_' + poll.base_url] = 1
+ if 'knowned_vote_' + poll.base_url in request.session:
+ response_dct['hide_vote'] = False
+ response_dct['form_comment'] = CommentForm()
return render_to_response('vote.html', response_dct)