コード例 #1
0
ファイル: views.py プロジェクト: DominikJakub/chcemvediet
def file_delete(request, lang, path, name):
    try:
        page = Page(path, lang)
    except InvalidPageError:
        return HttpResponseNotFound()
    if page.lpath != path:
        return HttpResponseNotFound()

    try:
        file = File(page, name)
    except InvalidFileError:
        return HttpResponseNotFound()

    if request.method == u'POST':
        button = clean_button(request.POST, [u'delete'])

        if button == u'delete':
            file.delete()
            return HttpResponseRedirect(reverse(u'admin:pages_edit', args=[lang, page.lpath]))

        else: # Invalid button
            return HttpResponseBadRequest()

    return render(request, u'pages/admin/file_delete.html', {
            u'title': u'Delete Page Attachment',
            u'lang': lang,
            u'page': page,
            u'file': file,
            })
コード例 #2
0
ファイル: views.py プロジェクト: DominikJakub/chcemvediet
def delete(request, lang, path):
    try:
        page = Page(path, lang, keep_last=True)
    except InvalidPageError:
        return HttpResponseNotFound()
    if page.lpath != path:
        return HttpResponseNotFound()
    if page.is_root:
        return HttpResponseNotFound()

    if request.method == u'POST':
        button = clean_button(request.POST, [u'delete'])

        if button == u'delete':
            page.delete()
            return HttpResponseRedirect(reverse(u'admin:pages_index', args=[lang]))

        else: # Invalid button
            return HttpResponseBadRequest()

    return render(request, u'pages/admin/delete.html', {
            u'title': u'Delete Page',
            u'lang': lang,
            u'page': page,
            })
コード例 #3
0
def wizard_view(wizard_class, request, index, *args, **kwargs):
    try:
        wizard = wizard_class(request, index, *args, **kwargs)
    except WizzardRollback as e:
        return HttpResponseRedirect(e.step.get_url())

    if request.method != u'POST':
        return wizard.current_step.render()

    button = clean_button(request.POST, [u'save', u'next'])

    if button == u'save':
        wizard.commit()
        return HttpResponseRedirect(wizard.current_step.get_url())

    if button == u'next':
        if not wizard.current_step.is_valid():
            return wizard.current_step.render()
        wizard.commit()
        if not wizard.current_step.is_last():
            return HttpResponseRedirect(wizard.next_step().get_url())
        url = wizard.finish()
        wizard.reset()
        return HttpResponseRedirect(url)

    raise SuspiciousOperation()
コード例 #4
0
def index(request):
    if request.method == u'POST':
        button = clean_button(request.POST, [u'jump', u'reset'])

        if button == u'jump':
            form = forms.WarpForm(request.POST)
            if form.is_valid():
                jumpto = form.cleaned_data[u'jumpto']
                speedup = form.cleaned_data[u'speedup']
                if jumpto is not None or speedup is not None:
                    timewarp.jump(jumpto, speedup)
                return HttpResponseRedirect(reverse(u'admin:timewarp'))

        elif button == u'reset':
            timewarp.reset()
            return HttpResponseRedirect(reverse(u'admin:timewarp'))

        else:  # invalid button
            form = forms.WarpForm()
    else:
        form = forms.WarpForm()

    return render(request, u'timewarp/timewarp.html', {
        u'timewarp': timewarp,
        u'form': form,
        u'title': u'Timewarp',
    })
コード例 #5
0
ファイル: admin.py プロジェクト: gitter-badger/chcemvediet
def index(request):
    if request.method == u'POST':
        button = clean_button(request.POST, [u'jump', u'reset'])

        if button == u'jump':
            form = forms.WarpForm(request.POST)
            if form.is_valid():
                jumpto = form.cleaned_data[u'jumpto']
                speedup = form.cleaned_data[u'speedup']
                if jumpto is not None or speedup is not None:
                    timewarp.jump(jumpto, speedup)
                return HttpResponseRedirect(reverse(u'admin:timewarp'))

        elif button == u'reset':
            timewarp.reset()
            return HttpResponseRedirect(reverse(u'admin:timewarp'))

        else: # invalid button
            form = forms.WarpForm()
    else:
        form = forms.WarpForm()

    return render(request, u'timewarp/timewarp.html', {
            u'timewarp': timewarp,
            u'form': form,
            u'title': u'Timewarp',
            })
コード例 #6
0
def wizard_view(wizard_class, request, index, finish, *args, **kwargs):

    if issubclass(wizard_class, WizardGroup):
        wizard = wizard_class.find_applicable(request, *args, **kwargs)
    else:
        wizard = wizard_class(request, *args, **kwargs)

    try:
        wizard.step(index)
    except WizzardRollback as e:
        return HttpResponseRedirect(e.step.get_url())

    if request.method != u'POST':
        return wizard.current_step.render()

    button = clean_button(request.POST, [u'save', u'next'])

    if button == u'save':
        wizard.commit()
        return HttpResponseRedirect(wizard.current_step.get_url())

    if button == u'next':
        if not wizard.current_step.is_valid():
            return wizard.current_step.render()
        wizard.commit()
        if not wizard.current_step.is_last():
            return HttpResponseRedirect(wizard.next_step().get_url())
        url = finish(wizard)
        wizard.reset()
        return HttpResponseRedirect(url)

    return HttpResponseBadRequest()
コード例 #7
0
ファイル: views.py プロジェクト: viliambalaz/chcemvediet
def file_create_or_edit(request, lang, path, name, create):
    u"""
    If ``create`` is False, then ``name`` should point to the page file we want to edit. If
    ``create`` is True, then ``name`` is ignored.
    """
    try:
        page = Page(path, lang)
    except InvalidPageError:
        raise Http404()
    if page.lpath != path:
        raise Http404()

    try:
        file = File(page, name) if not create else None
    except InvalidFileError:
        raise Http404()

    if request.method == u'POST':
        button = clean_button(request.POST, [u'save', u'save-and-continue'])

        if button in [u'save', u'save-and-continue']:
            form = forms.FileEditForm(page, file, create, request.POST,
                                      request.FILES)
            if form.is_valid():
                try:
                    new_file = form.save()
                except forms.FormSaveError:
                    pass
                else:
                    if button == u'save':
                        return HttpResponseRedirect(
                            reverse(u'admin:pages_edit',
                                    args=[lang, page.lpath]))
                    else:  # save-and-continue
                        return HttpResponseRedirect(
                            reverse(u'admin:pages_file_edit',
                                    args=[lang, page.lpath, new_file.name]))

        else:  # Invalid button
            raise SuspiciousOperation()

    else:  # GET
        form = forms.FileEditForm(page, file, create)

    return render(
        request, u'pages/admin/file_edit.html', {
            u'title':
            u'Add Page Attachment' if create else u'Edit Page Attachment',
            u'create': create,
            u'lang': lang,
            u'page': page,
            u'file': file,
            u'form': form,
        })
コード例 #8
0
ファイル: add_smail.py プロジェクト: zuffova/chcemvediet
def _add_smail(request, inforequest_pk, form_class):
    assert form_class.action_type in Action.OBLIGEE_ACTION_TYPES

    inforequest = (Inforequest.objects
            .not_closed()
            .owned_by(request.user)
            .prefetch_related(Inforequest.prefetch_branches(None, Branch.objects.select_related(u'historicalobligee')))
            .prefetch_related(Branch.prefetch_last_action(u'branches'))
            .get_or_404(pk=inforequest_pk)
            )

    if request.method != u'POST': # The user can save a draft even if he may not submit.
        if inforequest.has_undecided_emails:
            return HttpResponseNotFound()
        if not inforequest.can_add_action(form_class.action_type):
            return HttpResponseNotFound()

    draft = inforequest.actiondraft_set.filter(type=form_class.action_type).order_by_pk().first()
    session = Session.objects.get(session_key=request.session.session_key)
    attached_to = (session, draft) if draft else (session,)

    if request.method != u'POST':
        form = form_class(inforequest=inforequest, attached_to=attached_to)
        if draft:
            form.load_from_draft(draft)
        return render_form(request, form, inforequest=inforequest)

    button = clean_button(request.POST, [u'add', u'draft'])

    if button == u'draft':
        form = form_class(request.POST, inforequest=inforequest, attached_to=attached_to, draft=True)
        if not form.is_valid():
            return json_form(request, form, inforequest=inforequest)
        if not draft:
            draft = ActionDraft(inforequest=inforequest, type=form_class.action_type)
        form.save_to_draft(draft)
        draft.save()
        return json_draft()

    if button == u'add':
        form = form_class(request.POST, inforequest=inforequest, attached_to=attached_to)
        if not form.is_valid():
            return json_form(request, form, inforequest=inforequest)
        action = Action(type=form_class.action_type)
        form.save(action)
        action.save()
        if draft:
            draft.delete()
        # The inforequest was changed, we need to refetch it
        inforequest = Inforequest.objects.prefetch_detail().get(pk=inforequest.pk)
        return json_success(request, inforequest, action)

    return HttpResponseBadRequest()
コード例 #9
0
ファイル: views.py プロジェクト: gitter-badger/chcemvediet
def file_create_or_edit(request, lang, path, name, create):
    u"""
    If ``create`` is False, then ``name`` should point to the page file we want to edit. If
    ``create`` is True, then ``name`` is ignored.
    """
    try:
        page = Page(path, lang)
    except InvalidPageError:
        raise Http404()
    if page.lpath != path:
        raise Http404()

    try:
        file = File(page, name) if not create else None
    except InvalidFileError:
        raise Http404()

    if request.method == u'POST':
        button = clean_button(request.POST, [u'save', u'save-and-continue'])

        if button in [u'save', u'save-and-continue']:
            form = forms.FileEditForm(page, file, create, request.POST, request.FILES)
            if form.is_valid():
                try:
                    new_file = form.save()
                except forms.FormSaveError:
                    pass
                else:
                    if button == u'save':
                        return HttpResponseRedirect(reverse(u'admin:pages_edit',
                                args=[lang, page.lpath]))
                    else: # save-and-continue
                        return HttpResponseRedirect(reverse(u'admin:pages_file_edit',
                                args=[lang, page.lpath, new_file.name]))

        else: # Invalid button
            raise SuspiciousOperation()

    else: # GET
        form = forms.FileEditForm(page, file, create)

    return render(request, u'pages/admin/file_edit.html', {
            u'title': u'Add Page Attachment' if create else u'Edit Page Attachment',
            u'create': create,
            u'lang': lang,
            u'page': page,
            u'file': file,
            u'form': form,
            })
コード例 #10
0
ファイル: views.py プロジェクト: viliambalaz/chcemvediet
def create_or_edit(request, lang, path, create):
    u"""
    If ``create`` is False, then ``path`` should point to the page we want to edit. If ``create``
    is True, then ``path`` should point to the page that will be the parent of the new page.
    """
    try:
        page = Page(path, lang, keep_last=True)
    except InvalidPageError:
        raise Http404()
    if page.lpath != path:
        raise Http404()
    if create and page.is_redirect:
        raise Http404()

    if request.method == u'POST':
        button = clean_button(request.POST, [u'save', u'save-and-continue'])

        if button in [u'save', u'save-and-continue']:
            form = forms.PageEditForm(page, create, request.POST)
            if form.is_valid():
                try:
                    new_page = form.save()
                except forms.FormSaveError:
                    pass
                else:
                    if button == u'save':
                        return HttpResponseRedirect(
                            reverse(u'admin:pages_index', args=[lang]))
                    else:  # save-and-continue
                        return HttpResponseRedirect(
                            reverse(u'admin:pages_edit',
                                    args=[lang, new_page.lpath]))

        else:  # Invalid button
            raise SuspiciousOperation()

    else:  # GET
        form = forms.PageEditForm(page, create)

    return render(
        request, u'pages/admin/edit.html', {
            u'title': u'Add Page' if create else u'Edit Page',
            u'create': create,
            u'lang': lang,
            u'page': page,
            u'form': form,
        })
コード例 #11
0
ファイル: new_action.py プロジェクト: zuffova/chcemvediet
def new_action_appeal2(request, inforequest_pk, branch_pk):
    inforequest = Inforequest.objects.not_closed().owned_by(request.user).get_or_404(pk=inforequest_pk)
    branch = inforequest.branch_set.get_or_404(pk=branch_pk)

    if not branch.can_add_appeal:
        return HttpResponseNotFound()
    if inforequest.has_undecided_emails:
        return HttpResponseNotFound()

    wizard = AppealWizards.find_applicable(branch)

    if request.method != u"POST":
        wizard.start()
        return render_step(request, wizard.current_step)

    try:
        wizard.step(request.POST)
    except WizzardRollback as e:
        return json_step(request, e.step)

    button = clean_button(request.POST, [u"save", u"prev", u"next"])

    if button == u"save":
        wizard.commit()
        return json_step(request, wizard.current_step)

    if button == u"prev":
        return json_step(request, wizard.prev_step())

    if button == u"next":
        if not wizard.current_step.is_valid():
            return json_step(request, wizard.current_step)
        wizard.commit()
        if not wizard.current_step.is_last():
            return json_step(request, wizard.next_step())
        branch.add_expiration_if_expired()
        action = Action(type=Action.TYPES.APPEAL)
        wizard.save(action)
        action.save()
        # The inforequest was changed, we need to refetch it.
        inforequest = Inforequest.objects.prefetch_detail().get(pk=inforequest.pk)
        return json_success(request, inforequest, action)

    return HttpResponseBadRequest()
コード例 #12
0
ファイル: views.py プロジェクト: gitter-badger/chcemvediet
def create_or_edit(request, lang, path, create):
    u"""
    If ``create`` is False, then ``path`` should point to the page we want to edit. If ``create``
    is True, then ``path`` should point to the page that will be the parent of the new page.
    """
    try:
        page = Page(path, lang, keep_last=True)
    except InvalidPageError:
        raise Http404()
    if page.lpath != path:
        raise Http404()
    if create and page.is_redirect:
        raise Http404()

    if request.method == u'POST':
        button = clean_button(request.POST, [u'save', u'save-and-continue'])

        if button in [u'save', u'save-and-continue']:
            form = forms.PageEditForm(page, create, request.POST)
            if form.is_valid():
                try:
                    new_page = form.save()
                except forms.FormSaveError:
                    pass
                else:
                    if button == u'save':
                        return HttpResponseRedirect(reverse(u'admin:pages_index', args=[lang]))
                    else: # save-and-continue
                        return HttpResponseRedirect(
                                reverse(u'admin:pages_edit', args=[lang, new_page.lpath]))

        else: # Invalid button
            raise SuspiciousOperation()

    else: # GET
        form = forms.PageEditForm(page, create)

    return render(request, u'pages/admin/edit.html', {
            u'title': u'Add Page' if create else u'Edit Page',
            u'create': create,
            u'lang': lang,
            u'page': page,
            u'form': form,
            })
コード例 #13
0
def inforequest_create(request, draft_pk=None):
    template = u'inforequests/create/create.html'
    draft = InforequestDraft.objects.owned_by(request.user).get_or_404(
        pk=draft_pk) if draft_pk else None
    session = Session.objects.get(session_key=request.session.session_key)
    attached_to = (session, draft) if draft else (session, )

    if request.method != u'POST':
        form = InforequestForm(attached_to=attached_to, user=request.user)
        if draft:
            form.load_from_draft(draft)
        return render(request, template, dict(form=form))

    button = clean_button(request.POST, [u'submit', u'draft'])

    if button == u'draft':
        form = InforequestForm(request.POST,
                               draft=True,
                               attached_to=attached_to,
                               user=request.user)
        if not form.is_valid():
            return render(request, template, dict(form=form))
        if not draft:
            draft = InforequestDraft(applicant=request.user)
        form.save_to_draft(draft)
        draft.save()
        return HttpResponseRedirect(reverse(u'inforequests:index'))

    if button == u'submit':
        form = InforequestForm(request.POST,
                               attached_to=attached_to,
                               user=request.user)
        if not form.is_valid():
            return render(request, template, dict(form=form))
        inforequest = Inforequest(applicant=request.user)
        form.save(inforequest)
        inforequest.save()
        inforequest.main_branch.last_action.send_by_email()
        if draft:
            draft.delete()
        return HttpResponseRedirect(inforequest.get_absolute_url())

    return HttpResponseBadRequest()
コード例 #14
0
ファイル: inforequest.py プロジェクト: zuffova/chcemvediet
def inforequest_create(request, draft_pk=None):
    template = u'inforequests/create.html'
    draft = InforequestDraft.objects.owned_by(request.user).get_or_404(pk=draft_pk) if draft_pk else None
    session = Session.objects.get(session_key=request.session.session_key)
    attached_to = (session, draft) if draft else (session,)

    if request.method != u'POST':
        form = InforequestForm(attached_to=attached_to, user=request.user)
        if draft:
            form.load_from_draft(draft)
        return render(request, template, dict(form=form))

    button = clean_button(request.POST, [u'submit', u'draft'])

    if button == u'draft':
        form = InforequestForm(request.POST, draft=True, attached_to=attached_to, user=request.user)
        if not form.is_valid():
            return render(request, template, dict(form=form))
        if not draft:
            draft = InforequestDraft(applicant=request.user)
        form.save_to_draft(draft)
        draft.save()
        return HttpResponseRedirect(reverse(u'inforequests:index'))

    if button == u'submit':
        form = InforequestForm(request.POST, attached_to=attached_to, user=request.user)
        if not form.is_valid():
            return render(request, template, dict(form=form))
        inforequest = Inforequest(applicant=request.user)
        form.save(inforequest)
        inforequest.save()
        inforequest.main_branch.last_action.send_by_email()
        if draft:
            draft.delete()
        return HttpResponseRedirect(reverse(u'inforequests:detail', args=(inforequest.pk,)))

    return HttpResponseBadRequest()
コード例 #15
0
def inforequest_create(request, draft_pk=None):
    template = u"inforequests/create/create.html"
    draft = InforequestDraft.objects.owned_by(request.user).get_or_404(pk=draft_pk) if draft_pk else None
    session = Session.objects.get(session_key=request.session.session_key)
    attached_to = (session, draft) if draft else (session,)

    if request.method != u"POST":
        form = InforequestForm(attached_to=attached_to, user=request.user)
        if draft:
            form.load_from_draft(draft)
        return render(request, template, dict(form=form))

    button = clean_button(request.POST, [u"submit", u"draft"])

    if button == u"draft":
        form = InforequestForm(request.POST, draft=True, attached_to=attached_to, user=request.user)
        if not form.is_valid():
            return render(request, template, dict(form=form))
        if not draft:
            draft = InforequestDraft(applicant=request.user)
        form.save_to_draft(draft)
        draft.save()
        return HttpResponseRedirect(reverse(u"inforequests:index"))

    if button == u"submit":
        form = InforequestForm(request.POST, attached_to=attached_to, user=request.user)
        if not form.is_valid():
            return render(request, template, dict(form=form))
        inforequest = form.save()
        inforequest.save()
        inforequest.main_branch.last_action.send_by_email()
        if draft:
            draft.delete()
        return HttpResponseRedirect(inforequest.get_absolute_url())

    raise SuspiciousOperation()
コード例 #16
0
 def test_valid_button(self):
     post = {u'button': u'valid'}
     clean = clean_button(post, [u'valid', u'another'])
     self.assertEqual(clean, u'valid')
コード例 #17
0
 def test_missing_button(self):
     post = {u'other': u'valid'}
     clean = clean_button(post, [u'valid', u'another'])
     self.assertIsNone(clean)
コード例 #18
0
 def test_default_value(self):
     post = {u'button': u'invalid'}
     clean = clean_button(post, [u'valid', u'another'], u'default')
     self.assertEqual(clean, u'default')
コード例 #19
0
ファイル: new_action.py プロジェクト: zuffova/chcemvediet
def _new_action(request, inforequest_pk, form_class):
    assert form_class.action_type in Action.APPLICANT_ACTION_TYPES

    inforequest = (
        Inforequest.objects.not_closed()
        .owned_by(request.user)
        .prefetch_related(Inforequest.prefetch_branches(None, Branch.objects.select_related(u"historicalobligee")))
        .prefetch_related(Branch.prefetch_last_action(u"branches"))
        .get_or_404(pk=inforequest_pk)
    )

    if request.method != u"POST":  # The user can save a draft even if he may not submit.
        if inforequest.has_undecided_emails:
            return HttpResponseNotFound()
        if not inforequest.can_add_action(form_class.action_type):
            return HttpResponseNotFound()

    draft = inforequest.actiondraft_set.filter(type=form_class.action_type).order_by_pk().first()
    session = Session.objects.get(session_key=request.session.session_key)
    attached_to = (session, draft) if draft else (session,)

    if request.method != u"POST":
        form = form_class(inforequest=inforequest, attached_to=attached_to)
        if draft:
            form.load_from_draft(draft)
        return render_form(request, form, inforequest=inforequest)

    if form_class.action_type in Action.APPLICANT_EMAIL_ACTION_TYPES:
        button = clean_button(request.POST, [u"email", u"print", u"draft"])
    else:
        button = clean_button(request.POST, [u"print", u"draft"])

    if button == u"draft":
        form = form_class(request.POST, inforequest=inforequest, attached_to=attached_to, draft=True)
        if not form.is_valid():
            return json_form(request, form, inforequest=inforequest)
        if not draft:
            draft = ActionDraft(inforequest=inforequest, type=form_class.action_type)
        form.save_to_draft(draft)
        draft.save()
        return json_draft()

    if button in [u"email", u"print"]:
        form = form_class(request.POST, inforequest=inforequest, attached_to=attached_to)
        if not form.is_valid():
            return json_form(request, form, inforequest=inforequest)
        if form_class.action_type == Action.TYPES.APPEAL:
            form.cleaned_data[u"branch"].add_expiration_if_expired()
        action = Action(effective_date=local_today(), type=form_class.action_type)
        form.save(action)
        action.save()
        if draft:
            draft.delete()
        # The inforequest was changed, we need to refetch it.
        inforequest = Inforequest.objects.prefetch_detail().get(pk=inforequest.pk)
        action.branch = inforequest.branch_by_pk(action.branch_id)
        if button == u"email":
            action.send_by_email()
        return json_success(request, inforequest, action, button == u"print")

    return HttpResponseBadRequest()
コード例 #20
0
 def test_custom_button_name(self):
     post = {u'other': u'valid'}
     clean = clean_button(post, [u'valid', u'another'], key=u'other')
     self.assertEqual(clean, u'valid')
コード例 #21
0
 def test_invalid_button(self):
     post = {u'button': u'invalid'}
     clean = clean_button(post, [u'valid', u'another'])
     self.assertIsNone(clean)