(courseID, members)
| 887 | } |
| 888 | |
| 889 | removeCourse (courseID, members) { |
| 890 | if (!this.classroom.hasWritePermission({ showNoty: true })) { return } // May be viewing page as admin |
| 891 | let courseInstance = null |
| 892 | let membersBefore = 0 |
| 893 | |
| 894 | return Promise.resolve() |
| 895 | // Find the necessary course instance |
| 896 | .then(() => { |
| 897 | courseInstance = this.courseInstances.findWhere({ courseID, classroomID: this.classroom.id }) |
| 898 | if (courseInstance) { |
| 899 | membersBefore = courseInstance.get('members').length |
| 900 | } |
| 901 | // if not courseInstance |
| 902 | // TODO: show some message if no courseInstance? |
| 903 | return courseInstance |
| 904 | }).then(() => { |
| 905 | this.fetchStudents() |
| 906 | |
| 907 | this.trigger('begin-remove-course') // Only used for test automation |
| 908 | if (members.length) { |
| 909 | noty({ text: $.i18n.t('teacher.removing_course'), layout: 'center', type: 'information', killer: true }) |
| 910 | return (courseInstance != null ? courseInstance.removeMembers(members) : undefined) |
| 911 | } |
| 912 | }).then(res => { |
| 913 | const membersAfter = (courseInstance != null ? courseInstance.get('members').length : undefined) || 0 |
| 914 | const numberRemoved = membersBefore - membersAfter |
| 915 | const course = this.courses.get(courseID) |
| 916 | const lines = [ |
| 917 | $.i18n.t('teacher.removed_course_msg') |
| 918 | .replace('{{numberRemoved}}', numberRemoved) |
| 919 | .replace('{{courseName}}', course.get('name')) |
| 920 | ] |
| 921 | noty({ text: lines.join('<br />'), layout: 'center', type: 'information', killer: true, timeout: 5000 }) |
| 922 | |
| 923 | this.calculateProgressAndLevels() |
| 924 | return this.classroom.fetch() |
| 925 | }) |
| 926 | } |
| 927 | |
| 928 | onClickRevokeAllStudentsButton () { |
| 929 | const s = $.i18n.t('teacher.revoke_all_confirm') |
no test coverage detected