def hide_post_view(request, category_id, thread_id, post_id): (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id) post.hidden = True post.reported = False post.save() return redirect('forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id)
def show_post_view(request, category_id, thread_id, post_id): # Admin shows reported/hidden post again (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id) post.hidden = False post.save() return redirect('forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id)
def delete_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 ( # we assert following: is_admin or ( post.author == request.user # you can remove a post only if there is no post added after yours and not thread.post_set.filter(add_date__gt=post.add_date).exists() and post.can_be_removed() ) ): raise PermissionDenied else: choice = confirmation_view(request, 'forum/confirm_delete.html', {'elem': post}) if not isinstance(choice, bool): return choice if choice: post.delete() if not thread.post_set.exists(): thread.delete() return redirect('forum_category', contest_id=request.contest.id, category_id=category.id) return redirect('forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id)
def delete_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 is_admin and \ (post.author != request.user or (post.author == request.user and (thread.post_set.filter(add_date__gt=post.add_date).exists() or not post.can_be_removed()))): # author: if there are other posts added later or timedelta is gt 15min # if user is not the author of the post or forum admin raise PermissionDenied else: choice = confirmation_view(request, 'forum/confirm_delete.html', {'elem': post}) if not isinstance(choice, bool): return choice if choice: post.delete() if not thread.post_set.exists(): thread.delete() return redirect('forum_category', contest_id=request.contest.id, category_id=category.id) return redirect('forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id)
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) })
def report_post_view(request, category_id, thread_id, post_id): (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id) if not post.reported: post.reported = True post.reported_by = request.user post.save() return redirect('forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id)
def revoke_approval_post_view(request, category_id, thread_id, post_id): (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id) post.approved = False post.save() return redirect( 'forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id, )
def show_post_view(request, category_id, thread_id, post_id): # Admin shows reported/hidden post again (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id) post.hidden = False post.save() return redirect( 'forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id, )
def hide_post_view(request, category_id, thread_id, post_id): (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id) post.hidden = True post.reported = False post.report_reason = "" post.save() return redirect( 'forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id, )
def edit_post_view(request, category_id, thread_id, post_id): (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id) msgs = get_msgs(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=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': msgs})
def report_post_view(request, category_id, thread_id, post_id): (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id) context = {'category': category, 'thread': thread, 'post': post} if not post.reported and not post.approved: if request.method == "POST": form = ReportForm(request.POST, instance=post) if form.is_valid(): instance = form.save(commit=False) instance.reported = True instance.reported_by = request.user instance.save() return redirect( 'forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id, ) else: form = ReportForm(instance=post) context['form'] = form return TemplateResponse(request, 'forum/confirm_report.html', context)
def revoke_approval_post_view(request, category_id, thread_id, post_id): (category, thread, post) = get_forum_ctp(category_id, thread_id, post_id) post.approved = False post.save() return redirect('forum_thread', contest_id=request.contest.id, category_id=category.id, thread_id=thread.id)