def index(request): running_polls = [] finished_polls = [] upcoming_polls = [] # do not show polls that a user is not allowed to see for poll in Poll.objects.all().order_by('-end_date'): if request.user.has_perm(Poll.get_view_permission(), obj=poll) and poll.start_date <= datetime.date.today(): if datetime.date.today() <= poll.end_date \ and not poll.participants.filter(id=request.user.pk).exists() \ and request.user.has_perm(Poll.get_vote_permission(), poll): running_polls.append(poll) else: finished_polls.append(poll) elif request.user.has_perm("polls.change_poll", obj=poll) and poll.start_date > datetime.date.today(): upcoming_polls.append(poll) return render( request, 'polls_index.html', { "running_polls": running_polls, "finished_polls": finished_polls, "upcoming_polls": upcoming_polls, } )
def index(request): running_polls = [] finished_polls = [] upcoming_polls = [] # do not show polls that a user is not allowed to see for poll in Poll.objects.all().order_by('-end_date'): if request.user.has_perm( Poll.get_view_permission(), obj=poll) and poll.start_date <= datetime.date.today(): if datetime.date.today() <= poll.end_date \ and not poll.participants.filter(id=request.user.pk).exists() \ and request.user.has_perm(Poll.get_vote_permission(), poll): running_polls.append(poll) else: finished_polls.append(poll) elif request.user.has_perm( "polls.change_poll", obj=poll) and poll.start_date > datetime.date.today(): upcoming_polls.append(poll) return render( request, 'polls_index.html', { "running_polls": running_polls, "finished_polls": finished_polls, "upcoming_polls": upcoming_polls, })
def results(request, poll, url_title): if poll.start_date > datetime.date.today(): # poll is not open raise Http404 if request.user.has_perm(Poll.get_vote_permission(), poll) \ and not poll.participants.filter(id=request.user.pk).exists() \ and poll.end_date >= datetime.date.today(): return vote(request, poll, url_title) if not poll.show_results_immediately and poll.end_date >= datetime.date.today(): messages.info( request, _("You can not see the results of this poll right now. You have to wait until {} to see the results of this poll.".format(poll.end_date.strftime("%d. %B %Y"))) ) return HttpResponseRedirect(reverse('polls:index')) md = markdown.Markdown(safe_mode='escape', extensions=[TocExtension(baselevel=2), InternalLinksMarkdownExtension(), 'markdown.extensions.abbr']) description = md.convert(poll.text + abbreviation_explanation_markdown()) return render( request, 'polls_results.html', { "document": poll, "description": description, 'toc': md.toc, 'active_page': 'view', 'view_page': True, 'attachments': poll.attachments.filter(no_direct_download=False).order_by('index'), 'permission_warning': permission_warning(request.user, poll), } )
def results(request, poll, url_title): if poll.start_date > datetime.date.today(): # poll is not open raise Http404 if request.user.has_perm(Poll.get_vote_permission(), poll) \ and not poll.participants.filter(id=request.user.pk).exists() \ and poll.end_date >= datetime.date.today(): return vote(request, poll, url_title) if not poll.show_results_immediately and poll.end_date >= datetime.date.today(): messages.info( request, _("You can not see the results of this poll right now. You have to wait until {} to see the results of this poll.").format( (poll.end_date + datetime.timedelta(days=1)).strftime("%d. %B %Y") ) ) return HttpResponseRedirect(reverse('polls:index')) description, toc = convert_markdown(poll.text) return render( request, 'polls_results.html', { "document": poll, "description": description, 'toc': toc, 'active_page': 'view', 'view_page': True, 'attachments': poll.attachments.filter(no_direct_download=False).order_by('index'), 'permission_overview': document_permission_overview(request.user, poll), "has_choice_descriptions": poll.has_choice_descriptions, } )
def extendMarkdown(self, md, md_globals): md.inlinePatterns.add( 'InternalLinkDocumentsPattern', Document.LinkPattern(Document.DOCUMENT_LINK_REGEX, md), "_begin") md.inlinePatterns.add('InternalLinkPollsPattern', Poll.LinkPattern(Poll.POLLS_LINK_REGEX, md), "_begin")
def save(self, *args, **kwargs): super().save(*args, **kwargs) instance = forms.ModelForm.save(self) instance.user_set.clear() instance.user_set.add(*self.cleaned_data["users"]) if self.cleaned_data["add_information_document"]: assign_perm(InformationDocument().add_permission_name, instance) else: remove_perm(InformationDocument().add_permission_name, instance) if self.cleaned_data["add_minutesdocument"]: assign_perm(MinutesDocument().add_permission_name, instance) else: remove_perm(MinutesDocument().add_permission_name, instance) if self.cleaned_data["add_poll"]: assign_perm(Poll().add_permission_name, instance) else: remove_perm(Poll().add_permission_name, instance) return instance
def view(request, title): poll = get_object_or_404(Document, url_title=title) check_permissions(poll, request.user, [Poll.get_view_permission()]) if poll.end_date < datetime.date.today() or poll.participants.filter(id=request.user.pk).exists(): return results(request, poll, title) elif poll.start_date > datetime.date.today(): messages.warning(request, _("This poll has not yet started.")) return index(request) else: if not request.user.has_perm('polls.vote_poll', poll): return results(request, poll, title) return vote(request, poll, title)
def view(request, title): poll = get_object_or_404(Document, url_title=title) check_permissions(poll, request.user, [Poll.get_view_permission()]) if poll.end_date < datetime.date.today() or poll.participants.filter( id=request.user.pk).exists(): return results(request, poll, title) elif poll.start_date > datetime.date.today(): messages.warning(request, _("This poll has not yet started.")) return index(request) else: if not request.user.has_perm('polls.vote_poll', poll): return results(request, poll, title) return vote(request, poll, title)
def results(request, poll, url_title): if poll.start_date > datetime.date.today(): # poll is not open raise Http404 if request.user.has_perm(Poll.get_vote_permission(), poll) \ and not poll.participants.filter(id=request.user.pk).exists() \ and poll.end_date >= datetime.date.today(): return vote(request, poll, url_title) if not poll.show_results_immediately and poll.end_date >= datetime.date.today( ): messages.info( request, _("You can not see the results of this poll right now. You have to wait until {} to see the results of this poll." ).format((poll.end_date + datetime.timedelta(days=1)).strftime("%d. %B %Y"))) return HttpResponseRedirect(reverse('polls:index')) description, toc = convert_markdown(poll.text) return render( request, 'polls_results.html', { "document": poll, "description": description, 'toc': toc, 'active_page': 'view', 'view_page': True, 'attachments': poll.attachments.filter( no_direct_download=False).order_by('index'), 'permission_overview': document_permission_overview(request.user, poll), "has_choice_descriptions": poll.has_choice_descriptions, })
def extendMarkdown(self, md): md.inlinePatterns.register( Document.LinkPattern(Document.DOCUMENT_LINK_REGEX, md), 'InternalLinkDocumentsPattern', 200) md.inlinePatterns.register(Poll.LinkPattern(Poll.POLLS_LINK_REGEX, md), 'InternalLinkPollsPattern', 200)