diff --git a/app/templates/courses/course-details.jade b/app/templates/courses/course-details.jade index 87e3f958a..be01acffc 100644 --- a/app/templates/courses/course-details.jade +++ b/app/templates/courses/course-details.jade @@ -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] diff --git a/app/views/courses/CourseDetailsView.coffee b/app/views/courses/CourseDetailsView.coffee index 6d423e2d4..93b3a246c 100644 --- a/app/views/courses/CourseDetailsView.coffee +++ b/app/views/courses/CourseDetailsView.coffee @@ -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