From 37f8d4b2f4f17b0dd697099c3082bc5e710e2ae5 Mon Sep 17 00:00:00 2001 From: gzbender Date: Thu, 16 Aug 2018 00:37:19 +0500 Subject: [PATCH] LIL-582, comments --- .../templates/content/contest_work.html | 38 +++++++++++++ apps/content/views.py | 54 +++++++++++++++++++ project/urls.py | 3 +- 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/apps/content/templates/content/contest_work.html b/apps/content/templates/content/contest_work.html index 04fdc3c4..1fe09942 100644 --- a/apps/content/templates/content/contest_work.html +++ b/apps/content/templates/content/contest_work.html @@ -71,4 +71,42 @@ {% include 'templates/blocks/share.html' with share_object_name='работой' %} + +
+
+
Задавайте вопросы:
+
+ {% if request.user.is_authenticated %} +
+ +
+ +
+
+ +
+ +
+ +
+
+ {% else %} +
Только зарегистрированные пользователи могут оставлять комментарии.
+ {% endif %} +
+ {% include "templates/blocks/comments.html" with object=contest_work %} +
+
+
+
{% endblock content %} diff --git a/apps/content/views.py b/apps/content/views.py index dd22d463..ff3a4deb 100644 --- a/apps/content/views.py +++ b/apps/content/views.py @@ -1,9 +1,14 @@ from django.contrib.auth.decorators import login_required +from django.http import JsonResponse from django.shortcuts import get_object_or_404 +from django.template import loader from django.utils.decorators import method_decorator +from django.views.decorators.csrf import csrf_exempt +from django.views.decorators.http import require_http_methods from django.views.generic import TemplateView, DetailView from apps.content.models import Contest, ContestWork +from apps.course.models import ContestWorkComment @method_decorator(login_required, name='dispatch') @@ -54,3 +59,52 @@ class ContestWorkView(DetailView): context['user_liked'] = self.object.likes.filter(user=self.request.user).exists() \ if self.request.user.is_authenticated else False return context + + +@login_required +@csrf_exempt +@require_http_methods(['POST']) +def contest_work_comment(request, contest_work_id): + try: + contest_work = ContestWork.objects.get(id=contest_work_id) + except ContestWork.DoesNotExist: + return JsonResponse({ + 'success': False, + 'errors': ['Contest_work with id f{contest_work_id} not found'] + }, status=400) + else: + reply_to = request.POST.get('reply_id', 0) + comment = request.POST.get('comment', '') + if not comment: + return JsonResponse({ + 'success': False, + 'errors': ['Comment can not be empty'] + }, status=400) + + if not int(reply_to): + contest_work_comment = ContestWorkComment.objects.create( + author=request.user, + content=comment, + contest_work=contest_work, + ) + else: + try: + _contest_work_comment = ContestWorkComment.objects.get(id=reply_to) + except ContestWorkComment.DoesNotExist: + return JsonResponse({ + 'success': False, + 'errors': ['LessonComment with id f{reply_to} not found'] + }, status=400) + else: + contest_work_comment = ContestWorkComment.objects.create( + author=request.user, + content=comment, + contest_work=contest_work, + parent=_contest_work_comment, + ) + ctx = {'node': contest_work_comment, 'user': request.user} + html = loader.render_to_string('templates/blocks/comment.html', ctx) + return JsonResponse({ + 'success': True, + 'comment': html, + }) diff --git a/project/urls.py b/project/urls.py index 21527b50..9e6f5992 100644 --- a/project/urls.py +++ b/project/urls.py @@ -18,7 +18,7 @@ from django.contrib import admin from django.views.generic import TemplateView from django.urls import path, include -from apps.content.views import ContestEditView, ContestView, ContestWorkView +from apps.content.views import ContestEditView, ContestView, ContestWorkView, contest_work_comment from apps.course.views import ( CoursesView, likes, coursecomment, CourseView, LessonView, SearchView, @@ -87,6 +87,7 @@ urlpatterns = [ path('contest//edit', ContestEditView.as_view(), name='contest_edit'), path('contest//', ContestView.as_view(), name='contest'), path('contest-work//', ContestWorkView.as_view(), name='contest_work'), + path('contest-work//comment', contest_work_comment, name='contest_work_comment'), ]