()
| 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 |
nothing calls this directly
no test coverage detected