Esempio n. 1
0
def render_board(request, board_name, current_page=1):
    """
    Render board with lists of threads and last 5 posts for them.
    :param request: user's request
    :param board_name: name of board that we should render
    :param current_page: page that user requested
    :return: board page
    """
    board = get_board(board_name)
    board.url = board.uri
    posts = get_posts(board)
    threads = get_threads(posts).order_by('-bump')
    pages = Paginator(threads, 10)
    threads = pages.page(int(current_page))
    for thread in threads:
        thread.posts = posts.filter(thread=thread.id)
        posts_len = len(thread.posts)
        thread.omitted = posts_len - 5 if posts_len >= 5 else 0
        thread.posts = thread.posts[thread.omitted:]
    if request.method == 'POST':
        json_response = 'json_response' in request.POST
        agreed_with_rules = 'rules' in request.POST
        form = PostForm(request.POST, request.FILES)
        if agreed_with_rules:
            if form.is_valid():
                _ip = get_ip(request)
                new_post_id = form.process(board_name, _ip, None)
                if new_post_id:
                    if json_response:
                        respond = json.dumps({
                            'id': new_post_id,
                            'noko': False,
                            'redirect': '/' + board_name
                        })
                        answer = HttpResponse(
                            respond,
                            content_type="application/json"
                        )
                    else:
                        answer = HttpResponseRedirect(
                            reverse('thread', args=[board_name, new_post_id])
                        )
                    return answer
    else:
        form = PostForm()
    context = {
        'config': config,
        'board': board,
        'boards': get_boards_navlist(),
        'threads': threads,
        'pages': pages,
        'hr': True,
        'index': True,
        'form': form
    }
    return render(request, 'posts/index.html', context)
Esempio n. 2
0
def render_thread(request, board_name, thread_id):
    """
    Render thread page with all thread's posts.

    :param request: user's request
    :param board_name: name of threads board
    :param thread_id: thread id
    :return: thread page
    """
    board = get_board(board_name)
    boards = get_boards_navlist()
    board.url = board.uri
    post = Post.objects.filter(board=board).get(id=thread_id)
    post.posts = Post.objects.filter(board=board).filter(thread=post.id)
    if request.method == 'POST':
        if 'delete' in request.POST:
            for key in request.POST.keys():
                if key.startswith('delete_'):
                    post_id = key[7:]
                    post_to_delete = Post.objects.get(board=board, id=post_id)
                    if post_to_delete.password == request.POST['password']:
                        post_to_delete.delete()
                        return HttpResponseRedirect(
                            reverse('thread', args=[
                                board_name,
                                thread_id
                            ]))
        if 'report' in request.POST:
            for key in request.POST.keys():
                if key.startswith('delete_'):
                    post_id = key[7:]
                    post_to_report = Post.objects.get(board=board, id=post_id)
                    print(post_to_report)
                    report = Report(
                        ip=get_ip(request),
                        reason=request.POST['reason'],
                        post=post_to_report
                    )
                    report.save(force_insert=True)
                    return HttpResponseRedirect(
                        reverse('thread', args=[
                            board_name,
                            thread_id
                        ]))
        json_response = 'json_response' in request.POST
        agreed_with_rules = 'rules' in request.POST
        post_form = PostForm(request.POST, request.FILES)
        if agreed_with_rules:
            if post_form.is_valid():
                _ip = get_ip(request)
                new_post_id = post_form.process(board_name, _ip, thread_id)
                if new_post_id:
                    if json_response:
                        respond = json.dumps({
                            'id': new_post_id,
                            'noko': False,
                            'redirect': '/' + board_name
                        })
                        answer = HttpResponse(
                            respond,
                            content_type="application/json"
                        )
                    else:
                        answer = HttpResponseRedirect(
                            reverse('thread', args=[
                                board_name,
                                thread_id
                            ]) + '#{0}'.format(new_post_id)
                        )
                    return answer
    else:
        post_form = PostForm()
    context = {
        'config': config,
        'board': board,
        'boards': boards,
        'threads': [post],
        'hr': True,
        'form': post_form,
        'id': 1
    }
    return render(request, 'posts/page.html', context)