def _survey_report(request, slug, report, page, templates): """ Show a report for the survey. As rating is done in a separate application we don't directly check request.GET["sort"] here. crowdsourcing_settings.PRE_REPORT is the place for that. """ if page is None: page = 1 else: try: page = int(page) except ValueError: raise Http404 survey = _get_survey_or_404(slug, request) # is the survey anything we can actually have a report on? is_public = survey.is_live and survey.can_have_public_submissions() if not is_public and not request.user.is_staff: raise Http404 reports = survey.surveyreport_set.all() if report: report_obj = get_object_or_404(reports, slug=report) elif survey.default_report: args = {"slug": survey.slug, "report": survey.default_report.slug} url = reverse("survey_report_page_1", kwargs=args) return HttpResponseRedirect(url) else: report_obj = _default_report(survey) archive_fields = list(survey.get_public_archive_fields()) is_staff = request.user.is_staff if is_staff: submissions_ = survey.submission_set.all() fields = list(survey.get_fields()) else: submissions_ = survey.public_submissions() fields = list(survey.get_public_fields()) filters = get_filters(survey, request.GET) id_field = "survey_submission.id" if not report_obj.display_individual_results: submissions_ = submissions_.none() else: submissions_ = extra_from_filters(submissions_, id_field, survey, request.GET) # If you want to sort based on rating, wire it up here. if crowdsourcing_settings.PRE_REPORT: pre_report = get_function(crowdsourcing_settings.PRE_REPORT) submissions_ = pre_report( submissions=submissions_, report=report_obj, request=request) if report_obj.featured: submissions_ = submissions_.filter(featured=True) if report_obj.limit_results_to: submissions_ = submissions_[:report_obj.limit_results_to] paginator, page_obj = paginate_or_404(submissions_, page) page_answers = get_all_answers( page_obj.object_list, include_private_questions=is_staff) pages_to_link = pages_to_link_from_paginator(page, paginator) display_individual_results = all([ report_obj.display_individual_results, archive_fields or (is_staff and fields)]) context = dict( survey=survey, submissions=submissions_, paginator=paginator, page_obj=page_obj, pages_to_link=pages_to_link, fields=fields, archive_fields=archive_fields, filters=filters, report=report_obj, page_answers=page_answers, is_public=is_public, display_individual_results=display_individual_results, request=request) return render_to_string(templates, context, _rc(request))
from django.template import Node from django.utils.safestring import mark_safe from django.utils.html import escape, strip_tags, linebreaks #from sorl.thumbnail.base import ThumbnailException from survey.models import ( extra_from_filters, AggregateResultCount, AggregateResultSum, AggregateResultAverage, AggregateResult2AxisCount, Answer, FILTER_TYPE, OPTION_TYPE_CHOICES, SURVEY_AGGREGATE_TYPE_CHOICES, get_all_answers) from survey.views import location_question_results from survey.util import ChoiceEnum, get_function from survey import settings as local_settings if local_settings.OEMBED_EXPAND: try: oembed_expand = get_function(local_settings.OEMBED_EXPAND) except Exception as ex: args = (local_settings.OEMBED_EXPAND, str(ex)) message = ("Got this exception while trying to get function %s. " "settings.OEMBED_EXPAND should be in the format " "path.to.module.function_name Will just display video " "links for now. %s") % args logging.warn(message) oembed_expand = None else: try: from survey.oembedutils import oembed_expand except ImportError as ex: message = 'oembed not installed. Will just display links to videos. %s' logging.warn(message % str(ex)) oembed_expand = None