MCPcopy Index your code
hub / github.com/codecombat/codecombat / onClickExportProgress

Method onClickExportProgress

app/views/admin/MainAdminView.js:381–548  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

379 }
380
381 onClickExportProgress () {
382 $('.classroom-progress-csv').prop('disabled', true)
383 const classCode = $('.classroom-progress-class-code').val()
384 let classroom = null
385 let courses = null
386 const courseLevels = []
387 const courseInteractives = []
388 let sessions = null
389 let interactiveSessions = null
390 let users = null
391 const userMap = {}
392 const userLevelPlaytimeMap = {}
393 return Promise.resolve(new Classroom().fetchByCode(classCode))
394 .then(model => {
395 classroom = new Classroom({ _id: model.data._id })
396 return Promise.resolve(classroom.fetch())
397 }).then(model => {
398 courses = new Courses()
399 return Promise.resolve(courses.fetch())
400 }).then(models => {
401 const iterable = classroom.get('courses')
402 for (let index = 0; index < iterable.length; index++) {
403 const course = iterable[index]
404 for (const level of Array.from(course.levels)) {
405 courseLevels.push({
406 courseIndex: index + 1,
407 levelID: level.original,
408 slug: level.slug,
409 courseSlug: courses.get(course._id).get('slug')
410 })
411 for (const intro of Array.from(level.introContent != null ? level.introContent : [])) {
412 // TODO: this only works for Python presently
413 if (intro.type === 'interactive') {
414 courseInteractives.push({
415 courseIndex: index + 1,
416 interactiveID: intro.contentId.python != null ? intro.contentId.python : intro.contentId,
417 courseSlug: courses.get(course._id).get('slug')
418 })
419 }
420 }
421 }
422 }
423 users = new Users()
424 return Promise.resolve($.when(...Array.from(users.fetchForClassroom(classroom) || [])))
425 }).then(models => {
426 for (const user of Array.from(users.models)) { userMap[user.id] = user }
427 sessions = new LevelSessions()
428 return Promise.resolve($.when(...Array.from(sessions.fetchForAllClassroomMembers(classroom) || [])))
429 }).then(models => {
430 for (const session of Array.from(sessions.models)) {
431 var playtime
432 if (!__guard__(session.get('state'), x => x.complete)) { continue }
433 const levelID = session.get('level').original
434 const userID = session.get('creator')
435 if (userLevelPlaytimeMap[userID] == null) { userLevelPlaytimeMap[userID] = {} }
436 if (userLevelPlaytimeMap[userID][levelID] == null) { userLevelPlaytimeMap[userID][levelID] = {} }
437 if (session.get('contentPlaytimes')) {
438 playtime = 0

Callers

nothing calls this directly

Calls 8

fetchByCodeMethod · 0.80
__guard__Function · 0.70
fetchMethod · 0.45
getMethod · 0.45
fetchForClassroomMethod · 0.45
openMethod · 0.45
errorMethod · 0.45

Tested by

no test coverage detected