don't list groups from inactive enrollments in menu

just like we hide inactive enrollments from the "Courses" menu, also
hide groups from courses that don't have an active enrollments in the
groups portion of the "Courses & Groups" variation of the menu

fixes #5797

Change-Id: I91a9fd742b04faab5d97793b6baa17409a4f043a
Reviewed-on: https://gerrit.instructure.com/5901
Tested-by: Hudson <hudson@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
This commit is contained in:
Jacob Fugal 2011-09-28 16:27:13 -06:00
parent ec1a042a5e
commit f86aacc138
5 changed files with 53 additions and 7 deletions

View File

@ -526,26 +526,24 @@ var I18n = I18n || {};
def menu_groups_locals
{
:collection => @current_user.cached_current_group_memberships,
:collection => @current_user.menu_data[:group_memberships],
:collection_size => @current_user.menu_data[:group_memberships_count],
:partial => "shared/menu_group_membership",
:collection_size => @current_user.cached_current_group_memberships.length,
:max_to_show => 8,
:more_link_for_over_max => groups_path,
:title => t('#menu.current_groups', "Current Groups"),
:course_name_counts => @current_user.menu_data[:course_name_counts],
:link_text => raw(t('#layouts.menu.view_all_groups', 'View all groups'))
}
end
def menu_accounts_locals
{
:collection => @current_user.accounts,
:collection => @current_user.menu_data[:accounts],
:collection_size => @current_user.menu_data[:accounts_count],
:partial => "shared/menu_account",
:collection_size => @current_user.accounts.length,
:max_to_show => 8,
:more_link_for_over_max => accounts_path,
:title => t('#menu.managed_accounts', "Managed Accounts"),
:course_name_counts => @current_user.menu_data[:course_name_counts],
:link_text => raw(t('#layouts.menu.view_all_accounts', 'View all accounts'))
}
end

View File

@ -105,4 +105,11 @@ class GroupMembership < ActiveRecord::Base
end
def self.serialization_excludes; [:uuid]; end
# true iff 'active' and the pair of user and group's course match one of the
# provided enrollments
def active_given_enrollments?(enrollments)
state != :requested && state != :deleted &&
enrollments.any?{ |e| e.user == self.user && e.course == self.group.context }
end
end

View File

@ -1856,6 +1856,7 @@ class User < ActiveRecord::Base
def set_menu_data(enrollment_uuid)
max_to_show = 8
coalesced_enrollments = []
course_name_counts = {}
has_completed_enrollment = false
@ -1895,11 +1896,22 @@ class User < ActiveRecord::Base
end
end
coalesced_enrollments = coalesced_enrollments.sort_by{|e| e[:sortable] || [999,999, 999] }
active_enrollments = coalesced_enrollments.map{ |e| e[:enrollment] }
cached_group_memberships = self.cached_current_group_memberships
coalesced_group_memberships = cached_group_memberships.
select{ |gm| gm.active_given_enrollments?(active_enrollments) }.
sort_by{ |gm| gm.group.name }
@menu_data = {
:enrollments => coalesced_enrollments,
:enrollments_count => cached_enrollments.length,
:course_name_counts => course_name_counts,
:has_completed_enrollment => has_completed_enrollment,
:group_memberships => coalesced_group_memberships,
:group_memberships_count => cached_group_memberships.length,
:accounts => self.accounts,
:accounts_count => self.accounts.length,
}
end

View File

@ -1,5 +1,5 @@
<a href="<%= dashboard_path %>" class="menu-item-title">
<%= @current_user.cached_current_group_memberships.empty? ? t('links.courses', "Courses") : t('links.courses_and_groups', "Courses & Groups") -%>
<%= @current_user.menu_data[:group_memberships_count].zero? ? t('links.courses', "Courses") : t('links.courses_and_groups', "Courses & Groups") -%>
<span class="menu-item-title-icon"></span></a>
<div class="menu-item-drop">
<table cellspacing="0">

View File

@ -54,6 +54,35 @@ describe "enrollment_date_restrictions" do
page.css(".past_enrollments li").should be_empty
end
it "should not list groups from inactive enrollments in the menu" do
@student = user_with_pseudonym
@course1 = course(:course_name => "Course 1", :active_all => 1)
e1 = student_in_course(:user => @student, :active_all => 1)
@group1 = @course1.groups.create(:name => "Group 1")
@group1.add_user(@student)
@course2 = course(:course_name => "Course 2", :active_all => 1)
@course.update_attributes(:start_at => 2.days.from_now, :conclude_at => 4.days.from_now, :restrict_enrollments_to_course_dates => true)
e2 = student_in_course(:user => @student, :active_all => 1)
@group2 = @course2.groups.create(:name => "Group 1")
@group2.add_user(@student)
Enrollment.update_all(["created_at = ?", 1.minute.ago]) # need to make created_at and updated_at different
user_session(@student, @pseudonym)
get "/"
page = Nokogiri::HTML(response.body)
list = page.css(".menu-item-drop-column-list li").to_a
# course lis are still there and view all groups should always show up when
# there's at least one 'visible' group
list.size.should == 4
list.select{ |li| li.text =~ /Group 1/ }.should_not be_empty
list.select{ |li| li.text =~ /View all groups/ }.should_not be_empty
list.select{ |li| li.text =~ /Group 2/ }.should be_empty
end
it "should not show date inactive/completed courses in grades" do
@course1 = course(:active_all => 1)
@course2 = course(:active_all => 1)