Ejemplo n.º 1
0
def edit(request, cid):
    try:
        contest = Contest.objects.get(id=cid)
    except Contest.DoesNotExist:
        logger.warning("Contest: Can not edit contest %s! Contest not found!" % cid)
        raise Http404("Contest does not exist, can not edit.")
    title = "Edit Contest"
    if can_edit_contest(request.user, contest):
        contest_dic = model_to_dict(contest)
        contest_dic["user"] = request.user
        contest_dic["method"] = request.method
        if request.method == "GET":
            form = ContestForm(initial=contest_dic)

            return render_index(request, "contest/editContest.html", {"form": form, "title": title, "contest": contest})

        if request.method == "POST":
            form = ContestForm(request.POST, instance=contest, initial={"method": request.method})
            if form.is_valid():
                modified_contest = form.save()
                logger.info("Contest: User %s edited contest %s!" % (request.user, modified_contest.id))

                message = 'Contest %s- "%s" edited!' % (modified_contest.id, modified_contest.cname)
                messages.success(request, message)
                return redirect("contest:contest", modified_contest.id)

            else:
                message = "Some fields are invalid!"
                messages.error(request, message)
                return render_index(
                    request, "contest/editContest.html", {"form": form, "title": title, "contest": contest}
                )

    raise PermissionDenied
Ejemplo n.º 2
0
def new(request):
    title = "New Contest"
    if can_create_contest(request.user):
        if request.method == 'GET':
            form = ContestForm(initial=\
                {'owner':request.user, 'user':request.user, 'method':request.method})

            return render_index(request,'contest/editContest.html',
                {'form':form,'title':title})

        if request.method == 'POST':
            form = ContestForm(request.POST, initial={'method':request.method})
            if form.is_valid():
                new_contest = form.save()
                logger.info('Contest: User %s Create a new contest %s!' %
                    (request.user ,new_contest.id))
                message = 'Contest %s- "%s" created!' % (new_contest.id, new_contest.cname)
                messages.success(request, message)
                return redirect('contest:contest', new_contest.id)

            else:
                message = 'Some fields are invalid!'
                messages.error(request, message)

                return render_index(request,'contest/editContest.html',
                    {'form':form,'title':title})
    raise PermissionDenied
Ejemplo n.º 3
0
def edit(request, group_id):
    group = get_group(group_id)
    user_is_owner = has_group_ownership(request.user, group)
    user_is_coowner = has_group_coownership(request.user, group)
    if user_is_owner or user_is_coowner:
        if request.method == 'GET':
            group_dic = model_to_dict(group)
            form = GroupFormEdit(initial=group_dic)
            return render_index(
                request, 'group/editGroup.html', {
                    'form': form,
                    'group': group,
                    'user_is_coowner': user_is_coowner,
                })
        if request.method == 'POST':
            form = GroupFormEdit(request.POST, instance=group)
            if form.is_valid():
                modified_group = form.save()
                message = 'Group %s modified!' % (modified_group.id)
                messages.success(request, message)
                logger.info('Group: Modified group %s!' % modified_group.id)
                return HttpResponseRedirect(reverse('group:detail', kwargs={'group_id': modified_group.id}))
            else:
                return render_index(
                    request, 'group/editGroup.html', {
                        'form': form,
                        'user_is_coowner': user_is_coowner,
                    })
    else:
        raise PermissionDenied
Ejemplo n.º 4
0
def edit_announce(request, announce_id, group_id, redirect_page):
    announce = get_announce(announce_id)
    group = get_group(group_id)
    user_is_owner = has_group_ownership(request.user, group)
    user_is_coowner = has_group_coownership(request.user, group)
    if user_is_owner or user_is_coowner:
        if request.method == 'GET':
            announce_dic = model_to_dict(announce)
            form = AnnounceForm(initial=announce_dic)
            return render_index(request, 'group/editAnnounce.html', {
                'form': form,
                'group_id': group.id,
                'announce_id': announce_id,
            })
        if request.method == 'POST':
            form = AnnounceForm(request.POST, instance=announce)
            if form.is_valid():
                modified_announce = form.save()
                logger.info('Announce: Announce %s has been changed!' %
                            (announce.id))
                if redirect_page == 'detail':
                    return HttpResponseRedirect(
                        reverse('group:detail', kwargs={'group_id': group_id}))
                else:  # redirect_page=='viewall'
                    return HttpResponseRedirect(
                        reverse('group:viewall_announce',
                                kwargs={'group_id': group_id}))
            else:
                return render_index(request, 'group/editAnnounce.html', {
                    'form': form,
                })
    else:
        raise PermissionDenied
Ejemplo n.º 5
0
def edit_announce(request, announce_id, group_id, redirect_page):
    announce = get_announce(announce_id)
    group = get_group(group_id)
    user_is_owner = has_group_ownership(request.user, group)
    user_is_coowner = has_group_coownership(request.user, group)
    if user_is_owner or user_is_coowner:
        if request.method == 'GET':
            announce_dic = model_to_dict(announce)
            form = AnnounceForm(initial=announce_dic)
            return render_index(
                request, 'group/editAnnounce.html', {
                    'form': form,
                    'group_id': group.id,
                    'announce_id': announce_id,
                })
        if request.method == 'POST':
            form = AnnounceForm(request.POST, instance=announce)
            if form.is_valid():
                modified_announce = form.save()
                logger.info(
                    'Announce: Announce %s has been changed!' % (announce.id))
                if redirect_page == 'detail':
                    return HttpResponseRedirect(reverse('group:detail', kwargs={'group_id': group_id}))
                else:  # redirect_page=='viewall'
                    return HttpResponseRedirect(reverse('group:viewall_announce', kwargs={'group_id': group_id}))
            else:
                return render_index(
                    request, 'group/editAnnounce.html', {
                        'form': form,
                    })
    else:
        raise PermissionDenied
Ejemplo n.º 6
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.º 7
0
def user_forget_password(request):
    if request.user.is_authenticated():
        return redirect(reverse('index:index'))

    if request.method == 'POST':
        user_form = UserForgetPasswordForm(data=request.POST)
        if user_form.is_valid():
            user = User.objects.get(username=user_form.cleaned_data['username'])
            send_forget_password_email(request, user)
            messages.success(request, 'Confirm email has sent to you.')
        else:
            return render_index(request, 'users/auth.html', {'form': user_form, 'title': 'Forget Password'})
    return render_index(request, 'users/auth.html',
                        {'form': UserForgetPasswordForm(), 'title': 'Forget Password'})
Ejemplo n.º 8
0
def user_forget_password(request):
    if request.user.is_authenticated():
        return redirect(reverse('index:index'))

    if request.method == 'POST':
        user_form = UserForgetPasswordForm(data=request.POST)
        if user_form.is_valid():
            user = User.objects.get(
                username=user_form.cleaned_data['username'])
            send_forget_password_email(request, user)
            messages.success(request, 'Confirm email has sent to you.')
        else:
            return render_index(request, 'users/auth.html', {'form': user_form, 'title': 'Forget Password'})
    return render_index(request, 'users/auth.html',
                        {'form': UserForgetPasswordForm(), 'title': 'Forget Password'})
Ejemplo n.º 9
0
def user_create(request):
    args = {}
    args.update(csrf(request))
    if request.method == 'POST':
        user_form = UserCreationForm(request.POST)
        args['user_form'] = user_form
        if user_form.is_valid():
            user = user_form.save()
            send_activation_email(request, user)
            user.backend = 'django.contrib.auth.backends.ModelBackend'
            logger.info('user %s created' % str(user))
            return redirect(reverse('index:alert', kwargs={'alert_info': 'mailbox'}))
        else:
            return render_index(request, 'users/auth.html', {'form': user_form, 'title': 'Sign Up'})
    return render_index(request, 'users/auth.html', {'form': UserCreationForm(), 'title': 'Sign Up'})
Ejemplo n.º 10
0
def download(request):
    user = user_info.validate_user(request.user)
    if request.method == 'POST':
        what = request.POST.get('type')
        if what == 'scoreboard':
            scoreboard_type = request.POST.get('scoreboard_type')
            cid = request.POST.get('contest')
            scoreboard_file = get_scoreboard_csv(cid, scoreboard_type)
            return scoreboard_file
        elif what == 'public_user_password':
            cid = request.POST.get('contest')
            contest = get_contest_or_404(cid)
            if user_info.has_contest_ownership(user, contest) or\
                user.has_admin_auth():
                logger.info('Contest:User %s download Contest %s - %s public user password!' %
                    (request.user, contest.id, contest.cname))
                return get_public_user_password_csv(contest)
            else:
                raise PermissionDenied
        raise Http404('file not found')
    elif request.method == 'GET':
        if request.GET.get('cid'):
            cid = request.GET.get('cid')
            contest = get_contest_or_404(cid)
        if user_info.has_contest_ownership(user, contest) or user.has_admin_auth():
            return render_index(request,'contest/download.html',{'contest':contest})
        else:
            raise PermissionDenied
Ejemplo n.º 11
0
def detail(request, group_id):

    group = get_group(group_id)
    show_number = 5; #number for brief list to show in group detail page.
    all_contest = group.trace_contest.all()
    annowence_list = group.announce.all()
    student_list = group.member.order_by('user_level')
    coowner_list = group.coowner.all()
    owner = group.owner
    user_is_owner = has_group_ownership(request.user, group)

    running_contest_list = []
    ended_contest_list = []
    now = timezone.now()
    for contest in all_contest:
        if contest.start_time < now and contest.end_time > now:
            running_contest_list.append(contest)
        elif contest.end_time < now:
            ended_contest_list.append(contest)

    return render_index(
        request, 'group/groupDetail.html', {
            'rc_list': running_contest_list[0:show_number],
            'ec_list': ended_contest_list[0:show_number],
            'an_list': annowence_list,
            'coowner_list': coowner_list,
            'owner': owner,
            's_list': student_list,
            'group_name': group.gname,
            'group_description': group.description,
            'group_id': group.id,
            'user_is_owner': user_is_owner,
        })
Ejemplo n.º 12
0
def contest(request, cid):
    user = user_info.validate_user(request.user)
    try:
        contest = Contest.objects.get(id = cid)
    except Contest.DoesNotExist:
        logger.warning('Contest: Can not find contest %s!' % cid)
        raise Http404('Contest does not exist')

    now = datetime.now()
    #if contest has not started and user is not the owner

    if ((contest.start_time < now) or\
        user_info.has_contest_ownership(user,contest) or\
        user.has_admin_auth()):
        for problem in contest.problem.all():
            problem.testcase = get_testcase(problem)
        scoreboard = get_scoreboard(contest)
        status = contest_status(request, contest)
        clarifications = get_clarifications(user,contest)

        initial_form = {'contest':contest,'asker':user}
        form = ClarificationForm(initial=initial_form)

        initial_reply_form = {'contest':contest,'replier':user}
        reply_form = ReplyForm(initial = initial_reply_form)
        return render_index(request, 'contest/contest.html',
            {'contest':contest, 'clarifications':clarifications,
            'form':form, 'reply_form':reply_form,
            'scoreboard':scoreboard, 'status': status})
    else:
        raise PermissionDenied
Ejemplo n.º 13
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.º 14
0
def view_code(request, sid):
    try:
        submission = Submission.objects.get(id=sid)
        filename = '%s.%s' % (sid, get_extension(submission.language))
        if show_detail(submission, request.user):
            f = open('%s%s' % (CodeSubmitForm.SUBMIT_PATH, filename), 'r')
            code = f.read()
            f.close()
            codesubmitform = CodeSubmitForm(
                initial={
                    'code': code,
                    'pid': submission.problem.id,
                    'language': submission.language
                })
            problem_name = str(submission.problem)
            return render_index(request, 'users/submit.html', {
                'form': codesubmitform,
                'problem_name': problem_name
            })
        else:
            logger.warning('User %s attempt to view detail of SID %s' %
                           (request.user, sid))
            raise PermissionDenied(
                "You don't have permission to view detail of SID %s" % sid)
    except Submission.DoesNotExist:
        logger.warning('SID %s Not Found!' % sid)
        raise Http404('SID %s Not Found!' % sid)
    except IOError:
        logger.warning('File %s Not Found!' % filename)
        raise Http404('File %s Not Found!' % filename)
Ejemplo n.º 15
0
def download(request):
    user = user_info.validate_user(request.user)
    if request.method == "POST":
        what = request.POST.get("type")
        if what == "scoreboard":
            scoreboard_type = request.POST.get("scoreboard_type")
            cid = request.POST.get("contest")
            scoreboard_file = get_scoreboard_csv(cid, scoreboard_type)
            return scoreboard_file
        elif what == "public_user_password":
            cid = request.POST.get("contest")
            contest = get_contest_or_404(cid)
            if user_info.has_contest_ownership(user, contest) or user.has_admin_auth():
                logger.info(
                    "Contest:User %s download Contest %s - %s public user password!"
                    % (request.user, contest.id, contest.cname)
                )
                return get_public_user_password_csv(contest)
            else:
                raise PermissionDenied
        raise Http404("file not found")
    elif request.method == "GET":
        if request.GET.get("cid"):
            cid = request.GET.get("cid")
            contest = get_contest_or_404(cid)
        if user_info.has_contest_ownership(user, contest) or user.has_admin_auth():
            return render_index(request, "contest/download.html", {"contest": contest})
        else:
            raise PermissionDenied
Ejemplo n.º 16
0
def team_list(request):
    team_profile = {
        'id': 1,
        'team_name': 'ISeaTeL',
        'leader': 'andy',
        'member': ['hydai', 'henry'],
        'description': 'we are ISeaTel',
        'create_time': datetime.datetime.now()
    }
    team_list = [{}]*200
    for i in range(200):  # Generate lots of entries for testing paging
        team_profile['id'] = i+1
        team_list[i] = team_profile.copy()

    paginator = Paginator(team_list, 25)  # Show 25 teams per page
    page = request.GET.get('page')

    try:
        teams = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        teams = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        teams = paginator.page(paginator.num_pages)

    return render_index(
        request,
        'team/teamList.html',
        {'team_list': teams})
Ejemplo n.º 17
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.º 18
0
def team_list(request):
    team_profile = {
        'id': 1,
        'team_name': 'ISeaTeL',
        'leader': 'andy',
        'member': ['hydai', 'henry'],
        'description': 'we are ISeaTel',
        'create_time': datetime.datetime.now()
    }
    team_list = [{}] * 200
    for i in range(200):  # Generate lots of entries for testing paging
        team_profile['id'] = i + 1
        team_list[i] = team_profile.copy()

    paginator = Paginator(team_list, 25)  # Show 25 teams per page
    page = request.GET.get('page')

    try:
        teams = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        teams = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        teams = paginator.page(paginator.num_pages)

    return render_index(
        request,
        'team/teamList.html',
        {'team_list': teams})
Ejemplo n.º 19
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.º 20
0
def download(request):
    user = user_info.validate_user(request.user)
    if request.method == 'POST':
        what = request.POST.get('type')
        if what == 'scoreboard':
            scoreboard_type = request.POST.get('scoreboard_type')
            cid = request.POST.get('contest')
            scoreboard_file = get_scoreboard_csv(cid, scoreboard_type)
            return scoreboard_file
        elif what == 'public_user_password':
            cid = request.POST.get('contest')
            contest = get_contest_or_404(cid)
            if user_info.has_contest_ownership(user, contest) or\
                    user.has_admin_auth():
                logger.info(
                    'Contest:User %s download Contest %s - %s public user password!'
                    % (request.user, contest.id, contest.cname))
                return get_public_user_password_csv(contest)
            else:
                raise PermissionDenied
        raise Http404('file not found')
    elif request.method == 'GET':
        if request.GET.get('cid'):
            cid = request.GET.get('cid')
            contest = get_contest_or_404(cid)
        if user_info.has_contest_ownership(user,
                                           contest) or user.has_admin_auth():
            return render_index(request, 'contest/download.html',
                                {'contest': contest})
        else:
            raise PermissionDenied
Ejemplo n.º 21
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.º 22
0
def edit(request, pid=None):
    tag_form = TagForm()
    try:
        problem = Problem.objects.get(pk=pid)
        if not request.user.has_admin_auth() and request.user != problem.owner:
            logger.warning(
                "user %s has no permission to edit problem %s" % (request.user, pid))
            raise PermissionDenied()
    except Problem.DoesNotExist:
        logger.warning("problem %s does not exist" % (pid))
        raise Http404("problem %s does not exist" % (pid))
    testcase = get_testcase(problem)
    tags = problem.tags.all()
    if request.method == 'GET':
        form = ProblemForm(instance=problem)
    if request.method == 'POST':
        form = ProblemForm(request.POST, request.FILES, instance=problem)
        if form.is_valid():
            problem = form.save()
            problem.sample_in = request.POST['sample_in']
            problem.sample_out = request.POST['sample_out']
            problem.save()
            file_ex = get_problem_file_extension(problem)
            if "special_judge_code" in request.FILES:
                with open('%s%s%s' % (SPECIAL_PATH, problem.pk, file_ex), 'w') as t_in:
                    for chunk in request.FILES['special_judge_code'].chunks():
                        t_in.write(chunk)
            if "partial_judge_code" in request.FILES:
                with open('%s%s%s' % (PARTIAL_PATH, problem.pk, file_ex), 'w') as t_in:
                    for chunk in request.FILES['partial_judge_code'].chunks():
                        t_in.write(chunk)
            if "partial_judge_header" in request.FILES:
                with open('%s%s.h' % (PARTIAL_PATH, problem.pk), 'w') as t_in:
                    for chunk in request.FILES['partial_judge_header'].chunks():
                        t_in.write(chunk)
            problem = verify_problem_code(problem)
            if problem.has_special_judge_code and \
                    problem.judge_type != problem.SPECIAL:
                os.remove('%s%s%s' % (SPECIAL_PATH, problem.pk, file_ex))
            if problem.judge_type != problem.PARTIAL:
                if problem.has_partial_judge_code:
                    os.remove('%s%s%s' % (PARTIAL_PATH, problem.pk, file_ex))
                if problem.has_partial_judge_header:
                    os.remove('%s%s.h' % (PARTIAL_PATH, problem.pk))
            logger.info('edit problem, pid = %d by %s' %
                        (problem.pk, request.user))
            messages.success(request, 'problem %d edited' % problem.pk)
            return redirect('/problem/%d' % (problem.pk))
    file_ex = get_problem_file_extension(problem)
    problem = verify_problem_code(problem)
    return render_index(request, 'problem/edit.html',
                        {'form': form, 'problem': problem,
                         'tags': tags, 'tag_form': tag_form,
                         'testcase': testcase,
                         'path': {
                             'TESTCASE_PATH': TESTCASE_PATH,
                             'SPECIAL_PATH': SPECIAL_PATH,
                             'PARTIAL_PATH': PARTIAL_PATH, }
                         })
Ejemplo n.º 23
0
def register_page(request, cid):
    contest = get_contest_or_404(cid)
    groups = get_owned_group(request.user)
    public_user = len(get_public_contestant(contest))
    return render_index(request,
        'contest/register.html',
        {'contest':contest, 'groups':groups,'max_public_user':settings.MAX_PUBLIC_USER,
         'public_user':public_user})
Ejemplo n.º 24
0
def edit(request, cid):
    try:
        contest = Contest.objects.get(id=cid)
    except Contest.DoesNotExist:
        logger.warning('Contest: Can not edit contest %s! Contest not found!' %
                       cid)
        raise Http404('Contest does not exist, can not edit.')
    title = "Edit Contest"
    if can_edit_contest(request.user, contest):
        contest_dic = model_to_dict(contest)
        contest_dic['user'] = request.user
        contest_dic['method'] = request.method
        if request.method == 'GET':
            form = ContestForm(initial=contest_dic)

            return render_index(request, 'contest/editContest.html', {
                'form': form,
                'title': title,
                'contest': contest
            })

        if request.method == 'POST':
            form = ContestForm(request.POST,
                               instance=contest,
                               initial={'method': request.method})
            if form.is_valid():
                modified_contest = form.save()
                logger.info('Contest: User %s edited contest %s!' %
                            (request.user, modified_contest.id))

                message = 'Contest %s- "%s" edited!' % \
                    (modified_contest.id, modified_contest.cname)
                messages.success(request, message)
                return redirect('contest:contest', modified_contest.id)

            else:
                message = 'Some fields are invalid!'
                messages.error(request, message)
                return render_index(request, 'contest/editContest.html', {
                    'form': form,
                    'title': title,
                    'contest': contest
                })

    raise PermissionDenied
Ejemplo n.º 25
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.º 26
0
def new(request):
    if request.user.has_judge_auth():
        if request.method == 'GET':
            form = GroupForm(
                user=request.user, initial={'owner': request.user})
            return render_index(request, 'group/editGroup.html', {'form': form})
        if request.method == 'POST':
            form = GroupForm(request.POST, initial={'owner': request.user})
            if form.is_valid():
                new_group = form.save()
                logger.info('Group: Create a new group %s!' % new_group.id)
                return HttpResponseRedirect(reverse('group:list'))
            else:
                return render_index(
                    request,
                    'group/editGroup.html', {'form': form})
    else:
        raise PermissionDenied
Ejemplo n.º 27
0
def register_page(request, cid):
    contest = get_contest_or_404(cid)
    groups = get_owned_group(request.user)
    public_user = len(get_public_contestant(contest))
    return render_index(
        request,
        "contest/register.html",
        {"contest": contest, "groups": groups, "max_public_user": settings.MAX_PUBLIC_USER, "public_user": public_user},
    )
Ejemplo n.º 28
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.º 29
0
def user_block_wrong_tries(request):
    """Block login for over 3 wrong tries."""
    attempts = AccessAttempt.objects.filter(ip_address=get_ip(request))
    for attempt in attempts:
        if attempt.failures_since_start >= FAILURE_LIMIT:
            unblock_time = attempt.attempt_time + COOLOFF_TIME
            return render_index(request, 'users/blockWrongTries.html', {'unblock_time': unblock_time})
    # No block attempt
    return redirect(reverse('index:index'))
Ejemplo n.º 30
0
def user_notification(request, current_tab='none'):
    unread_notifications = Notification.objects. \
        filter(receiver=request.user, read=False).order_by('-id')

    all_notifications = Notification.objects. \
        filter(receiver=request.user).order_by('-id')

    return render_index(request, 'users/notification.html',
                        {'all_notifications': all_notifications,
                         'unread_notifications': unread_notifications, 'current_tab': current_tab})
Ejemplo n.º 31
0
def list(request):

    all_group_list = Group.objects.order_by('-creation_time')
    unsorted_group_list = Group.objects.filter(member__username__contains=request.user.username)
    my_group_list = unsorted_group_list.order_by('-creation_time')
    return render_index(
        request,'group/groupList.html', {
            'a_g_list': all_group_list,
            'm_g_list': my_group_list,
        })
Ejemplo n.º 32
0
def index(request, alert_info='none'):

    present = timezone.now()
    time_threshold = datetime.now() + timedelta(days=1)
    c_runnings = Contest.objects.filter(start_time__lt=present, end_time__gt=present, is_homework=False)
    c_upcomings = Contest.objects.filter(start_time__gt=present, start_time__lt=time_threshold, is_homework=False).order_by('start_time')
    announcements = Announcement.objects.filter(start_time__lt=present, end_time__gt=present)
    return render_index(request, 'index/index.html',
                        {'c_runnings': c_runnings, 'c_upcomings': c_upcomings,
                         'announcements': announcements, 'alert_info': alert_info})
Ejemplo n.º 33
0
def preview(request):
    problem = Problem()
    problem.pname = request.POST['pname']
    problem.description = request.POST['description']
    problem.input = request.POST['input']
    problem.output = request.POST['output']
    problem.sample_in = request.POST['sample_in']
    problem.sample_out = request.POST['sample_out']
    problem.tag = request.POST['tags'].split(',')
    return render_index(request, 'problem/preview.html', {'problem': problem, 'preview': True})
Ejemplo n.º 34
0
def preview(request):
    problem = Problem()
    problem.pname = request.POST['pname']
    problem.description = request.POST['description']
    problem.input= request.POST['input']
    problem.output = request.POST['output']
    problem.sample_in = request.POST['sample_in']
    problem.sample_out = request.POST['sample_out']
    problem.tag = request.POST['tags'].split(',')
    return render_index(request, 'problem/preview.html', {'problem': problem, 'preview': True})
Ejemplo n.º 35
0
def register_page(request, cid):
    contest = get_contest_or_404(cid)
    groups = get_owned_group(request.user)
    public_user = len(get_public_contestant(contest))
    return render_index(
        request, 'contest/register.html', {
            'contest': contest,
            'groups': groups,
            'max_public_user': settings.MAX_PUBLIC_USER,
            'public_user': public_user
        })
Ejemplo n.º 36
0
def get_all_announce(request, group_id):

    group = get_group(group_id)

    all_announce_list = group.announce.all()
    return render_index(
        request, 'group/viewall.html', {
            'data_list': all_announce_list,
            'title': 'announce',
            'list_type': 'announce',
        })
Ejemplo n.º 37
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.º 38
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.º 39
0
def user_login(request):
    next_page = get_next_page(request.GET.get('next'))
    if request.user.is_authenticated():
        return redirect(next_page)
    if request.method == 'POST':
        user_form = AuthenticationForm(data=request.POST)
        if user_form.is_valid():
            user = authenticate(
                username=user_form.cleaned_data['username'],
                password=user_form.cleaned_data['password'])
            user.backend = 'django.contrib.auth.backends.ModelBackend'
            ip = get_ip(request)
            logger.info('user %s @ %s logged in' % (str(user), ip))
            one_hour = 60 * 60
            request.session.set_expiry(one_hour)
            logger.info('user %s set session timeout one hour' % str(user))
            login(request, user)
            return redirect(next_page)
        else:
            return render_index(request, 'users/auth.html', {'form': user_form, 'title': 'Login'})
    return render_index(request, 'users/auth.html', {'form': AuthenticationForm(), 'title': 'Login'})
Ejemplo n.º 40
0
def error_message(request, sid):
    try:
        submission = Submission.objects.get(id=sid)
        error_msg = submission.error_msg
        if show_detail(submission, request.user):
            return render_index(request, 'status/errorMessage.html', {'error_message': error_msg})
        else:
            logger.warning('User %s attempt to view detail of SID %s' % (request.user, sid))
            raise PermissionDenied("You don't have permission to view detail of SID %s" % sid)

    except Submission.DoesNotExist:
        logger.warning('SID %s Not Found!' % sid)
        raise Http404('SID %s Not Found!' % sid)
Ejemplo n.º 41
0
def announcement_create(request):
    if User.has_admin_auth(request.user) == False:
        raise PermissionDenied('User %s does not have the permission!' % str(request.user))
    if request.method == 'POST':
        form = AnnouncementCreationForm(request.POST)
        if form.is_valid():
            announcement = form.save()
            announcement.backend = 'django.contrib.auth.backends.ModelBackend'
            return redirect(reverse('index:index'))
    else:
        form = AnnouncementCreationForm()
    return render_index(request, 'index/announcement.html',
                {'form': form, 'title': 'Create Announcement'})
Ejemplo n.º 42
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.º 43
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.º 44
0
def user_login(request):
    next_page = get_next_page(request.GET.get('next'))
    if request.user.is_authenticated():
        return redirect(next_page)
    if request.method == 'POST':
        user_form = AuthenticationForm(data=request.POST)
        if user_form.is_valid():
            user = authenticate(
                username=user_form.cleaned_data['username'],
                password=user_form.cleaned_data['password'])
            user.backend = 'django.contrib.auth.backends.ModelBackend'
            ip = get_ip(request)
            logger.info('user %s @ %s logged in' % (str(user), ip))
            hours = int(get_config('session_expiry', 'expiry'))
            expiry = hours * 60 * 60
            request.session.set_expiry(expiry)
            logger.info('user %s set session timeout %d-hour' %
                        (str(user), hours))
            login(request, user)
            return redirect(next_page)
        else:
            return render_index(request, 'users/auth.html', {'form': user_form, 'title': 'Login'})
    return render_index(request, 'users/auth.html', {'form': AuthenticationForm(), 'title': 'Login'})
Ejemplo n.º 45
0
def new(request):
    title = "New Contest"
    if can_create_contest(request.user):
        if request.method == 'GET':
            form = ContestForm(
                initial={
                    'owner': request.user,
                    'user': request.user,
                    'method': request.method
                })

            return render_index(request, 'contest/editContest.html', {
                'form': form,
                'title': title
            })

        if request.method == 'POST':
            form = ContestForm(request.POST,
                               initial={'method': request.method})
            if form.is_valid():
                new_contest = form.save()
                logger.info('Contest: User %s Create a new contest %s!' %
                            (request.user, new_contest.id))
                message = 'Contest %s- "%s" created!' % (new_contest.id,
                                                         new_contest.cname)
                messages.success(request, message)
                return redirect('contest:contest', new_contest.id)

            else:
                message = 'Some fields are invalid!'
                messages.error(request, message)

                return render_index(request, 'contest/editContest.html', {
                    'form': form,
                    'title': title
                })
    raise PermissionDenied
Ejemplo n.º 46
0
def user_profile(request, username):
    try:
        profile_user = User.objects.get(username=username)
        piechart_data = get_user_statistics(profile_user)

        render_data = {}
        render_data['profile_user'] = profile_user
        render_data['piechart_data'] = dumps(piechart_data)
        if request.user == profile_user and not is_public_user(profile_user):
            render_data['profile_form'] = UserProfileForm(
                instance=profile_user)
        if can_change_userlevel(request.user, profile_user):
            render_data['userlevel_form'] = UserLevelForm(instance=profile_user,
                                                          request_user=request.user)

        if request.user == profile_user and request.method == 'POST' \
                and 'profile_form' in request.POST:
            profile_form = UserProfileForm(request.POST, instance=profile_user)
            render_data['profile_form'] = profile_form
            if profile_form.is_valid() and request.user == profile_user:
                logger.info('User %s update profile' % username)
                profile_form.save()
                update_session_auth_hash(request, profile_user)
                request.user = profile_user
                messages.success(request, 'Update profile successfully!')

        if request.method == 'POST' and 'userlevel_form' in request.POST:
            userlevel_form = UserLevelForm(
                request.POST, request_user=request.user)
            if can_change_userlevel(request.user, profile_user):
                if userlevel_form.is_valid(request.user):
                    user_level = userlevel_form.cleaned_data['user_level']
                    logger.info("User %s update %s's user level to %s" %
                                (request.user, username, user_level))
                    profile_user.user_level = user_level
                    profile_user.save()
                    render_data['userlevel_form'] = userlevel_form
                    messages.success(
                        request, 'Update user level successfully!')
                else:
                    user_level = userlevel_form.cleaned_data['user_level']
                    messages.warning(request, "You can't switch user %s to %s" %
                                     (profile_user, user_level))
        return render_index(request, 'users/profile.html', render_data)

    except User.DoesNotExist:
        logger.warning('User %s does not exist' % username)
        raise Http404('User %s does not exist' % username)
Ejemplo n.º 47
0
def detail(request, pid):
    user = validate_user(request.user)
    tag_form = TagForm()
    try:
        problem = Problem.objects.get(pk=pid)
        if not has_problem_auth(user, problem):
            logger.warning(
                "%s has no permission to see problem %d" % (user, problem.pk))
            raise PermissionDenied()
    except Problem.DoesNotExist:
        logger.warning('problem %s not found' % (pid))
        raise Http404('problem %s does not exist' % (pid))
    problem.testcase = get_testcase(problem)
    problem = verify_problem_code(problem)
    problem.in_contest = check_in_contest(problem)
    return render_index(request, 'problem/detail.html', {'problem': problem, 'tag_form': tag_form})
Ejemplo n.º 48
0
def error_message(request, sid):
    try:
        submission = Submission.objects.get(id=sid)
        error_msg = submission.error_msg
        if show_detail(submission, request.user):
            return render_index(request, 'status/errorMessage.html',
                                {'error_message': error_msg})
        else:
            logger.warning('User %s attempt to view detail of SID %s' %
                           (request.user, sid))
            raise PermissionDenied(
                "You don't have permission to view detail of SID %s" % sid)

    except Submission.DoesNotExist:
        logger.warning('SID %s Not Found!' % sid)
        raise Http404('SID %s Not Found!' % sid)
Ejemplo n.º 49
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.º 50
0
def submit(request, pid=None):
    render_data = {}
    render_data['form'] = CodeSubmitForm(initial={'pid': pid})
    if request.method == 'POST':
        codesubmitform = CodeSubmitForm(request.POST, user=request.user)
        render_data['form'] = codesubmitform
        if codesubmitform.is_valid():
            codesubmitform.submit()
            return redirect('%s?username=%s' % (reverse('status:status'), request.user.username))
    # Get problem name
    try:
        pid = request.POST.get('pid', pid)
        render_data['problem_name'] = str(Problem.objects.get(id=pid))
    except:
        logger.warning('Submit pid %s does not exist!' % pid)
    return render_index(request, 'users/submit.html', render_data)
Ejemplo n.º 51
0
def announcement_create(request):
    if not User.has_admin_auth(request.user):
        raise PermissionDenied('User %s does not have the permission!' %
                               str(request.user))
    if request.method == 'POST':
        form = AnnouncementCreationForm(request.POST)
        if form.is_valid():
            announcement = form.save()
            announcement.backend = 'django.contrib.auth.backends.ModelBackend'
            return redirect(reverse('index:index'))
    else:
        form = AnnouncementCreationForm()
    return render_index(request, 'index/announcement.html', {
        'form': form,
        'title': 'Create Announcement'
    })
Ejemplo n.º 52
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.º 53
0
def index(request, alert_info='none'):

    present = timezone.now()
    time_threshold = datetime.now() + timedelta(days=1)
    c_runnings = Contest.objects.filter(start_time__lt=present,
                                        end_time__gt=present,
                                        is_homework=False)
    c_upcomings = Contest.objects.filter(
        start_time__gt=present,
        start_time__lt=time_threshold,
        is_homework=False).order_by('start_time')
    announcements = Announcement.objects.filter(start_time__lt=present,
                                                end_time__gt=present)
    return render_index(
        request, 'index/index.html', {
            'c_runnings': c_runnings,
            'c_upcomings': c_upcomings,
            'announcements': announcements,
            'alert_info': alert_info
        })
Ejemplo n.º 54
0
def contest(request, cid):
    user = user_info.validate_user(request.user)
    try:
        contest = Contest.objects.get(id=cid)
    except Contest.DoesNotExist:
        logger.warning('Contest: Can not find contest %s!' % cid)
        raise Http404('Contest does not exist')

    now = datetime.now()
    # if contest has not started and user is not the owner

    if ((contest.start_time < now)
            or user_info.has_contest_ownership(user, contest)
            or user.has_admin_auth()):
        contest.problems = contest.problem.all()
        for problem in contest.problems:
            problem.testcase = get_testcase(problem)
            problem = verify_problem_code(problem)
            problem.in_contest = check_in_contest(problem)
        scoreboard = get_scoreboard(user, contest)
        status = contest_status(request, contest)
        clarifications = get_clarifications(user, contest)

        initial_form = {'contest': contest, 'asker': user}
        form = ClarificationForm(initial=initial_form)

        initial_reply_form = {'contest': contest, 'replier': user}
        reply_form = ReplyForm(initial=initial_reply_form)
        return render_index(
            request, 'contest/contest.html', {
                'contest': contest,
                'clarifications': clarifications,
                'form': form,
                'reply_form': reply_form,
                'scoreboard': scoreboard,
                'status': status
            })
    else:
        raise PermissionDenied