Added completion notice to course details

This commit is contained in:
Nick Winter 2015-12-01 17:23:33 -08:00
parent 93010f771a
commit 3728b2dc4e
2 changed files with 31 additions and 18 deletions
app
templates/courses
views/courses

View file

@ -2,11 +2,6 @@ extends /templates/base
block content
div
span *UNDER CONSTRUCTION, send feedback to
a.spl(href='mailto:team@codecombat.com') team@codecombat.com
div(style='border-bottom: 1px solid black;')
if (noCourseInstance || noCourseInstanceSelected) && course
h1= course.get('name')
if noCourseInstance
@ -31,24 +26,26 @@ block content
else if !course || !courseInstance
h1(data-i18n="common.loading") Loading...
else
h1
| #{course.get('name')}
small.spl
p
// TODO: format this text all good and stuff
strong
if courseInstance.get('name')
| (#{courseInstance.get('name')})
span= courseInstance.get('name')
else if view.classroom.get('name')
| (#{view.classroom.get('name')})
span= view.classroom.get('name')
else
| (
span(data-i18n='courses.unnamed_class')
| )
if !view.owner.isNew() && view.getOwnerName()
p
span.spr Creator:
if !view.owner.isNew() && view.getOwnerName()
span.spl.spr - Teacher:
a(href="/user/#{view.owner.id}")
strong= view.getOwnerName()
h1
| #{course.get('name')}
if view.courseComplete
span.spl - Complete!
p
if courseInstance.get('description')
each line in courseInstance.get('description').split('\n')

View file

@ -152,17 +152,28 @@ module.exports = class CourseDetailsView extends RootView
@userLevelStateMap = {}
levelStateMap = {}
for levelSession in @levelSessions.models
continue if levelSession.skipMe # Don't track second arena session as another completed level
userID = levelSession.get('creator')
levelID = levelSession.get('level').original
state = if levelSession.get('state')?.complete then 'complete' else 'started'
playtime = parseInt(levelSession.get('playtime') ? 0, 10)
do (userID, levelID) =>
secondSessionForLevel = _.find(@levelSessions.models, ((otherSession) ->
otherSession.get('creator') is userID and otherSession.get('level').original is levelID and otherSession.id isnt levelSession.id
))
if secondSessionForLevel
state = 'complete' if secondSessionForLevel.get('state')?.complete
playtime = playtime + parseInt(secondSessionForLevel.get('playtime') ? 0, 10)
secondSessionForLevel.skipMe = true
levelStateMap[levelID] = state
@instanceStats.totalLevelsCompleted++ if state is 'complete'
@instanceStats.totalPlayTime += parseInt(levelSession.get('playtime') ? 0)
@instanceStats.totalPlayTime += playtime
@memberStats[userID] ?= totalLevelsCompleted: 0, totalPlayTime: 0
@memberStats[userID].totalLevelsCompleted++ if state is 'complete'
@memberStats[userID].totalPlayTime += parseInt(levelSession.get('playtime') ? 0)
@memberStats[userID].totalPlayTime += playtime
@userConceptStateMap[userID] ?= {}
for concept of @levelConceptMap[levelID]
@ -185,6 +196,11 @@ module.exports = class CourseDetailsView extends RootView
for concept, state of conceptStateMap
@conceptsCompleted[concept] ?= 0
@conceptsCompleted[concept]++
if @memberStats[me.id]?.totalLevelsCompleted >= _.size @campaign.get('levels')
console.log @memberStats[me.id]?.totalLevelsCompleted, 'course complete!'
@courseComplete = true
@render?()
# If we just joined a single-player course for Hour of Code, we automatically play.