def moderate(request, forum_id): forum = get_object_or_404(Forum, pk=forum_id) topics = forum.topics.order_by('-sticky', '-updated').select_related() if isa_forum_moderator(forum, request.user): topic_ids = request.POST.getlist('topic_id') if 'move_topics' in request.POST: return render(request, 'djangobb_forum/move_topic.html', { 'categories': Category.objects.all(), 'topic_ids': topic_ids, 'exclude_forum': forum, }) elif 'delete_topics' in request.POST: for topic_id in topic_ids: topic = get_object_or_404(Topic, pk=topic_id) topic.delete() return HttpResponseRedirect(reverse('djangobb:index')) elif 'open_topics' in request.POST: for topic_id in topic_ids: open_close_topic(request, topic_id, 'o') return HttpResponseRedirect(reverse('djangobb:index')) elif 'close_topics' in request.POST: for topic_id in topic_ids: open_close_topic(request, topic_id, 'c') return HttpResponseRedirect(reverse('djangobb:index')) return render(request, 'djangobb_forum/moderate.html', {'forum': forum, 'topics': topics, #'sticky_topics': forum.topics.filter(sticky=True), 'posts': forum.posts.count(), }) else: raise Http404
def show_forum(request, forum_id, full=True): forum = get_object_or_404(Forum, pk=forum_id) if not forum.category.language == request.LANGUAGE_CODE: return HttpResponseRedirect(reverse('djangobb:index')) if not forum.category.has_access(request.user): return HttpResponseForbidden() topics = forum.topics.order_by('-sticky', '-updated').select_related() moderator = isa_forum_moderator(forum, request.user) to_return = {'categories': Category.objects.all(), 'forum': forum, 'posts': forum.post_count, 'topics': topics, 'moderator': moderator, } if full: return render(request, 'djangobb_forum/forum.html', to_return) else: return render(request, 'djangobb_forum/lofi/forum.html', to_return)
def show_topic(request, topic_id, full=True): topic = get_object_or_404(Topic.objects.select_related(), pk=topic_id) if not topic.forum.category.language == request.LANGUAGE_CODE: return HttpResponseRedirect(reverse('djangobb:index')) if not topic.forum.category.has_access(request.user): return HttpResponseForbidden() Topic.objects.filter(pk=topic.id).update(views=F('views') + 1) last_post = topic.last_post if request.user.is_authenticated(): topic.update_read(request.user) posts = topic.posts.all().select_related() initial = {} if request.user.is_authenticated(): initial = {'markup': request.user.forum_profile.markup} form = AddPostForm(topic=topic, initial=initial) moderator = isa_forum_moderator(topic.forum, request.user) if request.user.is_authenticated() and request.user in topic.subscribers.all(): subscribed = True else: subscribed = False highlight_word = request.GET.get('hl', '') if full: return render(request, 'djangobb_forum/topic.html', {'categories': Category.objects.all(), 'topic': topic, 'last_post': last_post, 'form': form, 'moderator': moderator, 'subscribed': subscribed, 'posts': posts, 'highlight_word': highlight_word, }) else: return render(request, 'djangobb_forum/lofi/topic.html', {'categories': Category.objects.all(), 'topic': topic, 'posts': posts, })
def delete_posts(request, topic_id): topic = Topic.objects.select_related().get(pk=topic_id) if forum_moderated_by(topic, request.user): deleted = False post_list = request.POST.getlist('post') for post_id in post_list: if not deleted: deleted = True delete_post(request, post_id) if deleted: return HttpResponseRedirect(topic.get_absolute_url()) last_post = topic.posts.latest() if request.user.is_authenticated(): topic.update_read(request.user) posts = topic.posts.all().select_related() initial = {} if request.user.is_authenticated(): initial = {'markup': request.user.forum_profile.markup} form = AddPostForm(topic=topic, initial=initial) moderator = isa_forum_moderator(topic.forum, request.user) if request.user.is_authenticated() and request.user in topic.subscribers.all(): subscribed = True else: subscribed = False return render(request, 'djangobb_forum/delete_posts.html', { 'topic': topic, 'last_post': last_post, 'form': form, 'moderator': moderator, 'subscribed': subscribed, 'posts': posts, })
def delete_post(request, post_id): post = get_object_or_404(Post, pk=post_id) last_post = post.topic.last_post topic = post.topic forum = post.topic.forum allowed = False if isa_forum_moderator(post.topic.forum, request.user) or \ (post.user == request.user and post == last_post): allowed = True if not allowed: return HttpResponseRedirect(post.get_absolute_url()) post.delete() try: Topic.objects.get(pk=topic.id) except Topic.DoesNotExist: #removed latest post in topic return HttpResponseRedirect(forum.get_absolute_url()) else: return HttpResponseRedirect(topic.get_absolute_url())
def forum_editable_by(post, user): """ Check if the post could be edited by the user. """ return user==post.user or isa_forum_moderator(post.topic.forum, user)
def forum_moderated_by(topic, user): """ Check if user is moderator of topic's forum. """ return isa_forum_moderator(topic.forum, user)