posting.py 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from django.core.urlresolvers import reverse
  2. from django.shortcuts import redirect
  3. from django.utils import timezone
  4. from django.utils.translation import ugettext as _
  5. from misago import messages
  6. from misago.apps.threads.forms import NewThreadForm, EditThreadForm
  7. from misago.apps.threadtype.posting import NewThreadBaseView, EditThreadBaseView, NewReplyBaseView, EditReplyBaseView
  8. from misago.models import Forum, Thread, Post, Poll, PollOption
  9. from misago.apps.threads.mixins import TypeMixin
  10. class PollFormMixin(object):
  11. def create_poll(self, form):
  12. poll = Poll(forum=self.forum,
  13. thread=self.thread,
  14. user=self.request.user,
  15. user_name=self.request.user.username,
  16. user_slug=self.request.user.username_slug,
  17. start_date=timezone.now(),
  18. length=form.cleaned_data['poll_length'],
  19. question=form.cleaned_data['poll_question'],
  20. max_choices=form.cleaned_data['poll_max_choices'],
  21. vote_changing=form.cleaned_data['poll_changing_votes'],
  22. public=form.cleaned_data['poll_max_choices'])
  23. poll.save()
  24. choices = []
  25. for name in form.clean_choices:
  26. option = PollOption.objects.create(
  27. poll=poll,
  28. forum=self.forum,
  29. thread=self.thread,
  30. name=name,
  31. )
  32. choices.append(option)
  33. poll.choices_cache = choices
  34. poll.save()
  35. self.thread.has_poll = True
  36. self.thread.save()
  37. def update_poll(self, form):
  38. pass
  39. def delete_poll(self):
  40. self.thread.poll.delete()
  41. class NewThreadView(NewThreadBaseView, TypeMixin, PollFormMixin):
  42. form_type = NewThreadForm
  43. def set_forum_context(self):
  44. self.forum = Forum.objects.get(pk=self.kwargs.get('forum'), type='forum')
  45. def after_form(self, form):
  46. if form.cleaned_data.get('poll_question'):
  47. self.create_poll(form)
  48. def response(self):
  49. if self.post.moderated:
  50. messages.success(self.request, _("New thread has been posted. It will be hidden from other members until moderator reviews it."), 'threads')
  51. else:
  52. messages.success(self.request, _("New thread has been posted."), 'threads')
  53. return redirect(reverse('thread', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
  54. class EditThreadView(EditThreadBaseView, TypeMixin):
  55. form_type = EditThreadForm
  56. def after_form(self, form):
  57. if self.thread.poll:
  58. if form.cleaned_data.get('poll_delete'):
  59. self.delete_poll()
  60. self.thread.save()
  61. else:
  62. self.update_poll(form)
  63. elif form.cleaned_data.get('poll_question'):
  64. self.create_poll(form)
  65. def response(self):
  66. messages.success(self.request, _("Your thread has been edited."), 'threads_%s' % self.post.pk)
  67. return redirect(reverse('thread', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
  68. class NewReplyView(NewReplyBaseView, TypeMixin):
  69. def response(self):
  70. if self.post.moderated:
  71. 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)
  72. else:
  73. messages.success(self.request, _("Your reply has been posted."), 'threads_%s' % self.post.pk)
  74. return self.redirect_to_post(self.post)
  75. class EditReplyView(EditReplyBaseView, TypeMixin):
  76. def response(self):
  77. messages.success(self.request, _("Your reply has been changed."), 'threads_%s' % self.post.pk)
  78. return self.redirect_to_post(self.post)