Пример #1
0
def new(request, contest_id):
    contest = Contest.objects.get(pk=contest_id)
    if request.user.has_perm('manage_contest', contest):
        group_form = GroupForm(request.POST)

        if group_form.is_valid():
            group_name = contest.name + "_" + group_form.cleaned_data['name']
            group, created = Group.objects.get_or_create(name=group_name)
            if created:
                assign_perm('view_contest', group, contest)
                group.save()

                for task in Task.objects.filter(contest=contest_id):
                    GroupTaskDetails.objects.create(task=task,
                                                    group=group,
                                                    open=task.open,
                                                    deadline=task.deadline,
                                                    close=task.close)
                success_msg = 'New group %s for contest %s has been created.' % (group.name, contest.name)
                messages.add_message(request,
                                     messages.SUCCESS,
                                     success_msg
                                     )
            else:
                messages.add_message(request,
                                     messages.ERROR,
                                     'Group with that name already exists.')
    else:
        permission_denied_message(request)

    return HttpResponseRedirect(reverse('contest_details',
                                        args=[contest_id, 'groups']))
Пример #2
0
def edit_task_details(request, contest_id, group_id, task_id):
    if not request.user.has_perm('manage_contest',
                                 Contest.objects.get(pk=contest_id)):
        permission_denied_message(request)
        return HttpResponseRedirect(
            reverse('contest_details', args=[contest_id]))
    else:
        if request.method == 'POST':
            form = TaskDetailsForm(request.POST)
            if form.is_valid():
                details = GroupTaskDetails.objects.get(group=group_id,
                                                       task=task_id)
                details.open = form.cleaned_data['open']
                details.deadline = form.cleaned_data['deadline']
                details.close = form.cleaned_data['close']
                details.save()
                messages.add_message(request, messages.SUCCESS,
                                     "Timestamps have been updated.")
                return HttpResponseRedirect(
                    reverse('contest_group_details',
                            args=[contest_id, group_id]))
        else:
            details = GroupTaskDetails.objects.get(task=task_id,
                                                   group=group_id)
            return render(
                request, 'contest/task_details_edit.html', {
                    'contest_id': contest_id,
                    'group_id': group_id,
                    'task': Task.objects.get(pk=task_id),
                    'form': TaskDetailsForm(instance=details),
                })
Пример #3
0
def fetch_task(request, id):
    contest = Contest.objects.get(pk=id)
    if not request.user.has_perm('manage_contest', contest):
        permission_denied_message(request)
    elif request.method == 'POST':
        form = TaskFetchForm(request.POST)
        if form.is_valid():
            parent_task = form.cleaned_data['task']
            fetched_task = deepcopy(parent_task)
            fetched_task.pk = None
            fetched_task.contest = contest
            fetched_task.parent = parent_task
            fetched_task.open = form.cleaned_data['open']
            fetched_task.deadline = form.cleaned_data['deadline']
            fetched_task.close = form.cleaned_data['close']
            fetched_task.save()
            messages.add_message(request, messages.SUCCESS, "New task has been added to contest %s."
                                 % contest.name)
            # add tasks to groups
            for group in get_groups_with_perms(contest, attach_perms=True):
                GroupTaskDetails.objects.create(task=fetched_task, group=group,
                                                open=fetched_task.open, deadline=fetched_task.deadline,
                                                close=fetched_task.close)

    return HttpResponseRedirect(reverse('contest_details',
                                        args=[id, 'tasks']))
Пример #4
0
def new(request, contest_id):
    contest = Contest.objects.get(pk=contest_id)
    if request.user.has_perm('manage_contest', contest):
        group_form = GroupForm(request.POST)

        if group_form.is_valid():
            group_name = contest.name + "_" + group_form.cleaned_data['name']
            group, created = Group.objects.get_or_create(name=group_name)
            if created:
                assign_perm('view_contest', group, contest)
                group.save()

                for task in Task.objects.filter(contest=contest_id):
                    GroupTaskDetails.objects.create(task=task,
                                                    group=group,
                                                    open=task.open,
                                                    deadline=task.deadline,
                                                    close=task.close)
                success_msg = 'New group %s for contest %s has been created.' % (
                    group.name, contest.name)
                messages.add_message(request, messages.SUCCESS, success_msg)
            else:
                messages.add_message(request, messages.ERROR,
                                     'Group with that name already exists.')
    else:
        permission_denied_message(request)

    return HttpResponseRedirect(
        reverse('contest_details', args=[contest_id, 'groups']))
Пример #5
0
def delete(request, contest_id, group_id):
    if not request.user.has_perm('manage_contest', Contest.objects.get(pk=contest_id)):
        permission_denied_message(request)
        return HttpResponseRedirect(reverse('contest_details', args=[contest_id, 'groups']))
    else:
        try:
            Group.objects.get(pk=group_id).delete()
            messages.add_message(request, messages.SUCCESS, "Group has been successfully deleted.")
        except ObjectDoesNotExist:
            messages.add_message(request, messages.ERROR, "Group does not exists.")
        return HttpResponseRedirect(reverse('contest_details', args=[contest_id, 'groups']))
Пример #6
0
def details(request, task_id):
    task = Task.objects.get(pk=task_id)
    if not request.user.has_perm('contest.view_task', task):
        permission_denied_message(request)
        return HttpResponseRedirect('/')
    if request.user.has_perm('contest.edit_task', task):
        task_path = str(task_id)
        task_files = task_filesystem.listdir(task_path)[1]
        upload_file_form = UploadFileForm()
    return render(request, 'contest/task_details.html',
                  { 'task': task, 
                    'task_files': task_files,
                    'upload_file_form': upload_file_form })
Пример #7
0
def view(request, contest_id, group_id):
    contest = Contest.objects.get(pk=contest_id)
    if not request.user.has_perm('view_contest', contest):
        permission_denied_message(request)
        return HttpResponseRedirect('/')
    else:
        group = Group.objects.get(pk=group_id)

        return render(request, 'contest/group_details.html', {
            'contest': contest,
            'group': group,
            'tasks_details': GroupTaskDetails.objects.filter(group=group_id),
            'participants': group.user_set.all()
        })
Пример #8
0
def view(request, contest_id, group_id):
    contest = Contest.objects.get(pk=contest_id)
    if not request.user.has_perm('view_contest', contest):
        permission_denied_message(request)
        return HttpResponseRedirect('/')
    else:
        group = Group.objects.get(pk=group_id)

        return render(
            request, 'contest/group_details.html', {
                'contest': contest,
                'group': group,
                'tasks_details':
                GroupTaskDetails.objects.filter(group=group_id),
                'participants': group.user_set.all()
            })
Пример #9
0
def delete(request, contest_id, group_id):
    if not request.user.has_perm('manage_contest',
                                 Contest.objects.get(pk=contest_id)):
        permission_denied_message(request)
        return HttpResponseRedirect(
            reverse('contest_details', args=[contest_id, 'groups']))
    else:
        try:
            Group.objects.get(pk=group_id).delete()
            messages.add_message(request, messages.SUCCESS,
                                 "Group has been successfully deleted.")
        except ObjectDoesNotExist:
            messages.add_message(request, messages.ERROR,
                                 "Group does not exists.")
        return HttpResponseRedirect(
            reverse('contest_details', args=[contest_id, 'groups']))
Пример #10
0
def delete(request, contest_id, news_id):
    if not request.user.has_perm('manage_contest',
                                 Contest.objects.get(pk=contest_id)):
        permission_denied_message(request)
        return HttpResponseRedirect(
            request, reverse('contest_details', args=[contest_id, 'news']))
    else:
        try:
            news = News.objects.get(pk=news_id)
            news.delete()
            messages.add_message(request, messages.SUCCESS,
                                 "News deleted successfully.")
        except ObjectDoesNotExist:
            permission_denied_message(request)
        return HttpResponseRedirect(
            reverse('contest_details', args=[contest_id, 'news']))
Пример #11
0
def new(request, contest_id):
    if not request.user.has_perm('manage_contest',
                                 Contest.objects.get(pk=contest_id)):
        permission_denied_message(request)
        return HttpResponseRedirect(
            request, reverse('contest_details', args=[contest_id, 'news']))
    else:
        form = NewsForm(request.POST)
        if form.is_valid():
            contest = Contest.objects.get(pk=contest_id)
            contest.news_set.create(title=form.data['title'],
                                    description=form.data['description'],
                                    contest=contest,
                                    author=request.user)
            messages.add_message(request, messages.SUCCESS,
                                 "New news has been created.")
        return HttpResponseRedirect(
            reverse('contest_details', args=[contest_id, 'news']))
Пример #12
0
def edit(request, contest_id, news_id):
    if not request.user.has_perm('manage_contest',
                                 Contest.objects.get(pk=contest_id)):
        permission_denied_message(request)
        return HttpResponseRedirect(
            request, reverse('contest_details', args=[contest_id, 'news']))
    else:
        try:
            news = News.objects.get(pk=news_id)
            if request.method == 'POST':
                form = NewsForm(request.POST, instance=news)
                if form.is_valid():
                    form.save(commit=True)
            else:
                return render(request, 'contest/news_edit.html', {
                    'form': NewsForm(instance=news),
                })
        except ObjectDoesNotExist:
            permission_denied_message(request)
        return HttpResponseRedirect(
            reverse('contest_details', args=[contest_id, 'news']))
Пример #13
0
def edit(request, id=None):
    if id:
        contest = Contest.objects.get(pk=id)
        form_post = reverse('contest_edit', args=[id])
        if not request.user.has_perm('contest.manage_contest', contest):
            permission_denied_message(request)
            return HttpResponseRedirect('/')
    else:
        contest = Contest()
        form_post = reverse('contest_new')
        if not request.user.has_perm('contest.add_contest'):
            permission_denied_message(request)
            return HttpResponseRedirect('/')

    if request.method == 'POST':
        form = ContestForm(request.POST, instance=contest)
    else:
        form = ContestForm(instance=contest)
    if form.is_valid():
        new_contest = form.save(commit=False)
        new_contest.slug = slugify(new_contest.name)
        if id is None:
            new_contest.creator_id = request.user.pk
        new_contest.save()
        assign_perm('contest.manage_contest', request.user, new_contest)
        assign_perm('contest.view_contest', request.user, new_contest)
        cache_key = make_template_fragment_key('contest_description',
                                               [new_contest.pk])
        cache.delete(cache_key)
        messages.add_message(request, messages.SUCCESS, "Contest has been successfully updated.")
        return HttpResponseRedirect(reverse('contest_details',
                                            args=[new_contest.pk]))

    messages.add_message(request, messages.SUCCESS, "Contest has been successfully created.")
    return render(request, 'contest/contest_new.html', {
        'form': form,
        'form_post': form_post
    })
Пример #14
0
def edit_task_details(request, contest_id, group_id, task_id):
    if not request.user.has_perm('manage_contest', Contest.objects.get(pk=contest_id)):
        permission_denied_message(request)
        return HttpResponseRedirect(reverse('contest_details', args=[contest_id]))
    else:
        if request.method == 'POST':
            form = TaskDetailsForm(request.POST)
            if form.is_valid():
                details = GroupTaskDetails.objects.get(group=group_id, task=task_id)
                details.open = form.cleaned_data['open']
                details.deadline = form.cleaned_data['deadline']
                details.close = form.cleaned_data['close']
                details.save()
                messages.add_message(request, messages.SUCCESS, "Timestamps have been updated.")
                return HttpResponseRedirect(reverse('contest_group_details', args=[contest_id, group_id]))
        else:
            details = GroupTaskDetails.objects.get(task=task_id, group=group_id)
            return render(request, 'contest/task_details_edit.html', {
                'contest_id': contest_id,
                'group_id': group_id,
                'task': Task.objects.get(pk=task_id),
                'form': TaskDetailsForm(instance=details),
            })
Пример #15
0
def details(request, id, tab='news'):
    contest = Contest.objects.get(pk=id)
    if not request.user.has_perm('contest.view_contest', contest):
        permission_denied_message(request)
        return HttpResponseRedirect('/')

    contest_form = ContestForm(instance=contest)

    groups = get_groups_with_perms(contest, attach_perms=True)
    groups = [k for k, v in groups.items() if 'view_contest' in v]
    group_form = GroupForm()

    news_set = contest.news_set.all().order_by('-created_at')
    news_form = NewsForm()

    fetch_task_form = TaskFetchForm()

    participants = []
    if request.user.has_perm('contest.manage_contest', contest):
        participants = get_users_with_perms(contest, attach_perms=True)
        participants = [k for k, v in participants.items()
                        if 'participate_in_contest' in v]

    tasks = Task.objects.filter(contest=contest)
    return render(request, 'contest/contest_details.html', {
        'contest': contest,
        'contest_form': contest_form,
        'groups': groups,
        'group_form': group_form,
        'participants': participants,
        'news_set': news_set,
        'news_form': news_form,
        'fetch_task_form': fetch_task_form,
        'tasks': tasks,
        'tab': tab,
    })