Ejemplo n.º 1
0
def site_delete_contest_done(request, contest_id):
    refresh_contest_session_admin(request)  # refersh the contest session
    contest = Contest.objects.get(pk=contest_id)
    contest.delete()
    messages.success(
        request, "The contest " + contest.title + " was deleted successfully.")
    return redirect('site_contest_list')
Ejemplo n.º 2
0
def site_rejudge_contest_select(request):
    now = timezone.now()
    refresh_contest_session_admin(request)  # refersh the contest session
    all_contest = Contest.objects.filter(
        start_time__lte=now,
        created_by=request.user.campus).order_by("start_time").reverse()

    for contest in all_contest:
        if contest.enable == False:
            contest.status = "disable"
        elif now < contest.active_time:
            contest.status = "not active"
        elif now < contest.start_time:
            contest.status = "active"
        elif contest.start_time <= now and now < contest.end_time:
            contest.status = "on going"
        elif contest.end_time <= now and now < contest.deactivate_time:
            contest.status = "end"
        else:
            contest.status = "deactivate"

    all_contest, paginator = pagination(request, all_contest)
    context = {
        'all_contest': all_contest,
        'paginator': paginator,
        'rejudge': 'hover'
    }
    return render(request, 'site_rejudge_select_contest.html', context)
Ejemplo n.º 3
0
def site_rejudge_submission_filter(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    problem_id = int(request.GET.get('problem_id'))
    contest_id = int(request.GET.get('contest_id'))

    try:
        contest = Contest.objects.get(pk=contest_id)
        if contest.created_by != request.user.campus:
            return redirect('homepage')
    except Contest.DoesNotExist:
        return redirect('homepage')
    try:
        problem_title = Problem.objects.get(pk=problem_id).title
    except Problem.DoesNotExist:
        problem_title = None
    if problem_id == 0:
        all_submissions = Submit.objects.filter(
            contest_id=contest_id).order_by('submit_time').reverse()
        problem_title = "All problems"
    else:
        all_submissions = Submit.objects.filter(
            contest_id=contest_id, problem_id=problem_id).order_by('submit_time').reverse()

    start_time = contest.start_time
    for i in all_submissions:
        i.contest_time = i.submit_time - start_time

    return render(request, 'site_rejudge_filter.html', {'submission_list': all_submissions, 'problem_title': problem_title, 'rejudge': 'hover'})
Ejemplo n.º 4
0
def site_rejudge_submission_list(request, contest_id):
    problem_id = request.GET.get('problem_id', 0)
    result = request.GET.get('result', "All")

    refresh_contest_session_admin(request)  # refersh the contest session
    contest = Contest.objects.get(pk=contest_id)

    try:
        problem_id = int(problem_id)
    except ValueError:
        return redirect('homepage')

    if not problem_id == 0:
        try:
            problem_title = Problem.objects.get(pk=problem_id).title
        except Problem.DoesNotExist:
            problem_title = None
    else:
        problem_title = "All problems"

    all_submission = Submit.objects.filter(
        contest=contest).order_by('submit_time').reverse()

    all_problems = set()
    for submit in all_submission:
        pro = (submit.problem.id, submit.problem.title)
        all_problems.add(pro)
    all_problems = sorted(all_problems, key=lambda x: x[1].lower())

    submission_list = all_submission
    if problem_id:
        submission_list = submission_list.filter(problem_id=problem_id)

    if not result == "All":
        submission_list = submission_list.filter(result=result)

    start_time = contest.start_time
    for i in submission_list:
        i.contest_time = i.submit_time - start_time
    all_results = [
        'Correct', 'Wrong Answer', 'Judging', 'Time Limit Exceeded',
        'Run Time Error', 'Compiler Error', 'Memory Limit Exceeded',
        'No Output'
    ]

    submission_list, paginator = pagination(request, submission_list)

    context = {
        'submission_list': submission_list,
        "contest_title": contest.title,
        'all_problems': all_problems,
        'contest_id': contest_id,
        'paginator': paginator,
        'all_results': all_results,
        "selected_problem": problem_id,
        "problem_title": problem_title,
        'selected_result': result,
        'rejudge': 'hover'
    }
    return render(request, 'site_rejudge_submission_list.html', context)
Ejemplo n.º 5
0
def site_ajax_rejudge(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    total_submits = request.GET.getlist('total_submit[]')
    contest_id = request.GET.get('contest_id')
    try:
        contest = Contest.objects.get(pk=contest_id)
        if contest.created_by != request.user.campus:
            return redirect('homepage')
    except Contest.DoesNotExist:
        return redirect('homepage')

    rejudge_submits = [int(i) for i in total_submits]
    result_dict = {}
    for submit_id in rejudge_submits:
        try:
            submit = Submit.objects.get(pk=submit_id)
            try:
                result = judge(file_name=submit.submit_file.path, problem=submit.problem,
                       language=submit.language, submit=submit, rejudge=True)
                submit.result = result
                submit.save()
                update_score_and_rank(submit)
            except ValueError:
                result = "file not found"
        except Submit.DoesNotExist:
            result = "not submitted"

        result_dict[submit_id] = submit.result
    contest.last_update = timezone.now()
    contest.save()
    response_data = {'result': result_dict}
    return JsonResponse(response_data, content_type="application/json")
Ejemplo n.º 6
0
def site_ajax_rejudge(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    total_submits = request.GET.getlist('total_submit[]')
    contest_id = request.GET.get('contest_id')
    try:
        contest = Contest.objects.get(pk=contest_id)
        if contest.created_by != request.user.campus:
            return redirect('homepage')
    except Contest.DoesNotExist:
        return redirect('homepage')

    rejudge_submits = [int(i) for i in total_submits]
    result_dict = {}
    for submit_id in rejudge_submits:
        try:
            submit = Submit.objects.get(pk=submit_id)
            if submit.result == "Judging":
                result_dict[submit_id] = "Judging *"
                continue
            if os.path.exists(submit.submit_file.path):
                submit.result = "Judging"
                submit.save()
                judge_background.apply_async([submit.id, True])
                result = submit.result
            else:
                result = "file not found"
        except Submit.DoesNotExist:
            result = "not submitted"

        result_dict[submit_id] = result
    contest.last_update = timezone.now()
    contest.save()
    response_data = {'result': result_dict}
    return JsonResponse(response_data, content_type="application/json")
Ejemplo n.º 7
0
def site_multi_rejudge(request, problem_id, contest_id, user_id):
    refresh_contest_session_admin(request)  # refersh the contest session
    # contest_id = request.session.get('start_contest_admin')  # ???
    current_contest = Contest.objects.get(pk=contest_id)
    submit = Submit.objects.filter(
        contest_id=contest_id,
        problem_id=problem_id,
        user_id=user_id,
        submit_time__gte=current_contest.start_time,
        submit_time__lte=current_contest.end_time).order_by('submit_time')
    if not submit:
        return redirect('homepage')
    specific_submissions = list()
    for i in submit:
        if i.result == 'Correct':
            specific_submissions.append(i)
            break
        else:
            specific_submissions.append(i)
    start_time = current_contest.start_time
    for i in specific_submissions:
        i.contest_time = i.submit_time - start_time

    specific_submissions, paginator = pagination(request, specific_submissions,
                                                 3)
    context = {
        'submit': specific_submissions,
        'paginator': paginator,
        'contest_id': specific_submissions[0].contest.pk,
        'rejudge': 'hover'
    }
    return render(request, 'site_single_user_rejudge.html', context)
Ejemplo n.º 8
0
def site_answered_clarification(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    current_contest_id = request.session.get('active_contest_admin')
    try:
        current_contest = Contest.objects.get(pk=current_contest_id,
                                              active_time__lte=timezone.now(),
                                              enable=True)
    except Contest.DoesNotExist:
        current_contest = None

    all_clarification = Clarification.objects.filter(
        contest=current_contest, status=True).order_by('send_time').reverse()
    for cla in all_clarification:
        if len(cla.question) > 60:
            cla.short_question = cla.question[:60] + '...'
        else:
            cla.short_question = cla.question
        if len(cla.answer) > 60:
            cla.short_answer = cla.answer[:60] + '...'
        else:
            cla.short_answer = cla.answer
    return render(request, 'site_answered_clarification_list.html', {
        'all_clarification': all_clarification,
        'clar': 'hover'
    })
Ejemplo n.º 9
0
def site_delete_contest(request, contest_id):
    refresh_contest_session_admin(request)  # refersh the contest session
    contest = Contest.objects.get(pk=contest_id)
    return render(request, 'site_delete_contest.html', {
        'contest': contest,
        'cont': 'hover'
    })
Ejemplo n.º 10
0
def clarification_list(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    current_contest_id = request.session.get('active_contest_admin')
    try:
        current_contest = Contest.objects.get(pk=current_contest_id,
                                              active_time__lte=timezone.now(),
                                              enable=True)
    except Contest.DoesNotExist:
        current_contest = None

    all_clarification = Clarification.objects.filter(
        contest=current_contest, status=False).order_by('send_time').reverse()
    for cla in all_clarification:
        if len(cla.question) > 100:
            cla.short_question = cla.question[:100] + '...'
        else:
            cla.short_question = cla.question

    all_clarification, paginator = pagination(request, all_clarification)
    page_number = all_clarification.number
    context = {
        'all_clarification': all_clarification,
        'page_number': page_number,
        'paginator': paginator,
        'clar': 'hover'
    }
    return render(request, 'clarification_list.html', context)
Ejemplo n.º 11
0
def site_view_user(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    contestant_user = User.objects.filter(
        role__short_name="contestant",
        campus=request.user.campus).order_by('username')
    jury_user = User.objects.filter(
        role__short_name="jury",
        campus=request.user.campus).order_by('username')
    site_admin_user = User.objects.filter(
        role__short_name="site",
        campus=request.user.campus).order_by('username')
    admin_user = User.objects.filter(
        role__short_name="admin",
        campus=request.user.campus).order_by('username')
    public_user = User.objects.filter(
        role__short_name="public",
        campus=request.user.campus).order_by('username')

    page_number = request.GET.get('page', 1)
    role = request.GET.get('role', "contestant")
    contestant_page_number = 1
    jury_page_number = 1
    public_page_number = 1
    admin_page_number = 1
    site_admin_page_number = 1

    if role == 'contestant': contestant_page_number = page_number
    elif role == 'jury': jury_page_number = page_number
    elif role == 'admin': admin_page_number = page_number
    elif role == 'public': public_page_number = page_number
    elif role == 'site_admin': site_admin_page_number = page_number

    contestant_user, contestant_paginator = page_number_pagination(
        request, contestant_user, contestant_page_number)
    jury_user, jury_paginator = page_number_pagination(request, jury_user,
                                                       jury_page_number)
    public_user, public_paginator = page_number_pagination(
        request, public_user, public_page_number)
    admin_user, admin_paginator = page_number_pagination(
        request, admin_user, admin_page_number)
    site_admin_user, site_admin_paginator = page_number_pagination(
        request, site_admin_user, site_admin_page_number)

    context = {
        'contestant_user': contestant_user,
        'admin_user': admin_user,
        'jury_user': jury_user,
        'public_user': public_user,
        'site_admin_user': site_admin_user,
        'contestant_paginator': contestant_paginator,
        'admin_paginator': admin_paginator,
        'jury_paginator': jury_paginator,
        'public_paginator': public_paginator,
        'site_admin_paginator': site_admin_paginator,
        "role": role,
        'user': '******'
    }

    return render(request, 'site_user_list.html', context)
Ejemplo n.º 12
0
def site_single_rejudge(request, submit_id):
    refresh_contest_session_admin(request)  # refersh the contest session
    single_submit = Submit.objects.get(pk=submit_id)
    single_submit.contest_time = single_submit.submit_time - \
        single_submit.contest.start_time
    submit = [single_submit]

    return render(request, 'site_single_user_rejudge.html', {'submit': submit, 'contest_id': single_submit.contest.pk, 'rejudge': 'hover'})
Ejemplo n.º 13
0
def site_view_problem(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    total_problems = Problem.objects.all().order_by('title')
    total_problems, paginator = pagination(request, total_problems)
    context = {
        'problem': total_problems,
        'paginator': paginator,
        'pro': 'hover'
    }
    return render(request, 'site_problem_list.html', context)
Ejemplo n.º 14
0
def site_contest_detail(request, contest_id):
    refresh_contest_session_admin(request)  # refersh the contest session
    try:
        contest = Contest.objects.get(pk=contest_id)
    except Contest.DoesNotExist:
        return redirect('homepage')

    if contest.created_by == request.user.campus:

        # refresh_contest_session_admin(request)  # refersh the contest session        
        previous_start_time = contest.start_time
        previous_end_time = contest.end_time
        previous_frozen_time = contest.frozen_time
        previous_unfrozen_time = contest.unfrozen_time
        previous_user = list(contest.user.all()).copy()

        if request.method == "POST":
            form = EditContest(request.POST, request.FILES, instance=contest)
            if form.is_valid():
                previous_problems = list(contest.problem.all()).copy()
                post = form.save(commit=False)
                post.last_update = timezone.now()
                post.save()
                form.save_m2m()
                update_rank_score(previous_start_time, previous_end_time, previous_frozen_time,
                                previous_unfrozen_time, previous_user, previous_problems, post)
                # contset_session(post)

                messages.success(request, "The contest " +
                                contest.title+" was update successfully.")
                return redirect('site_contest_list')
        else:
            form = EditContest(instance=contest)
        return render(request, 'site_edit_contest.html', {'form': form, "contest_id": contest.id, 'cont': 'hover'})

    else:
        total_contest = Contest.objects.all().order_by('start_time').reverse()
        now = timezone.now()
        for each_contest in total_contest:
            if each_contest.enable == False:
                each_contest.status = "disable"
            elif now < each_contest.active_time:
                each_contest.status = "not active"
            elif now < each_contest.start_time:
                each_contest.status = "active"
            elif each_contest.start_time <= now and now < each_contest.end_time:
                each_contest.status = "on going"
            elif each_contest.end_time <= now and now < each_contest.deactivate_time:
                each_contest.status = "end"
            else:
                each_contest.status = "deactivate" 
        
        return render(request, 'site_contest_detail.html', {'total_contest': total_contest,'this_contest': contest})
Ejemplo n.º 15
0
def edit_user(request, user_id):
    refresh_contest_session_admin(request)  # refersh the contest session
    user = User.objects.get(pk=user_id)
    if request.method == "POST":
        form = EditUserProfile(request.POST, instance=user)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            messages.success(request, "The user " +
                             user.username+" was update successfully.")
            return redirect('site_view_user')
    else:
        form = EditUserProfile(instance=user)

    return render(request, 'site_edit_user.html', {'form': form, 'user_id': user.id, 'user': '******'})
Ejemplo n.º 16
0
def site_view_user(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    contestant_user = User.objects.filter(role__short_name="contestant", campus=request.user.campus).order_by('username')
    jury_user = User.objects.filter(
        role__short_name="jury", campus=request.user.campus).order_by('username')
    site_admin_user = User.objects.filter(
        role__short_name="site", campus=request.user.campus).order_by('username')
    public_user = User.objects.filter(
        role__short_name="public", campus=request.user.campus).order_by('username')

    context = {
        'contestant_user': contestant_user,
        'jury_user': jury_user,
        'site_admin_user': site_admin_user,
        'public_user': public_user,
        'user': '******'
    }
    return render(request, 'site_user_list.html', context)
Ejemplo n.º 17
0
def site_rejudge_submission_list(request, contest_id):
    refresh_contest_session_admin(request)  # refersh the contest session
    contest = Contest.objects.get(pk=contest_id)

    submission_list = Submit.objects.filter(
        contest=contest).order_by('submit_time').reverse()
    all_problems = set()

    start_time = contest.start_time
    for i in submission_list:
        i.contest_time = i.submit_time - start_time
    for submit in submission_list:
        pro = (submit.problem.id, submit.problem.title)
        all_problems.add(pro)
    all_problems = sorted(all_problems, key=lambda x: x[1].lower())
    context = {'submission_list': submission_list, "contest_title": contest.title,
               'all_problems': all_problems, 'contest_id': contest.pk, 'rejudge': 'hover'}
    return render(request, 'site_rejudge_submission_list.html', context)
Ejemplo n.º 18
0
def site_contest_list(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    total_contest = Contest.objects.all().order_by('start_time').reverse()
    now = timezone.now()
    for contest in total_contest:
        if contest.enable == False:
            contest.status = "disable"
        elif now < contest.active_time:
            contest.status = "not active"
        elif now < contest.start_time:
            contest.status = "active"
        elif contest.start_time <= now and now < contest.end_time:
            contest.status = "on going"
        elif contest.end_time <= now and now < contest.deactivate_time:
            contest.status = "end"
        else:
            contest.status = "deactivate"  
    return render(request, 'site_contest_list.html', {'contest': total_contest, 'cont': 'hover'})
Ejemplo n.º 19
0
def user_register(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    if request.method == "POST":
        form = AddUser(request.POST)
        if form.is_valid():
            chars = 'abcdefghijklmnopqrstuvwxyz0123456789@#$%&*'
            secret_key = get_random_string(8, chars)
            post = form.save(commit=False)
            post.campus = request.user.campus
            post.role = Role.objects.get(short_name='contestant')
            post.set_password(secret_key)
            post.save()
            messages.success(request, "user "+post.name +
                             " was added successfully.")
            return redirect('site_user_register')
    else:
        form = AddUser()
    form1 = CSVUserUpload()
    return render(request, 'site_user_register.html', {'form': form, 'form1': form1, 'user': '******'})
Ejemplo n.º 20
0
def site_new_clarification_by_admin(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    current_contest_id = request.session.get('active_contest_admin')
    try:
        current_contest = Contest.objects.get(pk=current_contest_id,
                                              active_time__lte=timezone.now(),
                                              enable=True)
    except Contest.DoesNotExist:
        current_contest = None

    if request.method == "POST":
        form = NewClarification(request.POST)
        form.fields['user'].queryset = current_contest.user.filter(
            role__short_name='contestant').order_by('name')
        form.fields['problem'].queryset = current_contest.problem.all(
        ).order_by('title')
        if form.is_valid():
            post = form.save(commit=False)
            post.contest = current_contest
            post.question = "new clarification from site admin"
            post.send_time = timezone.now()
            if request.POST['user'] and post.is_public:
                post.is_public = False

            post.status = True
            post.save()
            return redirect('site_clarification_list')
    else:
        form = NewClarification()
        form.fields['user'].queryset = current_contest.user.filter(
            role__short_name='contestant').order_by('name')
        form.fields['problem'].queryset = current_contest.problem.all(
        ).order_by('title')
    return render(request, 'site_new_clarification.html', {
        'form': form,
        'clar': 'hover'
    })
Ejemplo n.º 21
0
def site_view_problem(request):
    refresh_contest_session_admin(request)  # refersh the contest session
    total_problems = Problem.objects.all().order_by('title')
    return render(request, 'site_problem_list.html', {'problem': total_problems, 'pro': 'hover'})
Ejemplo n.º 22
0
def site_contest_detail(request, contest_id):
    refresh_contest_session_admin(request)  # refersh the contest session
    try:
        contest = Contest.objects.get(pk=contest_id)
    except Contest.DoesNotExist:
        return redirect('homepage')

    if contest.created_by == request.user.campus:

        # refresh_contest_session_admin(request)  # refersh the contest session
        previous_start_time = contest.start_time
        previous_end_time = contest.end_time
        previous_frozen_time = contest.frozen_time
        previous_unfrozen_time = contest.unfrozen_time
        previous_user = list(contest.user.all()).copy()

        user_list = User.objects.filter(
            role__short_name='contestant').order_by('campus', 'name')

        if request.method == "POST":
            form = EditContest(request.POST, request.FILES, instance=contest)
            form.fields['user'].queryset = user_list
            if form.is_valid():
                previous_problems = list(contest.problem.all()).copy()
                post = form.save(commit=False)
                post.last_update = timezone.now()
                post.save()
                form.save_m2m()
                update_rank_score(previous_start_time, previous_end_time,
                                  previous_frozen_time, previous_unfrozen_time,
                                  previous_user, previous_problems, post)
                # contset_session(post)

                messages.success(
                    request, "The contest " + contest.title +
                    " was update successfully.")
                return redirect('site_contest_list')
        else:
            form = EditContest(instance=contest)
            form.fields['user'].queryset = user_list
        return render(request, 'site_edit_contest.html', {
            'form': form,
            "contest_id": contest.id,
            'cont': 'hover'
        })

    else:
        problem = contest.problem.all()
        user = contest.user.all()

        page_number = request.GET.get('page', 1)
        page_type = request.GET.get('type', "problem")
        problem_page_number = 1
        user_page_number = 1

        if page_type == 'problem': problem_page_number = page_number
        elif page_type == 'user': user_page_number = page_number

        problem, problem_paginator = page_number_pagination(
            request, problem, problem_page_number, 10)
        user, user_paginator = page_number_pagination(request, user,
                                                      user_page_number, 10)

        context = {
            'contest': contest,
            'problem': problem,
            'user': user,
            'problem_paginator': problem_paginator,
            'user_paginator': user_paginator,
            'cont': 'hover'
        }
        return render(request, 'site_contest_detail.html', context)