Ordering/labeling courses: CS1, CS2, GD1, WD1, CS3, etc

This commit is contained in:
Nick Winter 2016-07-16 00:31:53 -07:00
parent b64bcd9f02
commit dc6a1de9fa
5 changed files with 70 additions and 6 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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'