def course_activity_view(request, course_id, activity_id): course = can_view_course(request, course_id) activity = Activity.objects.get(pk=activity_id) # log the activity in the tracker tracker = Tracker() tracker.user = request.user tracker.course = course tracker.type = activity.type tracker.data = "" tracker.ip = request.META.get('REMOTE_ADDR','0.0.0.0') tracker.agent = request.META.get('HTTP_USER_AGENT','unknown') tracker.activity_title = activity.title tracker.section_title = activity.section.title tracker.save() if activity.type == "page": activity_content_file = activity.get_content() with codecs.open(settings.MEDIA_ROOT + "courses/" + course.shortname + "/" + activity_content_file, "r", "utf-8") as f: s = f.read() template = re.compile('\<body(?P<body>.*?)>(?P<content>.*)\<\/body\>', re.DOTALL) activity_content = template.search(s).group('content') activity_content = activity_content.replace("images/",settings.MEDIA_URL + "courses/" + course.shortname + "/images/") return render_to_response('oppia/preview/course_activity_page.html', {'course': course, 'activity': activity , 'content' : activity_content }, context_instance=RequestContext(request)) else: activity_content= None return render_to_response('oppia/preview/course_activity_not_supported.html', {'course': course, 'activity': activity , 'content' : activity_content }, context_instance=RequestContext(request))
def course_activity_view(request, course_id, activity_id): course = check_can_view(request, course_id) activity = Activity.objects.get(pk=activity_id) # log the activity in the tracker tracker = Tracker() tracker.user = request.user tracker.course = course tracker.type = activity.type tracker.data = "" tracker.ip = request.META.get('REMOTE_ADDR','0.0.0.0') tracker.agent = request.META.get('HTTP_USER_AGENT','unknown') tracker.activity_title = activity.title tracker.section_title = activity.section.title tracker.save() if activity.type == "page": activity_content_file = activity.get_content() with codecs.open(settings.MEDIA_ROOT + "courses/" + course.shortname + "/" + activity_content_file, "r", "utf-8") as f: s = f.read() template = re.compile('\<body(?P<body>.*?)>(?P<content>.*)\<\/body\>', re.DOTALL) activity_content = template.search(s).group('content') activity_content = activity_content.replace("images/",settings.MEDIA_URL + "courses/" + course.shortname + "/images/") return render_to_response('oppia/preview/course_activity_page.html', {'course': course, 'activity': activity , 'content' : activity_content }, context_instance=RequestContext(request)) else: activity_content= None return render_to_response('oppia/preview/course_activity_not_supported.html', {'course': course, 'activity': activity , 'content' : activity_content }, context_instance=RequestContext(request))
def download_course(self, request, **kwargs): self.is_authenticated(request) self.throttle_check(request) pk = kwargs.pop('pk', None) try: if request.user.is_staff: course = self._meta.queryset.get(pk = pk,is_archived=False) else: course = self._meta.queryset.get(pk = pk, is_archived=False,is_draft=False) except Course.DoesNotExist: raise Http404(_(u"Course not found")) except ValueError: try: if request.user.is_staff: course = self._meta.queryset.get(shortname = pk,is_archived=False) else: course = self._meta.queryset.get(shortname = pk, is_archived=False,is_draft=False) except Course.DoesNotExist: raise Http404(_(u"Course not found")) file_to_download = course.getAbsPath(); schedule = course.get_default_schedule() has_completed_trackers = Tracker.has_completed_trackers(course,request.user) cohort = Cohort.member_now(course,request.user) if cohort: if cohort.schedule: schedule = cohort.schedule # add scheduling XML file if schedule or has_completed_trackers: file_to_download = settings.COURSE_UPLOAD_DIR +"temp/"+ str(request.user.id) + "-" + course.filename shutil.copy2(course.getAbsPath(), file_to_download) zip = zipfile.ZipFile(file_to_download,'a') if schedule: zip.writestr(course.shortname +"/schedule.xml",schedule.to_xml_string()) if has_completed_trackers: zip.writestr(course.shortname +"/tracker.xml",Tracker.to_xml_string(course,request.user)) zip.close() wrapper = FileWrapper(file(file_to_download)) response = HttpResponse(wrapper, content_type='application/zip') response['Content-Length'] = os.path.getsize(file_to_download) response['Content-Disposition'] = 'attachment; filename="%s"' %(course.filename) # Add to tracker tracker = Tracker() tracker.user = request.user tracker.course = course tracker.type = 'download' tracker.data = json.dumps({'version':course.version }) tracker.ip = request.META.get('REMOTE_ADDR','0.0.0.0') tracker.agent = request.META.get('HTTP_USER_AGENT','unknown') tracker.save() course_downloaded.send(sender=self, course=course, user=request.user) return response
def course_downloaded_callback(sender, **kwargs): request = kwargs.get('request') course = kwargs.get('course') tracker = Tracker() tracker.user = request.user tracker.course = course tracker.type = 'download' tracker.data = json.dumps({'version': course.version}) tracker.ip = request.META.get('REMOTE_ADDR', DEFAULT_IP_ADDRESS) tracker.agent = request.META.get('HTTP_USER_AGENT', 'unknown') tracker.save()
def record_mobile_tracker(request, course_id, type, page): t = Tracker() t.user = request.user t.ip = request.META.get('REMOTE_ADDR', oppia.DEFAULT_IP_ADDRESS) t.agent = request.META.get('HTTP_USER_AGENT', 'unknown') t.digest = "" t.data = "" t.course = course_id t.type = type t.completed = True t.activity_title = page t.save() return
def record_mobile_tracker(request, course_id, type, page): t = Tracker() t.user = request.user t.ip = request.META.get("REMOTE_ADDR", "0.0.0.0") t.agent = request.META.get("HTTP_USER_AGENT", "unknown") t.digest = "" t.data = "" t.course = course_id t.type = type t.completed = True t.activity_title = page t.save() return