Beispiel #1
0
def schedule_view(request, identifier):
    query = ScheduleEntry.objects.filter(identifier=identifier)
    courses = schedule_get_courses(query)
    credits_min = 0
    credits_max = 0
    desc = None
    if len(query) > 0:
        desc = str(len(query)) + (" courses: " if len(query) > 1 else " course: ")
        term = query[0].term
        user = query[0].user
        profile = Profile.objects.get(user=user)
        name = (profile.preferred_name if profile.preferred_name else user.first_name) + " " + user.last_name
        for course in courses:
            if course is None:
                courses.remove(course)
            else:
                value = course.hours
                desc += course.title + ", "
                credits_min += int(value[:1])
                if len(value) > 1:
                    credits_max += int(value[4:])
        desc = desc[:-2]
    else:
        raise Http404("Schedule does not exist")

    if credits_max > 0:
        credits_max = credits_min + credits_max
    table = ScheduleTable(courses)

    RequestConfig(request).configure(table)

    context = {
        'table': table,
        'social_desc': desc,
        'term': term,
        'schedule_user': user,
        'schedule_profile': profile,
        'schedule_name': name,
        'by_id': True,
        'identifier': identifier,
        'credits_min': credits_min,
        'credits_max': credits_max,
    }

    if user != request.user and request.user.is_authenticated():
        context['user_courses'] = schedule_get_courses(ScheduleEntry.objects.filter(user=request.user))
        context['profile'] = Profile.objects.get(user=request.user)

    return render(request, 'schedule/course_schedule.html', context)
Beispiel #2
0
def start_setup(request):
    current_term = Term.objects.get(value=settings.SYNC_TERM)
    query = ScheduleEntry.objects.filter(term=current_term, user=request.user)
    courses = schedule_get_courses(query)
    context = {
        'current_term': current_term,
        'courses': courses,
    }
    return render(request, 'start_setup.html', context)
Beispiel #3
0
def search(request):
    profile = Profile.objects.get(user=request.user)
    if not profile.orientation:
        return HttpResponseForbidden()
    results = []
    if request.method == 'POST':
        form = SearchForm(request.POST)
        if form.is_valid():
            search_course = form.cleaned_data['course']
            search_instructor = form.cleaned_data['instructor']
            profiles = Profile.objects.filter(orientation=True)
            for profile in profiles:
                courses = schedule_get_courses(ScheduleEntry.objects.filter(user=profile.user))
                for course in courses:
                    add = False
                    if search_course:
                        match = re.search(r'([A-z]+?)([0-9]+)', search_course)
                        if match:
                            search_course = match.group(1) + ' ' + match.group(2)
                        if search_course in course.course:
                            add = True
                        else:
                            add = False
                    if search_instructor:
                        if search_instructor in course.instructor.last_name:
                            add = True
                        else:
                            add = False
                    if add:
                        results.append({
                            'user': profile.user,
                            'profile': profile,
                            'course': course
                        })
    else:
        form = SearchForm()
    context = {
        'results': results,
        'form' : form
    }
    return render(request, 'orientation/search.html', context)
Beispiel #4
0
def exam_schedule(request, termid):
    term = Term.objects.get(value=termid)
    query = ScheduleEntry.objects.filter(user=request.user, term=term)
    courses = schedule_get_courses(query)
    exams = []
    first_exam = None
    for course in courses:
        if course is None:
            courses.remove(course)
        else:
            exam = exam_for_course(course)
            if exam:
                start = exam.exam_start_time
                end = exam.exam_end_time
                exams.append({
                    'course': course.course,
                    'crn': course.crn,
                    'title': course.title,
                    'date': exam.exam_date,
                    'start_time': start,
                    'end_time': end
                })
                if not first_exam or exam.exam_date < first_exam:
                    first_exam = exam.exam_date

    hash = hashlib.md5(b'%s:%s' % (str(request.user.username), str(term.name))).hexdigest()[:15]

    table = ExamTable(exams)

    RequestConfig(request).configure(table)
    context = {
        'source': ExamSource.objects.get(term=term),
        'term': term,
        'table': table,
        'first_exam': first_exam.strftime('%Y-%m-%d'),
        'identifier': hash,
        'authenticated': True,
    }
    return render(request, 'schedule/exam_schedule.html', context)
Beispiel #5
0
def schedule_calendar(request):
    if request.method == 'GET':
        # Requests will include a 'start' value which is a Monday
        delta = datetime.timedelta(days=1)
        MON = datetime.datetime.strptime(request.GET['start'], "%Y-%m-%d")
        TUE = MON + delta
        WED = TUE + delta
        THU = WED + delta
        FRI = THU + delta
        SAT = FRI + delta
        use_color = True
        if 'color' in request.GET:
            use_color = request.GET['color'] == 'true'
        query = ScheduleEntry.objects.filter(identifier=request.GET['identifier']).order_by('course_crn')
        courses = schedule_get_courses(query)
        colors = get_colors_for_courses(courses)
        events = []
        for course in courses:
            for meeting_time in course.meeting_times.all():
                for day in list(meeting_time.days):
                    day = MON if day == 'M' else TUE if day == 'T' else WED if day == 'W' else THU if day == 'R' else FRI if day == 'F' else SAT
                    start = datetime.datetime.combine(day, meeting_time.start_time).isoformat()
                    end = datetime.datetime.combine(day, meeting_time.end_time).isoformat()
                    event = {
                        'id': str(course.crn),
                        'title': course.course,
                        'start': start,
                        'end': end,
                        'url': '/course/' + str(course.term.value) + '/' + str(course.crn) + '/',
                    }
                    if use_color:
                        event['color'] = colors[course]
                    events.append(event)

        days = SafeString(json.dumps(events))
        return HttpResponse(days, 201)
    else:
        return HttpResponse('Method not allowed', 405)
Beispiel #6
0
def schedule(request):
    if request.method == 'POST':
        form = ScheduleForm(request.POST)
        if form.is_valid():
            term = form.cleaned_data['term']
    else:
        if 'term' in request.GET:
            term = Term.objects.get(value=request.GET['term'])
        else:
            profile = Profile.objects.get(user=request.user)
            if profile.default_term:
                term = profile.default_term
            else:
                term = Term.objects.all()[0]
        form = ScheduleForm()
        form.fields['term'].initial = term
    query = ScheduleEntry.objects.filter(user=request.user, term=term)
    courses = schedule_get_courses(query)
    hash = hashlib.md5(b'%s:%s' % (str(request.user.username), str(term.name))).hexdigest()[:15]
    share_url = request.build_absolute_uri('/schedule/' + hash + '/')

    credits_min = 0
    credits_max = 0
    invalid_courses = []
    if len(query) > 0:
        term = query[0].term
        user = query[0].user
        for entry in query:
            course = schedule_get_course(entry)
            if course is None:
                invalid_courses.append(entry)
                courses.remove(course)
            else:
                value = course.hours
                credits_min += int(value[:1])
                if len(value) > 1:
                    credits_max += int(value[4:])
    if credits_max > 0:
        credits_max = credits_min + credits_max

    has_exams = False
    try:
        ExamSource.objects.get(term=term)
        has_exams = True
    except ExamSource.DoesNotExist:
        has_exams = False

    table = ScheduleTable(courses)
    print_table = SchedulePrintTable(courses)
    RequestConfig(request).configure(table)
    RequestConfig(request).configure(print_table)
    context = {
        'table': table,
        'print_table': print_table,
        'form': form,
        'term': term,
        'authenticated': True,
        'by_id': False,
        'identifier': hash,
        'share': len(query) > 0,
        'share_url': share_url,
        'credits_min': credits_min,
        'credits_max': credits_max,
        'invalid_courses': invalid_courses,
        'has_exams': has_exams,
    }
    return render(request, 'schedule/course_schedule.html', context)
Beispiel #7
0
def schedule(request):
    term = Term.objects.all()[0]
    profile = Profile.objects.get(user=request.user)
    if request.method == 'POST':
        form = ScheduleForm(request.user, request.POST)
        if form.is_valid():
            term = form.cleaned_data['term']
    else:
        if 'term' in request.GET:
            term = Term.objects.get(value=request.GET['term'])
        else:
            term = Term.objects.all()[0]
            if profile.default_term:
                term = profile.default_term
        form = ScheduleForm(request.user)
        form.fields['term'].initial = term

    options_form = ScheduleOptionsForm()
    options_form.fields['show_colors'].initial = profile.show_colors_schedule
    options_form.fields['show_details'].initial = profile.show_details_schedule

    query = ScheduleEntry.objects.filter(user=request.user, term=term).order_by('course_crn')
    if len(query) is 0:
        temp = ScheduleEntry.objects.filter(user=request.user)
        if len(temp) > 0:
            term = schedule_get_course(temp[0]).term
            query = ScheduleEntry.objects.filter(user=request.user, term=term).order_by('course_crn')
    courses = schedule_get_courses(query)
    hash = get_identifier(request.user, term)
    share_url = request.build_absolute_uri('/schedule/' + hash + '/')

    credits_min = 0
    credits_max = 0
    time_min = datetime.time(8, 0, 0)
    time_max = datetime.time(18, 0, 0)
    show_sat = False
    invalid_courses = []
    deleted_courses = []
    if len(query) > 0:
        term = query[0].term
        user = query[0].user
        for entry in query:
            course = schedule_get_course(entry)
            if course is None:
                invalid_courses.append(entry)
                courses.remove(course)
            else:
                if course.deleted:
                    deleted_courses.append(course)
                value = course.hours
                credits_min += int(value[:1])
                meeting_time = course.primary_meeting_time
                if meeting_time is not None:
                    if meeting_time.start_time < time_min:
                        time_min = meeting_time.start_time
                    if meeting_time.end_time > time_max:
                        time_max = meeting_time.end_time
                    if 'S' in meeting_time.days:
                        show_sat = True
                if len(value) > 1:
                    credits_max += int(value[4:])
    if credits_max > 0:
        credits_max = credits_min + credits_max
    time_min = time_min.strftime('%H:%M:%S')
    time_max = time_max.strftime('%H:%M:%S')
    has_exams = False
    try:
        source = ExamSource.objects.get(term=term)
        has_exams = source.active
    except ExamSource.DoesNotExist:
        has_exams = False

    colors = get_colors_for_courses(courses)
    print_table = SchedulePrintTable(courses)
    RequestConfig(request).configure(print_table)
    context = {
        'courses': courses,
        'course_colors': colors,
        'print_table': print_table,
        'form': form,
        'options_form': options_form,
        'term': term,
        'authenticated': True,
        'identifier': hash,
        'has_courses': len(query) > 0,
        'share_url': share_url,
        'credits_min': credits_min,
        'credits_max': credits_max,
        'time_min': time_min,
        'time_max': time_max,
        'show_sat': show_sat,
        'invalid_courses': invalid_courses,
        'deleted_courses': deleted_courses,
        'has_exams': has_exams,
    }
    return render(request, 'schedule/schedule.html', context)
Beispiel #8
0
def schedule_view(request, identifier):
    query = ScheduleEntry.objects.filter(identifier=identifier)
    courses = schedule_get_courses(query)
    time_min = datetime.time(8, 0, 0)
    time_max = datetime.time(0, 0, 0)
    credits_min = 0
    credits_max = 0
    show_sat = False
    desc = None
    if len(query) > 0:
        desc = str(len(query)) + (" courses: " if len(query) > 1 else " course: ")
        term = query[0].term
        user = query[0].user
        profile = Profile.objects.get(user=user)
        name = (profile.preferred_name if profile.preferred_name else user.first_name) + " " + user.last_name
        for course in courses:
            if course is None:
                courses.remove(course)
            else:
                value = course.hours
                desc += course.title + ", "
                credits_min += int(value[:1])
                meeting_time = course.primary_meeting_time
                if meeting_time is not None:
                    if meeting_time.start_time < time_min:
                        time_min = meeting_time.start_time
                    if meeting_time.end_time > time_max:
                        time_max = meeting_time.end_time
                    if 'S' in meeting_time.days:
                        show_sat = True
                if len(value) > 1:
                    credits_max += int(value[4:])
        desc = desc[:-2]
    else:
        raise Http404("Schedule does not exist")

    if credits_max > 0:
        credits_max = credits_min + credits_max
    time_min = time_min.strftime('%H:%M:%S')
    time_max = time_max.strftime('%H:%M:%S')
    table = ScheduleTable(courses)

    RequestConfig(request).configure(table)

    context = {
        'courses': courses,
        'table': table,
        'social_desc': desc,
        'term': term,
        'schedule_user': user,
        'schedule_profile': profile,
        'schedule_name': name,
        'identifier': identifier,
        'credits_min': credits_min,
        'credits_max': credits_max,
        'show_sat': show_sat,
        'time_min': time_min,
        'time_max': time_max,
    }

    if user != request.user and request.user.is_authenticated():
        context['user_courses'] = schedule_get_courses(ScheduleEntry.objects.filter(user=request.user, term=term))
        context['profile'] = Profile.objects.get(user=request.user)

    return render(request, 'schedule/schedule_share.html', context)