Add stats to course details page

This commit is contained in:
Matt Lott 2015-09-24 07:28:43 -07:00
parent cbaac98556
commit 238ea49090
2 changed files with 49 additions and 21 deletions
app
templates/courses
views/courses

View file

@ -80,21 +80,28 @@ mixin progress-summary-stats
td td
if courseInstance if courseInstance
div #{courseInstance.get('members').length} div #{courseInstance.get('members').length}
tr if instanceStats
td Average level play time: tr
td TODO td Average level play time:
tr if instanceStats.averageLevelPlaytime > 0
td Total play time: td= moment.duration(instanceStats.averageLevelPlaytime, "seconds").humanize()
td TODO else
tr td 0
td Average levels completed: tr
td TODO td Total play time:
tr if instanceStats.totalPlayTime > 0
td Total levels completed: td= moment.duration(instanceStats.totalPlayTime, "seconds").humanize()
td TODO else
tr td 0
td Furthest level completed: tr
td TODO td Average levels completed:
td #{instanceStats.averageLevelsCompleted.toFixed(2)}
tr
td Total levels completed:
td= instanceStats.totalLevelsCompleted
tr
td Furthest level completed:
td= instanceStats.furthestLevelCompleted.replace('Course: ', '')
mixin progress-summary-concepts mixin progress-summary-concepts
h3 Concepts Covered h3 Concepts Covered
@ -160,9 +167,9 @@ mixin progress-members
mixin progress-members-individual(memberID) mixin progress-members-individual(memberID)
- var name = memberUserMap[memberID] ? memberUserMap[memberID].get('name') : 'Anoner' - var name = memberUserMap[memberID] ? memberUserMap[memberID].get('name') : 'Anoner'
a(href="/user/#{memberID}")= name || 'Anoner' a(href="/user/#{memberID}")= name || 'Anoner'
div TODO: levels completed if memberStats && memberStats[memberID]
div TODO: total time played div #{memberStats[memberID].totalLevelsCompleted} levels
div TODO: last played div Played #{moment.duration(memberStats[memberID].totalPlayTime, "seconds").humanize()}
mixin progress-members-concepts(memberID) mixin progress-members-concepts(memberID)
if course && userLevelStateMap[memberID] if course && userLevelStateMap[memberID]

View file

@ -42,8 +42,10 @@ module.exports = class CourseDetailsView extends RootView
context.course = @course if @course?.loaded context.course = @course if @course?.loaded
context.courseInstance = @courseInstance if @courseInstance?.loaded context.courseInstance = @courseInstance if @courseInstance?.loaded
context.courseInstances = @courseInstances?.models ? [] context.courseInstances = @courseInstances?.models ? []
context.instanceStats = @instanceStats
context.levelConceptMap = @levelConceptMap ? {} context.levelConceptMap = @levelConceptMap ? {}
context.memberSort = @memberSort context.memberSort = @memberSort
context.memberStats = @memberStats
context.memberUserMap = @memberUserMap ? {} context.memberUserMap = @memberUserMap ? {}
context.noCourseInstance = @noCourseInstance context.noCourseInstance = @noCourseInstance
context.noCourseInstanceSelected = @noCourseInstanceSelected context.noCourseInstanceSelected = @noCourseInstanceSelected
@ -118,17 +120,36 @@ module.exports = class CourseDetailsView extends RootView
onLevelSessionsSync: -> onLevelSessionsSync: ->
# console.log 'onLevelSessionsSync' # console.log 'onLevelSessionsSync'
@instanceStats = averageLevelsCompleted: 0, furthestLevelCompleted: '', totalLevelsCompleted: 0, totalPlayTime: 0
@memberStats = {}
@userConceptStateMap = {} @userConceptStateMap = {}
@userLevelStateMap = {} @userLevelStateMap = {}
levelStateMap = {}
for levelSession in @levelSessions.models for levelSession in @levelSessions.models
userID = levelSession.get('creator') userID = levelSession.get('creator')
levelID = levelSession.get('level').original levelID = levelSession.get('level').original
@userConceptStateMap[userID] ?= {}
@userLevelStateMap[userID] ?= {}
state = if levelSession.get('state')?.complete then 'complete' else 'started' state = if levelSession.get('state')?.complete then 'complete' else 'started'
@userLevelStateMap[userID][levelID] = state levelStateMap[levelID] = state
@instanceStats.totalLevelsCompleted++ if state is 'complete'
@instanceStats.totalPlayTime += levelSession.get('playtime')
@memberStats[userID] ?= totalLevelsCompleted: 0, totalPlayTime: 0
@memberStats[userID].totalLevelsCompleted++ if state is 'complete'
@memberStats[userID].totalPlayTime += levelSession.get('playtime')
@userConceptStateMap[userID] ?= {}
for concept of @levelConceptMap[levelID] for concept of @levelConceptMap[levelID]
@userConceptStateMap[userID][concept] = state @userConceptStateMap[userID][concept] = state
@userLevelStateMap[userID] ?= {}
@userLevelStateMap[userID][levelID] = state
if @courseInstance.get('members').length > 0
@instanceStats.averageLevelsCompleted = @instanceStats.totalLevelsCompleted / @courseInstance.get('members').length
for levelID, level of @campaign.get('levels')
@instanceStats.furthestLevelCompleted = level.name if levelStateMap[levelID] is 'complete'
@conceptsCompleted = {} @conceptsCompleted = {}
for userID, conceptStateMap of @userConceptStateMap for userID, conceptStateMap of @userConceptStateMap
for concept, state of conceptStateMap for concept, state of conceptStateMap