def user_course_progress(self, request, **kwargs): user = self.get_user(request, **kwargs) cc, oc, ac = permissions.get_user_courses(request, user) if request.user.is_staff or (request.user == user): ucs_qs = UserCourseSummary.objects.filter( user=user).order_by('course__shortname') else: ucs_qs = UserCourseSummary.objects.filter( user=user, course__in=ac).order_by('course__shortname') courses = [] for ucs in ucs_qs: percent_complete = (ucs.completed_activities / ucs.course.get_no_activities()) * 100 c = {} c['shortname'] = ucs.course.shortname c['title'] = ucs.course.title c['points'] = ucs.points c['total_activity'] = ucs.total_activity c['quizzes_passed'] = ucs.quizzes_passed c['badges_achieved'] = ucs.badges_achieved c['media_viewed'] = ucs.media_viewed c['completed_activities'] = ucs.completed_activities c['percent_complete'] = int(percent_complete) courses.append(c) return JsonResponse(courses, safe=False)
def user_activity(request, user_id): view_user, response = get_user(request, user_id) if response is not None: return response dashboard_accessed.send(sender=None, request=request, data=None) cohort_courses, other_courses, all_courses = get_user_courses( request, view_user) courses = [] for course in all_courses: data = { 'course': course, 'no_quizzes_completed': course.get_no_quizzes_completed(course, view_user), 'pretest_score': course.get_pre_test_score(course, view_user), 'no_activities_completed': course.get_activities_completed(course, view_user), 'no_quizzes_completed': course.get_no_quizzes_completed(course, view_user), 'no_points': course.get_points(course, view_user), 'no_badges': course.get_badges(course, view_user), } courses.append(data) activity = [] start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() no_days = (end_date - start_date).days + 1 course_ids = list( chain(cohort_courses.values_list('id', flat=True), other_courses.values_list('id', flat=True))) trackers = Tracker.objects.filter(course__id__in=course_ids, user=view_user, tracker_date__gte=start_date, tracker_date__lte=end_date) \ .extra({'activity_date':"date(tracker_date)"}) \ .values('activity_date') \ .annotate(count=Count('id')) for i in range(0, no_days, +1): temp = start_date + datetime.timedelta(days=i) count = next( (dct['count'] for dct in trackers if dct['activity_date'] == temp.date()), 0) activity.append([temp.strftime("%d %b %Y"), count]) return render_to_response('oppia/profile/user-scorecard.html', { 'view_user': view_user, 'courses': courses, 'activity_graph_data': activity }, context_instance=RequestContext(request))
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) get_user(self.request, self.object.pk) #TODO: Change permissions check cohort_courses, other_courses, all_courses = get_user_courses( self.request, self.object) courses = [] for course in all_courses: course.can_view_course_activity = can_view_course_activity( self.request, course.id) courses.append( UserCourseSummary.objects.get_stats_summary( self.object, course)) order_options = [ 'course_display', 'no_quizzes_completed', 'pretest_score', 'no_activities_completed', 'no_points', 'no_badges', 'no_media_viewed' ] default_order = 'course_display' ordering = self.request.GET.get('order_by', default_order) inverse_order = ordering.startswith('-') if inverse_order: ordering = ordering[1:] if ordering not in order_options: ordering = default_order inverse_order = False courses.sort(key=operator.itemgetter(ordering), reverse=inverse_order) start_date, end_date = self.get_daterange() course_ids = list( chain(cohort_courses.values_list('id', flat=True), other_courses.values_list('id', flat=True))) activity = get_tracker_activities(start_date, end_date, self.object, course_ids=course_ids) context['courses'] = courses context['page_ordering'] = ('-' if inverse_order else '') + ordering context['activity_graph_data'] = activity return context
def user_activity(request, user_id): view_user, response = get_user(request, user_id) if response is not None: return response dashboard_accessed.send(sender=None, request=request, data=None) cohort_courses, other_courses, all_courses = get_user_courses(request, view_user) courses = [] for course in all_courses: data = {'course': course, 'no_quizzes_completed': course.get_no_quizzes_completed(course,view_user), 'pretest_score': course.get_pre_test_score(course,view_user), 'no_activities_completed': course.get_activities_completed(course,view_user), 'no_quizzes_completed': course.get_no_quizzes_completed(course,view_user), 'no_points': course.get_points(course,view_user), 'no_badges': course.get_badges(course,view_user),} courses.append(data) activity = [] start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() no_days = (end_date-start_date).days + 1 course_ids = list(chain(cohort_courses.values_list('id',flat=True),other_courses.values_list('id',flat=True))) trackers = Tracker.objects.filter(course__id__in=course_ids, user=view_user, tracker_date__gte=start_date, tracker_date__lte=end_date) \ .extra({'activity_date':"date(tracker_date)"}) \ .values('activity_date') \ .annotate(count=Count('id')) for i in range(0,no_days,+1): temp = start_date + datetime.timedelta(days=i) count = next((dct['count'] for dct in trackers if dct['activity_date'] == temp.date()), 0) activity.append([temp.strftime("%d %b %Y"),count]) return render_to_response('oppia/profile/user-scorecard.html', {'view_user': view_user, 'courses': courses, 'activity_graph_data': activity }, context_instance=RequestContext(request))
def user_activity(request, user_id): view_user, response = get_user(request, user_id) profile=UserProfile.objects.get(user=view_user) try: version=Tracker.objects.filter(user=view_user,agent__contains='OppiaMobile Android').latest('submitted_date') except Tracker.DoesNotExist: version= None try: device=Tracker.objects.filter(user=view_user,agent__contains='Dalvik').latest('submitted_date') except Tracker.DoesNotExist: device= None try: school=SchoolCode.objects.filter(school_code=profile.school_code) except SchoolCode.DoesNotExist: school=None if response is not None: return response cohort_courses, other_courses, all_courses = get_user_courses(request, view_user) courses = [] for course in all_courses: completed=course.get_activities_completed(course,view_user)+course.get_no_quizzes_completed(course,view_user) total=course.get_no_activities()+course.get_no_quizzes() percentage=(float(completed)/100)*total data = {'course': course, 'no_quizzes_completed': course.get_no_quizzes_completed(course,view_user), 'pretest_score': course.get_pre_test_score(course,view_user), 'no_activities_completed': course.get_activities_completed(course,view_user), 'no_quizzes_completed': course.get_no_quizzes_completed(course,view_user), 'no_points': course.get_points(course,view_user), 'no_badges': course.get_badges(course,view_user), 'percentage_complete':float("{0:.6f}".format(percentage)),} courses.append(data) activity = [] start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() no_days = (end_date-start_date).days + 1 course_ids = list(chain(cohort_courses.values_list('id',flat=True),other_courses.values_list('id',flat=True))) trackers = Tracker.objects.filter(course__id__in=course_ids, user=view_user, tracker_date__gte=start_date, tracker_date__lte=end_date) \ .extra({'activity_date':"date(tracker_date)"}) \ .values('activity_date') \ .annotate(count=Count('id')) for i in range(0,no_days,+1): temp = start_date + datetime.timedelta(days=i) count = next((dct['count'] for dct in trackers if dct['activity_date'] == temp.date()), 0) activity.append([temp.strftime("%d %b %Y"),count]) return render_to_response('oppia/profile/user-scorecard.html', {'view_user': view_user, 'profile':profile, 'version':version, 'device':device, 'courses': courses, 'activity_graph_data': activity }, context_instance=RequestContext(request))
def user_activity(request, user_id): view_user = get_user(request, user_id) dashboard_accessed.send(sender=None, request=request, data=None) cohort_courses, other_courses, all_courses = get_user_courses( request, view_user) courses = [] for course in all_courses: course_stats = UserCourseSummary.objects.filter(user=view_user, course=course) if course_stats: course_stats = course_stats[0] data = { 'course': course, 'course_display': str(course), 'no_quizzes_completed': course_stats.quizzes_passed, 'pretest_score': course_stats.pretest_score, 'no_activities_completed': course_stats.completed_activities, 'no_media_viewed': course_stats.media_viewed, 'no_points': course_stats.points, 'no_badges': course_stats.badges_achieved, } else: data = { 'course': course, 'course_display': str(course), 'no_quizzes_completed': 0, 'pretest_score': None, 'no_activities_completed': 0, 'no_media_viewed': 0, 'no_points': 0, 'no_badges': 0, } courses.append(data) order_options = [ 'course_display', 'no_quizzes_completed', 'pretest_score', 'no_activities_completed', 'no_points', 'no_badges', 'no_media_viewed' ] default_order = 'course_display' ordering = request.GET.get('order_by', default_order) inverse_order = ordering.startswith('-') if inverse_order: ordering = ordering[1:] if ordering not in order_options: ordering = default_order inverse_order = False courses.sort(key=operator.itemgetter(ordering), reverse=inverse_order) start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() course_ids = list( chain(cohort_courses.values_list('id', flat=True), other_courses.values_list('id', flat=True))) activity = get_tracker_activities(start_date, end_date, view_user, course_ids=course_ids) return render( request, 'profile/user-scorecard.html', { 'view_user': view_user, 'courses': courses, 'page_ordering': ('-' if inverse_order else '') + ordering, 'activity_graph_data': activity })
def user_activity(request, user_id): view_user, response = get_user(request, user_id) profile = UserProfile.objects.get(user=view_user) try: version = Tracker.objects.filter( user=view_user, agent__contains='OppiaMobile Android').latest('submitted_date') except Tracker.DoesNotExist: version = None try: device = Tracker.objects.filter( user=view_user, agent__contains='Dalvik').latest('submitted_date') except Tracker.DoesNotExist: device = None try: school = SchoolCode.objects.filter(school_code=profile.school_code) except SchoolCode.DoesNotExist: school = None if response is not None: return response cohort_courses, other_courses, all_courses = get_user_courses( request, view_user) courses = [] for course in all_courses: completed = course.get_activities_completed( course, view_user) + course.get_no_quizzes_completed( course, view_user) total = course.get_no_activities() + course.get_no_quizzes() percentage = (float(completed) / 100) * total data = { 'course': course, 'no_quizzes_completed': course.get_no_quizzes_completed(course, view_user), 'pretest_score': course.get_pre_test_score(course, view_user), 'no_activities_completed': course.get_activities_completed(course, view_user), 'no_quizzes_completed': course.get_no_quizzes_completed(course, view_user), 'no_points': course.get_points(course, view_user), 'no_badges': course.get_badges(course, view_user), 'percentage_complete': float("{0:.6f}".format(percentage)), } courses.append(data) activity = [] start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() no_days = (end_date - start_date).days + 1 course_ids = list( chain(cohort_courses.values_list('id', flat=True), other_courses.values_list('id', flat=True))) trackers = Tracker.objects.filter(course__id__in=course_ids, user=view_user, tracker_date__gte=start_date, tracker_date__lte=end_date) \ .extra({'activity_date':"date(tracker_date)"}) \ .values('activity_date') \ .annotate(count=Count('id')) for i in range(0, no_days, +1): temp = start_date + datetime.timedelta(days=i) count = next( (dct['count'] for dct in trackers if dct['activity_date'] == temp.date()), 0) activity.append([temp.strftime("%d %b %Y"), count]) return render_to_response('oppia/profile/user-scorecard.html', { 'view_user': view_user, 'profile': profile, 'version': version, 'device': device, 'courses': courses, 'activity_graph_data': activity }, context_instance=RequestContext(request))
def user_activity(request, user_id): view_user, response = get_user(request, user_id) if response is not None: return response dashboard_accessed.send(sender=None, request=request, data=None) cohort_courses, other_courses, all_courses = get_user_courses( request, view_user) courses = [] for course in all_courses: course_stats = UserCourseSummary.objects.filter(user=view_user, course=course)[0] data = { 'course': course, 'no_quizzes_completed': course_stats.quizzes_passed, 'pretest_score': course_stats.pretest_score, 'no_activities_completed': course_stats.completed_activities, 'no_media_viewed': course_stats.media_viewed, 'no_points': course_stats.points, 'no_badges': course_stats.badges_achieved, } courses.append(data) order_options = [ 'course', 'no_quizzes_completed', 'pretest_score', 'no_activities_completed', 'no_points', 'no_badges', 'no_media_viewed' ] default_order = 'course' ordering = request.GET.get('order_by', default_order) inverse_order = ordering.startswith('-') if inverse_order: ordering = ordering[1:] if ordering not in order_options: ordering = default_order inverse_order = False courses.sort(key=operator.itemgetter(ordering), reverse=inverse_order) activity = [] start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() no_days = (end_date - start_date).days + 1 course_ids = list( chain(cohort_courses.values_list('id', flat=True), other_courses.values_list('id', flat=True))) trackers = Tracker.objects.filter(course__id__in=course_ids, user=view_user, tracker_date__gte=start_date, tracker_date__lte=end_date) \ .extra({'activity_date':"date(tracker_date)"}) \ .values('activity_date') \ .annotate(count=Count('id')) for i in range(0, no_days, +1): temp = start_date + datetime.timedelta(days=i) count = next( (dct['count'] for dct in trackers if dct['activity_date'] == temp.date()), 0) activity.append([temp.strftime("%d %b %Y"), count]) return render_to_response( 'oppia/profile/user-scorecard.html', { 'view_user': view_user, 'courses': courses, 'page_ordering': ('-' if inverse_order else '') + ordering, 'activity_graph_data': activity }, context_instance=RequestContext(request))
def user_activity(request, user_id): view_user, response = get_user(request, user_id) if response is not None: return response dashboard_accessed.send(sender=None, request=request, data=None) cohort_courses, other_courses, all_courses = get_user_courses(request, view_user) courses = [] for course in all_courses: course_stats = UserCourseSummary.objects.filter(user=view_user, course=course) if course_stats: course_stats = course_stats[0] data = {'course': course, 'course_display': str(course), 'no_quizzes_completed': course_stats.quizzes_passed, 'pretest_score': course_stats.pretest_score, 'no_activities_completed': course_stats.completed_activities, 'no_media_viewed': course_stats.media_viewed, 'no_points': course_stats.points, 'no_badges': course_stats.badges_achieved, } else: data = {'course': course, 'course_display': str(course), 'no_quizzes_completed': 0, 'pretest_score': None, 'no_activities_completed': 0, 'no_media_viewed': 0, 'no_points': 0, 'no_badges': 0, } courses.append(data) order_options = ['course_display', 'no_quizzes_completed', 'pretest_score', 'no_activities_completed', 'no_points', 'no_badges', 'no_media_viewed'] default_order = 'course_display' ordering = request.GET.get('order_by', default_order) inverse_order = ordering.startswith('-') if inverse_order: ordering = ordering[1:] if ordering not in order_options: ordering = default_order inverse_order = False courses.sort(key=operator.itemgetter(ordering), reverse=inverse_order) start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() course_ids = list(chain(cohort_courses.values_list('id', flat=True), other_courses.values_list('id', flat=True))) activity = get_tracker_activities(start_date, end_date, view_user, course_ids=course_ids) return render(request, 'oppia/profile/user-scorecard.html', {'view_user': view_user, 'courses': courses, 'page_ordering': ('-' if inverse_order else '') + ordering, 'activity_graph_data': activity})
def user_activity(request, user_id): view_user, response = get_user(request, user_id) if response is not None: return response dashboard_accessed.send(sender=None, request=request, data=None) cohort_courses, other_courses, all_courses = get_user_courses(request, view_user) courses = [] for course in all_courses: course_stats = UserCourseSummary.objects.filter(user=view_user, course=course)[0] data = {'course': course, 'no_quizzes_completed': course_stats.quizzes_passed , 'pretest_score': course_stats.pretest_score, 'no_activities_completed': course_stats.completed_activities, 'no_media_viewed': course_stats.media_viewed, 'no_points': course_stats.points, 'no_badges': course_stats.badges_achieved,} courses.append(data) order_options = ['course', 'no_quizzes_completed', 'pretest_score', 'no_activities_completed','no_points', 'no_badges', 'no_media_viewed'] default_order = 'course' ordering = request.GET.get('order_by', default_order) inverse_order = ordering.startswith('-') if inverse_order: ordering = ordering[1:] if ordering not in order_options: ordering = default_order inverse_order = False courses.sort(key=operator.itemgetter(ordering), reverse=inverse_order) activity = [] start_date = timezone.now() - datetime.timedelta(days=31) end_date = timezone.now() no_days = (end_date-start_date).days + 1 course_ids = list(chain(cohort_courses.values_list('id',flat=True),other_courses.values_list('id',flat=True))) trackers = Tracker.objects.filter(course__id__in=course_ids, user=view_user, tracker_date__gte=start_date, tracker_date__lte=end_date) \ .extra({'activity_date':"date(tracker_date)"}) \ .values('activity_date') \ .annotate(count=Count('id')) for i in range(0,no_days,+1): temp = start_date + datetime.timedelta(days=i) count = next((dct['count'] for dct in trackers if dct['activity_date'] == temp.date()), 0) activity.append([temp.strftime("%d %b %Y"),count]) return render_to_response('oppia/profile/user-scorecard.html', {'view_user': view_user, 'courses': courses, 'page_ordering': ('-' if inverse_order else '') + ordering, 'activity_graph_data': activity }, context_instance=RequestContext(request))