def list_(request):
    user = request.user
    params = request.GET
    report_ids = request.session.get('report_ids', [])

    form = ReportSearchForm(params, user=user, report_ids=report_ids)
    results = form.search()

    # Handle the case where they want to export the reports
    # XXX: Why isn't this a separate view?
    export_format = params.get('export')
    if user.is_active and export_format in ('kml', 'csv'):
        export_data = [report.object for report in results]
        return _export(reports=export_data, format=export_format)

    # Paginate the results
    paginator = Paginator(results, settings.ITEMS_PER_PAGE)
    active_page = request.GET.get('page')

    try:
        page = paginator.page(active_page)
    except PageNotAnInteger:
        page = paginator.page(1)
    except EmptyPage:
        page = paginator.page(paginator.num_pages)

    # Serialize and render report data to JSON
    serializer = ReportSerializer(page.object_list, many=True)
    reports = serializer.data

    template_name = 'list' if user.is_active else 'list_public'
    template = 'reports/{name}.html'.format(name=template_name)

    tab = params.get('tabs') or 'search'
    tab_context = get_tab_counts(user, report_ids)

    subscription_url = reverse('notifications-create')
    subscription_params = request.GET.urlencode()
    if subscription_params:
        subscription_url = '?'.join((subscription_url, subscription_params))
    else:
        subscription_url = None

    context = {
        'reports': reports,
        'page': page,
        'form': form,
        'subscription_url': subscription_url,
        'tab': tab,
    }
    context.update(tab_context)

    return render(request, template, context)
Example #2
0
def list_(request):
    user = request.user
    report_ids = request.session.get('report_ids', [])
    tab_context = get_tab_counts(user, report_ids)
    if request.method == 'POST':
        form = UserSubscriptionDeleteForm(request.POST, user=request.user)
        if form.is_valid():
            form.save()
            messages.success(request, 'Saved')
            return redirect('notifications-list')
    else:
        form = UserSubscriptionDeleteForm(user=request.user)
    context = {'form': form}
    context.update(tab_context)
    return render(request, 'notifications/list.html', context)