details.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from django.template import RequestContext
  2. from misago.shortcuts import render_to_response
  3. from django.utils.translation import ugettext as _
  4. from misago.acl.exceptions import ACLError403, ACLError404
  5. from misago.apps.threadtype.details import ExtraBaseView, DetailsBaseView, KarmaVotesBaseView
  6. from misago.apps.threads.mixins import TypeMixin
  7. class DetailsView(DetailsBaseView, TypeMixin):
  8. pass
  9. class KarmaVotesView(KarmaVotesBaseView, TypeMixin):
  10. pass
  11. class PollVotesView(ExtraBaseView, TypeMixin):
  12. def fetch_target(self):
  13. self.fetch_thread()
  14. self.fetch_poll()
  15. def fetch_poll(self):
  16. if not self.thread.poll:
  17. raise ACLError404(_('Selected poll could not be found.'))
  18. self.poll = self.thread.poll
  19. def check_acl(self):
  20. self.request.acl.threads.allow_see_poll_votes(self.forum, self.poll)
  21. def response(self):
  22. options = self.poll.option_set.all().order_by('-votes')
  23. options_dict = {}
  24. for option in options:
  25. option.votes_list = []
  26. options_dict[option.pk] = option
  27. for vote in self.poll.vote_set.filter(option__isnull=False).iterator():
  28. options_dict[vote.option_id].votes_list.append(vote)
  29. return render_to_response('threads/poll_votes.html',
  30. self._template_vars({
  31. 'forum': self.forum,
  32. 'parents': self.parents,
  33. 'thread': self.thread,
  34. 'poll': self.poll,
  35. 'options': options,
  36. 'user_votes': [x.option_id for x in self.request.user.pollvote_set.filter(poll=self.poll)] if self.request.user.is_authenticated() else []
  37. }),
  38. context_instance=RequestContext(self.request))