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())
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)
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)
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'))
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))
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)