Skip to content

Commit 05d4cf6

Browse files
committed
individual gradebook view: outcomes
fixes CNVS-11439 test plan: * enable Individual Gradebook View * open a course's gradebook * switch to individual view * select the learning mastery tab * select a student * select an outcome * verify that displayed outcome results are accessible Change-Id: I89bbcb81fe3049acf2595737ee921d5a0b91c90b Reviewed-on: https://gerrit.instructure.com/33967 Tested-by: Jenkins <jenkins@instructure.com> QA-Review: Trevor deHaan <tdehaan@instructure.com> Reviewed-by: Mike Nomitch <mnomitch@instructure.com> Reviewed-by: Cameron Sutter <csutter@instructure.com> Reviewed-by: Liz Abinante <labinante@instructure.com> Product-Review: Braden Anderson <banderson@instructure.com>
1 parent a91f2c3 commit 05d4cf6

47 files changed

Lines changed: 4367 additions & 628 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/coffeescripts/ember/screenreader_gradebook/controllers/screenreader_gradebook_controller.coffee

Lines changed: 55 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ define [
1111
'compiled/AssignmentDetailsDialog'
1212
'compiled/AssignmentMuter'
1313
'compiled/grade_calculator'
14+
'compiled/gradebook2/OutcomeGradebookGrid'
1415
'../../shared/components/ic_submission_download_dialog_component'
15-
], (ajax, round, userSettings, fetchAllPages, parseLinkHeader, I18n, Ember, _, tz, AssignmentDetailsDialog, AssignmentMuter, GradeCalculator, ic_submission_download_dialog ) ->
16+
], (ajax, round, userSettings, fetchAllPages, parseLinkHeader, I18n, Ember, _, tz, AssignmentDetailsDialog, AssignmentMuter, GradeCalculator, outcomeGrid, ic_submission_download_dialog ) ->
1617

1718
{get, set, setProperties} = Ember
1819

@@ -51,6 +52,8 @@ define [
5152
args.push options
5253
Ember.arrayComputed.apply(null, args)
5354

55+
contextUrl = get(window, 'ENV.GRADEBOOK_OPTIONS.context_url')
56+
5457
ScreenreaderGradebookController = Ember.ObjectController.extend
5558

5659
errors: (->
@@ -63,22 +66,20 @@ define [
6366
Ember.$(node).appendTo(Ember.$('#flash_screenreader_holder'))
6467
).on('init')
6568

66-
contextUrl: get(window, 'ENV.GRADEBOOK_OPTIONS.context_url')
69+
contextUrl: contextUrl
6770

68-
downloadCsvUrl: (->
69-
"#{@get('contextUrl')}/gradebook.csv"
70-
).property()
71+
downloadCsvUrl: "#{contextUrl}/gradebook.csv"
7172

72-
gradingHistoryUrl:(->
73-
"#{@get('contextUrl')}/gradebook/history"
74-
).property()
73+
downloadOutcomeCsvUrl: "#{contextUrl}/outcome_rollups.csv"
74+
75+
gradingHistoryUrl:"#{contextUrl}/gradebook/history"
7576

7677
speedGraderUrl: (->
77-
"#{@get('contextUrl')}/gradebook/speed_grader?assignment_id=#{@get('selectedAssignment.id')}"
78+
"#{contextUrl}/gradebook/speed_grader?assignment_id=#{@get('selectedAssignment.id')}"
7879
).property('selectedAssignment')
7980

8081
studentUrl: (->
81-
"#{@get('contextUrl')}/grades/#{@get('selectedStudent.id')}"
82+
"#{contextUrl}/grades/#{@get('selectedStudent.id')}"
8283
).property('selectedStudent')
8384

8485
showTotalAsPoints: (->
@@ -144,6 +145,8 @@ define [
144145
Ember.run.next =>
145146
if prop is 'selectedStudent' and @get('hideStudentNames')
146147
text_to_announce = get item, 'hiddenName'
148+
else if prop is 'selectedOutcome'
149+
text_to_announce = get item, 'title'
147150
else
148151
text_to_announce = get item, 'name'
149152
@set 'ariaAnnounced', text_to_announce
@@ -227,6 +230,7 @@ define [
227230
sectionSelectDefaultLabel: I18n.t "all_sections", "All Sections"
228231
studentSelectDefaultLabel: I18n.t "no_student", "No Student Selected"
229232
assignmentSelectDefaultLabel: I18n.t "no_assignment", "No Assignment Selected"
233+
outcomeSelectDefaultLabel: I18n.t "no_outcome", "No Outcome Selected"
230234

231235
students: studentsUniqByEnrollments('enrollments')
232236

@@ -246,7 +250,7 @@ define [
246250

247251
return unless notYetLoaded.length
248252
student_ids = notYetLoaded.mapBy('id')
249-
fetchAllPages(ENV.GRADEBOOK_OPTIONS.submissions_url, student_ids: student_ids, @get('submissions'))
253+
fetchAllPages(ENV.GRADEBOOK_OPTIONS.submissions_url, records: @get('submissions'), data: student_ids: student_ids)
250254
).observes('students.@each').on('init')
251255

252256
publishToSisEnabled: (->
@@ -560,6 +564,22 @@ define [
560564
}
561565
).property('selectedStudent', 'selectedAssignment')
562566

567+
selectedOutcomeResult: ( ->
568+
return null unless @get('selectedStudent')? and @get('selectedOutcome')?
569+
student = @get 'selectedStudent'
570+
outcome = @get 'selectedOutcome'
571+
result = @get('outcome_rollups').find (x) ->
572+
x.user_id == student.id && x.outcome_id == outcome.id
573+
result or {
574+
user_id: student.id
575+
outcome_id: outcome.id
576+
}
577+
).property('selectedStudent', 'selectedOutcome')
578+
579+
outcomeResultIsDefined: ( ->
580+
@get('selectedOutcomeResult').score?
581+
).property('selectedOutcomeResult')
582+
563583
showAssignmentPointsWarning: (->
564584
@get("selectedAssignment.noPointsPossibleWarning") and @get('groupsAreWeighted')
565585
).property('selectedAssignment', 'groupsAreWeighted')
@@ -581,6 +601,17 @@ define [
581601
locals
582602
).property('selectedAssignment', 'students.@each.total_grade')
583603

604+
outcomeDetails: (->
605+
return null unless @get('selectedOutcome')?
606+
rollups = @get('outcome_rollups').filterBy('outcome_id', @get('selectedOutcome').id)
607+
scores = _.filter(_.pluck(rollups, 'score'), _.isNumber)
608+
details =
609+
average: outcomeGrid.Math.mean(scores)
610+
max: outcomeGrid.Math.max(scores)
611+
min: outcomeGrid.Math.min(scores)
612+
cnt: outcomeGrid.Math.cnt(scores)
613+
).property('selectedOutcome', 'outcome_rollups')
614+
584615
assignmentSubmissionTypes: (->
585616
types = @get('selectedAssignment.submission_types')
586617
submissionTypes = @get('submissionTypes')
@@ -611,6 +642,7 @@ define [
611642
getList: (property) ->
612643
return @get('studentsInSelectedSection') if property == 'selectedStudent'
613644
return @get('assignments') if property == 'selectedAssignment'
645+
return @get('outcomes') if property == 'selectedOutcome'
614646

615647
getButton: (property) ->
616648
return 'student' if property == 'selectedStudent'
@@ -626,8 +658,14 @@ define [
626658
if selected then @get('studentsInSelectedSection').indexOf(selected) else -1
627659
).property('selectedStudent', 'selectedSection')
628660

661+
outcomeIndex: (->
662+
selected = @get('selectedOutcome')
663+
if selected then @get('outcomes').indexOf(selected) else -1
664+
).property('selectedOutcome')
665+
629666
disablePrevAssignmentButton: Ember.computed.lte('assignmentIndex', 0)
630667
disablePrevStudentButton: Ember.computed.lte('studentIndex', 0)
668+
disablePrevOutcomeButton: Ember.computed.lte('outcomeIndex', 0)
631669

632670
disableNextAssignmentButton: (->
633671
next = @get('assignments').objectAt(@get('assignmentIndex') + 1)
@@ -639,6 +677,11 @@ define [
639677
!(@get('studentsInSelectedSection.length') and next)
640678
).property('selectedStudent', 'studentsInSelectedSection', 'selectedSection')
641679

680+
disableNextOutcomeButton: (->
681+
next = @get('outcomes').objectAt(@get('outcomeIndex') + 1)
682+
!(@get('outcomes.length') and next)
683+
).property('selectedOutcome', 'outcomes.@each')
684+
642685
displayName: (->
643686
if @get('hideStudentNames')
644687
"hiddenName"
@@ -654,5 +697,5 @@ define [
654697

655698
enrollments = @get('enrollments')
656699
enrollments.clear()
657-
fetchAllPages(url, null, enrollments)
700+
fetchAllPages(url, records: enrollments)
658701
).observes('showConcludedEnrollments')

app/coffeescripts/ember/screenreader_gradebook/routes/screenreader_gradebook_route.coffee

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
define [
22
'ember',
3+
'underscore',
34
'ic-ajax',
45
'../../shared/xhr/fetch_all_pages'
56
]
6-
, ({Route, ArrayProxy}, ajax, fetchAllPages) ->
7+
, ({Route, ArrayProxy}, _, ajax, fetchAllPages) ->
78

89
ScreenreaderGradebookRoute = Route.extend
910

@@ -13,3 +14,17 @@ define [
1314
submissions: ArrayProxy.create(content: [])
1415
custom_columns: fetchAllPages(ENV.GRADEBOOK_OPTIONS.custom_columns_url)
1516
sections: fetchAllPages(ENV.GRADEBOOK_OPTIONS.sections_url)
17+
outcomes: fetchAllPages(ENV.GRADEBOOK_OPTIONS.outcome_links_url, process: (response) ->
18+
response.map((x) -> x.outcome)
19+
)
20+
outcome_rollups: fetchAllPages(ENV.GRADEBOOK_OPTIONS.outcome_rollups_url, process: (response) ->
21+
_.flatten(response.rollups.map((row) ->
22+
row.scores.map((cell) ->
23+
{
24+
user_id: row.links.user
25+
outcome_id: cell.links.outcome
26+
score: cell.score
27+
}
28+
)
29+
))
30+
)

0 commit comments

Comments
 (0)