Exemple #1
0
    def get_context_data(self, **kwargs):

        context = super().get_context_data(**kwargs)
        can_view_course_detail(self.request, self.object.id)

        start_date = timezone.now() - datetime.timedelta(
            days=constants.ACTIVITY_GRAPH_DEFAULT_NO_DAYS)
        end_date = timezone.now()
        initial = {'start_date': start_date, 'end_date': end_date}
        initial.update(self.request.GET.dict())

        form = DateRangeForm(initial)
        if form.is_valid():
            start_date = timezone.make_aware(
                datetime.datetime.strptime(form.cleaned_data.get("start_date"),
                                           constants.STR_DATE_FORMAT),
                timezone.get_current_timezone())
            end_date = timezone.make_aware(
                datetime.datetime.strptime(form.cleaned_data.get("end_date"),
                                           constants.STR_DATE_FORMAT),
                timezone.get_current_timezone())

        form.form_method = 'get'
        context['form'] = form
        context['page'] = self.get_activitylogs_page(start_date, end_date)
        return context
Exemple #2
0
def old_quiz_download(request, course_id, quiz_id):
    can_view_course_detail(request, course_id)
    get_object_or_404(Quiz, pk=quiz_id)

    quiz_data = get_quiz_data(quiz_id)
    response = HttpResponse(
        quiz_data.export('xlsx'),
        content_type=STR_CONTENT_TYPE)
    response['Content-Disposition'] = STR_CONTENT_DISPOSITION

    return response
    def get_queryset(self):
        course = self.kwargs['course_id']
        # check permissions, get_user raises PermissionDenied
        can_view_course_detail(self.request, course)

        activity = Activity.objects.get(pk=self.kwargs['feedback_id'])
        quiz = Quiz.objects.filter(quizprops__name='digest',
                                   quizprops__value=activity.digest).last()

        return QuizAttempt.objects.filter(quiz=quiz) \
            .order_by('-submitted_date', '-attempt_date')
Exemple #4
0
def old_feedback_download(request, course_id, feedback_id):
    get_object_or_404(Quiz, pk=feedback_id)
    can_view_course_detail(request, course_id)

    data = get_feedback_data(feedback_id)

    response = HttpResponse(
        data.export('xlsx'),
        content_type=STR_CONTENT_TYPE)
    response['Content-Disposition'] = STR_CONTENT_DISPOSITION

    return response
    def get(self, request, course_id, quiz_id):
        activity = get_object_or_404(Activity,
                                     pk=quiz_id,
                                     type=Activity.QUIZ,
                                     section__course__pk=course_id)
        can_view_course_detail(request, course_id)

        prop = QuizProps.objects.get(name='digest', value=activity.digest)

        dashboard_accessed.send(sender=None, request=request, data=None)

        quiz_questions = Question.objects.filter(
            quizquestion__quiz__pk=prop.quiz_id) \
            .order_by('quizquestion__order')

        headers = ['Date', 'UserId', 'Max Score', 'User Score']

        for question in quiz_questions:
            headers.append(question.get_title())
            headers.append('Question Score')

        data = []
        data = tablib.Dataset(*data, headers=headers)

        quiz_attempts = QuizAttempt.objects.filter(quiz_id=prop.quiz_id) \
            .order_by('attempt_date')

        for quiz_attempt in quiz_attempts:
            row = [
                quiz_attempt.attempt_date.strftime(
                    constants.STR_DATETIME_FORMAT), quiz_attempt.user_id,
                quiz_attempt.maxscore, quiz_attempt.score
            ]

            for question in quiz_questions:
                try:
                    user_response = QuizAttemptResponse.objects.get(
                        question=question, quizattempt=quiz_attempt)
                    row.append(user_response.text)
                    row.append(user_response.score)
                except QuizAttemptResponse.DoesNotExist:
                    row.append('')
                    row.append('')

            data.append(row)

        response = HttpResponse(
            data.export('xlsx'),
            content_type='application/vnd.ms-excel;charset=utf-8')
        response['Content-Disposition'] = "attachment; filename=export.xlsx"

        return response
Exemple #6
0
def feedback_download(request, course_id, feedback_id):
    activity = get_object_or_404(Activity,
                                 pk=feedback_id,
                                 type=Activity.FEEDBACK,
                                 section__course__pk=course_id)
    can_view_course_detail(request, course_id)

    prop = QuizProps.objects.get(name='digest', value=activity.digest)
    data = get_feedback_data(prop.quiz_id)

    response = HttpResponse(
        data.export('xlsx'),
        content_type=STR_CONTENT_TYPE)
    response['Content-Disposition'] = STR_CONTENT_DISPOSITION

    return response
Exemple #7
0
    def get(self, request, course_id):
        course = can_view_course_detail(request, course_id)

        headers = ('Date', 'UserId', 'Type', 'Activity Title', 'Section Title',
                   'Time Taken', 'IP Address', 'User Agent', 'Language')
        data = []
        data = tablib.Dataset(*data, headers=headers)
        trackers = Tracker.objects.filter(course=course) \
            .order_by('-tracker_date')
        for t in trackers:
            try:
                data_dict = json.loads(t.data)
                if 'lang' in data_dict:
                    lang = data_dict['lang']
                else:
                    lang = ""
                data.append(
                    (t.tracker_date.strftime('%Y-%m-%d %H:%M:%S'),
                     t.user.id, t.type, t.get_activity_title(),
                     t.get_section_title(), t.time_taken, t.ip, t.agent, lang))
            except ValueError:
                data.append(
                    (t.tracker_date.strftime('%Y-%m-%d %H:%M:%S'), t.user.id,
                     t.type, "", "", t.time_taken, t.ip, t.agent, ""))

        response = HttpResponse(
            data.export('xlsx'),
            content_type='application/vnd.ms-excel;charset=utf-8')
        response['Content-Disposition'] = "attachment; filename=export.xlsx"

        return response
Exemple #8
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        dashboard_accessed.send(sender=None, request=self.request, data=None)

        course_list = context['page_obj'].object_list
        course_stats = UserCourseSummary.objects\
            .filter(course__in=list(course_list))\
            .aggregated_stats('total_downloads')

        for course in course_list:
            access_detail = can_view_course_detail(self.request, course.id)
            course.can_edit = can_edit_course(self.request, course.id)
            course.access_detail = access_detail is not None
            for stats in course_stats:
                if stats['course'] == course.id:
                    course.distinct_downloads = stats['distinct']
                    course.total_downloads = stats['total']
                    # remove the element to optimize next searches
                    course_stats.remove(stats)

        context['page_ordering'] = self.get_ordering()
        context['tag_list'] = Tag.objects.all() \
            .exclude(coursetag=None) \
            .order_by('name')
        context['current_tag'] = self.get_current_tag()
        context['course_filter'] = self.get_filter()

        return context
Exemple #9
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        course_list = context['page_obj'].object_list
        course_stats = UserCourseSummary.objects\
            .filter(course__in=list(course_list))\
            .aggregated_stats('total_downloads')

        for course in course_list:
            try:
                access_detail = can_view_course_detail(self.request, course.id)
                course.access_detail = access_detail is not None
            except PermissionDenied:
                course.access_detail = None
            course.can_edit = can_edit_course(self.request, course.id)
            course.can_edit_gamification = can_edit_course_gamification(
                self.request, course.id)
            for stats in course_stats:
                if stats['course'] == course.id:
                    course.distinct_downloads = stats['distinct']
                    course.total_downloads = stats['total']
                    # remove the element to optimize next searches
                    course_stats.remove(stats)

        context['page_ordering'] = self.get_ordering()
        context['category_list'] = Category.objects.all().exclude(
            coursecategory=None).order_by('name')
        context['current_category'] = self.get_current_category()
        context['course_filter'] = self.get_filter()

        return context
Exemple #10
0
    def get_context_data(self, **kwargs):

        context = super().get_context_data(**kwargs)
        can_view_course_detail(self.request, self.object.id)

        start_date = timezone.now() - datetime.timedelta(
            days=constants.ACTIVITY_GRAPH_DEFAULT_NO_DAYS)
        end_date = timezone.now()
        interval = 'days'
        initial = {
            'start_date': start_date,
            'end_date': end_date,
            'interval': interval
        }

        initial.update(self.request.GET.dict())
        if isinstance(initial['interval'], list):
            initial['interval'] = initial['interval'][0]

        form = DateRangeIntervalForm(initial)
        if form.is_valid():
            start_date = timezone.make_aware(
                datetime.datetime.strptime(form.cleaned_data.get("start_date"),
                                           constants.STR_DATE_FORMAT),
                timezone.get_current_timezone())
            end_date = timezone.make_aware(
                datetime.datetime.strptime(form.cleaned_data.get("end_date"),
                                           constants.STR_DATE_FORMAT),
                timezone.get_current_timezone())
            interval = form.cleaned_data.get("interval")

        form.form_method = 'get'
        context['form'] = form
        context['monthly'] = interval == 'months'

        context['download_stats'] = UserCourseSummary.objects \
            .filter(course=self.object.id) \
            .aggregated_stats('total_downloads', single=True)

        context['leaderboard'] = Points.get_leaderboard(
            constants.LEADERBOARD_HOMEPAGE_RESULTS_PER_PAGE, self.object)

        context['data'] = self.get_activity(start_date, end_date, interval)

        return context
Exemple #11
0
    def get_context_data(self, **kwargs):

        context = super().get_context_data(**kwargs)
        can_view_course_detail(self.request, self.object.id)

        start_date, end_date = self.get_daterange()
        interval = self.get_daterange_form().cleaned_data.get("interval")
        context['monthly'] = interval == 'months'

        context['download_stats'] = UserCourseSummary.objects \
            .filter(course=self.object.id).aggregated_stats('total_downloads', single=True)
        context['leaderboard'] = Points.get_leaderboard(
            constants.LEADERBOARD_HOMEPAGE_RESULTS_PER_PAGE, self.object)
        context['data'] = self.get_activity(start_date, end_date, interval)
        context['can_edit_course_gamification'] = can_edit_course_gamification(
            self.request, self.object.id)

        return context
Exemple #12
0
    def get(self, request, course_id):

        course = can_view_course_detail(request, course_id)

        dashboard_accessed.send(sender=None, request=request, data=course)

        start_date = datetime.datetime.now() - datetime.timedelta(days=31)
        end_date = datetime.datetime.now()
        interval = 'days'

        return self.process(request, course, start_date, end_date, interval)
Exemple #13
0
    def get(self, request, course_id):
        course = can_view_course_detail(request, course_id)

        start_date = datetime.datetime.now() - datetime.timedelta(days=31)
        end_date = datetime.datetime.now()

        data = {}
        data['start_date'] = start_date
        data['end_date'] = end_date
        form = DateRangeForm(initial=data)

        return self.process(request, course, form, start_date, end_date)
Exemple #14
0
    def get(self, request, course_id):

        course = can_view_course_detail(request, course_id)

        dashboard_accessed.send(sender=None, request=request, data=course)

        start_date = timezone.now() - datetime.timedelta(
            days=constants.ACTIVITY_GRAPH_DEFAULT_NO_DAYS)
        end_date = timezone.now()
        interval = 'days'

        return self.process(request, course, start_date, end_date, interval)
Exemple #15
0
    def get(self, request, course_id):
        course = can_view_course_detail(request, course_id)

        start_date = timezone.now() - datetime.timedelta(
            days=constants.ACTIVITY_GRAPH_DEFAULT_NO_DAYS)
        end_date = timezone.now()

        data = {}
        data['start_date'] = start_date
        data['end_date'] = end_date
        form = DateRangeForm(initial=data)

        return self.process(request, course, form, start_date, end_date)
Exemple #16
0
    def post(self, request, course_id):
        course = can_view_course_detail(request, course_id)

        form = DateRangeForm(request.POST)
        if form.is_valid():
            start_date = form.cleaned_data.get("start_date")
            start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d")
            end_date = form.cleaned_data.get("end_date")
            end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d")
        else:
            start_date = datetime.datetime.now() - datetime.timedelta(days=31)
            end_date = datetime.datetime.now()

        return self.process(request, course, form, start_date, end_date)
Exemple #17
0
def render_courses_list(request, courses, params=None):

    if params is None:
        params = {}

    course_filter = request.GET.get('visibility', '')
    if course_filter == 'draft':
        courses = courses.filter(is_draft=True)
    elif course_filter == 'archived':
        courses = courses.filter(is_archived=True)

    tag_list = Tag.objects.all().exclude(coursetag=None).order_by('name')
    paginator = Paginator(courses, 25)  # Show 25 per page
    # Make sure page request is an int. If not, deliver first page.
    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    course_stats = list(
        UserCourseSummary.objects.filter(
            course__in=courses).values('course').annotate(
                distinct=Count('user'), total=Sum('total_downloads')))

    try:
        courses = paginator.page(page)
    except (EmptyPage, InvalidPage):
        courses = paginator.page(paginator.num_pages)

    for course in courses:
        access_detail = can_view_course_detail(request, course.id)
        course.can_edit = can_edit_course(request, course.id)
        course.access_detail = access_detail is not None

        for stats in course_stats:
            if stats['course'] == course.id:
                course.distinct_downloads = stats['distinct']
                course.total_downloads = stats['total']
                # remove the element to optimize next searches
                course_stats.remove(stats)

    params['page'] = courses
    params['tag_list'] = tag_list
    params['course_filter'] = course_filter

    return render(request, 'course/list.html', params)
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['course'] = can_view_course_detail(self.request,
                                                   self.get_course_id())
        context['advanced_search'] = self.filtered

        for tracker in context['page_obj'].object_list:
            tracker.data_obj = []
            try:
                data_dict = json.loads(tracker.data)
                for key, value in data_dict.items():
                    tracker.data_obj.append([key, value])
            except ValueError:
                pass
            tracker.data_obj.append(['agent', tracker.agent])
            tracker.data_obj.append(['ip', tracker.ip])

        return context
Exemple #19
0
    def post(self, request, course_id):
        course = can_view_course_detail(request, course_id)

        form = DateRangeForm(request.POST)
        if form.is_valid():
            start_date = timezone.make_aware(
                datetime.datetime.strptime(form.cleaned_data.get("start_date"),
                                           constants.STR_DATE_FORMAT),
                timezone.get_current_timezone())
            end_date = timezone.make_aware(
                datetime.datetime.strptime(form.cleaned_data.get("end_date"),
                                           constants.STR_DATE_FORMAT),
                timezone.get_current_timezone())
        else:
            start_date = timezone.now() - datetime.timedelta(
                days=constants.ACTIVITY_GRAPH_DEFAULT_NO_DAYS)
            end_date = timezone.now()

        return self.process(request, course, form, start_date, end_date)
Exemple #20
0
    def post(self, request, course_id):

        course = can_view_course_detail(request, course_id)

        dashboard_accessed.send(sender=None, request=request, data=course)

        form = DateRangeIntervalForm(request.POST)
        if form.is_valid():
            start_date = form.cleaned_data.get("start_date")
            start_date = datetime.datetime.strptime(start_date + " 00:00:00",
                                                    "%Y-%m-%d %H:%M:%S")
            end_date = form.cleaned_data.get("end_date")
            end_date = datetime.datetime.strptime(end_date + " 23:59:59",
                                                  "%Y-%m-%d %H:%M:%S")
            interval = form.cleaned_data.get("interval")
        else:
            start_date = datetime.datetime.now() - datetime.timedelta(days=31)
            end_date = datetime.datetime.now()
            interval = 'days'

        return self.process(request, course, start_date, end_date, interval)
Exemple #21
0
    def post(self, request, course_id):

        course = can_view_course_detail(request, course_id)

        dashboard_accessed.send(sender=None, request=request, data=course)

        form = DateRangeIntervalForm(request.POST)
        if form.is_valid():
            start_date = timezone.make_aware(
                datetime.datetime.strptime(form.cleaned_data.get("start_date"),
                                           constants.STR_DATE_FORMAT),
                timezone.get_current_timezone())
            end_date = timezone.make_aware(
                datetime.datetime.strptime(form.cleaned_data.get("end_date"),
                                           constants.STR_DATE_FORMAT),
                timezone.get_current_timezone())
            interval = form.cleaned_data.get("interval")
        else:
            start_date = timezone.now() - datetime.timedelta(
                days=constants.ACTIVITY_GRAPH_DEFAULT_NO_DAYS)
            end_date = timezone.now()
            interval = 'days'

        return self.process(request, course, start_date, end_date, interval)
 def get_queryset(self):
     course = self.kwargs['course_id']
     # check permissions, get_user raises PermissionDenied
     can_view_course_detail(self.request, course)
     return Activity.objects.filter(section__course=course,
                                    type=Activity.FEEDBACK)