Ejemplo n.º 1
0
def delete_post_ctx(request, post_id):
    post = get_object_or_404(Post, pk=post_id)
    last_post = post.topic.posts.order_by('-created')[0]

    allowed = False
    if pybb_moderated_by(post, request.user) or \
            (post.user == request.user and post == last_post):
        allowed = True

    if not allowed:
        return HttpResponseRedirect(post.get_absolute_url())

    if request.method == 'POST':
        topic = post.topic
        forum = post.topic.forum
        post.delete()

        try:
            Topic.objects.get(pk=topic.id)
        except Topic.DoesNotExist:
            return HttpResponseRedirect(forum.get_absolute_url())
        else:
            return HttpResponseRedirect(topic.get_absolute_url())
    else:
        return {
            'post': post,
        }
Ejemplo n.º 2
0
def close_topic(request, topic_id):
    topic = get_object_or_404(Topic, pk=topic_id)
    if pybb_moderated_by(topic, request.user):
        if not topic.closed:
            topic.closed = True
            topic.save()
    return HttpResponseRedirect(topic.get_absolute_url())
Ejemplo n.º 3
0
def unstick_topic(request, topic_id):

    topic = get_object_or_404(Topic, pk=topic_id)
    if pybb_moderated_by(topic, request.user):
        if topic.sticky:
            topic.sticky = False
            topic.save()
    return HttpResponseRedirect(topic.get_absolute_url())
Ejemplo n.º 4
0
def show_forum_ctx(request, forum_id):
    forum = get_object_or_404(Forum, pk=forum_id)

    if forum.category.internal and not allowed_for(request.user):
        raise Http404

    user_is_mod = pybb_moderated_by(forum, request.user)

    topics = forum.topics.order_by('-sticky', '-updated').select_related()

    return {
        'forum': forum,
        'topics': topics,
        'page_size': pybb_settings.FORUM_PAGE_SIZE,
        'user_is_mod': user_is_mod,
    }
Ejemplo n.º 5
0
def show_topic_ctx(request, topic_id):
    """View of topic posts including a form to add a Post."""

    context = {}
    try:
        topic = Topic.objects.select_related().get(pk=topic_id)
        context.update({'topic': topic})
    except Topic.DoesNotExist:
        raise Http404()

    if topic.forum.category.internal and not allowed_for(request.user):
        raise Http404

    topic.views += 1
    topic.save()

    if request.user.is_authenticated:
        topic.update_read(request.user)

    last_post = topic.posts.order_by('-created')[0]
    context.update({'last_post': last_post})

    initial = {}
    user_is_mod = False
    if request.user.is_authenticated:
        initial = {'markup': 'markdown'}

        form = AddPostForm(
            topic=topic,
            initial=initial,
            user=request.user,
        )
        context.update({'form': form})

        user_is_mod = pybb_moderated_by(topic, request.user)
        context.update({'user_is_mod': user_is_mod})

        subscribed = (request.user.is_authenticated
                      and request.user in topic.subscribers.all())
        context.update({'subscribed': subscribed})

        is_spam = False
        if topic.is_hidden:
            is_spam = topic.posts.first().is_spam()
        context.update({'is_spam': is_spam})

    if user_is_mod:
        posts = topic.posts.select_related()
    else:
        posts = topic.posts.exclude(hidden=True).select_related()
    context.update({'posts': posts})

    # TODO: fetch profiles
    # profiles = Profile.objects.filter(user__pk__in=
    #     set(x.user.id for x in page.object_list))
    # profiles = dict((x.user_id, x) for x in profiles)

    # for post in page.object_list:
    #     post.user.pybb_profile = profiles[post.user.id]

    if pybb_settings.PYBB_ATTACHMENT_ENABLE:
        load_related(posts, Attachment.objects.all(), 'post')

    context.update({
        'page_size': pybb_settings.TOPIC_PAGE_SIZE,
        'form_url': reverse('pybb_add_post', args=[topic.id]),
        'wikipage': settings.ATTACHMENT_DESCR_PAGE,
    })

    return context