Example #1
0
 def test_changelog(self):
     term = Term.objects.get(value=42)
     course = Course.objects.get(term=term, crn=1234)
     course.status = 0
     course.save()
     instructor = Instructor.objects.create(first_name="Bill", last_name="Gates", rmp_score=1.0, rmp_link="http://microsoft.com")
     course.instructor = instructor
     course.save()
     versions = CourseVersion.objects.find(course)
     changes = create_changelog(versions[0], versions[len(versions) - 1], True)
     self.assertEqual(3, len(changes))
     expected = [
         'Status changed from Open to Closed',
         'Instructor changed from Instructor, Joe to Gates, Bill',
         'Meeting Time changed from none to MW, 10:00 AM - 11:15 AM, F, 10:00 AM - 10:50 AM'
     ]
     self.assertEqual(expected, changes)
Example #2
0
def course(request, term, crn):
    try:
        term = Term.objects.get(value=term)
        course = Course.objects.get(term=term, crn=crn)
    except Course.DoesNotExist:
        raise Http404("Course does not exist")

    materials = Material.objects.filter(term=term, course_crn=course.crn)

    user = request.user
    authenticated = user.is_authenticated()

    context = {
        'course': course,
        'term': term,
        'authenticated': authenticated,
        'user': user,
        'materials': materials,
        'suggestion_form': InstructorSuggestionForm(),
    }

    version_list = CourseVersion.objects.find(course)
    if len(version_list) > 1:
        versions = OrderedDict()
        for i in range(0, len(version_list)-1):
            new_version = version_list[i]
            old_version = version_list[i+1]
            changelog = create_changelog(old_version, new_version)
            if changelog:
                versions[new_version] = changelog
        context['changes'] = versions

    if request.method == 'POST':
        if authenticated:
            form = InstructorSuggestionForm(request.POST)
            if form.is_valid():
                email_address = form.cleaned_data['email_address']
                rmp_link = form.cleaned_data['rmp_link']
                if email_address or rmp_link:
                    suggestion = InstructorSuggestion(instructor=course.instructor, user=user, email_address=email_address, rmp_link=rmp_link)
                    suggestion.save()
                    # Send mail
                    subject = "Instructor suggestion created"
                    message = "{} created a new suggestion for {}: {}, {}".format(request.user.username, course.instructor, email_address, rmp_link)
                    mail_admins(subject, message)
                    context['suggestion_message'] = "Thanks! Your suggestion has been submitted and is awaiting approval."
        else:
            return HttpResponse('Unauthorized', 401)

    primary = course.primary_meeting_time
    secondary = course.secondary_meeting_times
    if primary:
        context['primary_meeting_time'] = primary
    if secondary:
        context['secondary_meeting_times'] = secondary

    exam = exam_for_course(course)
    exam_sources = ExamSource.objects.filter(term=term)
    if exam:
        context['exam'] = exam
    if len(exam_sources) == 1:
        context['exam_source'] = exam_sources[0]

    return render(request, 'course/course.html', context)