def download_detail(self, request, **kwargs): self.is_authenticated(request) self.throttle_check(request) pk = kwargs.pop('pk', None) module = self._meta.queryset.get(pk=pk) file_to_download = module.getAbsPath() schedule = module.get_default_schedule() has_completed_trackers = Tracker.has_completed_trackers( module, request.user) cohort = Cohort.member_now(module, request.user) if cohort: if cohort.schedule: schedule = cohort.schedule # add scheduling XML file if schedule or has_completed_trackers: file_to_download = settings.MODULE_UPLOAD_DIR + "temp/" + str( request.user.id) + "-" + module.filename shutil.copy2(module.getAbsPath(), file_to_download) zip = zipfile.ZipFile(file_to_download, 'a') if schedule: zip.writestr(module.shortname + "/schedule.xml", schedule.to_xml_string()) if has_completed_trackers: zip.writestr(module.shortname + "/tracker.xml", Tracker.to_xml_string(module, 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"' % ( module.filename) md = ModuleDownload() md.user = request.user md.module = module md.module_version = module.version md.save() module_downloaded.send(sender=self, module=module, user=request.user) return response
def module_download_callback(sender, **kwargs): user = kwargs.get('user') module = kwargs.get('module') # check not superuser if user.is_superuser: return if not module.is_first_download(user): return p = Points() p.points = 50 p.type = 'moduledownloaded' p.description = "Module downloaded: " + module.get_title() p.user = user p.module = module p.cohort = Cohort.student_member_now(module,user) p.save() return
def download_detail(self, request, **kwargs): self.is_authenticated(request) self.throttle_check(request) pk = kwargs.pop('pk', None) module = self._meta.queryset.get(pk = pk) file_to_download = module.getAbsPath(); schedule = module.get_default_schedule() has_completed_trackers = Tracker.has_completed_trackers(module,request.user) cohort = Cohort.member_now(module,request.user) if cohort: if cohort.schedule: schedule = cohort.schedule # add scheduling XML file if schedule or has_completed_trackers: file_to_download = settings.MODULE_UPLOAD_DIR +"temp/"+ str(request.user.id) + "-" + module.filename shutil.copy2(module.getAbsPath(), file_to_download) zip = zipfile.ZipFile(file_to_download,'a') if schedule: zip.writestr(module.shortname +"/schedule.xml",schedule.to_xml_string()) if has_completed_trackers: zip.writestr(module.shortname +"/tracker.xml",Tracker.to_xml_string(module,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"' %(module.filename) md = ModuleDownload() md.user = request.user md.module = module md.module_version = module.version md.save() module_downloaded.send(sender=self, module=module, user=request.user) return response
def dehydrate(self, bundle): # Include full download url if bundle.request.is_secure(): prefix = 'https://' else: prefix = 'http://' bundle.data['url'] = prefix + bundle.request.META['SERVER_NAME'] + bundle.data['resource_uri'] + 'download/' # make sure title is shown as json object (not string representation of one) bundle.data['title'] = json.loads(bundle.data['title']) module = Module.objects.get(pk=bundle.obj.pk) schedule = module.get_default_schedule() cohort = Cohort.member_now(module,bundle.request.user) if cohort: if cohort.schedule: schedule = cohort.schedule if schedule: bundle.data['schedule'] = schedule.lastupdated_date.strftime("%Y%m%d%H%M%S") sr = ScheduleResource() bundle.data['schedule_uri'] = sr.get_resource_uri(schedule) return bundle
def tracker_callback(sender, **kwargs): tracker = kwargs.get('instance') # check not superuser if tracker.user.is_superuser: return if not tracker.is_first_tracker_today(): return if not tracker.activity_exists(): return if not tracker.completed: return type = 'activitycompleted' points = 10 if tracker.get_activity_type() == "media": description = "Media played: " + tracker.get_activity_title() type = 'mediaplayed' points = 20 else: description = "Activity completed: " + tracker.get_activity_title() p = Points() p.points = points p.type = type p.description = description p.user = tracker.user p.module = tracker.module p.cohort = Cohort.student_member_now(tracker.module,tracker.user) p.save() # test if tracker submitted on time return
def dehydrate(self, bundle): # Include full download url if bundle.request.is_secure(): prefix = 'https://' else: prefix = 'http://' bundle.data['url'] = prefix + bundle.request.META[ 'SERVER_NAME'] + bundle.data['resource_uri'] + 'download/' # make sure title is shown as json object (not string representation of one) bundle.data['title'] = json.loads(bundle.data['title']) module = Module.objects.get(pk=bundle.obj.pk) schedule = module.get_default_schedule() cohort = Cohort.member_now(module, bundle.request.user) if cohort: if cohort.schedule: schedule = cohort.schedule if schedule: bundle.data['schedule'] = schedule.lastupdated_date.strftime( "%Y%m%d%H%M%S") sr = ScheduleResource() bundle.data['schedule_uri'] = sr.get_resource_uri(schedule) return bundle
def quizattempt_callback(sender, **kwargs): quiz_attempt = kwargs.get('instance') # Check user doesn't own the quiz quiz = quiz_attempt.quiz if quiz.owner == quiz_attempt.user: return # give 5 points to quiz owner if quiz_attempt.is_first_attempt_today() and not quiz.owner.is_superuser: p = Points() p.points = 5 p.user = quiz.owner p.type = 'userquizattempt' p.description = quiz_attempt.user.username + " attempted your quiz: " + quiz.title p.save() # check not superuser if quiz_attempt.user.is_superuser: return # find out if this quiz is part of a module module = None digest = quiz_attempt.get_quiz_digest() if digest is not None: # TODO - what are chances of 2 modules having the exact same activity? and what to do if they do? acts = Activity.objects.filter(digest=digest) for a in acts: module = a.section.module # find out is user is part of the cohort for this module cohort = None if module is not None: cohort = Cohort.student_member_now(module,quiz_attempt.user) if quiz_attempt.is_first_attempt(): # If it's the first time they've attempted this quiz award 20 points p = Points() p.points = 20 p.type = 'firstattempt' p.user = quiz_attempt.user p.description = "Bonus points for your first attempt at: " + quiz.title p.module = module p.cohort = cohort p.save() # add percentage points for their first attempt if quiz_attempt.get_score_percent() > 0: p = Points() p.points = quiz_attempt.get_score_percent() p.type = 'firstattemptscore' p.description = "Score for first attempt at quiz: " + quiz.title p.user = quiz_attempt.user p.module = module p.cohort = cohort p.save() # if you get 100% on first attempt get bonus of 50 points if quiz_attempt.get_score_percent() == 100: p = Points() p.points = 50 p.type = 'firstattemptbonus' p.description = "Bonus points for getting 100% in first attempt at quiz: " + quiz.title p.user = quiz_attempt.user p.module = module p.cohort = cohort p.save() elif quiz_attempt.is_first_attempt_today(): # If it's the first time today they've attempted this quiz award 10 points p = Points() p.points = 10 p.type = 'quizattempt' p.user = quiz_attempt.user p.description = "Quiz attempt at: " + quiz.title p.module = module p.cohort = cohort p.save() return