diff options
Diffstat (limited to 'polls')
| -rw-r--r-- | polls/forms.py | 25 | ||||
| -rw-r--r-- | polls/models.py | 16 | ||||
| -rw-r--r-- | polls/templatetags/__init__.py | 0 | ||||
| -rw-r--r-- | polls/templatetags/get_range.py | 25 | ||||
| -rw-r--r-- | polls/views.py | 20 |
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) |
