Ejemplo n.º 1
0
def comment_nest_create(request, url_name, category_name, post_pk):
    if request.user.is_anonymous:
        return redirect_with_next('core:accounts:login',
                                  'core:board:post_detail',
                                  params={
                                      'to': [url_name],
                                      'next':
                                      [url_name, category_name, post_pk]
                                  })
    noti_target_comment = Comment.objects.get(
        pk=request.POST.get('parent_id')).author
    noti_target_post = Post.objects.get(pk=post_pk).author
    if request.method == 'POST':
        is_anonymous = True if request.POST.get(
            'nested_is_anonymous') else False
        comment = Comment.objects.create(
            post_id=post_pk,
            author=request.user,
            content=request.POST.get('nested_content', ''),
            is_anonymous=is_anonymous,
            parent_id=request.POST.get('parent_id'))
        if (noti_target_comment or noti_target_post) != request.user:
            Noti.objects.create(from_n=request.user,
                                noti_type='c_c',
                                to_n=noti_target_comment,
                                object_id=request.POST.get('parent_id'),
                                content_type=ContentType.objects.get(
                                    app_label='board', model='comment'))

        return redirect('core:board:post_detail', url_name, category_name,
                        post_pk)
Ejemplo n.º 2
0
def category_create(request, url_name):
    if request.user.is_anonymous:
        return redirect_with_next('core:accounts:login',
                                  'core:board:category_create',
                                  params={
                                      'to': [url_name],
                                      'next': [url_name]
                                  })

    form = SuggestForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
            suggest = form.save(commit=False)
            suggest.suggested_by = request.user
            suggest.univ = request.user.univ
            suggest.save()
            return render(
                request, 'board/category_success.html', {
                    'univ': request.user.univ,
                    'url_name': url_name,
                    'category_name': suggest.name,
                })
    return render(request, 'board/category_new.html', {
        'univ': request.user.univ,
        'url_name': url_name,
        'form': form,
    })
Ejemplo n.º 3
0
def post_edit(request, url_name, category_name, post_pk):
    if request.user.is_anonymous:
        return redirect_with_next('core:accounts:login',
                                  'core:board:post_detail',
                                  params={
                                      'to': [url_name],
                                      'next':
                                      [url_name, category_name, post_pk]
                                  })
    univ = get_object_or_404(Univ, url_name=url_name)
    post = Post.objects.get(pk=post_pk)
    if request.user != post.author:
        return redirect('core:board:post_detail', url_name, category_name,
                        post_pk)

    form = PostForm(request.POST or None, request=request, instance=post)
    if request.method == 'POST':
        if form.is_valid():
            post = form.save(commit=False)
            if post.ctgy.is_anonymous:
                post.is_anonymous = True
            post.save()
            for image in request.FILES.getlist('images'):
                Image.objects.create(post=post, image=image)
            return redirect('core:board:post_detail', url_name, category_name,
                            post_pk)
    return render(request, 'board/post_new.html', {
        'form': form,
        'univ': univ,
        'url_name': url_name
    })
Ejemplo n.º 4
0
def post_create(request, url_name):
    if request.user.is_anonymous:
        return redirect_with_next('core:accounts:login',
                                  'core:board:post_create',
                                  params={
                                      'to': [url_name],
                                      'next': [url_name]
                                  })
    try:
        can_use(request, url_name, ck_univ_url=True, ck_anon=True)
        univ = get_object_or_404(Univ, url_name=url_name)
        form = PostForm(request.POST or None, request=request)
        if request.method == 'POST':
            if form.is_valid():
                post = form.save(commit=False)
                if post.ctgy.is_anonymous:
                    post.is_anonymous = True
                post.save()
                for image in request.FILES.getlist('images'):
                    Image.objects.create(post=post, image=image)
                return redirect(
                    reverse('core:board:main_board', args=[url_name]) +
                    '?state=new')
        return render(request, 'board/post_new.html', {
            'form': form,
            'univ': univ,
            'url_name': url_name,
        })

    except Exception as e:
        if str(e) == 'anon':
            return redirect_with_next("core:accounts:login",
                                      "core:board:main_board",
                                      params={
                                          "to": [url_name],
                                          "next": [url_name]
                                      })
        if str(e) == 'others':
            return redirect("core:board:main_board",
                            url_name=request.user.univ.url_name)

        # return HttpResponseBadRequest(content="Bad request: " + str(e))
        raise SuspiciousOperation
Ejemplo n.º 5
0
def notification(request, url_name):
    if request.user.is_anonymous:
        return redirect_with_next('core:accounts:login',
                                  'core:board:notification',
                                  params={
                                      'to': [url_name],
                                      'next': [url_name]
                                  })

    univ = request.user.univ
    notifications = Noti.objects.prefetch_related(
        'from_n__comment_set__post',
        'from_n__posts__ctgy',
    ).filter(to_n=request.user).order_by('-id')

    return render(request, 'board/notification.html', {
        'notifications': notifications,
        'univ': univ,
        'url_name': url_name,
    })
Ejemplo n.º 6
0
def comment_delete(request, url_name, category_name, post_pk, comment_pk):
    if request.user.is_anonymous:
        return redirect_with_next('core:accounts:login',
                                  'core:board:post_detail',
                                  params={
                                      'to': [url_name],
                                      'next':
                                      [url_name, category_name, post_pk]
                                  })

    if request.method == 'POST':
        comment = Comment.objects.get(pk=comment_pk)
        if request.user != comment.author:
            return redirect('core:board:post_detail', url_name, category_name,
                            post_pk)
        comment.content = '(deleted reply)'
        comment.save()
        return redirect('core:board:post_detail', url_name, category_name,
                        post_pk)
    return redirect('core:board:post_detail', url_name, category_name, post_pk)
Ejemplo n.º 7
0
def post_delete(request, url_name, category_name, post_pk):
    if request.user.is_anonymous:
        return redirect_with_next('core:accounts:login',
                                  'core:board:post_detail',
                                  params={
                                      'to': [url_name],
                                      'next':
                                      [url_name, category_name, post_pk]
                                  })

    post = Post.objects.get(pk=post_pk)
    if request.user != post.author:
        return redirect('core:board:post_detail', url_name, category_name,
                        post_pk)

    if request.method == 'POST':
        post.delete()
        return redirect('core:board:main_board', url_name)

    return redirect('core:board:post_detail', url_name, category_name, post_pk)
Ejemplo n.º 8
0
def mypage(request, url_name):
    if request.user.is_anonymous:
        params = {
            "to": [url_name],
            "next": [url_name]
        }
        return redirect_with_next("core:accounts:login", "core:accounts:mypage", params)

    univ = Univ.objects.get(url_name=url_name)
    if request.user.univ != univ:
        return redirect("core:accounts:mypage", url_name)

    user = request.user

    if request.method == "GET":
        ctx = {"user": user, "univ":univ, "url_name":url_name}
        return render(request, "accounts/mypage.html", ctx)

    else:
        # return HttpResponseBadRequest(content="Not allowed method")
        raise SuspiciousOperation
Ejemplo n.º 9
0
def main(request, url_name):
    try:

        request.session['back_url'] = request.path
        # term, state 변경 했을 때 유저를 체크 해야 함
        [univ, state, term,
         selected_category] = can_use(request, url_name, True, True, True)

        post_sets = make_posts_set(None, univ, state, term)
        is_post = False if post_sets else True
        notice_sets = Post.objects.select_related('ctgy', 'author') \
            .prefetch_related('comments__author', 'ctgy__univ', 'likes', 'saved', 'viewed_by', 'comments', 'images')\
            .filter(ctgy__univ=univ, is_notice=True)
        post_paginator = Paginator(post_sets, 15).page
        posts = post_paginator(1)

        if request.is_ajax():  # 무한스크롤
            if not request.method == "POST":
                raise Exception("Not allowed request method")

            requested_page = request.POST.get('requestPage')
            next_posts = post_paginator(requested_page)
            serializer = PostSerializer(next_posts.object_list, many=True)

            has_next = next_posts.has_next()
            return Response(status=status.HTTP_200_OK,
                            data={
                                "next_posts": serializer.data,
                                "has_next": has_next
                            })

        else:
            url = reverse('core:board:main_board', args=[url_name])
            return render(
                request, 'board/main_board.html', {
                    'univ': univ,
                    "url_name": url_name,
                    'categories': univ.category.all(),
                    'use_category': False,
                    'posts': posts.object_list,
                    'notices': notice_sets,
                    'state': state,
                    'url': url,
                    'has_next': posts.has_next(),
                    'is_post': is_post,
                })
    except Univ.DoesNotExist as e:
        raise Http404

    except Exception as e:
        if str(e) == 'anon':
            return redirect_with_next("core:accounts:login",
                                      "core:board:main_board",
                                      params={
                                          "to": [url_name],
                                          "next": [url_name]
                                      })

        if str(e) == 'others':
            return redirect("core:board:main_board",
                            url_name=request.user.univ.url_name)
        # return HttpResponseBadRequest(content="Bad Request: " + str(e))
        raise SuspiciousOperation
Ejemplo n.º 10
0
def post_detail(request, url_name, category_name, post_pk):
    if request.user.is_anonymous:
        return redirect_with_next('core:accounts:login',
                                  'core:board:post_detail',
                                  params={
                                      'to': [url_name],
                                      'next':
                                      [url_name, category_name, post_pk]
                                  })

    univ = get_object_or_404(Univ, url_name=url_name)
    selected_category = get_object_or_404(Category,
                                          univ=univ,
                                          name=category_name)
    anon = True if selected_category.is_anonymous else False
    post = get_object_or_404(
        Post.objects.select_related('author').prefetch_related(
            'likes', 'saved', 'comments', 'images'),
        ctgy=selected_category,
        pk=post_pk)
    comments = Comment.objects.prefetch_related('comment_likes', 'parent', 'parent__author')\
        .select_related('author', 'parent', 'post', 'post__author')\
        .filter(post=post, parent=None).order_by('created_at')
    is_author = True if request.user == post.author else False
    # post.viewed_by.add(request.user)
    # post.views_double_check.add(request.user)
    # if not request.user in post.views_double_check:
    #     post.views += 1
    # post.save()
    # print(post.viewed_by.all)

    ctx = {
        'univ': univ,
        'url_name': url_name,
        'post': post,
        'selected_category': selected_category,
        'comments': comments,
        'anon': anon,
        'is_author': is_author,
        # 'comment_form': CommentForm(request=request),
    }

    response = render(request, 'board/post_detail.html', ctx)

    cookie_name = f'hit:{request.user}'
    # print(cookie_name)
    tomorrow = datetime.datetime.replace(datetime.datetime.now(),
                                         hour=23,
                                         minute=59,
                                         second=0)
    expires = datetime.datetime.strftime(tomorrow, "%a, %d-%b-%Y %H:%M:%S GMT")
    if request.COOKIES.get(cookie_name) is not None:
        cookies = request.COOKIES.get(cookie_name)
        cookies_list = cookies.split('|')
        if str(post_pk) not in cookies_list:
            response.set_cookie(cookie_name,
                                cookies + f'|{post_pk}',
                                expires=expires)
            post.views += 1
            post.viewed_by.add(request.user)
            post.save()
            return response
    else:
        response.set_cookie(cookie_name, post_pk, expires=expires)
        post.views += 1
        post.viewed_by.add(request.user)
        post.save()
        return response

    return render(request, 'board/post_detail.html', ctx)