diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 873ce7ed69..8ad10f8eca 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -5,6 +5,8 @@ These are notable changes in edx-platform. This is a rolling list of changes,
in roughly chronological order, most recent first. Add your entries at or near
the top. Include a label indicating the component affected.
+Blades: Add LTI context_id parameter. BLD-584.
+
Blades: Update LTI resource_link_id parameter. BLD-768.
Blades: Transcript translations should be displayed in their source language (BLD-935).
diff --git a/common/lib/xmodule/xmodule/js/fixtures/lti.html b/common/lib/xmodule/xmodule/js/fixtures/lti.html
index ac9fe31d09..8c433d047b 100644
--- a/common/lib/xmodule/xmodule/js/fixtures/lti.html
+++ b/common/lib/xmodule/xmodule/js/fixtures/lti.html
@@ -28,6 +28,7 @@
+
diff --git a/common/lib/xmodule/xmodule/lti_module.py b/common/lib/xmodule/xmodule/lti_module.py
index ddca9d0058..269e8657d6 100644
--- a/common/lib/xmodule/xmodule/lti_module.py
+++ b/common/lib/xmodule/xmodule/lti_module.py
@@ -338,13 +338,9 @@ class LTIModule(LTIFields, XModule):
This value may change for a particular resource_link_id / user_id from one launch to the next.
The TP should only retain the most recent value for this field for a particular resource_link_id / user_id.
This field is generally optional, but is required for grading.
-
- context_id is - is an opaque identifier that uniquely identifies the context that contains
- the link being launched.
- lti_id should be context_id by meaning.
"""
- return "{id}:{resource_link}:{user_id}".format(
- id=urllib.quote(self.lti_id),
+ return "{context}:{resource_link}:{user_id}".format(
+ context=urllib.quote(self.context_id),
resource_link=urllib.quote(self.get_resource_link_id()),
user_id=urllib.quote(self.get_user_id())
)
@@ -357,6 +353,16 @@ class LTIModule(LTIFields, XModule):
course = self.descriptor.runtime.modulestore.get_item(course_location)
return course
+ @property
+ def context_id(self):
+ """
+ Return context_id.
+
+ context_id is an opaque identifier that uniquely identifies the context (e.g., a course)
+ that contains the link being launched.
+ """
+ return self.course_id
+
@property
def role(self):
"""
@@ -397,6 +403,7 @@ class LTIModule(LTIFields, XModule):
u'resource_link_id': self.get_resource_link_id(),
u'lis_result_sourcedid': self.get_lis_result_sourcedid(),
+ u'context_id': self.context_id,
}
if self.has_score:
diff --git a/common/lib/xmodule/xmodule/tests/__init__.py b/common/lib/xmodule/xmodule/tests/__init__.py
index 0a68d2fcb1..70ae00abb2 100644
--- a/common/lib/xmodule/xmodule/tests/__init__.py
+++ b/common/lib/xmodule/xmodule/tests/__init__.py
@@ -131,7 +131,7 @@ class LogicTest(unittest.TestCase):
url_name = ''
category = 'test'
- self.system = get_test_system()
+ self.system = get_test_system(course_id='test/course/id')
self.descriptor = EmptyClass()
self.xmodule_class = self.descriptor_class.module_class
diff --git a/common/lib/xmodule/xmodule/tests/test_lti_unit.py b/common/lib/xmodule/xmodule/tests/test_lti_unit.py
index e42dbd9100..86cdabb3e7 100644
--- a/common/lib/xmodule/xmodule/tests/test_lti_unit.py
+++ b/common/lib/xmodule/xmodule/tests/test_lti_unit.py
@@ -265,7 +265,7 @@ class LTIModuleTest(LogicTest):
with patch('xmodule.lti_module.LTIModule.location', new_callable=PropertyMock) as mock_location:
self.xmodule.location.html_id = lambda: 'i4x-2-3-lti-31de800015cf4afb973356dbe81496df'
expected_sourcedId = u':'.join(urllib.quote(i) for i in (
- self.lti_id,
+ self.system.course_id,
urllib.quote(self.unquoted_resource_link_id),
self.user_id
))
@@ -407,4 +407,8 @@ class LTIModuleTest(LogicTest):
self.xmodule.graded = False
self.assertEqual(self.xmodule.max_score(), 100.0)
-
+ def test_context_id(self):
+ """
+ Tests that LTI parameter context_id is equal to course_id.
+ """
+ self.assertEqual(self.system.course_id, self.xmodule.context_id)
diff --git a/lms/djangoapps/courseware/tests/test_lti_integration.py b/lms/djangoapps/courseware/tests/test_lti_integration.py
index 66a92153ab..a74bdf3ed6 100644
--- a/lms/djangoapps/courseware/tests/test_lti_integration.py
+++ b/lms/djangoapps/courseware/tests/test_lti_integration.py
@@ -27,13 +27,13 @@ class TestLTI(BaseTestXmodule):
mocked_signature_after_sign = u'my_signature%3D'
mocked_decoded_signature = u'my_signature='
- lti_id = self.item_descriptor.lti_id
+ context_id = self.item_descriptor.course_id
user_id = unicode(self.item_descriptor.xmodule_runtime.anonymous_student_id)
hostname = self.item_descriptor.xmodule_runtime.hostname
resource_link_id = unicode(urllib.quote('{}-{}'.format(hostname, self.item_descriptor.location.html_id())))
- sourcedId = "{id}:{resource_link}:{user_id}".format(
- id=urllib.quote(lti_id),
+ sourcedId = "{context}:{resource_link}:{user_id}".format(
+ context=urllib.quote(context_id),
resource_link=urllib.quote(resource_link_id),
user_id=urllib.quote(user_id)
)
@@ -49,6 +49,7 @@ class TestLTI(BaseTestXmodule):
u'lti_message_type': u'basic-lti-launch-request',
u'lti_version': 'LTI-1p0',
u'roles': u'Student',
+ u'context_id': context_id,
u'resource_link_id': resource_link_id,
u'lis_result_sourcedid': sourcedId,