def createAssignment(request, courseID): course = get_object_or_404(Course, pk=courseID) is_moderator = isCourseModerator(course, request.user) if not is_moderator: return HttpResponseForbidden("Forbidden 403") if request.method == 'POST': form = AssignmentForm(request.POST, request.FILES) form.this_course = course if form.is_valid(): newAssignment = Assignment(**form.cleaned_data) newAssignment.course = course newAssignment.creater = request.user newAssignment.serial_number = (Assignment.objects.filter(course=course).aggregate(Max('serial_number'))['serial_number__max'] or 0) + 1 newAssignment.save() link = reverse('assignments_createprogram', kwargs={'assignmentID': newAssignment.id}) messages.success(request, 'Assignment Created! Now <a href="{0}">ADD</a> programs to assignment.'.format(link), extra_tags='safe' ) #return HttpResponseRedirect(reverse('assignments_index', kwargs={'courseID':courseID})) return HttpResponseRedirect(reverse('assignments_details', kwargs={'assignmentID': newAssignment.id})) else: form = AssignmentForm() return render_to_response( 'assignments/createAssignment.html', {'form':form, 'course': course, 'is_moderator':is_moderator}, context_instance=RequestContext(request) )
def add_assignment(request, slug): sheet = Sheet.objects.get(slug=slug) form = AssignmentForm(request.POST or None, sheet=sheet) if form.is_valid(): assignment = form.save(sheet=sheet) return redirect('assignment_detail', sheet_slug=slug, assignment_slug=assignment.slug) return render(request, 'add_assignment.html', { 'form': form, 'slug': slug })
def assignment_detail(request, sheet_slug, assignment_slug): sheet = Sheet.objects.get(slug=sheet_slug) assignment = sheet.assignment_set.get(slug=assignment_slug) form = AssignmentForm(request.POST or None, sheet=sheet, instance=assignment) tasks = assignment.task_set.all() if form.is_valid(): form.save() return redirect('sheet_detail', slug=sheet_slug) return render(request, 'assignment_detail.html', { 'form': form, 'tasks': tasks, 'sheet_slug': sheet_slug, 'assignment_slug': assignment_slug })
def new(request, slug): employee = get_object_or_404(Employee, slug=slug) item = 'seats' if request.method == 'POST': form = AssignmentForm(request.POST) if form.is_valid(): assignment = form.save(commit=False) assignment.employee = employee assignment.save() messages.success(request, 'Assignment created') return HttpResponseRedirect(reverse('employees.views.history', kwargs={ 'slug': employee.slug, 'item': item })) else: form = AssignmentForm() d = { 'employee': employee, 'form' : form, 'item' : item, 'title' : 'New Assignment', } return render_to_response('shared/new.html', add_csrf(request, d), context_instance=RequestContext(request))
def createAssignment(request, courseID): course = get_object_or_404(Course, pk=courseID) is_moderator = isCourseModerator(course, request.user) if not is_moderator: return HttpResponseForbidden("Forbidden 403") if request.method == 'POST': form = AssignmentForm(request.POST, request.FILES) form.this_course = course if form.is_valid(): newAssignment = Assignment(**form.cleaned_data) newAssignment.course = course newAssignment.creater = request.user newAssignment.serial_number = ( Assignment.objects.filter(course=course).aggregate( Max('serial_number'))['serial_number__max'] or 0) + 1 newAssignment.save() link = reverse('assignments_createprogram', kwargs={'assignmentID': newAssignment.id}) messages.success( request, 'Assignment Created! Now <a href="{0}">ADD</a> programs to assignment.' .format(link), extra_tags='safe') #return HttpResponseRedirect(reverse('assignments_index', kwargs={'courseID':courseID})) return HttpResponseRedirect( reverse('assignments_details', kwargs={'assignmentID': newAssignment.id})) else: form = AssignmentForm() return render_to_response('assignments/createAssignment.html', { 'form': form, 'course': course, 'is_moderator': is_moderator }, context_instance=RequestContext(request))
def editAssignment(request, assignmentID): # Only creator of the course can edit this assignment. assignment = get_object_or_404(Assignment, pk=assignmentID) is_moderator = isCourseModerator(assignment.course, request.user) if not is_moderator: return HttpResponseForbidden("Forbidden 403") if request.method == 'POST': form = AssignmentForm(request.POST, request.FILES, initial=model_to_dict(assignment)) form.assignment_model = assignment if form.is_valid(): # check if new file is uploaded if 'document' in form.changed_data: if assignment.document: assignment.document.delete(save=False) if not form.cleaned_data['document']: form.cleaned_data.pop('document') if 'helper_code' in form.changed_data: if assignment.helper_code: assignment.helper_code.delete(save=False) if not form.cleaned_data['helper_code']: form.cleaned_data.pop('helper_code') if 'model_solution' in form.changed_data: if assignment.model_solution: assignment.model_solution.delete(save=False) if not form.cleaned_data['model_solution']: form.cleaned_data.pop('model_solution') for key in form.cleaned_data.keys(): setattr(assignment, key, form.cleaned_data[key]) for afield in ['model_solution', 'student_program_files', 'program_language']: if afield in form.changed_data: assignment.verify_programs = True assignment.program_model = Program assignment.changed_list = form.changed_data break assignment.save() if any(f in ['student_program_files', 'helper_code'] for f in form.changed_data): all_submissions = Upload.objects.select_related('owner').select_for_update().filter(assignment=assignment) all_submissions.update(is_stale=True) subject_line = "Evalpro: Please re-submit assignment '{0}' of the course '{1}'".format(assignment.name, assignment.course.name) message = "Course {0} assignment {1} specification has been changed since you submit your assignment last time. \ You are required to submit your assignment again. Your current submission will not be considered.".format(assignment.course.name, assignment.name) message_from = 'noreply@evalpro' message_to = [a.owner.email for a in all_submissions] send_mail(subject_line, message, message_from, message_to, fail_silently=False) return HttpResponseRedirect(reverse('assignments_details', kwargs={'assignmentID':assignmentID})) else: form = AssignmentForm(initial=model_to_dict(assignment)) course = assignment.course return render_to_response( 'assignments/edit.html', {'assignment': assignment, 'form': form, 'course': course, 'is_moderator':is_moderator}, context_instance=RequestContext(request), )
def editAssignment(request, assignmentID): # Only creator of the course can edit this assignment. assignment = get_object_or_404(Assignment, pk=assignmentID) is_moderator = isCourseModerator(assignment.course, request.user) if not is_moderator: return HttpResponseForbidden("Forbidden 403") if request.method == 'POST': form = AssignmentForm(request.POST, request.FILES, initial=model_to_dict(assignment)) form.assignment_model = assignment if form.is_valid(): # check if new file is uploaded if 'document' in form.changed_data: if assignment.document: assignment.document.delete(save=False) if not form.cleaned_data['document']: form.cleaned_data.pop('document') if 'helper_code' in form.changed_data: if assignment.helper_code: assignment.helper_code.delete(save=False) if not form.cleaned_data['helper_code']: form.cleaned_data.pop('helper_code') if 'model_solution' in form.changed_data: if assignment.model_solution: assignment.model_solution.delete(save=False) if not form.cleaned_data['model_solution']: form.cleaned_data.pop('model_solution') for key in form.cleaned_data.keys(): setattr(assignment, key, form.cleaned_data[key]) for afield in [ 'model_solution', 'student_program_files', 'program_language' ]: if afield in form.changed_data: assignment.verify_programs = True assignment.program_model = Program assignment.changed_list = form.changed_data break assignment.save() if any(f in ['student_program_files', 'helper_code'] for f in form.changed_data): all_submissions = Upload.objects.select_related( 'owner').select_for_update().filter(assignment=assignment) all_submissions.update(is_stale=True) subject_line = "Evalpro: Please re-submit assignment '{0}' of the course '{1}'".format( assignment.name, assignment.course.name) message = "Course {0} assignment {1} specification has been changed since you submit your assignment last time. \ You are required to submit your assignment again. Your current submission will not be considered.".format( assignment.course.name, assignment.name) message_from = 'noreply@evalpro' message_to = [a.owner.email for a in all_submissions] send_mail(subject_line, message, message_from, message_to, fail_silently=False) return HttpResponseRedirect( reverse('assignments_details', kwargs={'assignmentID': assignmentID})) else: form = AssignmentForm(initial=model_to_dict(assignment)) course = assignment.course return render_to_response( 'assignments/edit.html', { 'assignment': assignment, 'form': form, 'course': course, 'is_moderator': is_moderator }, context_instance=RequestContext(request), )