(orderedLevels)
| 2506 | } |
| 2507 | |
| 2508 | applyCourseLogicToLevels (orderedLevels) { |
| 2509 | const nextSlug = this.courseStats.levels.next?.get('slug') || this.courseStats.levels.first?.get('slug') |
| 2510 | if (!nextSlug) { return } |
| 2511 | |
| 2512 | const courseOrder = ['junior', '65c56663d2ca2055e65676af'].includes(this.terrain) ? orderedLevels : _.sortBy(orderedLevels, 'courseIdx') |
| 2513 | let found = false |
| 2514 | let prev = null |
| 2515 | let lastNormalLevel = null |
| 2516 | let lockedByTeacher = false |
| 2517 | for (const level of courseOrder) { |
| 2518 | const playerState = this.levelStatusMap[level.slug] |
| 2519 | level.color = 'rgb(255, 80, 60)' |
| 2520 | level.disabled = false |
| 2521 | |
| 2522 | const lockCheckOriginal = utils.findParentLevelOriginal(level, courseOrder) |
| 2523 | |
| 2524 | if (level.slug === nextSlug && !this.classroom.isStudentOnLockedLevel(me.get('_id'), this.course.get('_id'), lockCheckOriginal)) { |
| 2525 | level.locked = false |
| 2526 | level.hidden = false |
| 2527 | level.next = true |
| 2528 | found = true |
| 2529 | } else if ([STARTED_STATUS, COMPLETE_STATUS].includes(playerState)) { |
| 2530 | level.hidden = false |
| 2531 | level.locked = false |
| 2532 | } else { |
| 2533 | if (level.practice) { |
| 2534 | if (prev?.next) { |
| 2535 | level.hidden = !prev?.practice |
| 2536 | level.locked = true |
| 2537 | } else if (prev) { |
| 2538 | level.hidden = prev.hidden |
| 2539 | level.locked = prev.locked |
| 2540 | } else { |
| 2541 | level.hidden = true |
| 2542 | level.locked = true |
| 2543 | } |
| 2544 | } else if (level.assessment) { |
| 2545 | level.hidden = false |
| 2546 | level.locked = this.levelStatusMap[lastNormalLevel?.slug] !== COMPLETE_STATUS |
| 2547 | } else { |
| 2548 | level.locked = found |
| 2549 | level.hidden = false |
| 2550 | } |
| 2551 | } |
| 2552 | |
| 2553 | if ((!prev || !prev.locked) && level.locked && this.classroom.isStudentOnOptionalLevel(me.get('_id'), this.course.get('_id'), lockCheckOriginal)) { |
| 2554 | level.locked = false |
| 2555 | } |
| 2556 | |
| 2557 | level.noFlag = !level.next |
| 2558 | |
| 2559 | let lockSkippedLevel = false |
| 2560 | const startLockedLevel = this.courseInstance.get('startLockedLevel') |
| 2561 | const legacyLock = startLockedLevel && level.slug === startLockedLevel |
| 2562 | |
| 2563 | if (legacyLock || |
| 2564 | this.classroom.isStudentOnLockedLevel(me.get('_id'), this.course.get('_id'), lockCheckOriginal)) { |
| 2565 | if (!this.classroom.isStudentOnOptionalLevel(me.get('_id'), this.course.get('_id'), lockCheckOriginal)) { |
no test coverage detected