Beispiel #1
0
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,
		}
	)
Beispiel #2
0
def view(request, title):
    document = get_object_or_404(Document, url_title=title)
    content_type = ContentType.objects.get_for_model(document)
    check_permissions(document, request.user, [document.view_permission_name])

    try:
        function = get_model_function(content_type, 'view')
        return function(request, title)
    except (ImportError, AttributeError):
        pass

    text, toc = convert_markdown(document.text)

    return render(
        request, 'documents_base.html', {
            'document':
            document,
            'text':
            text,
            'toc':
            toc,
            'attachments':
            document.attachments.filter(
                no_direct_download=False).order_by('index'),
            'active_page':
            'view',
            'view_page':
            True,
            'permission_overview':
            document_permission_overview(request.user, document),
        })
Beispiel #3
0
def results_for_admin(request, title):
    if not request.user.is_superuser:
        raise PermissionDenied

    poll = get_object_or_404(Document, url_title=title)
    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,
            "is_preview":
            True,
        })
Beispiel #4
0
def view(request, title):
    document = get_object_or_404(Document, url_title=title)
    content_type = ContentType.objects.get_for_model(document)
    check_permissions(document, request.user, [document.view_permission_name])

    try:
        function = get_model_function(content_type, 'view')
        return function(request, title)
    except (ImportError, AttributeError):
        pass

    if document.text == "" and (document.text_en != ""
                                or document.text_de != ""):
        messages.warning(
            request,
            _('The requested document is not available in the selected language. It will be shown in the available language instead.'
              ))
        text, toc = convert_markdown(
            next((text for text in (document.text_de, document.text_en)
                  if text != ""), ""))
    else:
        text, toc = convert_markdown(document.text)

    return render(
        request, 'documents_base.html', {
            'document':
            document,
            'text':
            text,
            'toc':
            toc,
            'attachments':
            document.attachments.filter(
                no_direct_download=False).order_by('index'),
            'active_page':
            'view',
            'view_page':
            True,
            'permission_overview':
            document_permission_overview(request.user, document),
        })
Beispiel #5
0
def render_text(request, title):
	if request.method != 'POST':
		raise SuspiciousOperation

	document = get_object_or_404(Document, url_title=title)
	if document.has_perms():
		check_permissions(document, request.user, [document.view_permission_name, document.edit_permission_name])

	text, __ = convert_markdown(request.POST['text'])

	WebsocketGroup(get_group_name(document.hash_value)).send({
		'text': text
	})

	return HttpResponse(text, content_type='text/plain')
Beispiel #6
0
def render_text(request, title):
    if request.method != 'POST':
        raise SuspiciousOperation

    document = get_object_or_404(Document, url_title=title)
    if document.has_perms():
        check_permissions(
            document, request.user,
            [document.view_permission_name, document.edit_permission_name])

    text, __ = convert_markdown(request.POST['text'])

    WebsocketGroup(get_group_name(document.hash_value)).send({'text': text})

    return HttpResponse(text, content_type='text/plain')
Beispiel #7
0
def preview(request):
    if not request.GET or request.method != 'GET':
        raise Http404

    hash_value = request.GET['hash_value']
    document = get_object_or_404(Document, hash_value=hash_value)

    text, __ = convert_markdown(document.text)

    return render(
        request, 'documents_preview.html', {
            'title': document.title,
            'text': text,
            'preview_url': settings.PREVIEW_URL,
            'hash_value': hash_value,
        })
Beispiel #8
0
def vote(request, poll, url_title):
	if poll.start_date > datetime.date.today():
		# poll is not open
		raise Http404

	if poll.end_date < datetime.date.today() or poll.participants.filter(id=request.user.pk).exists():
		return results(request, poll, url_title)

	if request.method == 'POST':
		choices = request.POST.getlist('choice')
		if len(choices) == 0:
			messages.error(request, _("You must select one Choice at least!"))
			return HttpResponseRedirect(reverse(poll.get_view_url_name(), args=[url_title]))
		if len(choices) > poll.max_allowed_number_of_answers:
			messages.error(request, _("You can only select up to {} options!").format(poll.max_allowed_number_of_answers))
			return HttpResponseRedirect(reverse(poll.get_view_url_name(), args=[url_title]))

		for choice_id in choices:
			choice = poll.choices.filter(id=choice_id)
			choice.update(votes=F('votes') + 1)

		poll.participants.add(request.user)
		messages.success(request, _("We've received your vote!"))
		if not poll.show_results_immediately:
			messages.info(request, _("The results of this poll will be available as from {}").format((poll.end_date + datetime.timedelta(days=1)).strftime("%d. %B %Y")))
			return HttpResponseRedirect(reverse('polls:index'))
		return HttpResponseRedirect(reverse(poll.get_view_url_name(), args=[url_title]))

	description, toc = convert_markdown(poll.text)

	return render(
		request,
		'polls_vote.html',
		{
			"document": poll,
			"description": description,
			'toc': toc,
			'active_page': 'view',
			'view_page': True,
			"widget": "checkbox" if poll.max_allowed_number_of_answers != 1 else "radio",
			'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,
		}
	)
Beispiel #9
0
def preview(request):
	if not request.GET or request.method != 'GET':
		raise Http404

	hash_value = request.GET['hash_value']
	document = get_object_or_404(Document, hash_value=hash_value)

	text, __ = convert_markdown(document.text)

	return render(
		request,
		'documents_preview.html',
		{
			'title': document.title,
			'text': text,
			'preview_url': settings.PREVIEW_URL,
			'hash_value': hash_value,
		}
	)
Beispiel #10
0
def render_text(request, title):
    if request.method != 'POST':
        raise SuspiciousOperation

    document = get_object_or_404(Document, url_title=title)
    if document.has_perms():
        check_permissions(
            document, request.user,
            [document.view_permission_name, document.edit_permission_name])

    text, __ = convert_markdown(request.POST['text'])

    channel_layer = channels.layers.get_channel_layer()
    async_to_sync(channel_layer.group_send)(document.hash_value, {
        'type': 'update_preview',
        'message': text,
    })

    return HttpResponse(text, content_type='text/plain')
Beispiel #11
0
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,
        })
Beispiel #12
0
def view(request, title):
	document = get_object_or_404(Document, url_title=title)
	content_type = ContentType.objects.get_for_model(document)
	check_permissions(document, request.user, [document.view_permission_name])

	try:
		function = get_model_function(content_type, 'view')
		return function(request, title)
	except (ImportError, AttributeError):
		pass

	text, toc = convert_markdown(document.text)

	return render(request, 'documents_base.html', {
		'document': document,
		'text': text,
		'toc': toc,
		'attachments': document.attachments.filter(no_direct_download=False).order_by('index'),
		'active_page': 'view',
		'view_page': True,
		'permission_overview': document_permission_overview(request.user, document),
	})
Beispiel #13
0
def results_for_admin(request, title):
	if not request.user.is_superuser:
		raise PermissionDenied

	poll = get_object_or_404(Document, url_title=title)
	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,
			"is_preview": True,
		}
	)
Beispiel #14
0
def vote(request, poll, url_title):
    if poll.start_date > datetime.date.today():
        # poll is not open
        raise Http404

    if poll.end_date < datetime.date.today() or poll.participants.filter(
            id=request.user.pk).exists():
        return results(request, poll, url_title)

    if request.method == 'POST':
        choices = request.POST.getlist('choice')
        if len(choices) == 0:
            messages.error(request, _("You must select one Choice at least!"))
            return HttpResponseRedirect(
                reverse(poll.get_view_url_name(), args=[url_title]))
        if len(choices) > poll.max_allowed_number_of_answers:
            messages.error(
                request,
                _("You can only select up to {} options!").format(
                    poll.max_allowed_number_of_answers))
            return HttpResponseRedirect(
                reverse(poll.get_view_url_name(), args=[url_title]))

        for choice_id in choices:
            choice = poll.choices.filter(id=choice_id)
            choice.update(votes=F('votes') + 1)

        poll.participants.add(request.user)
        messages.success(request, _("We've received your vote!"))
        if not poll.show_results_immediately:
            messages.info(
                request,
                _("The results of this poll will be available as from {}").
                format((poll.end_date +
                        datetime.timedelta(days=1)).strftime("%d. %B %Y")))
            return HttpResponseRedirect(reverse('polls:index'))
        return HttpResponseRedirect(
            reverse(poll.get_view_url_name(), args=[url_title]))

    description, toc = convert_markdown(poll.text)

    return render(
        request, 'polls_vote.html', {
            "document":
            poll,
            "description":
            description,
            'toc':
            toc,
            'active_page':
            'view',
            'view_page':
            True,
            "widget":
            "checkbox" if poll.max_allowed_number_of_answers != 1 else "radio",
            '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,
        })