Пример #1
0
def make_same_request(request, slug, message_id):
    foirequest = get_object_or_404(FoiRequest, slug=slug)
    message = get_object_or_404(FoiMessage, id=int(message_id))
    if not request.user.is_authenticated():
        return render_403(request)
    if not foirequest == message.request:
        return render_400(request)
    if not message.not_publishable:
        return render_400(request)
    if foirequest.same_as is not None:
        foirequest = foirequest.same_as
    same_requests = FoiRequest.objects.filter(user=request.user, same_as=foirequest).count()
    if same_requests:
        messages.add_message(request, messages.ERROR,
            _("You already made an identical request"))
        return render_400(request)
    body = u"%s\n\n%s" % (foirequest.description,
            _('Please see this request on FragDenStaat.de where you granted access to this information: %(url)s') % {'url': foirequest.get_absolute_domain_short_url()})
    fr = FoiRequest.from_request_form(
        request.user, foirequest.public_body,
        foirequest.law,
        form_data=dict(
            subject=foirequest.title,
            body=body,
            public=foirequest.public
        ))  # Don't pass post_data, get default letter of law
    fr.same_as = foirequest
    fr.save()
    messages.add_message(request, messages.SUCCESS,
            _('You successfully requested this document! Your request is displayed below.'))
    return HttpResponseRedirect(fr.get_absolute_url())
Пример #2
0
def list_requests(request, status=None, topic=None, tag=None, jurisdiction=None):
    context = {
        'filtered': True
    }
    topic_list = PublicBodyTopic.objects.get_list()
    if status is not None:
        status = FoiRequest.STATUS_URLS_DICT[status]
        foi_requests = FoiRequest.published.for_list_view().filter(status=status)
        context.update({
            'status': FoiRequest.get_readable_status(status),
            'status_description': FoiRequest.get_status_description(status)
        })
    elif topic is not None:
        topic = get_object_or_404(PublicBodyTopic, slug=topic)
        foi_requests = FoiRequest.published.for_list_view().filter(public_body__topic=topic)
        context.update({
            'topic': topic,
            })
    elif tag is not None:
        tag_object = get_object_or_404(Tag, slug=tag)
        foi_requests = FoiRequest.published.for_list_view().filter(tags=tag_object)
        context.update({
            'tag': tag_object
        })
    else:
        foi_requests = FoiRequest.published.for_list_view()
        context['filtered'] = False

    if jurisdiction is not None:
        jurisdiction_object = get_object_or_404(Jurisdiction, slug=jurisdiction)
        foi_requests = foi_requests.filter(jurisdiction=jurisdiction_object)
        context.update({
            'jurisdiction': jurisdiction_object
        })
    else:
        context['jurisdiction_list'] = Jurisdiction.objects.get_visible()

    context.update({
        'page_title': _("FoI Requests"),
        'count': foi_requests.count(),
        'object_list': foi_requests,
        'status_list': [(x[0],
            FoiRequest.get_readable_status(x[1]), x[1]) for x in FoiRequest.STATUS_URLS],
        'topic_list': topic_list
    })

    return render(request, 'foirequest/list.html', context)
Пример #3
0
def list_requests_not_foi(request):
    context = {}
    context.update({
        'page_title': _("Non-FoI Requests"),
        'not_foi': True,
        'count': FoiRequest.published_not_foi.for_list_view().count(),
        'object_list': FoiRequest.published_not_foi.for_list_view(),
        'status_list': [(x[0],
            FoiRequest.get_readable_status(x[1]), x[1]) for x in FoiRequest.STATUS_URLS],
        'topic_list': PublicBodyTopic.objects.get_list()
    })
    return render(request, 'foirequest/list.html', context)
Пример #4
0
def confirm(request, user_id, secret, request_id=None):
    if request.user.is_authenticated():
        messages.add_message(request, messages.ERROR,
                _('You are logged in and cannot use a confirmation link.'))
        return HttpResponseRedirect(reverse('account-show'))
    user = get_object_or_404(auth.models.User, pk=int(user_id))
    if user.is_active:
        raise Http404
    account_manager = AccountManager(user)
    if account_manager.confirm_account(secret, request_id):
        messages.add_message(request, messages.WARNING,
                _('Your email address is now confirmed and you are logged in. You should change your password now by filling out the form below.'))
        login_user(request, user)
        if request_id is not None:
            foirequest = FoiRequest.confirmed_request(user, request_id)
            if foirequest:
                messages.add_message(request, messages.SUCCESS,
                    _('Your request "%s" has now been sent') % foirequest.title)
        return HttpResponseRedirect(reverse('account-show') + "?new#change-password-now")
    else:
        messages.add_message(request, messages.ERROR,
                _('You can only use the confirmation link once, please login with your password.'))
    return HttpResponseRedirect(reverse('account-login'))
Пример #5
0
def create_event_status_changed(sender, **kwargs):
    status = kwargs['status']
    data = kwargs['data']
    if data['costs'] > 0:
        FoiEvent.objects.create_event("reported_costs", sender,
                user=sender.user,
                public_body=sender.public_body, amount=data['costs'])
    elif status == "refused" and data['refusal_reason']:
        FoiEvent.objects.create_event("request_refused", sender,
                user=sender.user,
                public_body=sender.public_body, reason=data['refusal_reason'])
    elif status == "partially_successful" and data['refusal_reason']:
        FoiEvent.objects.create_event("partially_successful", sender,
                user=sender.user,
                public_body=sender.public_body, reason=data['refusal_reason'])
    elif status == "request_redirected":
        FoiEvent.objects.create_event("request_redirected", sender,
                user=sender.user,
                public_body=sender.public_body)
    else:
        FoiEvent.objects.create_event("status_changed", sender, user=sender.user,
            public_body=sender.public_body,
            status=FoiRequest.get_readable_status(status))
Пример #6
0
def submit_request(request, public_body=None):
    error = False
    foilaw = None
    if public_body is not None:
        public_body = get_object_or_404(PublicBody,
                slug=public_body)
        all_laws = FoiLaw.objects.filter(jurisdiction=public_body.jurisdiction)
    else:
        all_laws = FoiLaw.objects.all()
    context = {"public_body": public_body}

    request_form = RequestForm(all_laws, FoiLaw.get_default_law(public_body),
            True, request.POST)
    context['request_form'] = request_form
    context['public_body_form'] = PublicBodyForm()
    if public_body is None and \
                request.POST.get('public_body') == "new":
            pb_form = PublicBodyForm(request.POST)
            context["public_body_form"] = pb_form
            if pb_form.is_valid():
                data = pb_form.cleaned_data
                data['confirmed'] = False
                public_body = PublicBody(**data)
            else:
                error = True

    if not request_form.is_valid():
        error = True
    else:
        if public_body is None and \
                request_form.cleaned_data['public_body'] != '' and \
                request_form.cleaned_data['public_body'] != 'new':
            public_body = request_form.public_body_object

    context['user_form'] = None
    user = None
    if not request.user.is_authenticated():
        user_form = NewUserForm(request.POST)
        context['user_form'] = user_form
        if not user_form.is_valid():
            error = True
    else:
        user = request.user

    if not error:
        password = None
        if user is None:
            user, password = AccountManager.create_user(**user_form.cleaned_data)
        sent_to_pb = 1
        if public_body is not None and public_body.pk is None:
            public_body._created_by = user
            public_body.save()
            sent_to_pb = 2
        elif public_body is None:
            sent_to_pb = 0

        if foilaw is None:
            foilaw = request_form.foi_law

        foi_request = FoiRequest.from_request_form(user, public_body,
                foilaw, form_data=request_form.cleaned_data, post_data=request.POST)
        if user.is_active:
            if sent_to_pb == 0:
                messages.add_message(request, messages.INFO,
                    _('Others can now suggest the Public Bodies for your request.'))
            elif sent_to_pb == 2:
                messages.add_message(request, messages.INFO,
                    _('Your request will be sent as soon as the newly created Public Body was confirmed by an administrator.'))

            else:
                messages.add_message(request, messages.INFO,
                    _('Your request has been sent.'))
            return HttpResponseRedirect(foi_request.get_absolute_url())
        else:
            AccountManager(user).send_confirmation_mail(request_id=foi_request.pk,
                    password=password)
            messages.add_message(request, messages.INFO,
                    _('Please check your inbox for mail from us to confirm your mail address.'))
            # user cannot access the request yet!
            return HttpResponseRedirect("/")
    messages.add_message(request, messages.ERROR,
        _('There were errors in your form submission. Please review and submit again.'))
    return render(request, 'foirequest/request.html', context, status=400)