diff options
author | prathamesh | 2021-03-23 14:57:23 +0530 |
---|---|---|
committer | prathamesh | 2021-03-23 14:57:23 +0530 |
commit | fc070aeab4322cfe34f6074ae1fc07db42be0fe6 (patch) | |
tree | 589bcd30c7d00e5d060e1161fa8583e84f6c3f99 /stats/views.py | |
parent | f5224d8d1866122ad2ecfb3118ffd724c4dd3cf8 (diff) | |
parent | 6fda19daaa06482b8eb52eeb62f9b0a15d0a3da6 (diff) | |
download | online_test-fc070aeab4322cfe34f6074ae1fc07db42be0fe6.tar.gz online_test-fc070aeab4322cfe34f6074ae1fc07db42be0fe6.tar.bz2 online_test-fc070aeab4322cfe34f6074ae1fc07db42be0fe6.zip |
Merge branch 'master' of https://github.com/FOSSEE/online_test into add-test-cases-for-QRcode-based-upload
Diffstat (limited to 'stats/views.py')
-rw-r--r-- | stats/views.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/stats/views.py b/stats/views.py new file mode 100644 index 0000000..a5cdeb7 --- /dev/null +++ b/stats/views.py @@ -0,0 +1,70 @@ +# Django Imports +from django.shortcuts import render, get_object_or_404 +from django.http import JsonResponse +from django.utils import timezone +from django.contrib.auth.decorators import login_required +from django.core.paginator import Paginator +from django.http import Http404 + +# Local Imports +from stats.models import TrackLesson, LessonLog, str_to_time, time_to_seconds +from yaksh.models import Course +from yaksh.decorators import email_verified + + +@login_required +@email_verified +def add_tracker(request, tracker_id): + user = request.user + track = get_object_or_404( + TrackLesson.objects.select_related("course"), id=tracker_id + ) + if not track.course.is_student(user): + raise Http404("You are not enrolled in this course") + context = {} + video_duration = request.POST.get('video_duration') + current_time = request.POST.get('current_video_time') + if current_time: + track.set_current_time(current_time) + track.video_duration = video_duration + track.save() + if not track.watched: + track.set_watched() + track.save() + LessonLog.objects.create( + track_id=track.id, current_time=current_time, + last_access_time=timezone.now() + ) + success = True + else: + success = False + context = {"success": success} + return JsonResponse(context) + + +@login_required +@email_verified +def view_lesson_watch_stats(request, course_id, lesson_id): + user = request.user + course = get_object_or_404( + Course.objects.prefetch_related("students"), id=course_id + ) + if not course.is_creator(user) and not course.is_teacher(user): + raise Http404('This course does not belong to you') + trackings = TrackLesson.objects.get_queryset().filter( + course_id=course_id, lesson_id=lesson_id + ).order_by("id") + percentage_data = TrackLesson.objects.get_percentage_data(trackings) + visited = trackings.count() + completed = trackings.filter(watched=True).count() + students_total = course.students.count() + paginator = Paginator(trackings, 30) + page = request.GET.get('page') + trackings = paginator.get_page(page) + context = { + 'objects': trackings, 'total': visited, 'course_id': course_id, + 'lesson_id': lesson_id, "percentage_data": percentage_data, + 'completion': [completed, students_total-completed, students_total], + 'visits': [visited, students_total-visited, students_total] + } + return render(request, 'view_lesson_tracking.html', context) |