2015-01-08 01:54:38 +08:00
|
|
|
#
|
|
|
|
# Copyright (C) 2015 Instructure, Inc.
|
|
|
|
#
|
|
|
|
# This file is part of Canvas.
|
|
|
|
#
|
|
|
|
# Canvas is free software: you can redistribute it and/or modify it under
|
|
|
|
# the terms of the GNU Affero General Public License as published by the Free
|
|
|
|
# Software Foundation, version 3 of the License.
|
|
|
|
#
|
|
|
|
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
|
|
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
|
|
# details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU Affero General Public License along
|
|
|
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
|
|
|
|
|
|
# Filters added to this controller apply to all controllers in the application.
|
|
|
|
# Likewise, all the methods added will be available for all controllers.
|
2017-02-15 07:17:07 +08:00
|
|
|
# NOTE: To update the VariableExpansion docs run `script/generate_lti_variable_substitution_markdown`
|
2015-01-08 01:54:38 +08:00
|
|
|
|
|
|
|
module Lti
|
|
|
|
class VariableExpander
|
|
|
|
|
2015-05-14 01:00:18 +08:00
|
|
|
SUBSTRING_REGEX = /(?<=\${).*?(?=})/.freeze #matches only the stuff inside `${}`
|
|
|
|
|
2015-01-08 01:54:38 +08:00
|
|
|
attr_reader :context, :root_account, :controller, :current_user
|
|
|
|
|
|
|
|
attr_accessor :current_pseudonym, :content_tag, :assignment,
|
2016-06-25 00:21:16 +08:00
|
|
|
:tool_setting_link_id, :tool_setting_binding_id, :tool_setting_proxy_id, :tool, :attachment,
|
|
|
|
:collaboration
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2016-10-28 03:57:01 +08:00
|
|
|
def self.register_expansion(name, permission_groups, expansion_proc, *guards)
|
2015-01-08 01:54:38 +08:00
|
|
|
@expansions ||= {}
|
2016-10-28 03:57:01 +08:00
|
|
|
@expansions["$#{name}".to_sym] = VariableExpansion.new(name, permission_groups, expansion_proc, *guards)
|
2015-01-08 01:54:38 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def self.expansions
|
2016-10-28 03:57:01 +08:00
|
|
|
@expansions || {}
|
2015-01-08 01:54:38 +08:00
|
|
|
end
|
|
|
|
|
2016-10-28 03:57:01 +08:00
|
|
|
CONTROLLER_GUARD = -> { !!@controller }
|
2015-01-08 01:54:38 +08:00
|
|
|
COURSE_GUARD = -> { @context.is_a? Course }
|
2015-04-23 23:08:26 +08:00
|
|
|
TERM_START_DATE_GUARD = -> { @context.is_a?(Course) && @context.enrollment_term &&
|
|
|
|
@context.enrollment_term.start_at }
|
2015-01-08 01:54:38 +08:00
|
|
|
USER_GUARD = -> { @current_user }
|
2017-01-13 06:22:26 +08:00
|
|
|
SIS_USER_GUARD = -> { @current_user && @current_user.pseudonym && @current_user.pseudonym.sis_user_id }
|
2015-01-08 01:54:38 +08:00
|
|
|
PSEUDONYM_GUARD = -> { sis_pseudonym }
|
|
|
|
ENROLLMENT_GUARD = -> { @current_user && @context.is_a?(Course) }
|
2015-08-04 03:46:13 +08:00
|
|
|
ROLES_GUARD = -> { @current_user && (@context.is_a?(Course) || @context.is_a?(Account)) }
|
2015-01-08 01:54:38 +08:00
|
|
|
CONTENT_TAG_GUARD = -> { @content_tag }
|
|
|
|
ASSIGNMENT_GUARD = -> { @assignment }
|
2016-06-25 00:21:16 +08:00
|
|
|
COLLABORATION_GUARD = -> { @collaboration }
|
2015-02-11 07:40:06 +08:00
|
|
|
MEDIA_OBJECT_GUARD = -> { @attachment && @attachment.media_object}
|
|
|
|
USAGE_RIGHTS_GUARD = -> { @attachment && @attachment.usage_rights}
|
|
|
|
MEDIA_OBJECT_ID_GUARD = -> {@attachment && (@attachment.media_object || @attachment.media_entry_id )}
|
2016-10-28 03:57:01 +08:00
|
|
|
LTI1_GUARD = -> { @tool.is_a?(ContextExternalTool) }
|
|
|
|
MASQUERADING_GUARD = -> { !!@controller && @controller.logged_in_user != @current_user }
|
2015-01-08 01:54:38 +08:00
|
|
|
|
|
|
|
def initialize(root_account, context, controller, opts = {})
|
|
|
|
@root_account = root_account
|
|
|
|
@context = context
|
|
|
|
@controller = controller
|
2016-10-28 03:57:01 +08:00
|
|
|
@request = controller.request if controller
|
2015-01-08 01:54:38 +08:00
|
|
|
opts.each { |opt, val| instance_variable_set("@#{opt}", val) }
|
|
|
|
end
|
|
|
|
|
|
|
|
def lti_helper
|
2017-02-25 04:02:00 +08:00
|
|
|
@lti_helper ||= Lti::SubstitutionsHelper.new(@context, @root_account, @current_user, @tool)
|
2015-01-08 01:54:38 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def current_user=(current_user)
|
|
|
|
@lti_helper = nil
|
|
|
|
@current_user = current_user
|
|
|
|
end
|
|
|
|
|
|
|
|
def [](key)
|
|
|
|
k = (key[0] == '$' && key) || "$#{key}"
|
2015-05-14 01:00:18 +08:00
|
|
|
if (expansion = self.class.expansions[k.respond_to?(:to_sym) && k.to_sym])
|
2015-01-08 01:54:38 +08:00
|
|
|
expansion.expand(self)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def expand_variables!(var_hash)
|
|
|
|
var_hash.update(var_hash) do |_, v|
|
2015-05-14 01:00:18 +08:00
|
|
|
if (expansion = v.respond_to?(:to_sym) && self.class.expansions[v.to_sym])
|
2015-01-08 01:54:38 +08:00
|
|
|
expansion.expand(self)
|
2015-05-14 01:00:18 +08:00
|
|
|
elsif v.respond_to?(:to_s) && v.to_s =~ SUBSTRING_REGEX
|
|
|
|
expand_substring_variables(v)
|
2015-01-08 01:54:38 +08:00
|
|
|
else
|
|
|
|
v
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-02-08 04:51:01 +08:00
|
|
|
def enabled_capability_params(enabled_capabilities)
|
|
|
|
enabled_capabilities.each_with_object({}) do |capability, hash|
|
|
|
|
if (expansion = capability.respond_to?(:to_sym) && self.class.expansions["$#{capability}".to_sym])
|
|
|
|
hash[expansion.default_name] = expansion.expand(self) if expansion.default_name.present?
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# an opaque identifier that uniquely identifies the context of the tool launch
|
|
|
|
# @launch_parameter context_id
|
2017-02-09 06:35:31 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# cdca1fe2c392a208bd8a657f8865ddb9ca359534
|
|
|
|
# ```
|
|
|
|
register_expansion 'Context.id', [],
|
|
|
|
-> { Lti::Asset.opaque_identifier_for(@context) },
|
|
|
|
default_name: 'context_id'
|
|
|
|
|
2017-02-08 04:51:01 +08:00
|
|
|
# communicates the kind of browser window/frame where the Canvas has launched a tool
|
2017-02-15 07:17:07 +08:00
|
|
|
# @launch_parameter launch_presentation_document_target
|
2017-02-08 04:51:01 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
2017-02-15 07:17:07 +08:00
|
|
|
# iframe
|
2017-02-08 04:51:01 +08:00
|
|
|
# ```
|
|
|
|
register_expansion 'Message.documentTarget', [],
|
|
|
|
-> { IMS::LTI::Models::Messages::Message::LAUNCH_TARGET_IFRAME },
|
|
|
|
default_name: 'launch_presentation_document_target'
|
|
|
|
|
|
|
|
# returns the current locale
|
2017-02-15 07:17:07 +08:00
|
|
|
# @launch_parameter launch_presentation_locale
|
2017-02-08 04:51:01 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# de
|
|
|
|
# ```
|
|
|
|
register_expansion 'Message.locale', [],
|
|
|
|
-> { I18n.locale || I18n.default_locale },
|
|
|
|
default_name: 'launch_presentation_locale'
|
|
|
|
|
|
|
|
# returns a unique identifier for the Tool Consumer (Canvas)
|
2017-02-15 07:17:07 +08:00
|
|
|
# @launch_parameter tool_consumer_instance_guid
|
2017-02-08 04:51:01 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 0dWtgJjjFWRNT41WdQMvrleejGgv7AynCVm3lmZ2:canvas-lms
|
|
|
|
# ```
|
|
|
|
register_expansion 'ToolConsumerInstance.guid', [],
|
|
|
|
-> { @root_account.lti_guid },
|
|
|
|
default_name: 'tool_consumer_instance_guid'
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the canvas domain for the current context.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# canvas.instructure.com
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.api.domain', [],
|
2016-10-28 03:57:01 +08:00
|
|
|
-> { HostUrl.context_host(@root_account, @request.host) },
|
|
|
|
CONTROLLER_GUARD
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2016-06-25 00:21:16 +08:00
|
|
|
# returns the api url for the members of the collaboration
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# https://canvas.instructure.com/api/v1/collaborations/1/members
|
|
|
|
# ```
|
|
|
|
register_expansion 'Canvas.api.collaborationMembers.url', [],
|
|
|
|
-> { @controller.api_v1_collaboration_members_url(@collaboration) },
|
2016-10-28 03:57:01 +08:00
|
|
|
CONTROLLER_GUARD,
|
2016-06-25 00:21:16 +08:00
|
|
|
COLLABORATION_GUARD
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the base URL for the current context.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# https://canvas.instructure.com
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.api.baseUrl', [],
|
2016-10-28 03:57:01 +08:00
|
|
|
-> { "#{@request.scheme}://#{HostUrl.context_host(@root_account, @request.host)}" },
|
|
|
|
CONTROLLER_GUARD
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2016-06-16 02:10:32 +08:00
|
|
|
# returns the URL for the membership service associated with the current context
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# https://canvas.instructure.com/api/lti/courses/1/membership_service
|
|
|
|
# ```
|
|
|
|
register_expansion 'ToolProxyBinding.memberships.url', [],
|
2016-04-29 03:29:56 +08:00
|
|
|
-> { @controller.polymorphic_url([@context, :membership_service]) },
|
2016-10-28 03:57:01 +08:00
|
|
|
CONTROLLER_GUARD,
|
2016-04-29 03:29:56 +08:00
|
|
|
-> { @context.is_a?(Course) || @context.is_a?(Group) }
|
2016-03-31 06:59:58 +08:00
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the account id for the current context.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.account.id', [],
|
|
|
|
-> { lti_helper.account.id }
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the account name for the current context.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# School Name
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.account.name', [],
|
|
|
|
-> { lti_helper.account.name }
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# returns the account's sis source id for the current context.
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# sis_account_id_1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.account.sisSourceId', [],
|
|
|
|
-> { lti_helper.account.sis_source_id }
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the Root Account ID for the current context.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.rootAccount.id', [],
|
|
|
|
-> { @root_account.id }
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# returns the root account's sis source id for the current context.
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# sis_account_id_1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.rootAccount.sisSourceId', [],
|
|
|
|
-> { @root_account.sis_source_id }
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# returns the URL for the external tool that was launched. Only available for LTI 1.
|
2016-03-11 12:49:32 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# http://example.url/path
|
|
|
|
# ```
|
2015-04-25 00:14:02 +08:00
|
|
|
register_expansion 'Canvas.externalTool.url', [],
|
2016-08-24 03:22:00 +08:00
|
|
|
-> { @controller.named_context_url(@tool.context, :api_v1_context_external_tools_update_url,
|
2015-04-25 00:14:02 +08:00
|
|
|
@tool.id, include_host:true) },
|
2016-10-28 03:57:01 +08:00
|
|
|
CONTROLLER_GUARD,
|
2015-04-25 00:14:02 +08:00
|
|
|
LTI1_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# returns the URL for the common css file.
|
2016-03-11 12:49:32 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# http://example.url/path.css
|
|
|
|
# ```
|
2015-07-11 00:28:43 +08:00
|
|
|
register_expansion 'Canvas.css.common', [],
|
|
|
|
-> { URI.parse(@request.url)
|
2016-10-28 03:57:01 +08:00
|
|
|
.merge(@controller.view_context.stylesheet_path(@controller.css_url_for(:common))).to_s },
|
|
|
|
CONTROLLER_GUARD
|
2015-04-25 00:14:02 +08:00
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the shard id for the current context.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-08-04 07:01:36 +08:00
|
|
|
register_expansion 'Canvas.shard.id', [],
|
|
|
|
-> { Shard.current.id }
|
2016-03-11 12:49:32 +08:00
|
|
|
|
|
|
|
# returns the root account's global id for the current context.
|
2017-02-15 07:17:07 +08:00
|
|
|
# @duplicates Canvas.user.globalId
|
2016-03-11 12:49:32 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 123400000000123
|
|
|
|
# ```
|
2015-08-04 07:01:36 +08:00
|
|
|
register_expansion 'Canvas.root_account.global_id', [],
|
|
|
|
-> { @root_account.global_id }
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the root account id for the current context.
|
|
|
|
# @deprecated
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.root_account.id', [],
|
|
|
|
-> { @root_account.id }
|
|
|
|
|
2017-02-15 04:24:04 +08:00
|
|
|
# returns the account uuid for the current context.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# Ioe3sJPt0KZp9Pw6xAvcHuLCl0z4TvPKP0iIOLbo
|
|
|
|
# ```
|
|
|
|
register_expansion 'vnd.Canvas.root_account.uuid', [],
|
|
|
|
-> { @root_account.uuid },
|
|
|
|
default_name: 'vnd_canvas_root_account_uuid'
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the root account sis source id for the current context.
|
|
|
|
# @deprecated
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.root_account.sisSourceId', [],
|
|
|
|
-> { @root_account.sis_source_id }
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the current course id.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.course.id', [],
|
|
|
|
-> { @context.id },
|
|
|
|
COURSE_GUARD
|
|
|
|
|
2017-01-31 06:36:37 +08:00
|
|
|
# returns the current course name.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# Course Name
|
|
|
|
# ```
|
|
|
|
register_expansion 'Canvas.course.name', [],
|
|
|
|
-> { @context.name },
|
|
|
|
COURSE_GUARD
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the current course sis source id.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.course.sisSourceId', [],
|
|
|
|
-> { @context.sis_source_id },
|
|
|
|
COURSE_GUARD
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the current course start date.
|
|
|
|
# @example
|
|
|
|
# ```
|
2016-12-06 06:06:35 +08:00
|
|
|
# YYY-MM-DD HH:MM:SS -0700
|
2016-03-11 12:49:32 +08:00
|
|
|
# ```
|
2015-04-23 23:08:26 +08:00
|
|
|
register_expansion 'Canvas.course.startAt', [],
|
|
|
|
-> { @context.start_at },
|
|
|
|
COURSE_GUARD
|
|
|
|
|
2016-11-11 06:56:37 +08:00
|
|
|
# returns the current course workflow state. Workflow states of "claimed" or "created"
|
|
|
|
# indicate an unpublished course.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# active
|
|
|
|
# ```
|
|
|
|
register_expansion 'Canvas.course.workflowState', [],
|
|
|
|
-> { @context.workflow_state },
|
|
|
|
COURSE_GUARD
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the current course's term start date.
|
|
|
|
# @example
|
|
|
|
# ```
|
2016-12-06 06:06:35 +08:00
|
|
|
# YYY-MM-DD HH:MM:SS -0700
|
2016-03-11 12:49:32 +08:00
|
|
|
# ```
|
2015-04-23 23:08:26 +08:00
|
|
|
register_expansion 'Canvas.term.startAt', [],
|
|
|
|
-> { @context.enrollment_term.start_at },
|
|
|
|
TERM_START_DATE_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# returns the current course sis source id
|
|
|
|
# to return the section source id use Canvas.course.sectionIds
|
2017-02-15 07:17:07 +08:00
|
|
|
# @launch_parameter lis_course_section_sourcedid
|
2016-03-11 12:49:32 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'CourseSection.sourcedId', [],
|
|
|
|
-> { @context.sis_source_id },
|
2017-02-08 04:51:01 +08:00
|
|
|
COURSE_GUARD,
|
|
|
|
default_name: 'lis_course_section_sourcedid'
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the current course enrollment state
|
|
|
|
# @example
|
|
|
|
# ```
|
2016-12-06 06:06:35 +08:00
|
|
|
# active
|
2016-03-11 12:49:32 +08:00
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.enrollment.enrollmentState', [],
|
|
|
|
-> { lti_helper.enrollment_state },
|
|
|
|
COURSE_GUARD
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# returns the current course membership roles
|
|
|
|
# @example
|
|
|
|
# ```
|
2016-12-06 06:06:35 +08:00
|
|
|
# StudentEnrollment
|
2016-03-11 12:49:32 +08:00
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.membership.roles', [],
|
|
|
|
-> { lti_helper.current_canvas_roles },
|
2015-08-04 03:46:13 +08:00
|
|
|
ROLES_GUARD
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# This is a list of IMS LIS roles should have a different key
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# urn:lti:sysrole:ims/lis/None
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.membership.concludedRoles', [],
|
|
|
|
-> { lti_helper.concluded_lis_roles },
|
|
|
|
COURSE_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the context ids from the course that the current course was copied from (excludes cartridge imports).
|
|
|
|
#
|
2016-03-11 12:49:32 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.course.previousContextIds', [],
|
|
|
|
-> { lti_helper.previous_lti_context_ids },
|
|
|
|
COURSE_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the course ids of the course that the current course was copied from (excludes cartridge imports).
|
|
|
|
#
|
2016-03-11 12:49:32 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.course.previousCourseIds', [],
|
|
|
|
-> { lti_helper.previous_course_ids },
|
|
|
|
COURSE_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the full name of the launching user.
|
|
|
|
# @launch_parameter lis_person_name_full
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# John Doe
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Person.name.full', [],
|
|
|
|
-> { @current_user.name },
|
2017-02-08 04:51:01 +08:00
|
|
|
USER_GUARD,
|
|
|
|
default_name: 'lis_person_name_full'
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the last name of the launching user.
|
|
|
|
# @launch_parameter lis_person_name_family
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# Doe
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Person.name.family', [],
|
|
|
|
-> { @current_user.last_name },
|
2017-02-08 04:51:01 +08:00
|
|
|
USER_GUARD,
|
|
|
|
default_name: 'lis_person_name_family'
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the first name of the launching user.
|
|
|
|
# @launch_parameter lis_person_name_given
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# John
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Person.name.given', [],
|
|
|
|
-> { @current_user.first_name },
|
2017-02-08 04:51:01 +08:00
|
|
|
USER_GUARD,
|
|
|
|
default_name: 'lis_person_name_given'
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the primary email of the launching user.
|
|
|
|
# @launch_parameter lis_person_contact_email_primary
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# john.doe@example.com
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Person.email.primary', [],
|
2017-02-25 04:02:00 +08:00
|
|
|
-> { lti_helper.email },
|
2017-02-08 04:51:01 +08:00
|
|
|
USER_GUARD,
|
|
|
|
default_name: 'lis_person_contact_email_primary'
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2017-01-13 06:22:26 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the institution assigned email of the launching user.
|
2017-01-13 06:22:26 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# john.doe@example.com
|
|
|
|
# ```
|
|
|
|
register_expansion 'vnd.Canvas.Person.email.sis', [],
|
2017-02-25 04:02:00 +08:00
|
|
|
-> {lti_helper.sis_email}, SIS_USER_GUARD
|
2017-01-13 06:22:26 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the name of the timezone of the launching user.
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# America/Denver
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Person.address.timezone', [],
|
|
|
|
-> { Time.zone.tzinfo.name },
|
|
|
|
USER_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the profile picture URL of the launching user.
|
|
|
|
# @launch_parameter user_image
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# https://example.com/picture.jpg
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'User.image', [],
|
|
|
|
-> { @current_user.avatar_url },
|
2017-02-08 04:51:01 +08:00
|
|
|
USER_GUARD,
|
|
|
|
default_name: 'user_image'
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the Canvas user_id of the launching user.
|
|
|
|
# @duplicates Canvas.user.id
|
|
|
|
# @launch_parameter user_id
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 420000000000042
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'User.id', [],
|
|
|
|
-> { @current_user.id },
|
2017-02-08 04:51:01 +08:00
|
|
|
USER_GUARD,
|
|
|
|
default_name: 'user_id'
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the Canvas user_id of the launching user.
|
|
|
|
# @duplicates User.id
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 420000000000042
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.user.id', [],
|
|
|
|
-> { @current_user.id },
|
|
|
|
USER_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the users preference for high contrast colors (an accessibility feature).
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# false
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.user.prefersHighContrast', [],
|
|
|
|
-> { @current_user.prefers_high_contrast? ? 'true' : 'false' },
|
|
|
|
USER_GUARD
|
|
|
|
|
2016-06-16 02:10:32 +08:00
|
|
|
# returns the context ids for the groups the user belongs to in the course.
|
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 1c16f0de65a080803785ecb3097da99872616f0d,d4d8d6ae1611e2c7581ce1b2f5c58019d928b79d,...
|
|
|
|
# ```
|
|
|
|
register_expansion 'Canvas.group.contextIds', [],
|
|
|
|
-> { @current_user.groups.active.where(context_type: 'Course', context_id: @context.id).map do |g|
|
|
|
|
Lti::Asset.opaque_identifier_for(g)
|
|
|
|
end.join(',') },
|
|
|
|
-> { @current_user && @context.is_a?(Course) }
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the [IMS LTI membership service](https://www.imsglobal.org/specs/ltimemv1p0/specification-3) roles for filtering via query parameters.
|
|
|
|
# @launch_parameter roles
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# http://purl.imsglobal.org/vocab/lis/v2/institution/person#Administrator
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Membership.role', [],
|
|
|
|
-> { lti_helper.all_roles('lis2') },
|
2017-02-08 04:51:01 +08:00
|
|
|
USER_GUARD,
|
|
|
|
default_name: 'roles'
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns list of [LIS role full URNs](https://www.imsglobal.org/specs/ltiv1p0/implementation-guide#toc-16).
|
|
|
|
# @duplicates ext_roles which is sent by default
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
2017-02-15 07:17:07 +08:00
|
|
|
# urn:lti:instrole:ims/lis/Administrator,urn:lti:instrole:ims/lis/Instructor,urn:lti:sysrole:ims/lis/SysAdmin,urn:lti:sysrole:ims/lis/User
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.xuser.allRoles', [],
|
|
|
|
-> { lti_helper.all_roles }
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the Canvas global user_id of the launching user.
|
|
|
|
# @duplicates Canvas.root_account.global_id
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# 420000000000042
|
|
|
|
# ```
|
2015-10-22 05:03:34 +08:00
|
|
|
register_expansion 'Canvas.user.globalId', [],
|
|
|
|
-> { @current_user.global_id},
|
|
|
|
USER_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns true for root account admins and false for all other roles.
|
2016-12-06 06:06:35 +08:00
|
|
|
# @example
|
|
|
|
# ```
|
|
|
|
# true
|
|
|
|
# ```
|
2016-11-17 23:36:15 +08:00
|
|
|
register_expansion 'Canvas.user.isRootAccountAdmin', [],
|
|
|
|
-> { @current_user.roles(@root_account).include? 'root_admin' },
|
|
|
|
USER_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Username/Login ID for the primary pseudonym for the user for the account.
|
|
|
|
# This may not be the pseudonym the user is actually logged in with.
|
|
|
|
# @duplicates Canvas.user.loginId
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# jdoe
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'User.username', [],
|
|
|
|
-> { sis_pseudonym.unique_id },
|
|
|
|
PSEUDONYM_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Username/Login ID for the primary pseudonym for the user for the account.
|
|
|
|
# This may not be the pseudonym the user is actually logged in with.
|
|
|
|
# @duplicates User.username
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# jdoe
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.user.loginId', [],
|
|
|
|
-> { sis_pseudonym.unique_id },
|
|
|
|
PSEUDONYM_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the sis source id for the primary pseudonym for the user for the account
|
2017-02-15 07:17:07 +08:00
|
|
|
# This may not be the pseudonym the user is actually logged in with.
|
|
|
|
# @duplicates Person.sourcedId
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# sis_user_42
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.user.sisSourceId', [],
|
|
|
|
-> { sis_pseudonym.sis_user_id },
|
|
|
|
PSEUDONYM_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the integration id for the primary pseudonym for the user for the account
|
2017-02-15 07:17:07 +08:00
|
|
|
# This may not be the pseudonym the user is actually logged in with.
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# integration_user_42
|
|
|
|
# ```
|
2016-01-23 05:43:11 +08:00
|
|
|
register_expansion 'Canvas.user.sisIntegrationId', [],
|
|
|
|
-> { sis_pseudonym.integration_id },
|
|
|
|
PSEUDONYM_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the sis source id for the primary pseudonym for the user for the account
|
2017-02-15 07:17:07 +08:00
|
|
|
# This may not be the pseudonym the user is actually logged in with.
|
|
|
|
# @duplicates Canvas.user.sisSourceId
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# sis_user_42
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Person.sourcedId', [],
|
|
|
|
-> { sis_pseudonym.sis_user_id },
|
2017-02-08 04:51:01 +08:00
|
|
|
PSEUDONYM_GUARD,
|
|
|
|
default_name: 'lis_person_sourcedid'
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the logout service url for the user.
|
|
|
|
# This is the pseudonym the user is actually logged in as.
|
|
|
|
# It may not hold all the sis info needed in other launch substitutions.
|
2017-02-15 07:17:07 +08:00
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
2017-02-15 07:17:07 +08:00
|
|
|
# https://<domain>.instructure.com/api/lti/v1/logout_service/<external_tool_id>-<user_id>-<current_unix_timestamp>-<opaque_string>
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.logoutService.url', [],
|
|
|
|
-> { @controller.lti_logout_service_url(Lti::LogoutService.create_token(@tool, @current_pseudonym)) },
|
2016-10-28 03:57:01 +08:00
|
|
|
CONTROLLER_GUARD,
|
2015-01-08 01:54:38 +08:00
|
|
|
-> { @current_pseudonym && @tool }
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the Canvas user_id for the masquerading user.
|
|
|
|
# This is the pseudonym the user is actually logged in as.
|
|
|
|
# It may not hold all the sis info needed in other launch substitutions.
|
2017-02-15 07:17:07 +08:00
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# 420000000000042
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.masqueradingUser.id', [],
|
2015-05-12 01:05:45 +08:00
|
|
|
-> { @controller.logged_in_user.id },
|
|
|
|
MASQUERADING_GUARD
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the 40 character opaque user_id for masquerading user.
|
|
|
|
# This is the pseudonym the user is actually logged in as.
|
|
|
|
# It may not hold all the sis info needed in other launch substitutions.
|
2017-02-15 07:17:07 +08:00
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# da12345678cb37ba1e522fc7c5ef086b7704eff9
|
|
|
|
# ```
|
2015-04-28 03:41:05 +08:00
|
|
|
register_expansion 'Canvas.masqueradingUser.userId', [],
|
|
|
|
-> { @tool.opaque_identifier_for(@controller.logged_in_user) },
|
2015-05-12 01:05:45 +08:00
|
|
|
MASQUERADING_GUARD
|
2015-04-28 03:41:05 +08:00
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the xapi url for the user.
|
2017-02-15 07:17:07 +08:00
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# https://<domain>.instructure.com/api/lti/v1/xapi/<external_tool_id>-<user_id>-<course_id>-<current_unix_timestamp>-<opaque_id>
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.xapi.url', [],
|
2015-01-28 04:33:11 +08:00
|
|
|
-> { @controller.lti_xapi_url(Lti::AnalyticsService.create_token(@tool, @current_user, @context)) },
|
|
|
|
-> { @current_user && @context.is_a?(Course) && @tool }
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the caliper url for the user.
|
2017-02-15 07:17:07 +08:00
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# https://<domain>.instructure.com/api/lti/v1/caliper/<external_tool_id>-<user_id>-<course_id>-<current_unix_timestamp>-<opaque_id>
|
|
|
|
# ```
|
2015-02-24 06:49:19 +08:00
|
|
|
register_expansion 'Caliper.url', [],
|
2015-01-28 04:33:11 +08:00
|
|
|
-> { @controller.lti_caliper_url(Lti::AnalyticsService.create_token(@tool, @current_user, @context)) },
|
2016-10-28 03:57:01 +08:00
|
|
|
CONTROLLER_GUARD,
|
2015-01-08 01:54:38 +08:00
|
|
|
-> { @current_user && @context.is_a?(Course) && @tool }
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns a comma separated list of section_id's that the user is enrolled in.
|
2017-02-15 07:17:07 +08:00
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# 42, 43
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.course.sectionIds', [],
|
|
|
|
-> { lti_helper.section_ids },
|
|
|
|
ENROLLMENT_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns a comma separated list of section sis_id's that the user is enrolled in.
|
2017-02-15 07:17:07 +08:00
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# section_sis_id_1, section_sis_id_2
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.course.sectionSisSourceIds', [],
|
|
|
|
-> { lti_helper.section_sis_ids },
|
|
|
|
ENROLLMENT_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the module_id that the module item was launched from.
|
2017-02-15 07:17:07 +08:00
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.module.id', [],
|
2015-06-26 04:56:13 +08:00
|
|
|
-> {
|
|
|
|
@content_tag.context_module_id
|
|
|
|
},
|
2015-01-08 01:54:38 +08:00
|
|
|
CONTENT_TAG_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the module_item_id of the module item that was launched.
|
2017-02-15 07:17:07 +08:00
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.moduleItem.id', [],
|
2015-06-26 04:56:13 +08:00
|
|
|
-> {
|
|
|
|
@content_tag.id
|
|
|
|
},
|
2015-01-08 01:54:38 +08:00
|
|
|
CONTENT_TAG_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the assignment_id of the assignment that was launched.
|
2017-02-15 07:17:07 +08:00
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# 1234
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.assignment.id', [],
|
|
|
|
-> { @assignment.id },
|
|
|
|
ASSIGNMENT_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the title of the assignment that was launched.
|
2017-02-15 07:17:07 +08:00
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# Deep thought experiment
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.assignment.title', [],
|
|
|
|
-> { @assignment.title },
|
|
|
|
ASSIGNMENT_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the points possible of the assignment that was launched.
|
2017-02-15 07:17:07 +08:00
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# 100
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'Canvas.assignment.pointsPossible', [],
|
2016-05-11 22:03:11 +08:00
|
|
|
-> { TextHelper.round_if_whole(@assignment.points_possible) },
|
2015-01-08 01:54:38 +08:00
|
|
|
ASSIGNMENT_GUARD
|
2016-12-06 06:06:35 +08:00
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# @deprecated in favor of ISO8601
|
2015-03-13 06:29:38 +08:00
|
|
|
register_expansion 'Canvas.assignment.unlockAt', [],
|
|
|
|
-> { @assignment.unlock_at },
|
|
|
|
ASSIGNMENT_GUARD
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# @deprecated in favor of ISO8601
|
2015-03-13 06:29:38 +08:00
|
|
|
register_expansion 'Canvas.assignment.lockAt', [],
|
|
|
|
-> { @assignment.lock_at },
|
|
|
|
ASSIGNMENT_GUARD
|
|
|
|
|
2016-03-11 12:49:32 +08:00
|
|
|
# @deprecated in favor of ISO8601
|
2015-03-13 06:29:38 +08:00
|
|
|
register_expansion 'Canvas.assignment.dueAt', [],
|
|
|
|
-> { @assignment.due_at },
|
|
|
|
ASSIGNMENT_GUARD
|
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the `unlock_at` date of the assignment that was launched.
|
|
|
|
# Only available when launched as an assignment with an `unlock_at` set.
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# YYYY-MM-DDT07:00:00Z
|
|
|
|
# ```
|
2015-08-26 05:07:33 +08:00
|
|
|
register_expansion 'Canvas.assignment.unlockAt.iso8601', [],
|
|
|
|
-> { @assignment.unlock_at.utc.iso8601 },
|
2015-10-20 01:05:17 +08:00
|
|
|
-> {@assignment && @assignment.unlock_at.present?}
|
2015-08-26 05:07:33 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the `lock_at` date of the assignment that was launched.
|
|
|
|
# Only available when launched as an assignment with a `lock_at` set.
|
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# YYYY-MM-DDT07:00:00Z
|
|
|
|
# ```
|
2015-08-26 05:07:33 +08:00
|
|
|
register_expansion 'Canvas.assignment.lockAt.iso8601', [],
|
|
|
|
-> { @assignment.lock_at.utc.iso8601 },
|
2015-10-20 01:05:17 +08:00
|
|
|
-> {@assignment && @assignment.lock_at.present?}
|
2015-08-26 05:07:33 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the `due_at` date of the assignment that was launched.
|
|
|
|
# Only available when launched as an assignment with a `due_at` set.
|
|
|
|
#
|
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# YYYY-MM-DDT07:00:00Z
|
|
|
|
# ```
|
2015-08-26 05:07:33 +08:00
|
|
|
register_expansion 'Canvas.assignment.dueAt.iso8601', [],
|
|
|
|
-> { @assignment.due_at.utc.iso8601 },
|
2015-10-20 01:05:17 +08:00
|
|
|
-> {@assignment && @assignment.due_at.present?}
|
2015-08-26 05:07:33 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns true if the assignment that was launched is published.
|
2016-12-06 06:06:35 +08:00
|
|
|
# Only available when launched as an assignment.
|
2017-02-15 07:17:07 +08:00
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# true
|
|
|
|
# ```
|
2016-06-21 11:51:25 +08:00
|
|
|
register_expansion 'Canvas.assignment.published', [],
|
|
|
|
-> { @assignment.workflow_state == 'published' },
|
2016-06-17 01:30:26 +08:00
|
|
|
ASSIGNMENT_GUARD
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the endpoint url for accessing link-level tool settings
|
|
|
|
# Only available for LTI 2.0
|
2017-02-15 07:17:07 +08:00
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# https://<domain>.instructure.com/api/lti/tool_settings/<link_id>
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'LtiLink.custom.url', [],
|
|
|
|
-> { @controller.show_lti_tool_settings_url(@tool_setting_link_id) },
|
2016-10-28 03:57:01 +08:00
|
|
|
CONTROLLER_GUARD,
|
2015-01-08 01:54:38 +08:00
|
|
|
-> { @tool_setting_link_id }
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the endpoint url for accessing context-level tool settings
|
|
|
|
# Only available for LTI 2.0
|
2017-02-15 07:17:07 +08:00
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# https://<domain>.instructure.com/api/lti/tool_settings/<binding_id>
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'ToolProxyBinding.custom.url', [],
|
|
|
|
-> { @controller.show_lti_tool_settings_url(@tool_setting_binding_id) },
|
2016-10-28 03:57:01 +08:00
|
|
|
CONTROLLER_GUARD,
|
2015-01-08 01:54:38 +08:00
|
|
|
-> { @tool_setting_binding_id }
|
|
|
|
|
2016-12-06 06:06:35 +08:00
|
|
|
# Returns the endpoint url for accessing system-wide tool settings
|
|
|
|
# Only available for LTI 2.0
|
2017-02-15 07:17:07 +08:00
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# https://<domain>.instructure.com/api/lti/tool_settings/<proxy_id>
|
|
|
|
# ```
|
2015-01-08 01:54:38 +08:00
|
|
|
register_expansion 'ToolProxy.custom.url', [],
|
|
|
|
-> { @controller.show_lti_tool_settings_url(@tool_setting_proxy_id) },
|
2016-10-28 03:57:01 +08:00
|
|
|
-> { !!@controller && @tool_setting_proxy_id }
|
2015-01-08 01:54:38 +08:00
|
|
|
|
2017-02-15 07:17:07 +08:00
|
|
|
# Returns the [Tool Consumer Profile](https://www.imsglobal.org/specs/ltiv2p0/implementation-guide#toc-46) url for the tool.
|
2016-12-06 06:06:35 +08:00
|
|
|
# Only available for LTI 2.0
|
2017-02-15 07:17:07 +08:00
|
|
|
# @example
|
2016-12-06 06:06:35 +08:00
|
|
|
# ```
|
|
|
|
# https://<domain>.instructure.com/api/lti/courses/<course_id>/tool_consumer_profile/<opaque_id>
|
|
|
|
# https://<domain>.instructure.com/api/lti/accounts/<account_id>/tool_consumer_profile/<opaque_id>
|
|
|
|
# ```
|
2015-01-16 02:47:16 +08:00
|
|
|
register_expansion 'ToolConsumerProfile.url', [],
|
2017-02-10 09:43:04 +08:00
|
|
|
-> { @controller.polymorphic_url([@tool.context, :tool_consumer_profile], tool_consumer_profile_id: Lti::ToolConsumerProfile::DEFAULT_TCP_UUID)},
|
2016-10-28 03:57:01 +08:00
|
|
|
CONTROLLER_GUARD,
|
2016-06-08 02:45:50 +08:00
|
|
|
-> { @tool && @tool.is_a?(Lti::ToolProxy) }
|
2015-01-16 02:47:16 +08:00
|
|
|
|
2015-02-11 07:40:06 +08:00
|
|
|
register_expansion 'Canvas.file.media.id', [],
|
|
|
|
-> { (@attachment.media_object && @attachment.media_object.media_id) || @attachment.media_entry_id },
|
|
|
|
MEDIA_OBJECT_ID_GUARD
|
|
|
|
|
|
|
|
register_expansion 'Canvas.file.media.type', [],
|
|
|
|
-> {@attachment.media_object.media_type},
|
|
|
|
MEDIA_OBJECT_GUARD
|
|
|
|
|
|
|
|
register_expansion 'Canvas.file.media.duration', [],
|
|
|
|
-> {@attachment.media_object.duration},
|
|
|
|
MEDIA_OBJECT_GUARD
|
|
|
|
|
|
|
|
register_expansion 'Canvas.file.media.size', [],
|
|
|
|
-> {@attachment.media_object.total_size},
|
|
|
|
MEDIA_OBJECT_GUARD
|
|
|
|
|
|
|
|
register_expansion 'Canvas.file.media.title', [],
|
|
|
|
-> {@attachment.media_object.user_entered_title || @attachment.media_object.title},
|
|
|
|
MEDIA_OBJECT_GUARD
|
|
|
|
|
|
|
|
register_expansion 'Canvas.file.usageRights.name', [],
|
|
|
|
-> {@attachment.usage_rights.license_name},
|
|
|
|
USAGE_RIGHTS_GUARD
|
|
|
|
|
|
|
|
register_expansion 'Canvas.file.usageRights.url', [],
|
|
|
|
-> {@attachment.usage_rights.license_url},
|
|
|
|
USAGE_RIGHTS_GUARD
|
|
|
|
|
|
|
|
register_expansion 'Canvas.file.usageRights.copyrightText', [],
|
|
|
|
-> {@attachment.usage_rights.legal_copyright},
|
|
|
|
USAGE_RIGHTS_GUARD
|
|
|
|
|
2015-01-08 01:54:38 +08:00
|
|
|
private
|
|
|
|
|
|
|
|
def sis_pseudonym
|
|
|
|
@sis_pseudonym ||= @current_user.find_pseudonym_for_account(@root_account) if @current_user
|
|
|
|
end
|
|
|
|
|
2015-05-14 01:00:18 +08:00
|
|
|
def expand_substring_variables(value)
|
|
|
|
value.to_s.scan(SUBSTRING_REGEX).inject(value) do |v, match|
|
|
|
|
substring = "${#{match}}"
|
|
|
|
v.gsub(substring, (self[match] || substring).to_s)
|
|
|
|
end
|
|
|
|
end
|
2015-01-08 01:54:38 +08:00
|
|
|
end
|
2015-05-14 01:00:18 +08:00
|
|
|
end
|