MCPcopy Create free account
hub / github.com/codecombat/codecombat / statsForSessions

Method statsForSessions

app/models/Classroom.js:230–347  ·  view source on GitHub ↗
(sessions, courseID, levelsCollection)

Source from the content-addressed store, hash-verified

228 }
229
230 statsForSessions (sessions, courseID, levelsCollection) {
231 let complete, left, nextLevel, nextLevelNumber
232 if (levelsCollection == null) { levelsCollection = undefined }
233 if (!sessions) { return null }
234 sessions = sessions.models || sessions
235 const arena = this.getLadderLevel(courseID)
236 const project = this.getProjectLevel(courseID)
237 const courseLevels = this.getLevels({ courseID, withoutLadderLevels: true, levelsCollection })
238 const levelSessionMap = {}
239 for (const session of Array.from(sessions)) { levelSessionMap[session.get('level').original] = session }
240 let currentIndex = -1
241 let lastStarted = null
242 let levelsTotal = 0
243 let levelsLeft = 0
244 let lastPlayed = null
245 let lastPlayedNumber = null
246 let playtime = 0
247 const levels = []
248 let linesOfCode = 0
249 const userLevels = {}
250 const levelsInCourse = new Set()
251 const levelAttributesArr = courseLevels.models.map(l => l.attributes)
252 for (let index = 0; index < courseLevels.models.length; index++) {
253 let left2, left3
254 const level = courseLevels.models[index]
255 if (!level.get('practice') && !level.get('assessment')) { levelsTotal++ }
256 complete = false
257 const session = levelSessionMap[level.get('original')]
258 if (session) {
259 let left1
260 complete = (left = session.get('state').complete) != null ? left : false
261 playtime += (left1 = session.get('playtime')) != null ? left1 : 0
262 linesOfCode += session.countOriginalLinesOfCode(level)
263 lastPlayed = level
264 lastPlayedNumber = this.getLevelNumber(level.get('original'), index + 1, courseID)
265 if (complete) {
266 currentIndex = index
267 } else {
268 lastStarted = level
269 if (!level.get('practice') && !level.get('assessment')) { levelsLeft++ }
270 }
271 } else if (!(level.get('practice') || level.get('assessment'))) {
272 levelsLeft++
273 }
274 const lockCheckOriginal = utils.findParentLevelOriginal(level.attributes, levelAttributesArr)
275 levels.push({
276 assessment: (left2 = level.get('assessment')) != null ? left2 : false,
277 practice: (left3 = level.get('practice')) != null ? left3 : false,
278 complete,
279 optional: this.isStudentOnOptionalLevel(me.id, courseID, lockCheckOriginal),
280 slug: level.get('slug'),
281 original: level.get('original'),
282 })
283 if (!level.get('practice') && !level.get('assessment')) { levelsInCourse.add(level.get('original')) }
284 userLevels[level.get('original')] = complete
285 }
286 lastPlayed = lastStarted != null ? lastStarted : lastPlayed
287 if (lastPlayed != null ? lastPlayed.get('assessment') : undefined) { lastPlayedNumber = '' }

Callers 6

calculateStatsMethod · 0.80
calculateStatsMethod · 0.80
calculateAllCompletedMethod · 0.80
constructorMethod · 0.80
showVictoryComponentMethod · 0.80
showVictoryComponentMethod · 0.80

Calls 12

getLadderLevelMethod · 0.95
getProjectLevelMethod · 0.95
getLevelsMethod · 0.95
getLevelNumberMethod · 0.95
findNextLevelsBySessionFunction · 0.85
getLevelsDataByOriginalsFunction · 0.85
__guard__Function · 0.70
getMethod · 0.45
findNextLevelMethod · 0.45

Tested by

no test coverage detected