mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-26 05:53:39 -04:00
Add stats to course details page
This commit is contained in:
parent
cbaac98556
commit
238ea49090
2 changed files with 49 additions and 21 deletions
app
|
@ -80,21 +80,28 @@ mixin progress-summary-stats
|
|||
td
|
||||
if courseInstance
|
||||
div #{courseInstance.get('members').length}
|
||||
tr
|
||||
td Average level play time:
|
||||
td TODO
|
||||
tr
|
||||
td Total play time:
|
||||
td TODO
|
||||
tr
|
||||
td Average levels completed:
|
||||
td TODO
|
||||
tr
|
||||
td Total levels completed:
|
||||
td TODO
|
||||
tr
|
||||
td Furthest level completed:
|
||||
td TODO
|
||||
if instanceStats
|
||||
tr
|
||||
td Average level play time:
|
||||
if instanceStats.averageLevelPlaytime > 0
|
||||
td= moment.duration(instanceStats.averageLevelPlaytime, "seconds").humanize()
|
||||
else
|
||||
td 0
|
||||
tr
|
||||
td Total play time:
|
||||
if instanceStats.totalPlayTime > 0
|
||||
td= moment.duration(instanceStats.totalPlayTime, "seconds").humanize()
|
||||
else
|
||||
td 0
|
||||
tr
|
||||
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
|
||||
h3 Concepts Covered
|
||||
|
@ -160,9 +167,9 @@ mixin progress-members
|
|||
mixin progress-members-individual(memberID)
|
||||
- var name = memberUserMap[memberID] ? memberUserMap[memberID].get('name') : 'Anoner'
|
||||
a(href="/user/#{memberID}")= name || 'Anoner'
|
||||
div TODO: levels completed
|
||||
div TODO: total time played
|
||||
div TODO: last played
|
||||
if memberStats && memberStats[memberID]
|
||||
div #{memberStats[memberID].totalLevelsCompleted} levels
|
||||
div Played #{moment.duration(memberStats[memberID].totalPlayTime, "seconds").humanize()}
|
||||
|
||||
mixin progress-members-concepts(memberID)
|
||||
if course && userLevelStateMap[memberID]
|
||||
|
|
|
@ -42,8 +42,10 @@ module.exports = class CourseDetailsView extends RootView
|
|||
context.course = @course if @course?.loaded
|
||||
context.courseInstance = @courseInstance if @courseInstance?.loaded
|
||||
context.courseInstances = @courseInstances?.models ? []
|
||||
context.instanceStats = @instanceStats
|
||||
context.levelConceptMap = @levelConceptMap ? {}
|
||||
context.memberSort = @memberSort
|
||||
context.memberStats = @memberStats
|
||||
context.memberUserMap = @memberUserMap ? {}
|
||||
context.noCourseInstance = @noCourseInstance
|
||||
context.noCourseInstanceSelected = @noCourseInstanceSelected
|
||||
|
@ -118,17 +120,36 @@ module.exports = class CourseDetailsView extends RootView
|
|||
|
||||
onLevelSessionsSync: ->
|
||||
# console.log 'onLevelSessionsSync'
|
||||
@instanceStats = averageLevelsCompleted: 0, furthestLevelCompleted: '', totalLevelsCompleted: 0, totalPlayTime: 0
|
||||
@memberStats = {}
|
||||
@userConceptStateMap = {}
|
||||
@userLevelStateMap = {}
|
||||
levelStateMap = {}
|
||||
for levelSession in @levelSessions.models
|
||||
userID = levelSession.get('creator')
|
||||
levelID = levelSession.get('level').original
|
||||
@userConceptStateMap[userID] ?= {}
|
||||
@userLevelStateMap[userID] ?= {}
|
||||
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]
|
||||
@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 = {}
|
||||
for userID, conceptStateMap of @userConceptStateMap
|
||||
for concept, state of conceptStateMap
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue