示例#1
0
    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))
示例#3
0
    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))
示例#5
0
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))
示例#6
0
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
        })
示例#7
0
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))
示例#8
0
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))
示例#9
0
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})
示例#10
0
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))