use root_account association when possible
when our context is an assignment we currently are loading a rubric_association to identify the root_account test plan - specs should pass fixes VICE-1280 flag = none Change-Id: I9d9493da1d80cb8208e999619700f657a8c00bca Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/263328 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Tested-by: Mauricio Ribeiro <mauricio.ribeiro@instructure.com> Reviewed-by: Mauricio Ribeiro <mauricio.ribeiro@instructure.com> QA-Review: Mauricio Ribeiro <mauricio.ribeiro@instructure.com> Product-Review: Mauricio Ribeiro <mauricio.ribeiro@instructure.com>
This commit is contained in:
parent
d4eed94274
commit
0653ff2f53
|
@ -370,21 +370,29 @@ class Message < ActiveRecord::Base
|
|||
end
|
||||
|
||||
# infer a root account associated with the context that the user can log in to
|
||||
def link_root_account
|
||||
def link_root_account(pre_loaded_account: nil)
|
||||
context = pre_loaded_account
|
||||
@root_account ||= begin
|
||||
context = self.context
|
||||
context ||= self.context
|
||||
if context.is_a?(CommunicationChannel) && @data&.root_account_id
|
||||
root_account = Account.where(id: @data.root_account_id).first
|
||||
context = root_account if root_account
|
||||
end
|
||||
|
||||
context = context.assignment if context.respond_to?(:assignment) && context.assignment
|
||||
# root_account is on lots of objects, use it when we can.
|
||||
context = context.root_account if context.respond_to?(:root_account)
|
||||
# some of these `context =` may not be relevant now that we have
|
||||
# root_account on many classes, but root_account doesn't respond to them
|
||||
# and so it's fast, and there are a lot of ways to generate a message.
|
||||
context = context.assignment.root_account if context.respond_to?(:assignment) && context.assignment
|
||||
context = context.rubric_association.context if context.respond_to?(:rubric_association) && context.rubric_association
|
||||
context = context.appointment_group.contexts.first if context.respond_to?(:appointment_group) && context.appointment_group
|
||||
context = context.master_template.course if context.respond_to?(:master_template) && context.master_template
|
||||
context = context.context if context.respond_to?(:context)
|
||||
context = context.account if context.respond_to?(:account)
|
||||
context = context.root_account if context.respond_to?(:root_account)
|
||||
|
||||
# Going through SisPseudonym.for is important since the account could change
|
||||
if context && context.respond_to?(:root_account)
|
||||
p = SisPseudonym.for(user, context, type: :implicit, require_sis: false)
|
||||
context = p.account if p
|
||||
|
@ -606,9 +614,12 @@ class Message < ActiveRecord::Base
|
|||
# path_type - The path to send the message across, e.g, 'email'.
|
||||
#
|
||||
# Returns nothing.
|
||||
def parse!(path_type=nil)
|
||||
def parse!(path_type=nil, root_account: nil)
|
||||
raise StandardError, "Cannot parse without a context" unless self.context
|
||||
|
||||
# set @root_account using our pre_loaded_account, because link_root_account
|
||||
# is called many times.
|
||||
link_root_account(pre_loaded_account: root_account)
|
||||
# Get the users timezone but maintain the original timezone in order to set it back at the end
|
||||
original_time_zone = Time.zone.name || "UTC"
|
||||
user_time_zone = self.user.try(:time_zone) || root_account_time_zone || original_time_zone
|
||||
|
|
|
@ -153,7 +153,7 @@ class NotificationMessageCreator
|
|||
def build_summary_for(user, policy)
|
||||
user.shard.activate do
|
||||
message = user.messages.build(message_options_for(user))
|
||||
message.parse!('summary')
|
||||
message.parse!('summary', root_account: @account)
|
||||
delayed_message = policy.delayed_messages.build(:notification => @notification,
|
||||
:frequency => policy.frequency,
|
||||
# policy.communication_channel should
|
||||
|
@ -179,7 +179,7 @@ class NotificationMessageCreator
|
|||
return if @notification.summarizable? && too_many_messages_for?(user) && ['email', 'sms'].include?(channel.path_type)
|
||||
message_options = message_options_for(user)
|
||||
message = user.messages.build(message_options.merge(communication_channel: channel, to: channel.path))
|
||||
message&.parse!
|
||||
message&.parse!(root_account: @account)
|
||||
message.workflow_state = 'bounced' if channel.bouncing?
|
||||
message
|
||||
end
|
||||
|
@ -205,7 +205,7 @@ class NotificationMessageCreator
|
|||
# if a user has never logged in, let's not spam the dashboard for no reason.
|
||||
return unless @notification.dashboard? && @notification.show_in_feed? && !user.pre_registered?
|
||||
message = user.messages.build(message_options_for(user).merge(:to => 'dashboard'))
|
||||
message.parse!
|
||||
message.parse!(root_account: @account)
|
||||
message
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue