| 84 | } |
| 85 | |
| 86 | getLevelNumber (levelID, defaultNumber, courseID) { |
| 87 | // deal with duplicated levels in different course |
| 88 | if (!this.levelNumberMap) { |
| 89 | this.levelNumberMap = {} |
| 90 | const language = this.get('aceConfig')?.language |
| 91 | for (const course of (this.get('courses') || [])) { |
| 92 | const levels = [] |
| 93 | for (const level of course.levels) { |
| 94 | if (level.original) { |
| 95 | if ((language != null) && (level.primerLanguage === language)) { continue } |
| 96 | levels.push({ key: level.original, practice: level.practice != null ? level.practice : false, assessment: level.assessment != null ? level.assessment : false }) |
| 97 | } |
| 98 | } |
| 99 | _.assign(this.levelNumberMap, utils.createLevelNumberMap(levels, course._id)) |
| 100 | } |
| 101 | } |
| 102 | |
| 103 | if (courseID && this.levelNumberMap[`${courseID}:${levelID}`]) { |
| 104 | return this.levelNumberMap[`${courseID}:${levelID}`] |
| 105 | } |
| 106 | return this.levelNumberMap[levelID] != null ? this.levelNumberMap[levelID] : defaultNumber |
| 107 | } |
| 108 | |
| 109 | removeMember (userID, opts) { |
| 110 | const options = { |