Пример #1
0
def thread_view(request, category_id, thread_id):
    category, thread = get_forum_ct(category_id, thread_id)
    forum = request.contest.forum

    context = {
        'forum': forum,
        'category': category,
        'thread': thread,
        'msgs': get_msgs(request),
        'post_set': thread.post_set.select_related('author').all(),
        'can_interact_with_users': can_interact_with_users(request),
        'can_interact_with_admins': can_interact_with_admins(request)
    }

    if can_interact_with_users(request):
        if request.method == "POST":
            form = PostForm(request, request.POST)
            if form.is_valid():
                instance = form.save(commit=False)
                instance.author = request.user
                instance.thread = thread
                instance.add_date = request.timestamp
                instance.save()
                return redirect('forum_thread',
                                contest_id=request.contest.id,
                                category_id=category.id,
                                thread_id=thread.id)
        else:
            form = PostForm(request)
        context['form'] = form

    return TemplateResponse(request, 'forum/thread.html', context)
Пример #2
0
def edit_post_view(request, category_id, thread_id, post_id):
    (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id)
    is_admin = is_contest_admin(request)

    if not (post.author == request.user or is_admin):
        raise PermissionDenied

    if request.method == 'POST':
        form = PostForm(request, request.POST, instance=post)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.approved = False
            instance.last_edit_date = request.timestamp
            instance.save()
            return redirect('forum_thread', contest_id=request.contest.id,
                            category_id=category.id,
                            thread_id=thread.id)
    else:
        form = PostForm(request, instance=post)

    return TemplateResponse(request, 'forum/edit_post.html', {
        'forum': request.contest.forum, 'category': category,
        'thread': thread, 'form': form, 'post': post,
        'msgs': get_msgs(request)
    })
Пример #3
0
def thread_view(request, category_id, thread_id):
    category, thread = get_forum_ct(category_id, thread_id)
    forum, lock = request.contest.forum, forum_is_locked(request)
    msgs = get_msgs(request)
    post_set = thread.post_set.select_related('author').all()
    if (request.user.is_authenticated() and not lock) or \
       is_contest_admin(request):
        if request.method == "POST":
            form = PostForm(request, request.POST)
            if form.is_valid():
                instance = form.save(commit=False)
                instance.author = request.user
                instance.thread = thread
                instance.add_date = request.timestamp
                instance.save()
                return redirect('forum_thread', contest_id=request.contest.id,
                                category_id=category.id,
                                thread_id=thread.id)
        else:
            form = PostForm(request)

        return TemplateResponse(request, 'forum/thread.html',
            {'forum': forum, 'category': category, 'thread': thread,
             'form': form, 'msgs': msgs, 'is_locked': lock,
             'post_set': post_set})
    else:
        return TemplateResponse(request, 'forum/thread.html',
            {'forum': forum, 'category': category, 'thread': thread,
             'msgs': msgs, 'is_locked': lock, 'post_set': post_set})
Пример #4
0
def thread_view(request, contest_id, category_id, thread_id):
    (forum, category, thread, lock) = get_forum_objects(request,
                                                  category_id, thread_id,
                                                  lock_required=True)
    msgs = get_msgs(forum, request)
    if (request.user.is_authenticated() and
       not request.contest.forum.is_locked(request.timestamp)) or \
       is_contest_admin(request):
        if request.method == "POST":
            form = PostForm(request, request.POST)
            if form.is_valid():
                instance = form.save(commit=False)
                instance.author = request.user
                instance.thread = thread
                instance.add_date = request.timestamp
                instance.save()
                return redirect('forum_thread', contest_id=contest_id,
                                category_id=category.id,
                                thread_id=thread.id)
        else:
            form = PostForm(request)

        return TemplateResponse(request, 'forum/thread.html',
            {'forum': forum, 'category': category, 'thread': thread,
             'form': form, 'msgs': msgs, 'is_locked': lock})
    else:
        return TemplateResponse(request, 'forum/thread.html',
            {'forum': forum, 'category': category, 'thread': thread,
             'msgs': msgs, 'is_locked': lock})
Пример #5
0
def thread_add_view(request, category_id):
    category = get_object_or_404(Category, id=category_id)
    msgs = get_msgs(request)
    if request.method == 'POST':
        form = NewThreadForm(request, request.POST)
        if form.is_valid():  # adding the new thread
            instance = form.save(commit=False)
            instance.category = category
            instance.save()
            post = PostForm(request, request.POST)
            if post.is_valid():  # adding the new post
                inst_post = post.save(commit=False)
                inst_post.author = request.user
                inst_post.thread = instance
                inst_post.add_date = request.timestamp
                inst_post.save()
                return redirect('forum_thread', contest_id=request.contest.id,
                                category_id=category.id,
                                thread_id=instance.id)
    else:
        form = NewThreadForm(request)

    return TemplateResponse(request, 'forum/thread_add.html',
        {'forum': request.contest.forum, 'category': category,
         'form': form, 'msgs': msgs})
Пример #6
0
def thread_add_view(request, category_id):
    category = get_object_or_404(Category, id=category_id)
    if request.method == 'POST':
        form = NewThreadForm(request, request.POST)
        if form.is_valid():  # adding the new thread
            instance = form.save(commit=False)
            instance.category = category
            instance.save()
            post = PostForm(request, request.POST)
            if post.is_valid():  # adding the new post
                inst_post = post.save(commit=False)
                inst_post.author = request.user
                inst_post.thread = instance
                inst_post.add_date = request.timestamp
                inst_post.save()
                return redirect('forum_thread',
                                contest_id=request.contest.id,
                                category_id=category.id,
                                thread_id=instance.id)
    else:
        form = NewThreadForm(request)

    return TemplateResponse(
        request, 'forum/thread_add.html', {
            'forum': request.contest.forum,
            'category': category,
            'form': form,
            'msgs': get_msgs(request)
        })
Пример #7
0
def category_view(request, contest_id, category_id):
    (forum, category, lock) = get_forum_objects(request, category_id,
                                           lock_required=True)
    msgs = get_msgs(forum, request)
    return TemplateResponse(request, 'forum/category.html',
        {'forum': forum, 'category': category, 'msgs': msgs,
         'is_locked': lock})
Пример #8
0
def thread_view(request, category_id, thread_id):
    category, thread = get_forum_ct(category_id, thread_id)
    forum, lock = request.contest.forum, forum_is_locked(request)
    msgs = get_msgs(request)
    post_set = thread.post_set.select_related('author').all()
    if (request.user.is_authenticated() and not lock) or \
       is_contest_admin(request):
        if request.method == "POST":
            form = PostForm(request, request.POST)
            if form.is_valid():
                instance = form.save(commit=False)
                instance.author = request.user
                instance.thread = thread
                instance.add_date = request.timestamp
                instance.save()
                return redirect('forum_thread', contest_id=request.contest.id,
                                category_id=category.id,
                                thread_id=thread.id)
        else:
            form = PostForm(request)

        return TemplateResponse(request, 'forum/thread.html',
            {'forum': forum, 'category': category, 'thread': thread,
             'form': form, 'msgs': msgs, 'is_locked': lock,
             'post_set': post_set})
    else:
        return TemplateResponse(request, 'forum/thread.html',
            {'forum': forum, 'category': category, 'thread': thread,
             'msgs': msgs, 'is_locked': lock, 'post_set': post_set})
Пример #9
0
def edit_post_view(request, category_id, thread_id, post_id):
    (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id)
    is_admin = is_contest_admin(request)

    if not (post.author == request.user or is_admin):
        raise PermissionDenied

    if request.method == 'POST':
        form = PostForm(request, request.POST, instance=post)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.approved = False
            instance.last_edit_date = request.timestamp
            instance.save()
            return redirect('forum_thread',
                            contest_id=request.contest.id,
                            category_id=category.id,
                            thread_id=thread.id)
    else:
        form = PostForm(request, instance=post)

    return TemplateResponse(
        request, 'forum/edit_post.html', {
            'forum': request.contest.forum,
            'category': category,
            'thread': thread,
            'form': form,
            'post': post,
            'msgs': get_msgs(request)
        })
Пример #10
0
def thread_view(request, category_id, thread_id):
    category, thread = get_forum_ct(category_id, thread_id)
    forum = request.contest.forum

    context = {'forum': forum,
               'category': category,
               'thread': thread,
               'msgs': get_msgs(request),
               'post_set': thread.post_set.select_related('author').all(),
               'can_interact_with_users': can_interact_with_users(request),
               'can_interact_with_admins': can_interact_with_admins(request)}

    if can_interact_with_users(request):
        if request.method == "POST":
            form = PostForm(request, request.POST)
            if form.is_valid():
                instance = form.save(commit=False)
                instance.author = request.user
                instance.thread = thread
                instance.add_date = request.timestamp
                instance.save()
                return redirect('forum_thread', contest_id=request.contest.id,
                                category_id=category.id,
                                thread_id=thread.id)
        else:
            form = PostForm(request)
        context['form'] = form

    return TemplateResponse(request, 'forum/thread.html', context)
Пример #11
0
def edit_post_view(request, contest_id, category_id, thread_id, post_id):
    (forum, cat, thread, post) = get_forum_objects(request, category_id,
                                                   thread_id, post_id)
    msgs = get_msgs(forum, request)
    is_admin = is_contest_admin(request)
    if post.author != request.user and not is_admin:
        raise PermissionDenied
    if request.method == 'POST':
        form = PostForm(request, request.POST, instance=post)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.last_edit_date = request.timestamp
            instance.save()
            return redirect('forum_thread',
                            contest_id=contest_id,
                            category_id=cat.id,
                            thread_id=thread.id)
    else:
        form = PostForm(request, instance=post)

    return TemplateResponse(
        request, 'forum/edit_post.html', {
            'forum': forum,
            'category': cat,
            'thread': thread,
            'form': form,
            'post': post,
            'msgs': msgs
        })
Пример #12
0
def forum_view(request, contest_id):
    (forum, lock) = get_forum_objects(request, lock_required=True)
    msgs = get_msgs(forum, request)
    return TemplateResponse(request, 'forum/forum.html', {
        'forum': forum,
        'msgs': msgs,
        'is_locked': lock
    })
Пример #13
0
def forum_view(request):
    msgs = get_msgs(request)
    category_set = request.contest.forum.category_set \
        .prefetch_related('thread_set', 'thread_set__post_set') \
        .all()
    return TemplateResponse(request, 'forum/forum.html', {
        'forum': request.contest.forum, 'msgs': msgs,
        'is_locked': forum_is_locked(request), 'category_set': category_set
    })
Пример #14
0
def forum_view(request):
    msgs = get_msgs(request)
    category_set = request.contest.forum.category_set \
        .prefetch_related('thread_set', 'thread_set__post_set') \
        .all()
    return TemplateResponse(request, 'forum/forum.html', {
        'forum': request.contest.forum, 'msgs': msgs,
        'is_locked': forum_is_locked(request), 'category_set': category_set
    })
Пример #15
0
def category_view(request, contest_id, category_id):
    (forum, category, lock) = get_forum_objects(request,
                                                category_id,
                                                lock_required=True)
    msgs = get_msgs(forum, request)
    return TemplateResponse(request, 'forum/category.html', {
        'forum': forum,
        'category': category,
        'msgs': msgs,
        'is_locked': lock
    })
Пример #16
0
def category_view(request, category_id):
    category = get_object_or_404(Category, id=category_id)
    msgs = get_msgs(request)
    threads = category.thread_set \
        .prefetch_related('post_set') \
        .select_related('last_post', 'last_post__author') \
        .all()
    return TemplateResponse(request, 'forum/category.html',
        {'forum': request.contest.forum, 'category': category,
         'threads': threads, 'msgs': msgs,
         'is_locked': forum_is_locked(request)})
Пример #17
0
def category_view(request, category_id):
    category = get_object_or_404(Category, id=category_id)
    msgs = get_msgs(request)
    threads = category.thread_set \
        .prefetch_related('post_set') \
        .select_related('last_post', 'last_post__author') \
        .all()
    return TemplateResponse(request, 'forum/category.html',
        {'forum': request.contest.forum, 'category': category,
         'threads': threads, 'msgs': msgs,
         'is_locked': forum_is_locked(request)})
Пример #18
0
def forum_view(request):
    category_set = request.contest.forum.category_set \
        .prefetch_related('thread_set', 'thread_set__post_set') \
        .all()

    return TemplateResponse(request, 'forum/forum.html', {
        'forum': request.contest.forum, 'msgs': get_msgs(request),
        'can_interact_with_users': can_interact_with_users(request),
        'can_interact_with_admins': can_interact_with_admins(request),
        'is_locked': request.contest.forum.is_locked(),
        'category_set': category_set,
    })
Пример #19
0
def forum_view(request):
    category_set = request.contest.forum.category_set \
        .prefetch_related('thread_set', 'thread_set__post_set') \
        .all()

    return TemplateResponse(request, 'forum/forum.html', {
        'forum': request.contest.forum, 'msgs': get_msgs(request),
        'can_interact_with_users': can_interact_with_users(request),
        'can_interact_with_admins': can_interact_with_admins(request),
        'is_locked': request.contest.forum.is_locked(),
        'category_set': category_set,
    })
Пример #20
0
def category_view(request, category_id):
    category = get_object_or_404(Category, id=category_id)
    threads = category.thread_set \
        .prefetch_related('post_set') \
        .select_related('last_post', 'last_post__author') \
        .all()

    return TemplateResponse(request, 'forum/category.html', {
        'forum': request.contest.forum, 'category': category,
        'threads': threads, 'msgs': get_msgs(request),
        'can_interact_with_users': can_interact_with_users(request),
        'can_interact_with_admins': can_interact_with_admins(request)
    })
Пример #21
0
def category_view(request, category_id):
    category = get_object_or_404(Category, id=category_id)
    threads = category.thread_set \
        .prefetch_related('post_set') \
        .select_related('last_post', 'last_post__author') \
        .all()

    return TemplateResponse(request, 'forum/category.html', {
        'forum': request.contest.forum, 'category': category,
        'threads': threads, 'msgs': get_msgs(request),
        'can_interact_with_users': can_interact_with_users(request),
        'can_interact_with_admins': can_interact_with_admins(request)
    })
Пример #22
0
def ban_user_view(request, user_id):
    # Banning user blocks any user interaction with forum, while still
    # allowing viewing forum contents.

    forum = request.contest.forum

    if 'next' in request.GET:
        redirect_url = request.GET['next']
    else:
        redirect_url = reverse('forum',
                               kwargs={'contest_id': request.contest.id})

    user = get_object_or_404(User, id=user_id)
    if can_admin_contest(user, request.contest):
        messages.error(request, _("You can't ban an admin."))
        return redirect(redirect_url)

    if request.method == 'POST':
        form = BanForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.user = user
            instance.forum = request.contest.forum
            instance.admin = request.user
            instance.save()
            messages.success(request, _("Banned user: "******"Removed %d reports") % removed_reports_count)
            return redirect(redirect_url)
    else:
        form = BanForm()

    return TemplateResponse(
        request,
        'forum/ban_user.html',
        {
            'banned_user': user,
            'form': form,
            'next': redirect_url,
            'msgs': get_msgs(request),
        },
    )
Пример #23
0
def latest_posts_forum_view(request):
    posts = (Post.objects.filter(
        thread__category__forum=request.contest.forum.pk, ).prefetch_related(
            'thread').order_by('-add_date'))
    posts = annotate_posts_with_current_user_reactions(request, posts)

    context = {
        'forum': request.contest.forum,
        'msgs': get_msgs(request),
        'post_set': posts,
        'posts_per_page': settings.FORUM_PAGE_SIZE,
        'can_interact_with_users': can_interact_with_users(request),
        'can_interact_with_admins': can_interact_with_admins(request),
    }

    return TemplateResponse(request, 'forum/latest_posts.html', context)
Пример #24
0
def ban_user_view(request, user_id):
    # Banning user blocks any user interaction with forum, while still
    # allowing viewing forum contents.

    forum = request.contest.forum

    if 'next' in request.GET:
        redirect_url = request.GET['next']
    else:
        redirect_url = reverse('forum', kwargs={'contest_id': request.contest.id})

    user = get_object_or_404(User, id=user_id)
    if can_admin_contest(user, request.contest):
        messages.error(request, _("You can't ban an admin."))
        return redirect(redirect_url)

    if request.method == 'POST':
        form = BanForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.user = user
            instance.forum = request.contest.forum
            instance.admin = request.user
            instance.save()
            messages.success(request, _("Banned user: "******"Removed %d reports") %
                                 removed_reports_count)
            return redirect(redirect_url)
    else:
        form = BanForm()

    return TemplateResponse(request, 'forum/ban_user.html',
                            {'banned_user': user,
                             'form': form,
                             'next': redirect_url,
                             'msgs': get_msgs(request)})
Пример #25
0
def thread_view(request, contest_id, category_id, thread_id):
    (forum, category, thread, lock) = get_forum_objects(request,
                                                        category_id,
                                                        thread_id,
                                                        lock_required=True)
    msgs = get_msgs(forum, request)
    if (request.user.is_authenticated() and
       not request.contest.forum.is_locked(request.timestamp)) or \
       is_contest_admin(request):
        if request.method == "POST":
            form = PostForm(request, request.POST)
            if form.is_valid():
                instance = form.save(commit=False)
                instance.author = request.user
                instance.thread = thread
                instance.add_date = request.timestamp
                instance.save()
                return redirect('forum_thread',
                                contest_id=contest_id,
                                category_id=category.id,
                                thread_id=thread.id)
        else:
            form = PostForm(request)

        return TemplateResponse(
            request, 'forum/thread.html', {
                'forum': forum,
                'category': category,
                'thread': thread,
                'form': form,
                'msgs': msgs,
                'is_locked': lock
            })
    else:
        return TemplateResponse(
            request, 'forum/thread.html', {
                'forum': forum,
                'category': category,
                'thread': thread,
                'msgs': msgs,
                'is_locked': lock
            })
Пример #26
0
def edit_post_view(request, contest_id, category_id, thread_id, post_id):
    (forum, cat, thread, post) = get_forum_objects(request,
                                                   category_id, thread_id,
                                                   post_id)
    msgs = get_msgs(forum, request)
    is_admin = is_contest_admin(request)
    if post.author != request.user and not is_admin:
        raise PermissionDenied
    if request.method == 'POST':
        form = PostForm(request, request.POST, instance=post)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.last_edit_date = request.timestamp
            instance.save()
            return redirect('forum_thread', contest_id=contest_id,
                            category_id=cat.id,
                            thread_id=thread.id)
    else:
        form = PostForm(request, instance=post)

    return TemplateResponse(request, 'forum/edit_post.html',
        {'forum': forum, 'category': cat, 'thread': thread, 'form': form,
         'post': post, 'msgs': msgs})
Пример #27
0
def forum_view(request, contest_id):
    (forum, lock) = get_forum_objects(request, lock_required=True)
    msgs = get_msgs(forum, request)
    return TemplateResponse(request, 'forum/forum.html', {'forum': forum,
                                                          'msgs': msgs,
                                                          'is_locked': lock})