diff --git a/app/controllers/context_modules_controller.rb b/app/controllers/context_modules_controller.rb index b50a7b5af08..b5c76917829 100644 --- a/app/controllers/context_modules_controller.rb +++ b/app/controllers/context_modules_controller.rb @@ -47,7 +47,7 @@ class ContextModulesController < ApplicationController def modules_cache_key @modules_cache_key ||= begin - visible_assignments = @current_user.try(:assignment_and_quiz_visibilities, @context) + visible_assignments = @current_user.try(:learning_object_visibilities, @context) cache_key_items = [@context.cache_key, @can_view, @can_add, diff --git a/app/helpers/context_modules_helper.rb b/app/helpers/context_modules_helper.rb index c2536b85eb8..ec5582151e4 100644 --- a/app/helpers/context_modules_helper.rb +++ b/app/helpers/context_modules_helper.rb @@ -24,7 +24,7 @@ module ContextModulesHelper def cache_if_module(context_module, viewable, can_add, can_edit, can_delete, is_student, can_view_unpublished, user, context, &) if context_module - visible_assignments = user ? user.assignment_and_quiz_visibilities(context) : [] + visible_assignments = user ? user.learning_object_visibilities(context) : [] cache_key_items = ["context_module_render_22_", context_module.cache_key, viewable, diff --git a/app/models/user.rb b/app/models/user.rb index 11ad2c65954..524e2df10c8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -380,11 +380,17 @@ class User < ActiveRecord::Base super end - def assignment_and_quiz_visibilities(context) - RequestCache.cache("assignment_and_quiz_visibilities", self, context) do + def learning_object_visibilities(context) + RequestCache.cache("learning_object_visibilities", self, context) do GuardRail.activate(:secondary) do - { assignment_ids: DifferentiableAssignment.scope_filter(context.assignments, self, context).pluck(:id), - quiz_ids: DifferentiableAssignment.scope_filter(context.quizzes, self, context).pluck(:id) } + visibilities = { assignment_ids: DifferentiableAssignment.scope_filter(context.assignments, self, context).pluck(:id), + quiz_ids: DifferentiableAssignment.scope_filter(context.quizzes, self, context).pluck(:id) } + if Account.site_admin.feature_enabled?(:differentiated_modules) + visibilities[:context_module_ids] = DifferentiableAssignment.scope_filter(context.context_modules, self, context).pluck(:id) + visibilities[:discussion_topic_ids] = DifferentiableAssignment.scope_filter(context.discussion_topics, self, context).pluck(:id) + visibilities[:wiki_page_ids] = DifferentiableAssignment.scope_filter(context.wiki_pages, self, context).pluck(:id) + end + visibilities end end end diff --git a/spec/models/context_module_spec.rb b/spec/models/context_module_spec.rb index f4c1ff81173..e38a89e57a5 100644 --- a/spec/models/context_module_spec.rb +++ b/spec/models/context_module_spec.rb @@ -1561,10 +1561,10 @@ describe ContextModule do expect(@module.content_tags_visible_to(@student_2).map(&:content).include?(@assignment)).to be_falsey end - it "alsoes have the right assignment_and_quiz_visibilities" do - expect(@teacher.assignment_and_quiz_visibilities(@course)[:assignment_ids].include?(@assignment.id)).to be_truthy - expect(@student_1.assignment_and_quiz_visibilities(@course)[:assignment_ids].include?(@assignment.id)).to be_truthy - expect(@student_2.assignment_and_quiz_visibilities(@course)[:assignment_ids].include?(@assignment.id)).to be_falsey + it "has the right learning_object_visibilities" do + expect(@teacher.learning_object_visibilities(@course)[:assignment_ids].include?(@assignment.id)).to be_truthy + expect(@student_1.learning_object_visibilities(@course)[:assignment_ids].include?(@assignment.id)).to be_truthy + expect(@student_2.learning_object_visibilities(@course)[:assignment_ids].include?(@assignment.id)).to be_falsey end it "properly returns differentiated assignments for teacher even without update rights" do diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 79b1c83a2a8..8886b7a2dee 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -4578,4 +4578,19 @@ describe User do end end end + + describe "learning_object_visibilities" do + before :once do + student_in_course(active_all: true) + end + + it "includes assignment and quiz ids with the differentiated_modules flag disabled" do + expect(@user.learning_object_visibilities(@course).keys).to contain_exactly(:assignment_ids, :quiz_ids) + end + + it "includes all learning object ids with the differentiated_modules flag enabled" do + Account.site_admin.enable_feature!(:differentiated_modules) + expect(@user.learning_object_visibilities(@course).keys).to contain_exactly(:assignment_ids, :quiz_ids, :context_module_ids, :discussion_topic_ids, :wiki_page_ids) + end + end end