|
|
|
@ -4,6 +4,7 @@ import string |
|
|
|
|
|
|
|
|
|
|
|
from django.contrib import auth |
|
|
|
from django.contrib import auth |
|
|
|
from django.contrib.auth import get_user_model |
|
|
|
from django.contrib.auth import get_user_model |
|
|
|
|
|
|
|
from django.core.exceptions import ValidationError |
|
|
|
from django.core.mail import send_mail |
|
|
|
from django.core.mail import send_mail |
|
|
|
from django.db.models import Q |
|
|
|
from django.db.models import Q |
|
|
|
from django.shortcuts import redirect |
|
|
|
from django.shortcuts import redirect |
|
|
|
@ -239,16 +240,16 @@ class UpdateProgress(APIView): |
|
|
|
""" |
|
|
|
""" |
|
|
|
На вход обязательно передаётся параметр id (id узла). |
|
|
|
На вход обязательно передаётся параметр id (id узла). |
|
|
|
""" |
|
|
|
""" |
|
|
|
token = request.JSON.get('token', None) |
|
|
|
lesson_token = request.JSON.get('lesson_token', None) |
|
|
|
course = request.JSON.get('slug', None) |
|
|
|
course_token = request.JSON.get('course_token', None) |
|
|
|
if token is None or course is None: |
|
|
|
if lesson_token is None or course_token is None: |
|
|
|
return Response('Не передан слаг курса или токен урока', status=400) |
|
|
|
return Response('Не передан слаг курса или токен урока', status=400) |
|
|
|
try: |
|
|
|
try: |
|
|
|
p = Progress.objects.get(user=request.user, course=course) |
|
|
|
p = Progress.objects.get(user=request.user, course=course_token) |
|
|
|
try: |
|
|
|
try: |
|
|
|
pv = ProgressLesson.objects.get( |
|
|
|
pv = ProgressLesson.objects.get( |
|
|
|
progress=p, |
|
|
|
progress=p, |
|
|
|
vertex=token, |
|
|
|
lesson_token=lesson_token, |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
except ProgressLesson.DoesNotExist: |
|
|
|
except ProgressLesson.DoesNotExist: |
|
|
|
@ -256,9 +257,9 @@ class UpdateProgress(APIView): |
|
|
|
date=datetime.datetime.now(), |
|
|
|
date=datetime.datetime.now(), |
|
|
|
teacher=p.teacher, |
|
|
|
teacher=p.teacher, |
|
|
|
progress=p, |
|
|
|
progress=p, |
|
|
|
vertex=token, |
|
|
|
lesson_token=lesson_token, |
|
|
|
) |
|
|
|
) |
|
|
|
pv.status = 2 |
|
|
|
pv.status = ProgressLesson.STATUSES.done |
|
|
|
pv.save() |
|
|
|
pv.save() |
|
|
|
return Response(ProgressLessonSerializer(pv).data, status=200) |
|
|
|
return Response(ProgressLessonSerializer(pv).data, status=200) |
|
|
|
|
|
|
|
|
|
|
|
@ -296,3 +297,22 @@ class UserGuardView(APIView): |
|
|
|
return res_204 |
|
|
|
return res_204 |
|
|
|
|
|
|
|
|
|
|
|
return res_403 |
|
|
|
return res_403 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CourseProgressDynamicView(APIView): |
|
|
|
|
|
|
|
renderer_classes = (JSONRenderer,) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
|
|
|
def get(request, token): |
|
|
|
|
|
|
|
if request.user.is_authenticated() and request.user.is_staff: |
|
|
|
|
|
|
|
try: |
|
|
|
|
|
|
|
progresses = Progress.objects.filter(course_token=token) |
|
|
|
|
|
|
|
res = {} |
|
|
|
|
|
|
|
for i in progresses: |
|
|
|
|
|
|
|
key = i.progresslesson_set.filter(status="done").count() |
|
|
|
|
|
|
|
res[key] = 1 if not key in res.keys() else res[key] + 1 |
|
|
|
|
|
|
|
return Response(res, status=200) |
|
|
|
|
|
|
|
except ValidationError: |
|
|
|
|
|
|
|
return Response("Bad request", status=400) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Response(status=403) |
|
|
|
|