diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 5fe27a041dc..9520de09378 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -47,7 +47,9 @@ class UsersController < ApplicationController end #@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 } @observed_enrollments = [] @@ -56,14 +58,16 @@ class UsersController < ApplicationController end @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) return 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) + @course_grade_summaries = {} @teacher_enrollments.each do |enrollment| @course_grade_summaries[enrollment.course_id] = Rails.cache.fetch(['computed_avg_grade_for', enrollment.course].cache_key) do diff --git a/app/stylesheets/user_grades.sass b/app/stylesheets/user_grades.sass new file mode 100644 index 00000000000..89c788f506b --- /dev/null +++ b/app/stylesheets/user_grades.sass @@ -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 diff --git a/app/views/users/grades.html.erb b/app/views/users/grades.html.erb index c8fd8d6d25f..f080e1922d7 100644 --- a/app/views/users/grades.html.erb +++ b/app/views/users/grades.html.erb @@ -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) %> +<% + 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)) + add_crumb(t('crumbs.grades', 'Grades'), grades_path) + jammit_css :user_grades +%> <% if false %> <% #TODO: implement previous courses %> @@ -11,62 +13,16 @@ <% end %> <% end %> -<% js_block do %> - -<% end %> <% unless @student_enrollments.empty? %>

<%= t('titles.current_student_courses', "Courses I'm Taking") %>

- -<% @student_enrollments.each do |enrollment| %> +
+<% @student_enrollments.each do |course, enrollment| %> - +
<%= enrollment.course.name %><%= course.name %> - <% if enrollment.course.settings[:hide_final_grade] %> + <% if course.settings[:hide_final_grade] %> -- <% elsif enrollment.computed_current_score %> <%= enrollment.computed_current_score %>% @@ -81,7 +37,7 @@ $(document).ready(function() { <% end %> <% unless @observed_enrollments.empty? %>

<%= t('linked_student_accounts', 'Linked Student Accounts') %>

- +
<% @observed_enrollments.each do |enrollment| %> @@ -101,7 +57,7 @@ $(document).ready(function() { <% end %> <% unless @teacher_enrollments.empty? %>

<%= t('current_teacher_courses', "Courses I'm Teaching") %>

-
<%= context_user_name(nil, enrollment.user_id) %>, <%= enrollment.course.name %>
+
<% @teacher_enrollments.each do |enrollment| %> diff --git a/config/assets.yml b/config/assets.yml index a3877a8bf8a..26358fe43a0 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -192,6 +192,8 @@ stylesheets: - public/javascripts/vendor/slickgrid/slick.grid.css sub_accounts: - public/stylesheets/compiled/sub_accounts.css + user_grades: + - public/stylesheets/compiled/user_grades.css user_logins: - public/stylesheets/compiled/user_logins.css account_settings: diff --git a/spec/integration/users_controller_spec.rb b/spec/integration/users_controller_spec.rb index 2ad6ab3f94c..ef2b3dca643 100644 --- a/spec/integration/users_controller_spec.rb +++ b/spec/integration/users_controller_spec.rb @@ -203,5 +203,21 @@ describe UsersController do 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
<%= enrollment.course.name %>