grades page works with multiple enrollments; fixes #7614

don't list courses multiple times on the user grades page if that user has
multiple enrollments in a course.

test-plan:
- as a student with multiple enrollments in a course and enrollments in
  > 1 courses
- visit /grades, make sure courses are listed once.

Change-Id: Icd3722ba07070fc6453e7395a833c701c447860f
Reviewed-on: https://gerrit.instructure.com/9247
Tested-by: Hudson <hudson@instructure.com>
Reviewed-by: Brian Palmer <brianp@instructure.com>
This commit is contained in:
Simon Williams 2012-03-06 16:19:30 -07:00
parent 49ed24c5ae
commit 4e98b66401
5 changed files with 60 additions and 60 deletions

View File

@ -47,7 +47,9 @@ class UsersController < ApplicationController
end end
#@prior_enrollments.concat @user.concluded_enrollments.select{|e| e.is_a?(StudentEnrollment) } #@prior_enrollments.concat @user.concluded_enrollments.select{|e| e.is_a?(StudentEnrollment) }
@student_enrollments = @current_enrollments.select{|e| e.is_a?(StudentEnrollment) } @student_enrollments = @current_enrollments.
select{ |e| e.is_a?(StudentEnrollment) }.
inject({}){ |hash, e| hash[e.course] = e; hash }
@observer_enrollments = @current_enrollments.select{|e| e.is_a?(ObserverEnrollment) && e.associated_user_id } @observer_enrollments = @current_enrollments.select{|e| e.is_a?(ObserverEnrollment) && e.associated_user_id }
@observed_enrollments = [] @observed_enrollments = []
@ -56,14 +58,16 @@ class UsersController < ApplicationController
end end
@observed_enrollments = @observed_enrollments.uniq.compact @observed_enrollments = @observed_enrollments.uniq.compact
if @current_enrollments.length + @observed_enrollments.length == 1# && @prior_enrollments.empty? @teacher_enrollments = @current_enrollments.select{|e| e.instructor? }
if @student_enrollments.length + @teacher_enrollments.length + @observed_enrollments.length == 1# && @prior_enrollments.empty?
redirect_to course_grades_url(@current_enrollments.first.course_id) redirect_to course_grades_url(@current_enrollments.first.course_id)
return return
end end
Enrollment.send(:preload_associations, @observed_enrollments, :course)
@teacher_enrollments = @current_enrollments.select{|e| e.instructor? } Enrollment.send(:preload_associations, @observed_enrollments, :course)
#Enrollment.send(:preload_associations, @prior_enrollments, :course) #Enrollment.send(:preload_associations, @prior_enrollments, :course)
@course_grade_summaries = {} @course_grade_summaries = {}
@teacher_enrollments.each do |enrollment| @teacher_enrollments.each do |enrollment|
@course_grade_summaries[enrollment.course_id] = Rails.cache.fetch(['computed_avg_grade_for', enrollment.course].cache_key) do @course_grade_summaries[enrollment.course_id] = Rails.cache.fetch(['computed_avg_grade_for', enrollment.course].cache_key) do

View File

@ -0,0 +1,22 @@
.course_details
border-collapse: collapse
min-width: 400px
margin-left: 20px
border-spacing: 0
th
text-align: left
tr:hover td
background-color: #eee
td
border-bottom: 1px solid #ccc
.course
font-size: 1.2em
padding: 6px 50px 6px 5px
vertical-align: top
.percent
text-align: right
font-size: 1.2em
font-weight: bold
padding-right: 5px
.report
padding: 12px

View File

@ -1,7 +1,9 @@
<% add_crumb(@current_user.short_name, context_url(@current_user, :context_url)) <%
add_crumb(t('crumbs.grades', 'Grades'), grades_path) %> content_for :page_title, join_title(t(:page_title, "Grades"), @current_user.name)
add_crumb(@current_user.short_name, context_url(@current_user, :context_url))
<% content_for :page_title, join_title(t(:page_title, "Grades"), @current_user.name) %> add_crumb(t('crumbs.grades', 'Grades'), grades_path)
jammit_css :user_grades
%>
<% if false %> <% if false %>
<% #TODO: implement previous courses %> <% #TODO: implement previous courses %>
@ -11,62 +13,16 @@
</div> </div>
<% end %> <% end %>
<% end %> <% end %>
<% js_block do %>
<script>
require([
'jquery' /* $ */,
'vendor/jquery.scrollTo' /* /\.scrollTo/ */
], function($) {
$(document).ready(function() {
$(".previous_courses_link").click(function(event) {
event.preventDefault();
$("#previous_courses").show();
$("html,body").scrollTo($("#previous_courses"));
});
});
});
</script>
<% end %>
<style> <style>
.course_details {
border-collapse: collapse;
min-width: 400px;
margin-left: 20px;
border-spacing: 0;
}
.course_details th {
text-align: left;
}
.course_details tr:hover td {
background-color: #eee;
}
.course_details td {
border-bottom: 1px solid #ccc;
}
.course_details .course {
font-size: 1.2em;
padding: 6px 50px 6px 5px;
vertical-align: top;
}
.course_details .percent {
text-align: right;
font-size: 1.2em;
font-weight: bold;
padding-right: 5px;
}
.course_details .report {
padding: 12px;
}
</style> </style>
<% unless @student_enrollments.empty? %> <% unless @student_enrollments.empty? %>
<h2><%= t('titles.current_student_courses', "Courses I'm Taking") %></h2> <h2><%= t('titles.current_student_courses', "Courses I'm Taking") %></h2>
<table class="course_details"> <table class="course_details student_grades">
<% @student_enrollments.each do |enrollment| %> <% @student_enrollments.each do |course, enrollment| %>
<tr> <tr>
<td class="course"><a href="<%= course_student_grades_path(enrollment.course_id, enrollment.user_id) %>"><%= enrollment.course.name %></a></td> <td class="course"><a href="<%= course_student_grades_path(course.id, enrollment.user_id) %>"><%= course.name %></a></td>
<td class="percent"> <td class="percent">
<% if enrollment.course.settings[:hide_final_grade] %> <% if course.settings[:hide_final_grade] %>
-- --
<% elsif enrollment.computed_current_score %> <% elsif enrollment.computed_current_score %>
<%= enrollment.computed_current_score %>% <%= enrollment.computed_current_score %>%
@ -81,7 +37,7 @@ $(document).ready(function() {
<% end %> <% end %>
<% unless @observed_enrollments.empty? %> <% unless @observed_enrollments.empty? %>
<h2 style="margin-top: 20px;"><%= t('linked_student_accounts', 'Linked Student Accounts') %></h2> <h2 style="margin-top: 20px;"><%= t('linked_student_accounts', 'Linked Student Accounts') %></h2>
<table class="course_details"> <table class="course_details observer_grades">
<% @observed_enrollments.each do |enrollment| %> <% @observed_enrollments.each do |enrollment| %>
<tr> <tr>
<td class="course"><a href="<%= course_student_grades_path(enrollment.course_id, enrollment.user_id) %>"><%= context_user_name(nil, enrollment.user_id) %>, <%= enrollment.course.name %></a></td> <td class="course"><a href="<%= course_student_grades_path(enrollment.course_id, enrollment.user_id) %>"><%= context_user_name(nil, enrollment.user_id) %>, <%= enrollment.course.name %></a></td>
@ -101,7 +57,7 @@ $(document).ready(function() {
<% end %> <% end %>
<% unless @teacher_enrollments.empty? %> <% unless @teacher_enrollments.empty? %>
<h2 style="margin-top: 20px;"><%= t('current_teacher_courses', "Courses I'm Teaching") %></h2> <h2 style="margin-top: 20px;"><%= t('current_teacher_courses', "Courses I'm Teaching") %></h2>
<table class="course_details"> <table class="course_details teacher_grades">
<% @teacher_enrollments.each do |enrollment| %> <% @teacher_enrollments.each do |enrollment| %>
<tr> <tr>
<td class="course" style="vertical-align: middle;"><a href="<%= course_gradebook_path(enrollment.course_id) %>"><%= enrollment.course.name %></a></td> <td class="course" style="vertical-align: middle;"><a href="<%= course_gradebook_path(enrollment.course_id) %>"><%= enrollment.course.name %></a></td>

View File

@ -192,6 +192,8 @@ stylesheets:
- public/javascripts/vendor/slickgrid/slick.grid.css - public/javascripts/vendor/slickgrid/slick.grid.css
sub_accounts: sub_accounts:
- public/stylesheets/compiled/sub_accounts.css - public/stylesheets/compiled/sub_accounts.css
user_grades:
- public/stylesheets/compiled/user_grades.css
user_logins: user_logins:
- public/stylesheets/compiled/user_logins.css - public/stylesheets/compiled/user_logins.css
account_settings: account_settings:

View File

@ -203,5 +203,21 @@ describe UsersController do
end end
end end
end end
describe "#grades" do
it "should only list courses once for multiple enrollments" do
course_with_student_logged_in(:active_all => true)
@first_course = @course
add_section("other section")
multiple_student_enrollment(@student, @course_section)
course_with_student(:user => @student, :active_all => true)
get grades_url
student_grades = Nokogiri::HTML(response.body).css('.student_grades tr')
student_grades.length.should == 2
student_grades.text.should match /#{@first_course.name}/
student_grades.text.should match /#{@course.name}/
end
end
end end