def new(request, ass_id): ass = get_object_or_404(Assignment, pk=ass_id) if not ass.is_visible(user=request.user): raise Http404() # Check whether submissions are allowed. if not ass.can_create_submission(user=request.user): raise PermissionDenied( "You are not allowed to create a submission for this assignment") # get submission form according to the assignment type SubmissionForm = getSubmissionForm(ass) # Analyze submission data if request.POST: if 'authors' in request.POST: authors = map(lambda s: User.objects.get(pk=int(s)), request.POST['authors'].split(',')) if not ass.authors_valid(authors): raise PermissionDenied( "The given list of co-authors is invalid!") # we need to fill all forms here, so that they can be rendered on validation errors submissionForm = SubmissionForm(request.user, ass, request.POST, request.FILES) if submissionForm.is_valid(): submission = submissionForm.save( commit=False) # commit=False to set submitter in the instance submission.submitter = request.user submission.assignment = ass submission.state = submission.get_initial_state() # take uploaded file from extra field if ass.has_attachment: submissionFile = SubmissionFile( attachment=submissionForm.cleaned_data['attachment']) submissionFile.save() submission.file_upload = submissionFile submission.save() submissionForm.save_m2m( ) # because of commit=False, we first need to add the form-given authors submission.save() messages.info(request, "New submission saved.") if submission.state == Submission.SUBMITTED: inform_course_owner(request, submission) return redirect('dashboard') else: messages.error(request, "Please correct your submission information.") else: submissionForm = SubmissionForm(request.user, ass) return render(request, 'new.html', { 'submissionForm': submissionForm, 'assignment': ass })
def withdraw(request, subm_id): # submission should only be deletable by their creators submission = get_object_or_404(Submission, pk=subm_id) if not submission.can_withdraw(user=request.user): raise PermissionDenied("Withdrawal for this assignment is no longer possible, or you are unauthorized to access that submission.") if "confirm" in request.POST: submission.state = Submission.WITHDRAWN submission.save() messages.info(request, 'Submission successfully withdrawn.') inform_course_owner(request, submission) return redirect('dashboard') else: return render(request, 'withdraw.html', {'submission': submission})
def withdraw(request, subm_id): # submission should only be deletable by their creators submission = get_object_or_404(Submission, pk=subm_id) if not submission.can_withdraw(user=request.user): raise PermissionDenied( "Withdrawal for this assignment is no longer possible, or you are unauthorized to access that submission." ) if "confirm" in request.POST: submission.state = Submission.WITHDRAWN submission.save() messages.info(request, 'Submission successfully withdrawn.') inform_course_owner(request, submission) return redirect('dashboard') else: return render(request, 'withdraw.html', {'submission': submission})
def new(request, ass_id): ass = get_object_or_404(Assignment, pk=ass_id) if not ass.is_visible(user=request.user): raise Http404() # Check whether submissions are allowed. if not ass.can_create_submission(user=request.user): raise PermissionDenied("You are not allowed to create a submission for this assignment") # get submission form according to the assignment type SubmissionForm = getSubmissionForm(ass) # Analyze submission data if request.POST: if 'authors' in request.POST: authors = map(lambda s: User.objects.get(pk=int(s)), request.POST['authors'].split(',')) if not ass.authors_valid(authors): raise PermissionDenied("The given list of co-authors is invalid!") # we need to fill all forms here, so that they can be rendered on validation errors submissionForm = SubmissionForm(request.user, ass, request.POST, request.FILES) if submissionForm.is_valid(): submission = submissionForm.save(commit=False) # commit=False to set submitter in the instance submission.submitter = request.user submission.assignment = ass submission.state = submission.get_initial_state() # take uploaded file from extra field if ass.has_attachment: submissionFile = SubmissionFile(attachment=submissionForm.cleaned_data['attachment']) submissionFile.save() submission.file_upload = submissionFile submission.save() submissionForm.save_m2m() # because of commit=False, we first need to add the form-given authors submission.save() messages.info(request, "New submission saved.") if submission.state == Submission.SUBMITTED: inform_course_owner(request, submission) return redirect('dashboard') else: messages.error(request, "Please correct your submission information.") else: submissionForm = SubmissionForm(request.user, ass) return render(request, 'new.html', {'submissionForm': submissionForm, 'assignment': ass})