1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- from django.core.urlresolvers import reverse
- from django.shortcuts import redirect
- from django.utils import timezone
- from django.utils.translation import ugettext as _
- from misago import messages
- from misago.apps.threads.forms import NewThreadForm, EditThreadForm
- from misago.apps.threadtype.posting import NewThreadBaseView, EditThreadBaseView, NewReplyBaseView, EditReplyBaseView
- from misago.models import Forum, Thread, Post, Poll, PollOption
- from misago.apps.threads.mixins import TypeMixin
- class PollFormMixin(object):
- def create_poll(self, form):
- poll = Poll(forum=self.forum,
- thread=self.thread,
- user=self.request.user,
- user_name=self.request.user.username,
- user_slug=self.request.user.username_slug,
- start_date=timezone.now(),
- length=form.cleaned_data['poll_length'],
- question=form.cleaned_data['poll_question'],
- max_choices=form.cleaned_data['poll_max_choices'],
- vote_changing=form.cleaned_data['poll_changing_votes'],
- public=form.cleaned_data['poll_max_choices'])
- poll.save()
- choices = []
- for name in form.clean_choices:
- option = PollOption.objects.create(
- poll=poll,
- forum=self.forum,
- thread=self.thread,
- name=name,
- )
- choices.append(option)
- poll.choices_cache = choices
- poll.save()
- self.thread.has_poll = True
- self.thread.save()
- def update_poll(self, form):
- pass
- def delete_poll(self):
- self.thread.poll.delete()
- class NewThreadView(NewThreadBaseView, TypeMixin, PollFormMixin):
- form_type = NewThreadForm
- def set_forum_context(self):
- self.forum = Forum.objects.get(pk=self.kwargs.get('forum'), type='forum')
- def after_form(self, form):
- if form.cleaned_data.get('poll_question'):
- self.create_poll(form)
- def response(self):
- if self.post.moderated:
- messages.success(self.request, _("New thread has been posted. It will be hidden from other members until moderator reviews it."), 'threads')
- else:
- messages.success(self.request, _("New thread has been posted."), 'threads')
- return redirect(reverse('thread', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
- class EditThreadView(EditThreadBaseView, TypeMixin):
- form_type = EditThreadForm
- def after_form(self, form):
- if self.thread.poll:
- if form.cleaned_data.get('poll_delete'):
- self.delete_poll()
- self.thread.save()
- else:
- self.update_poll(form)
- elif form.cleaned_data.get('poll_question'):
- self.create_poll(form)
- def response(self):
- messages.success(self.request, _("Your thread has been edited."), 'threads_%s' % self.post.pk)
- return redirect(reverse('thread', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
- class NewReplyView(NewReplyBaseView, TypeMixin):
- def response(self):
- if self.post.moderated:
- messages.success(self.request, _("Your reply has been posted. It will be hidden from other members until moderator reviews it."), 'threads_%s' % self.post.pk)
- else:
- messages.success(self.request, _("Your reply has been posted."), 'threads_%s' % self.post.pk)
- return self.redirect_to_post(self.post)
- class EditReplyView(EditReplyBaseView, TypeMixin):
- def response(self):
- messages.success(self.request, _("Your reply has been changed."), 'threads_%s' % self.post.pk)
- return self.redirect_to_post(self.post)
|