Exemplo n.º 1
0
    def submissions(self):
        """
        List, add or edit a submission. This is different because it consists
        of composite foreign keys and thus needs separate though similar logic.
        But in the end it is basically the same functionality as with the other
        list views.
        """
        # Prepare parameters
        submissions = get_submissions()
        page = self.page(submissions)
        redirect = self.redirect("admin_submissions", page.page)
        challenge_id = None
        team_id = None
        if self.request.method == "POST":
            # Someone wants to edit so make sure to load and check the form
            # for CSRF and get the ID.
            edit_form = SubmissionButtonForm(self.request.POST, csrf_context=self.request)
            if not edit_form.validate():
                # Error, most likely CSRF
                return redirect
            challenge_id = edit_form.challenge_id.data
            team_id = edit_form.team_id.data

        # Either load a new form or load old data into it.
        if challenge_id is None or team_id is None:
            form = SubmissionForm(self.request.POST, csrf_context=self.request)
        else:
            submission = (
                DBSession.query(Submission)
                .filter(Submission.team_id == team_id)
                .filter(Submission.challenge_id == challenge_id)
                .one()
            )
            form = SubmissionForm(None, submission, csrf_context=self.request)

        # Display the page
        is_new = not bool(form.challenge.data and form.team.data)
        return self._list_retparams(page, form, is_new=is_new)
Exemplo n.º 2
0
    def submissions_delete(self):
        """Delete a submission."""
        # Prepare parameters
        delete_form = SubmissionButtonForm(self.request.POST, csrf_context=self.request)
        current_page = int(self.request.GET.get("page", 1))
        redirect = self.redirect("admin_submissions", current_page)

        # Check for errors
        if not delete_form.validate():
            self.request.session.flash("Delete failed.")
            return redirect

        # Load the IDs to delete and build query
        challenge_id = delete_form.challenge_id.data
        team_id = delete_form.team_id.data
        submission = (
            DBSession.query(Submission)
            .filter(Submission.challenge_id == challenge_id)
            .filter(Submission.team_id == team_id)
        )

        # Delete the item
        self._delete_item(DBSession, submission, "Submission")
        return redirect