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
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')
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
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
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
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
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
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
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
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)
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)
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)
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)
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)
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
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)
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)
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)