Beispiel #1
0
def student_view(request, id=None):
    from glml.utils import get_school, get_working_year

    school = get_school(request)
    working_year = get_working_year(request)
    if not school:
        add_message(request, u"Please select a school first.")
        return HttpResponseRedirect(reverse(home))
    try:
        school_id = school.schoolid_set.get(district__year__id=working_year.id)
    except SchoolID.DoesNotExist:
        return HttpResponseRedirect(reverse(school_view))
    if id:
        student_id = get_object_or_404(StudentID, id=id)
        student = student_id.student
        if not student.coached_by(request.user):
            return HttpResponseRedirect(reverse(permission_denied))
        request.session["school"] = student_id.school_id.school
        request.session["working_year"] = student_id.school_id.district.year
        if student_id.school_id.district.year != Year.get_current_year():
            student_id = None
    else:
        if working_year != Year.get_current_year():
            add_message(request, u"You may not add a student to a past season.")
            return HttpResponseRedirect(reverse(school_view))
        student_id = True
        student = None
    from glml.web.forms import StudentForm

    if request.method == "POST":
        form = StudentForm(student_id, request.POST, instance=student)
        if form.is_valid():
            students = Student.objects.filter(
                first_name=form.cleaned_data["first_name"], last_name=form.cleaned_data["last_name"]
            )
            if not students:
                student = form.save()
            else:
                student = students[0]
            if student:
                if "grade" in form.cleaned_data:
                    grade = form.cleaned_data["grade"]
                    if not isinstance(student_id, StudentID):
                        student_id, created = StudentID.objects.get_or_create(
                            student=student, school_id=school_id, grade=grade
                        )
                    else:
                        student_id.grade = grade
                        student_id.save()
                return HttpResponseRedirect(reverse(school_view))
    else:
        form = StudentForm(student_id, instance=student)
    return render_to_response(
        "web/student.html", {"student_id": student_id, "student": student, "form": form}, RequestContext(request)
    )
Beispiel #2
0
def school_view(request):
    from glml.utils import get_school, get_working_year

    school = get_school(request)
    working_year = get_working_year(request)
    if not school:
        add_message(request, u"Please select a school first.")
        return HttpResponseRedirect(reverse(home))
    try:
        school_id = school.schoolid_set.get(district__year__id=working_year.id)
    except SchoolID.DoesNotExist:
        school_id = None
    if allow(request):
        if school_id:
            student_ids = school_id.studentid_set.all()
        else:
            student_ids = None
        try:
            import_year = Year.objects.get(start=working_year.start - 1)
            import_school_id = school.schoolid_set.get(district__year__id=import_year.id)
        except (Year.DoesNotExist, SchoolID.DoesNotExist):
            can_import = False
        else:
            can_import = True
        if student_ids:
            test_dates = TestDate.objects.filter(year=working_year)
            students = []
            for student_id in student_ids:
                tests = []
                for test_date in test_dates:
                    if test_date.test_set.filter(student_id=student_id):
                        tests.append(test_date.test_set.get(student_id=student_id))
                    else:
                        tests.append(None)
                students.append({"student_id": student_id, "tests": tests})
        else:
            test_dates = None
            students = None
        return render_to_response(
            "web/school.html",
            {"school_id": school_id, "test_dates": test_dates, "students": students, "can_import": can_import},
            RequestContext(request),
        )
    return HttpResponseRedirect(reverse(permission_denied))
Beispiel #3
0
def import_students(request):
    if not allow(request):
        return HttpResponseRedirect(reverse(permission_denied))
    from glml.utils import get_school, get_working_year

    school = get_school(request)
    working_year = get_working_year(request)
    if not school:
        add_message(request, u"Please select a school first.")
        return HttpResponseRedirect(reverse(home))
    if working_year != Year.get_current_year():
        add_message(request, u"You may not import students into a past season.")
        return HttpResponseRedirect(reverse(school_view))
    try:
        import_year = Year.objects.get(start=working_year.start - 1)
        import_school_id = school.schoolid_set.get(district__year__id=import_year.id)
    except (Year.DoesNotExist, SchoolID.DoesNotExist):
        add_message(request, u"There is no previous year to import students from.")
        return HttpResponseRedirect(reverse(school_view))
    try:
        school_id = school.schoolid_set.get(district__year__id=working_year.id)
    except SchoolID.DoesNotExist:
        return HttpResponseRedirect(reverse(school_view))
    students = [
        {"name": student_id.student.name(), "grade": student_id.grade + 1, "id": student_id.student.id}
        for student_id in import_school_id.studentid_set.exclude(grade=12)
    ]
    if not students:
        add_message(request, u"There are no students from the previous year to import.")
        return HttpResponseRedirect(reverse(school_view))
    if request.method == "POST":
        for student_id_number in request.POST:
            if request.POST[student_id_number] == "on":
                student = get_object_or_404(Student, id=student_id_number)
                grade = int(request.POST["%s_grade" % student_id_number])
                if not StudentID.objects.filter(student=student, school_id=school_id):
                    StudentID.objects.create(student=student, grade=grade, school_id=school_id)
                else:
                    student_id = StudentID.objects.get(student=student, school_id=school_id)
                    student_id.grade = grade
                    student_id.save()
        return HttpResponseRedirect(reverse(school_view))
    return render_to_response("web/import.html", {"students": students}, RequestContext(request))
Beispiel #4
0
def compare(request, id):
    test_date = get_object_or_404(TestDate, id=id)
    from glml.utils import get_school, get_working_year

    school = get_school(request)
    working_year = get_working_year(request)
    if working_year != test_date.year:
        return HttpResponseRedirect(reverse(school_view))
    try:
        school_id = school.schoolid_set.get(district__year__id=working_year.id)
    except SchoolID.DoesNotExist:
        return HttpResponseRedirect(reverse(school_view))
    tests = test_date.test_set.filter(student_id__school_id__id=school_id.id).order_by("student_id")
    tests = [test.compare_mapping() for test in tests]
    key = test_date.get_key().compare_mapping()
    numbers = key["questions"].keys()
    numbers.sort()
    return render_to_response(
        "web/compare.html",
        {"test_date": test_date, "numbers": numbers, "key": key, "tests": tests},
        RequestContext(request),
    )
Beispiel #5
0
def login(request):
    if request.user.is_authenticated():
        add_message(request, "You are already logged in.")
        return HttpResponseRedirect(reverse(home))
    from django.contrib.auth import REDIRECT_FIELD_NAME
    from glml.web.forms import LoginForm

    if request.method == "POST":
        form = LoginForm(request.POST)
        if request.session.test_cookie_worked():
            no_cookies = False
            if form.is_valid():
                if REDIRECT_FIELD_NAME in request.session:
                    redirect_to = request.session[REDIRECT_FIELD_NAME]
                    del request.session[REDIRECT_FIELD_NAME]
                else:
                    redirect_to = ""
                if not redirect_to or "://" in redirect_to or " " in redirect_to:
                    redirect_to = reverse(home)
                from django.contrib.auth import login

                login(request, form.cleaned_data["user"])
                request.session.delete_test_cookie()
                from glml.utils import get_school, get_working_year, set_up

                set_up()
                request.session["school"] = get_school(request)
                request.session["working_year"] = get_working_year(request)
                return HttpResponseRedirect(redirect_to)
        else:
            no_cookies = True
    else:
        request.session[REDIRECT_FIELD_NAME] = request.REQUEST.get(REDIRECT_FIELD_NAME, "")
        form = LoginForm()
        no_cookies = False
    request.session.set_test_cookie()
    return render_to_response("web/login.html", {"form": form, "no_cookies": no_cookies}, RequestContext(request))
Beispiel #6
0
def glml_context_processor(request):
    user = request.user
    context = {'STATIC_PATH': SETTINGS.MEDIA_URL,
               'url_path': request.path}
    school = get_school(request)
    context['school'] = school
    if school:
        context['school_selector_form'] = SchoolSelectorForm(initial={'selected_school':
                                                                      school.id})
    else:
        context['school_selector_form'] = None
    context['disable_school_selector_form'] = True
    context['links'] = [
                        Link(reverse(home), 'Home'),
                        Link(reverse(archive), 'Archive')
                       ]
    if user.is_anonymous():
        context['links'].append(Link(reverse(login), 'Log In'))
    else:
        if user.is_superuser:
            context['links'] += [
                                 Link(reverse(send_email), 'Email Coaches'),
                                 Link('/glml/admin/', 'Admin Panel'),
                                 Link(reverse(upload), 'Upload Spreadsheet'),
                                 Link(reverse(create_scantron), 'Create Scantron')
                                ]
            if not school:
                context['school_selector_form'] = SchoolSelectorForm()
            context['disable_school_selector_form'] = False
        else:
            context['links'].append(Link(reverse(send_email), 'Email Administrators'))
        if school:
            context['links'].append(Link(reverse(school_view), '%s' % school))
        context['links'] += [Link(reverse(settings), 'Settings'),
                             Link(reverse(logout), 'Log Out')]
    return context