Commit 2a58655c by John Lee

Add a settable "partner_id" field to replace the hard-coded "edx". When testing…

Add a settable "partner_id" field to replace the hard-coded "edx". When testing this locally, you can change this field in such a way that the backend knows to differentiate you from prod traffic.
parent c967a786
......@@ -79,6 +79,17 @@ class SchoolYourselfXBlock(XBlock):
default="",
enforce_type=True)
partner_id = String(
help=("This is the string that is passed as the partner_id param "
"in all URLs that get generated. For School Yourself courses, "
"leave this as the default 'edx'. When testing, you may want "
"to set this to something else to indicate to the backend that "
"the request doesn't count as production traffic."""),
scope=Scope.content,
display_name="Partner ID",
default="edx",
enforce_type=True)
def get_student_id(self):
"""This is a helper that retrieves the student ID. We need this
......@@ -134,7 +145,7 @@ class SchoolYourselfXBlock(XBlock):
If a shared_key is provided and there is a username to encode,
we will sign it with the shared key.
"""
url_params = {"partner": "edx"}
url_params = {"partner": self.partner_id}
user_id = self.get_student_id()
if user_id:
url_params["partner_user_id"] = user_id
......@@ -167,7 +178,8 @@ class SchoolYourselfXBlock(XBlock):
"module_title": self.module_title,
"module_description": self.module_description,
"shared_key": self.shared_key,
"base_url": self.base_url
"base_url": self.base_url,
"partner_id": self.partner_id
}
fragment = Fragment(self.render_template("studio_view.html", context))
......@@ -195,8 +207,12 @@ class SchoolYourselfXBlock(XBlock):
self.display_name = self.get_display_name(self.module_title)
if "partner_id" in data:
self.partner_id = data.get("partner_id")
return { "module_id": self.module_id,
"module_title": self.module_title,
"module_description": self.module_description,
"shared_key": self.shared_key,
"base_url": self.base_url }
"base_url": self.base_url,
"partner_id": self.partner_id }
......@@ -36,7 +36,7 @@ class SchoolYourselfLessonXBlock(SchoolYourselfXBlock):
context = {
"iframe_url": "%s/page/embed?%s" % (self.base_url,
urllib.urlencode(url_params)),
urllib.urlencode(url_params)),
"screenshot_url": screenshot_url,
"title": self.module_title,
"description": self.module_description
......@@ -76,7 +76,8 @@ class SchoolYourselfLessonXBlock(SchoolYourselfXBlock):
module_id="algebra/multiplication"
module_title="Multiplication"
module_description="Multiplying positive numbers, in any order"
shared_key="test"
shared_key="edx_test"
partner_id="edx_test"
/>
</vertical_demo>
"""),
......
......@@ -158,8 +158,9 @@ class SchoolYourselfReviewXBlock(SchoolYourselfXBlock):
<schoolyourself_review
base_url="https://schoolyourself.org"
module_id="algebra/multiplication"
module_title="Multiplication, multiplication, multiplication"
shared_key="test"
module_title="Multiplication, Multiplication, 'Multiplication'"
shared_key="edx_test"
partner_id="edx_test"
/>
</vertical_demo>
"""),
......
......@@ -104,5 +104,19 @@ class SchoolYourselfReviewXBlockTest(unittest.TestCase):
"max_value": 1.0 })
def test_get_partner_url_params(self):
# These are the defaults:
self.assertEqual(self.block.get_partner_url_params(),
{ "partner": "edx",
"partner_user_id": "debug" })
self.block.partner_id = "foo"
self.block.xmodule_runtime = FakeXModuleRuntime("abc123")
self.assertEqual(self.block.get_partner_url_params(),
{ "partner": "foo",
"partner_user_id": "abc123" })
if __name__ == "__main__":
unittest.main()
......@@ -6,7 +6,8 @@ function SchoolYourselfStudioView(runtime, element) {
'module_description': $('.module-description', element).val(),
'player_type': $('.player-type', element).val(),
'shared_key': $('.shared-key', element).val(),
'base_url': $('.base-url', element).val()
'base_url': $('.base-url', element).val(),
'partner_id': $('.partner-id', element).val()
};
var handlerUrl = runtime.handlerUrl(element, 'studio_submit');
$.post(handlerUrl, JSON.stringify(data)).complete(function() {
......
......@@ -4,35 +4,42 @@
<li class="field comp-setting-entry is-set">
<div class="wrapper-comp-setting">
<label class="label setting-label" for="module-id">Lesson ID</label>
<input type="text" class="module-id input setting-input" id="module-id" value="${module_id}"/>
<input type="text" class="module-id input setting-input" id="module-id" value="${module_id|h}"/>
</div>
</li>
<li class="field comp-setting-entry is-set">
<div class="wrapper-comp-setting">
<label class="label setting-label" for="module-title">Lesson title</label>
<input type="text" class="module-title input setting-input" id="module-title" value="${module_title}"/>
<input type="text" class="module-title input setting-input" id="module-title" value="${module_title|h}"/>
</div>
</li>
<li class="field comp-setting-entry is-set">
<div class="wrapper-comp-setting">
<label class="label setting-label" for="module-description">Description</label>
<input type="text" class="module-description input setting-input" id="module-description" value="${module_description}"/>
<input type="text" class="module-description input setting-input" id="module-description" value="${module_description|h}"/>
</div>
</li>
<li class="field comp-setting-entry is-set">
<div class="wrapper-comp-setting">
<label class="label setting-label" for="shared-key">Shared key</label>
<input type="text" class="shared-key input setting-input" id="shared-key" value="${shared_key}"/>
<input type="text" class="shared-key input setting-input" id="shared-key" value="${shared_key|h}"/>
</div>
</li>
<li class="field comp-setting-entry is-set">
<div class="wrapper-comp-setting">
<label class="label setting-label" for="base-url">Base URL</label>
<input type="url" class="base-url input setting-input" id="base-url" value="${base_url}"/>
<input type="url" class="base-url input setting-input" id="base-url" value="${base_url|h}"/>
</div>
</li>
<li class="field comp-setting-entry is-set">
<div class="wrapper-comp-setting">
<label class="label setting-label" for="partner-id">Partner ID</label>
<input type="url" class="partner-id input setting-input" id="partner-id" value="${partner_id|h}"/>
</div>
</li>
</ul>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment