mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-27 14:33:59 -04:00
Ordering/labeling courses: CS1, CS2, GD1, WD1, CS3, etc
This commit is contained in:
parent
b64bcd9f02
commit
dc6a1de9fa
5 changed files with 70 additions and 6 deletions
app
templates
views
server/models
|
@ -44,7 +44,7 @@ block content
|
|||
a(href="/admin/classroom-levels") Classroom Levels
|
||||
li
|
||||
button.classroom-progress-csv.btn.btn-sm.btn-success Classroom Progress CSV
|
||||
input.classroom-progress-class-code(type=text value="<class code>")
|
||||
input.classroom-progress-class-code(type=text placeholder="<class code>")
|
||||
li
|
||||
a(href="/admin/analytics") Dashboard
|
||||
li
|
||||
|
|
|
@ -229,6 +229,8 @@ mixin studentRow(student)
|
|||
+longLevelName(student.latestCompleteLevel)
|
||||
td
|
||||
if state.get('progressData')
|
||||
- var courses = view.classroom.get('courses').map(function(c) { return view.courses.get(c._id); });
|
||||
- var courseLabelsArray = view.courseLabelsArray(courses);
|
||||
each trimCourse, index in view.classroom.get('courses')
|
||||
- var course = view.courses.get(trimCourse._id);
|
||||
- var instance = view.courseInstances.findWhere({ courseID: course.id, classroomID: classroom.id })
|
||||
|
@ -236,7 +238,8 @@ mixin studentRow(student)
|
|||
- var progress = state.get('progressData').get({ classroom: view.classroom, course: course, user: student })
|
||||
- var levelsTotal = trimCourse.levels.length
|
||||
//- - var level = ???
|
||||
+studentCourseProgressDot(progress, levelsTotal, level, 'CS' + (index+1))
|
||||
- var label = courseLabelsArray[index];
|
||||
+studentCourseProgressDot(progress, levelsTotal, level, label)
|
||||
unless student.isEnrolled()
|
||||
+enrollStudentButton(student)
|
||||
//- td
|
||||
|
|
|
@ -9,6 +9,7 @@ Campaigns = require 'collections/Campaigns'
|
|||
Classroom = require 'models/Classroom'
|
||||
CocoCollection = require 'collections/CocoCollection'
|
||||
Course = require 'models/Course'
|
||||
Courses = require 'collections/Courses'
|
||||
LevelSessions = require 'collections/LevelSessions'
|
||||
User = require 'models/User'
|
||||
Users = require 'collections/Users'
|
||||
|
@ -152,6 +153,7 @@ module.exports = class MainAdminView extends RootView
|
|||
$('.classroom-progress-csv').prop('disabled', true)
|
||||
classCode = $('.classroom-progress-class-code').val()
|
||||
classroom = null
|
||||
courses = null
|
||||
courseLevels = []
|
||||
sessions = null
|
||||
users = null
|
||||
|
@ -161,12 +163,16 @@ module.exports = class MainAdminView extends RootView
|
|||
classroom = new Classroom({ _id: model.data._id })
|
||||
Promise.resolve(classroom.fetch())
|
||||
.then (model) =>
|
||||
courses = new Courses()
|
||||
Promise.resolve(courses.fetch())
|
||||
.then (models) =>
|
||||
for course, index in classroom.get('courses')
|
||||
for level in course.levels
|
||||
courseLevels.push
|
||||
courseIndex: index + 1
|
||||
levelID: level.original
|
||||
slug: level.slug
|
||||
courseSlug: courses.get(course._id).get('slug')
|
||||
users = new Users()
|
||||
Promise.resolve($.when(users.fetchForClassroom(classroom)...))
|
||||
.then (models) =>
|
||||
|
@ -202,12 +208,19 @@ module.exports = class MainAdminView extends RootView
|
|||
|
||||
columnLabels = "Username"
|
||||
currentLevel = 1
|
||||
courseLabelIndexes = CS: 1, GD: 0, WD: 0
|
||||
lastCourseIndex = 1
|
||||
lastCourseLabel = 'CS1'
|
||||
for level in courseLevels
|
||||
unless level.courseIndex is lastCourseIndex
|
||||
currentLevel = 1
|
||||
lastCourseIndex = level.courseIndex
|
||||
columnLabels += ",CS#{level.courseIndex}.#{currentLevel++} #{level.slug}"
|
||||
acronym = switch
|
||||
when /game-dev/.test(level.courseSlug) then 'GD'
|
||||
when /web-dev/.test(level.courseSlug) then 'WD'
|
||||
else 'CS'
|
||||
lastCourseLabel = acronym + ++courseLabelIndexes[acronym]
|
||||
columnLabels += ",#{lastCourseLabel}.#{currentLevel++} #{level.slug}"
|
||||
csvContent = "data:text/csv;charset=utf-8,#{columnLabels}\n"
|
||||
for studentRow in userPlaytimes
|
||||
csvContent += studentRow.join(',') + "\n"
|
||||
|
@ -220,3 +233,10 @@ module.exports = class MainAdminView extends RootView
|
|||
$('.classroom-progress-csv').prop('disabled', false)
|
||||
console.error error
|
||||
throw error
|
||||
|
||||
courseLabelsArray: (courses) ->
|
||||
labels = []
|
||||
courseLabelIndexes = CS: 0, GD: 0, WD: 0
|
||||
for course in courses
|
||||
labels.push acronym + ++courseLabelIndexes[acronym]
|
||||
labels
|
||||
|
|
|
@ -321,9 +321,11 @@ module.exports = class TeacherClassView extends RootView
|
|||
window.tracker?.trackEvent 'Teachers Class Export CSV', category: 'Teachers', classroomID: @classroom.id, ['Mixpanel']
|
||||
courseLabels = ""
|
||||
courseOrder = []
|
||||
for course, index in @classroom.get('courses')
|
||||
courseLabels += "CS#{index + 1} Playtime,"
|
||||
courseOrder.push(course._id)
|
||||
courses = (@courses.get(c._id) for c in @classroom.get('courses'))
|
||||
courseLabelsArray = @courseLabelsArray courses
|
||||
for course, index in courses
|
||||
courseLabels += "#{courseLabelsArray[index]} Playtime,"
|
||||
courseOrder.push(course.id)
|
||||
csvContent = "data:text/csv;charset=utf-8,Username,Email,Total Playtime,#{courseLabels}Concepts\n"
|
||||
levelCourseMap = {}
|
||||
for trimCourse in @classroom.get('courses')
|
||||
|
@ -464,3 +466,14 @@ module.exports = class TeacherClassView extends RootView
|
|||
when 'enrolled' then (if expires then $.i18n.t('teacher.status_enrolled') else '-')
|
||||
when 'expired' then $.i18n.t('teacher.status_expired')
|
||||
return string.replace('{{date}}', moment(expires).utc().format('l'))
|
||||
|
||||
courseLabelsArray: (courses) ->
|
||||
labels = []
|
||||
courseLabelIndexes = CS: 0, GD: 0, WD: 0
|
||||
for course in courses
|
||||
acronym = switch
|
||||
when /game-dev/.test(course.get('slug')) then 'GD'
|
||||
when /web-dev/.test(course.get('slug')) then 'WD'
|
||||
else 'CS'
|
||||
labels.push acronym + ++courseLabelIndexes[acronym]
|
||||
labels
|
||||
|
|
|
@ -13,4 +13,32 @@ CourseSchema.statics.editableProperties = []
|
|||
|
||||
CourseSchema.statics.jsonSchema = jsonSchema
|
||||
|
||||
CourseSchema.statics.sortCourses = (courses) ->
|
||||
ordering = [
|
||||
'introduction-to-computer-science'
|
||||
'computer-science-2'
|
||||
'game-dev-1'
|
||||
'web-dev-1'
|
||||
'computer-science-3'
|
||||
'game-dev-1'
|
||||
'web-dev-2'
|
||||
'computer-science-4'
|
||||
'game-dev-3'
|
||||
'web-dev-3'
|
||||
'computer-science-5'
|
||||
'game-dev-4'
|
||||
'web-dev-4'
|
||||
'computer-science-6'
|
||||
'game-dev-5'
|
||||
'web-dev-5'
|
||||
'computer-science-7'
|
||||
'game-dev-6'
|
||||
'web-dev-6'
|
||||
'computer-science-8'
|
||||
]
|
||||
_.sortBy courses, (course) ->
|
||||
index = ordering.indexOf(course.get?('slug') or course.slug)
|
||||
index = 9001 if index is -1
|
||||
index
|
||||
|
||||
module.exports = Course = mongoose.model 'course', CourseSchema, 'courses'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue