Beispiel #1
0
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)
            )
Beispiel #2
0
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
    })
Beispiel #3
0
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
    })
Beispiel #4
0
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))
Beispiel #5
0
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))
Beispiel #6
0
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),
            )
Beispiel #7
0
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),
    )