Ejemplo n.º 1
0
def problem(request):
    user = validate_user(request.user)
    can_add_problem = user.has_subjudge_auth()
    filter_type = request.GET.get('filter')
    tag_filter = TagFilter(request.GET)
    if tag_filter.is_valid():
        tag_name = tag_filter.cleaned_data['tag_name']
        if filter_type == 'mine':
            problem_list = get_owner_problem_list(user)
            mine = True
        else:
            problem_list = get_problem_list(user)
            mine = False
        if tag_name:
            problem_list = problem_list.filter(tags__tag_name=tag_name)
            for p in problem_list:
                p.in_contest = check_in_contest(p)
        problems = get_current_page(request, problem_list, 15)
        for p in problems:
            if p.total_submission != 0:
                p.pass_rate = float(p.ac_count) / float(p.total_submission) * 100.0
                p.not_pass_rate = 100.0 - p.pass_rate
                p.pass_rate = "%.2f" % (p.pass_rate)
                p.not_pass_rate = "%.2f" % (p.not_pass_rate)
            else:
                p.no_submission = True
    else:
        problems = []
        mine = False
    return render_index(request, 'problem/panel.html',
                  {'all_problem': problems, 'mine': mine,
                   'can_add_problem': can_add_problem, 'tag_filter': tag_filter})
Ejemplo n.º 2
0
def detail(request, group_id):

    group = get_group(group_id)
    show_number = 5; #number for brief list to show in group detail page.
    announce_list = group.announce.order_by('-id')[0:show_number]
    student_list = group.member.order_by('username')
    form = AnnounceForm()

    user = validate_user(request.user)
    user_is_owner = has_group_ownership(user, group)
    user_is_coowner = has_group_coownership(user, group)
    user_has_auth = user_is_owner or user_is_coowner

    running_contest_list = []
    ended_contest_list = []
    now = timezone.now()
    running_contest_list = group.trace_contest.filter(start_time__lte=now, end_time__gte=now)[0:show_number]
    ended_contest_list = group.trace_contest.filter(end_time__lte=now)[0:show_number]

    student_list = get_current_page(request, student_list)

    return render_index(
        request, 'group/groupDetail.html', {
            'running_contest_list': running_contest_list,
            'ended_contest_list': ended_contest_list,
            'announce_list': announce_list,
            'student_list': student_list,
            'group': group,
            'user_has_auth': user_has_auth,
            'form': form,
            'redirect_page' : 'detail',
        })
Ejemplo n.º 3
0
def problem(request):
    user = validate_user(request.user)
    can_add_problem = user.has_subjudge_auth()
    filter_type = request.GET.get('filter')
    tag_filter = TagFilter(request.GET)
    if tag_filter.is_valid():
        tag_name = tag_filter.cleaned_data['tag_name']
        if filter_type == 'mine':
            problem_list = get_owner_problem_list(user)
            mine = True
        else:
            problem_list = get_problem_list(user)
            mine = False
        if tag_name:
            problem_list = problem_list.filter(tags__tag_name=tag_name)
            for p in problem_list:
                p.in_contest = check_in_contest(p)
        problems = get_current_page(request, problem_list, slice=15)
        for p in problems:
            if p.total_submission != 0:
                p.pass_rate = float(p.ac_count) / float(p.total_submission) * 100.0
                p.not_pass_rate = 100.0 - p.pass_rate
                p.pass_rate = "%.2f" % (p.pass_rate)
                p.not_pass_rate = "%.2f" % (p.not_pass_rate)
            else:
                p.no_submission = True
    else:
        problems = []
        mine = False
    return render_index(request, 'problem/panel.html',
                        {'all_problem': problems, 'mine': mine,
                         'can_add_problem': can_add_problem, 'tag_filter': tag_filter})
Ejemplo n.º 4
0
def detail(request, group_id):

    group = get_group(group_id)
    show_number = 5  # number for brief list to show in group detail page.
    announce_list = group.announce.order_by('-id')[0:show_number]
    student_list = group.member.order_by('username')
    form = AnnounceForm()

    user = validate_user(request.user)
    user_is_owner = has_group_ownership(user, group)
    user_is_coowner = has_group_coownership(user, group)
    user_has_auth = user_is_owner or user_is_coowner

    running_contest_list = []
    ended_contest_list = []
    now = timezone.now()
    running_contest_list = group.trace_contest.filter(
        start_time__lte=now, end_time__gte=now)[0:show_number]
    ended_contest_list = group.trace_contest.filter(
        end_time__lte=now)[0:show_number]

    student_list = get_current_page(request, student_list)

    return render_index(
        request, 'group/groupDetail.html', {
            'running_contest_list': running_contest_list,
            'ended_contest_list': ended_contest_list,
            'announce_list': announce_list,
            'student_list': student_list,
            'group': group,
            'user_has_auth': user_has_auth,
            'form': form,
            'redirect_page': 'detail',
        })
Ejemplo n.º 5
0
def list(request):
    all_group = Group.objects.order_by('id')
    all_group = get_current_page(request, all_group)

    return render_index(
        request,'group/groupList.html', {
            'all_group_list': all_group,
            'include_flag': 'all_group',
        })
Ejemplo n.º 6
0
def list(request):
    all_group = Group.objects.order_by('id')
    all_group = get_current_page(request, all_group)

    return render_index(
        request, 'group/groupList.html', {
            'all_group_list': all_group,
            'include_flag': 'all_group',
        })
Ejemplo n.º 7
0
def my_list(request):
    my_group = Group.objects.filter(Q(member__username__contains=request.user.username) \
                                    |Q(owner__username=request.user.username) \
                                    |Q(coowner__username=request.user.username) \
                                    ).distinct().order_by('id')
    my_group = get_current_page(request, my_group)

    return render_index(
        request,'group/groupList.html', {
            'my_group_list': my_group,
            'include_flag': 'my_group',
        })
Ejemplo n.º 8
0
def my_list(request):
    my_group = Group.objects.filter(Q(member__username__contains=request.user.username)
                                    | Q(owner__username=request.user.username)
                                    | Q(coowner__username=request.user.username)
                                    ).distinct().order_by('id')
    my_group = get_current_page(request, my_group)

    return render_index(
        request, 'group/groupList.html', {
            'my_group_list': my_group,
            'include_flag': 'my_group',
        })
Ejemplo n.º 9
0
def status(request):
    status_filter = StatusFilter(request.GET)
    submissions = get_visible_submission(request.user).order_by('-id')
    render_data = {}
    render_data['status_filter'] = status_filter
    render_data['running_contests'] = get_running_contests().order_by('id')

    if status_filter.is_valid():
        username = status_filter.cleaned_data['username']
        cid = status_filter.cleaned_data['cid']
        pid = status_filter.cleaned_data['pid']
        status = status_filter.cleaned_data['status']

        if username:
            user = User.objects.get(username=username)
            submissions = submissions.filter(user=user)

        if pid:
            problem = Problem.objects.get(id=pid)
            submissions = submissions.filter(problem=problem)

        if cid:
            contest = Contest.objects.get(id=cid)
            submissions = get_contest_submissions(contest, submissions)

        if status:
            submissions = submissions.filter(status=status)

        submissions = get_current_page(request, submissions)

        # Regroup submission details
        submissions.object_list = regroup_submission(submissions.object_list)

        # Serialize to json
        if 'type' in request.GET and request.GET['type'] == 'json':
            submissions = [submission['grouper']
                           for submission in submissions.object_list]
            # Remove unnecessary fields
            submissions = serialize("python", submissions)
            submissions = [s['fields'] for s in submissions]

            return HttpResponse(json.dumps(submissions, default=lambda obj: obj.isoformat() if hasattr(obj, 'isoformat') else obj))
    else:
        messages.warning(request, 'Please check filter constraints again!')
        return render_index(request, 'status/status.html', render_data)

    if not submissions:
        messages.warning(request, 'No submissions found for the given query!')

    render_data['submissions'] = submissions

    return render_index(request, 'status/status.html', render_data)
Ejemplo n.º 10
0
def archive(request):
    user = validate_user(request.user)
    # filter for contest.
    # show owned and attended contests when filter==mine
    # else show all
    filter_type = request.GET.get("filter")
    if filter_type == "mine":
        contests = get_owned_or_attended_contests(user)
    else:
        contests = get_contests(user)

    contests = get_current_page(request, contests)
    return render_index(request, "contest/contestArchive.html", {"contests": contests})
Ejemplo n.º 11
0
def archive(request):
    user = validate_user(request.user)
    # filter for contest.
    # show owned and attended contests when filter==mine
    # else show all
    filter_type = request.GET.get('filter')
    if filter_type == 'mine':
        contests = get_owned_or_attended_contests(user)
    else:
        contests = get_contests(user)

    contests = get_current_page(request, contests)
    return render_index(request, 'contest/contestArchive.html',
                        {'contests': contests})
Ejemplo n.º 12
0
def get_ended_contest(request, group_id):

    group = get_group(group_id)
    now = timezone.now()

    all_ended_contest_list_unpaged = group.trace_contest.filter(
        end_time__lte=now)
    all_ended_contest_list = get_current_page(
        request, all_ended_contest_list_unpaged)

    return render_index(
        request, 'group/viewall.html', {
            'data_list': all_ended_contest_list,
            'title': 'ended contest',
            'list_type': 'endContest',
        })
Ejemplo n.º 13
0
def get_all_announce(request, group_id):

    group = get_group(group_id)

    user = validate_user(request.user)
    user_is_owner = has_group_ownership(user, group)
    user_is_coowner = has_group_coownership(user, group)
    user_has_auth = user_is_owner or user_is_coowner

    all_announce_list_unpaged = group.announce.order_by('-id')
    all_announce_list = get_current_page(request, all_announce_list_unpaged)
    return render_index(
        request, 'group/viewall.html', {
            'data_list': all_announce_list,
            'title': 'announce',
            'list_type': 'announce',
            'user_has_auth': user_has_auth,
            'redirect_page': 'viewall',
            'group': group,
        })
Ejemplo n.º 14
0
def archive(request):
    all_contests = get_contests(request.user)
    contests = get_current_page(request, all_contests)
    return render_index(request,
        'contest/contestArchive.html',
        {'contests':contests})
Ejemplo n.º 15
0
def status(request):
    start_time = time.time()
    status_filter = StatusFilter(request.GET)
    submissions = get_visible_submission(request.user).order_by('-id')
    render_data = {}
    render_data['status_filter'] = status_filter
    render_data['running_contests'] = get_running_contests().order_by('id')

    if status_filter.is_valid():
        username = status_filter.cleaned_data['username']
        cid = status_filter.cleaned_data['cid']
        pid = status_filter.cleaned_data['pid']
        status = status_filter.cleaned_data['status']

        if username:
            user = User.objects.get(username=username)
            submissions = submissions.filter(user=user)

        if pid:
            problem = Problem.objects.get(id=pid)
            submissions = submissions.filter(problem=problem)

        if cid:
            contest = Contest.objects.get(id=cid)
            submissions = get_contest_submissions(contest, submissions)

        if status:
            submissions = submissions.filter(status=status)

        huge_table_count = None
        # No constriant provided, the search result would be huge
        # Cache the count for faster paging
        if not (username or pid or cid or status):
            if cache.get('huge_table_count'):
                huge_table_count = cache.get('huge_table_count')
            else:
                huge_table_count = submissions.count()
                cache.set('huge_table_count', huge_table_count, 60)

        submissions = get_current_page(request,
                                       submissions,
                                       count=huge_table_count)

        # Regroup submission details
        submissions.object_list = regroup_submission(submissions.object_list)

        # Serialize to json
        if 'type' in request.GET and request.GET['type'] == 'json':
            submissions = [
                submission['grouper'] for submission in submissions.object_list
            ]
            # Remove unnecessary fields
            submissions = serialize("python", submissions)
            submissions = [s['fields'] for s in submissions]

            return HttpResponse(
                json.dumps(submissions,
                           default=lambda obj: obj.isoformat()
                           if hasattr(obj, 'isoformat') else obj))
    else:
        messages.warning(request, 'Please check filter constraints again!')
        return render_index(request, 'status/status.html', render_data)

    if not submissions:
        messages.warning(request, 'No submissions found for the given query!')

    render_data['submissions'] = submissions
    render_data['searching_time'] = time.time() - start_time
    return render_index(request, 'status/status.html', render_data)