From fec5129a493e53b10a1b63c2766dc347d9f17790 Mon Sep 17 00:00:00 2001
From: Peter Fogg
Date: Mon, 14 Sep 2015 10:40:13 -0400
Subject: [PATCH] Remove Tender and change Studio help links.
TNL-2695
---
.../contentstore/features/help.feature | 53 ----
cms/djangoapps/contentstore/features/help.py | 24 --
cms/envs/aws.py | 2 -
cms/envs/bok_choy.py | 3 +
cms/envs/common.py | 12 -
cms/envs/test.py | 3 -
cms/static/cms/js/build.js | 1 -
cms/static/cms/js/require-config.js | 11 -
cms/static/coffee/spec/main.coffee | 1 -
cms/static/coffee/spec/main_squire.coffee | 1 -
cms/static/js/base.js | 3 -
cms/static/sass/_build.scss | 1 -
cms/static/sass/elements/_sock.scss | 1 +
cms/static/sass/elements/_tender-widget.scss | 273 ------------------
cms/templates/activation_invalid.html | 10 -
cms/templates/base.html | 2 -
cms/templates/error.html | 11 +-
cms/templates/index.html | 27 +-
cms/templates/login.html | 14 -
cms/templates/widgets/footer.html | 5 -
cms/templates/widgets/sock.html | 78 ++---
cms/templates/widgets/tender.html | 20 --
common/static/js/src/tender_fallback.js | 1 -
common/test/acceptance/pages/studio/utils.py | 15 +
.../tests/studio/test_studio_help.py | 46 +++
lms/static/js/spec/main.js | 1 -
26 files changed, 113 insertions(+), 506 deletions(-)
delete mode 100644 cms/djangoapps/contentstore/features/help.feature
delete mode 100644 cms/djangoapps/contentstore/features/help.py
delete mode 100644 cms/static/sass/elements/_tender-widget.scss
delete mode 100644 cms/templates/widgets/tender.html
delete mode 100644 common/static/js/src/tender_fallback.js
create mode 100644 common/test/acceptance/tests/studio/test_studio_help.py
diff --git a/cms/djangoapps/contentstore/features/help.feature b/cms/djangoapps/contentstore/features/help.feature
deleted file mode 100644
index 567a2f2526..0000000000
--- a/cms/djangoapps/contentstore/features/help.feature
+++ /dev/null
@@ -1,53 +0,0 @@
-@shard_1
-Feature: CMS.Help
- As a course author, I am able to access online help
-
- Scenario: Users can access online help on course listing page
- Given There are no courses
- And I am logged into Studio
- Then I should see online help for "get_started"
-
-
- Scenario: Users can access online help within a course
- Given I have opened a new course in Studio
-
- And I click the course link in Studio Home
- Then I should see online help for "outline"
-
- And I go to the course updates page
- Then I should see online help for "updates"
-
- And I go to the pages page
- Then I should see online help for "pages"
-
- And I go to the files and uploads page
- Then I should see online help for "files"
-
- And I go to the textbooks page
- Then I should see online help for "textbooks"
-
- And I select Schedule and Details
- Then I should see online help for "setting_up"
-
- And I am viewing the grading settings
- Then I should see online help for "grading"
-
- And I am viewing the course team settings
- Then I should see online help for "course-team"
-
- And I select the Advanced Settings
- Then I should see online help for "index"
-
- And I select Checklists from the Tools menu
- Then I should see online help for "checklist"
-
- And I go to the import page
- Then I should see online help for "import"
-
- And I go to the export page
- Then I should see online help for "export"
-
-
- Scenario: Users can access online help on the unit page
- Given I am in Studio editing a new unit
- Then I should see online help for "units"
diff --git a/cms/djangoapps/contentstore/features/help.py b/cms/djangoapps/contentstore/features/help.py
deleted file mode 100644
index f169e72057..0000000000
--- a/cms/djangoapps/contentstore/features/help.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# pylint: disable=missing-docstring
-# pylint: disable=redefined-outer-name
-# pylint: disable=unused-argument
-
-from nose.tools import assert_false # pylint: disable=no-name-in-module
-from lettuce import step, world
-
-
-@step(u'I should see online help for "([^"]*)"$')
-def see_online_help_for(step, page_name):
- # make sure the online Help link exists on this page and contains the expected page name
- elements_found = world.browser.find_by_xpath(
- '//li[contains(@class, "nav-account-help")]//a[contains(@href, "{page_name}")]'.format(
- page_name=page_name
- )
- )
- assert_false(elements_found.is_empty())
-
- # make sure the PDF link on the sock of this page exists
- # for now, the PDF link stays constant for all the pages so we just check for "pdf"
- elements_found = world.browser.find_by_xpath(
- '//section[contains(@class, "sock")]//li[contains(@class, "js-help-pdf")]//a[contains(@href, "pdf")]'
- )
- assert_false(elements_found.is_empty())
diff --git a/cms/envs/aws.py b/cms/envs/aws.py
index 84d8947fbf..cc3d974377 100644
--- a/cms/envs/aws.py
+++ b/cms/envs/aws.py
@@ -204,8 +204,6 @@ LOGGING = get_logger_config(LOG_DIR,
PLATFORM_NAME = ENV_TOKENS.get('PLATFORM_NAME', 'edX')
STUDIO_NAME = ENV_TOKENS.get('STUDIO_NAME', 'edX Studio')
STUDIO_SHORT_NAME = ENV_TOKENS.get('STUDIO_SHORT_NAME', 'Studio')
-TENDER_DOMAIN = ENV_TOKENS.get('TENDER_DOMAIN', TENDER_DOMAIN)
-TENDER_SUBDOMAIN = ENV_TOKENS.get('TENDER_SUBDOMAIN', TENDER_SUBDOMAIN)
# Event Tracking
if "TRACKING_IGNORE_URL_PATTERNS" in ENV_TOKENS:
diff --git a/cms/envs/bok_choy.py b/cms/envs/bok_choy.py
index ee671b084c..94f90d46ad 100644
--- a/cms/envs/bok_choy.py
+++ b/cms/envs/bok_choy.py
@@ -98,6 +98,9 @@ FEATURES['LICENSING'] = True
FEATURES['ENABLE_MOBILE_REST_API'] = True # Enable video bumper in Studio
FEATURES['ENABLE_VIDEO_BUMPER'] = True # Enable video bumper in Studio settings
+# Enable partner support link in Studio footer
+FEATURES['PARTNER_SUPPORT_EMAIL'] = 'partner-support@example.com'
+
########################### Entrance Exams #################################
FEATURES['ENTRANCE_EXAMS'] = True
diff --git a/cms/envs/common.py b/cms/envs/common.py
index f1d34953a1..14b0b33989 100644
--- a/cms/envs/common.py
+++ b/cms/envs/common.py
@@ -620,18 +620,6 @@ REQUIRE_ENVIRONMENT = "node"
DEBUG_TOOLBAR_PATCH_SETTINGS = False
-################################# TENDER ######################################
-
-# If you want to enable Tender integration (http://tenderapp.com/),
-# put in the subdomain where Tender hosts tender_widget.js. For example,
-# if you want to use the URL https://example.tenderapp.com/tender_widget.js,
-# you should use "example".
-TENDER_SUBDOMAIN = None
-# If you want to have a vanity domain that points to Tender, put that here.
-# For example, "help.myapp.com". Otherwise, should should be your full
-# tenderapp domain name: for example, "example.tenderapp.com".
-TENDER_DOMAIN = None
-
################################# CELERY ######################################
# Message configuration
diff --git a/cms/envs/test.py b/cms/envs/test.py
index 16133ac8ef..1d7e585f22 100644
--- a/cms/envs/test.py
+++ b/cms/envs/test.py
@@ -94,9 +94,6 @@ STATICFILES_STORAGE = 'pipeline.storage.NonPackagingPipelineStorage'
STATIC_URL = "/static/"
PIPELINE_ENABLED = False
-TENDER_DOMAIN = "help.edge.edx.org"
-TENDER_SUBDOMAIN = "edxedge"
-
# Update module store settings per defaults for tests
update_module_store_settings(
MODULESTORE,
diff --git a/cms/static/cms/js/build.js b/cms/static/cms/js/build.js
index dc9abfdc5b..1b290554b5 100644
--- a/cms/static/cms/js/build.js
+++ b/cms/static/cms/js/build.js
@@ -83,7 +83,6 @@
'gettext': 'empty:',
'xmodule': 'empty:',
'mathjax': 'empty:',
- 'tender': 'empty:',
'youtube': 'empty:'
},
diff --git a/cms/static/cms/js/require-config.js b/cms/static/cms/js/require-config.js
index c64ac7f9c1..4e5be98dfc 100644
--- a/cms/static/cms/js/require-config.js
+++ b/cms/static/cms/js/require-config.js
@@ -70,14 +70,6 @@ require.config({
// end of Annotation tool files
// externally hosted files
- "tender": [
- // if TENDER_SUBDOMAIN is defined, use that; otherwise, use a dummy value
- // (the application JS will never `require(['tender'])` if it's not defined)
- "//" + (typeof TENDER_SUBDOMAIN === "string" ? TENDER_SUBDOMAIN : "example") + ".tenderapp.com/tender_widget",
- // if tender fails to load, fallback on a local file
- // so that require doesn't fall over
- "js/src/tender_fallback"
- ],
"mathjax": "//cdn.mathjax.org/mathjax/2.4-latest/MathJax.js?config=TeX-MML-AM_HTMLorMML-full&delayStartupUntil=configured",
"youtube": [
// youtube URL does not end in ".js". We add "?noext" to the path so
@@ -172,9 +164,6 @@ require.config({
deps: ["backbone"],
exports: "Backbone.Paginator"
},
- "tender": {
- exports: 'Tender'
- },
"youtube": {
exports: "YT"
},
diff --git a/cms/static/coffee/spec/main.coffee b/cms/static/coffee/spec/main.coffee
index 0fcf7f6e2e..5454bea202 100644
--- a/cms/static/coffee/spec/main.coffee
+++ b/cms/static/coffee/spec/main.coffee
@@ -53,7 +53,6 @@ requirejs.config({
"mathjax": "//cdn.mathjax.org/mathjax/2.4-latest/MathJax.js?config=TeX-MML-AM_HTMLorMML-full&delayStartupUntil=configured",
"youtube": "//www.youtube.com/player_api?noext",
- "tender": "//api.tenderapp.com/tender_widget",
"coffee/src/ajax_prefix": "xmodule_js/common_static/coffee/src/ajax_prefix",
"js/spec/test_utils": "js/spec/test_utils",
diff --git a/cms/static/coffee/spec/main_squire.coffee b/cms/static/coffee/spec/main_squire.coffee
index 1feee91414..866e8d1a12 100644
--- a/cms/static/coffee/spec/main_squire.coffee
+++ b/cms/static/coffee/spec/main_squire.coffee
@@ -44,7 +44,6 @@ requirejs.config({
"mathjax": "//cdn.mathjax.org/mathjax/2.4-latest/MathJax.js?config=TeX-MML-AM_HTMLorMML-full&delayStartupUntil=configured",
"youtube": "//www.youtube.com/player_api?noext",
- "tender": "//api.tenderapp.com/tender_widget.js"
"coffee/src/ajax_prefix": "xmodule_js/common_static/coffee/src/ajax_prefix"
}
diff --git a/cms/static/js/base.js b/cms/static/js/base.js
index 5d937ef83f..4ab1c9a505 100644
--- a/cms/static/js/base.js
+++ b/cms/static/js/base.js
@@ -61,9 +61,6 @@ domReady(function() {
// general link management - smooth scrolling page links
$('a[rel*="view"][href^="#"]').bind('click', smoothScrollLink);
- // tender feedback window scrolling
- $('a.show-tender').bind('click', smoothScrollTop);
-
IframeUtils.iframeBinding();
// disable ajax caching in IE so that backbone fetches work
diff --git a/cms/static/sass/_build.scss b/cms/static/sass/_build.scss
index 303861279e..2253926702 100644
--- a/cms/static/sass/_build.scss
+++ b/cms/static/sass/_build.scss
@@ -37,7 +37,6 @@
@import 'elements/header';
@import 'elements/footer';
@import 'elements/sock';
-@import 'elements/tender-widget';
@import 'elements/system-feedback'; // alerts, notifications, states
@import 'elements/system-help'; // help UI
@import 'elements/modal'; // interstitial UI, dialogs, modal windows
diff --git a/cms/static/sass/elements/_sock.scss b/cms/static/sass/elements/_sock.scss
index 92e2fa9bb9..4ed0e06f69 100644
--- a/cms/static/sass/elements/_sock.scss
+++ b/cms/static/sass/elements/_sock.scss
@@ -86,6 +86,7 @@
.action-item {
@include float(left);
@include margin-right($baseline/2);
+ margin-bottom: ($baseline/2);
&:last-child {
@include margin-right(0);
diff --git a/cms/static/sass/elements/_tender-widget.scss b/cms/static/sass/elements/_tender-widget.scss
deleted file mode 100644
index 61d968c88e..0000000000
--- a/cms/static/sass/elements/_tender-widget.scss
+++ /dev/null
@@ -1,273 +0,0 @@
-// tender help/support widget
-// ====================
-
-// UI: hiding the default tender help "tag" element
-#tender_toggler {
- display: none;
-}
-
-#tender_frame, #tender_window {
- background-image: none !important;
- background: none;
-}
-
-#tender_window {
- border-radius: 3px;
- box-shadow: 0 2px 3px $shadow;
- height: ($baseline*35) !important;
- background: $white !important;
- border: 2px solid $blue;
-}
-
-#tender_window {
- padding: 0 !important;
-}
-
-#tender_frame {
- background: $white;
-}
-
-#tender_closer {
- color: $white-t2 !important;
- text-transform: uppercase;
- top: 16px !important;
-
- &:hover {
- color: $white !important;
- }
-}
-
-// ====================
-
-// tender style overrides - not rendered through here, but an archive is needed
-#tender_frame iframe html {
- font-size: 62.5%;
-}
-
-.widget-layout {
- font-family: 'Open Sans', sans-serif;
-}
-
-.widget-layout .search,
-.widget-layout .tabs,
-.widget-layout .footer,
-.widget-layout .header h1 a {
- display: none;
-}
-
-.widget-layout .header {
- background: rgb(0, 159, 230);
- padding: ($baseline/2) $baseline;
-}
-
-.widget-layout h1, .widget-layout h2, .widget-layout h3, .widget-layout h4, .widget-layout h5, .widget-layout h6, .widget-layout label {
- @extend %t-strong;
-}
-
-.widget-layout .header h1 {
- @extend %t-title4;
-}
-
-.widget-layout .content {
- overflow: auto;
- height: auto !important;
- padding: 20px;
-}
-
-.widget-layout .flash {
- margin: -10px 0 15px 0;
- padding: 10px 20px !important;
- background-image: none !important;
-}
-
-.widget-layout .flash-error {
- background: rgb(178, 6, 16) !important;
- color: rgb(255,255,255) !important;
-}
-
-.widget-layout label {
- @extend %t-copy-sub1;
- @extend %t-strong;
- margin-bottom: ($baseline/4);
- color: #4c4c4c;
-}
-
-.widget-layout input[type="text"], .widget-layout textarea {
- @extend %t-copy-base;
- padding: 10px;
- color: rgb(0,0,0) !important;
- border: 1px solid #b0b6c2;
- border-radius: 2px;
- background-color: #edf1f5;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #edf1f5),color-stop(100%, #fdfdfe));
- background-image: -webkit-linear-gradient(top, #edf1f5,#fdfdfe);
- background-image: -moz-linear-gradient(top, #edf1f5,#fdfdfe);
- background-image: -ms-linear-gradient(top, #edf1f5,#fdfdfe);
- background-image: -o-linear-gradient(top, #edf1f5,#fdfdfe);
- background-image: linear-gradient(top, #edf1f5,#fdfdfe);
- background-color: #edf1f5;
- -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1) inset;
- -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.1) inset;
- box-shadow: 0 1px 2px rgba(0,0,0,0.1) inset;
-}
-
-.widget-layout input[type="text"]:focus, .widget-layout textarea:focus {
- background-color: #fffcf1;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fffcf1),color-stop(100%, #fffefd));
- background-image: -webkit-linear-gradient(top, #fffcf1,#fffefd);
- background-image: -moz-linear-gradient(top, #fffcf1,#fffefd);
- background-image: -ms-linear-gradient(top, #fffcf1,#fffefd);
- background-image: -o-linear-gradient(top, #fffcf1,#fffefd);
- background-image: linear-gradient(top, #fffcf1,#fffefd);
- outline: 0;
-}
-
-.widget-layout textarea {
- width: 97%;
-}
-
-.widget-layout p.note {
- text-align: right !important;
- display: inline-block !important;
- position: absolute !important;
- right: -130px !important;
- top: -5px !important;
- font-size: 13px !important;
- opacity: 0.80;
-}
-
-.widget-layout .form-actions {
- margin: 15px 0;
- border: none;
- padding: 0;
-}
-
-.widget-layout dl.form {
- float: none;
- width: 100%;
- border-bottom: 1px solid $gray-l5;
- margin-bottom: ($baseline/2);
- padding-bottom: ($baseline/2);
-}
-
-.widget-layout dl.form:last-child {
- border: none;
- padding-bottom: 0;
- margin-bottom: $baseline;
-}
-
-.widget-layout dl.form dt, .widget-layout dl.form dd {
- display: inline-block;
- vertical-align: middle;
-}
-
-.widget-layout dl.form dt {
- margin-right: ($baseline*0.75);
- width: 70px;
-}
-
-.widget-layout dl.form dd {
- width: 65%;
- position: relative;
-}
-
-// specific elements
-.widget-layout #discussion_body {
-
-}
-
-.widget-layout #discussion_body:before {
- @extend %t-copy-sub1;
- @extend %t-strong;
- content: "What Question or Feedback Would You Like to Share?";
- display: block;
- margin-bottom: ($baseline/4);
- color: #4c4c4c;
-}
-
-
-.widget-layout dl#brain_buster_captcha {
- float: none;
- width: 100%;
- border-top: 1px solid $gray-l5;
- margin-top: ($baseline/2);
- padding-top: ($baseline/2);
-}
-
-.widget-layout dl#brain_buster_captcha dd {
- display: block !important;
-}
-
-.widget-layout dl#brain_buster_captcha #captcha_answer {
- border-color: #333;
-}
-
-.widget-layout dl#brain_buster_captcha dd label {
- @extend %t-strong;
- display: block;
- margin: 0 15px 5px 0 !important;
-}
-
-.widget-layout dl#brain_buster_captcha dd #captcha_answer {
- display: block;
- width: 97%;
-}
-
-.widget-layout .form-actions .btn-post_topic {
- @extend %t-copy-base;
- @extend %t-strong;
- display: block;
- width: 100%;
- height: auto !important;
- -webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.3) inset,0 0 0 $transparent;
- -moz-box-shadow: 0 1px 0 rgba(255,255,255,0.3) inset,0 0 0 $transparent;
- box-shadow: 0 1px 0 rgba(255,255,255,0.3) inset,0 0 0 $transparent;
- -webkit-transition-property: background-color,0.15s;
- -moz-transition-property: background-color,0.15s;
- -ms-transition-property: background-color,0.15s;
- -o-transition-property: background-color,0.15s;
- transition-property: background-color,0.15s;
- -webkit-transition-duration: box-shadow,0.15s;
- -moz-transition-duration: box-shadow,0.15s;
- -ms-transition-duration: box-shadow,0.15s;
- -o-transition-duration: box-shadow,0.15s;
- transition-duration: box-shadow,0.15s;
- -webkit-transition-timing-function: ease-out;
- -moz-transition-timing-function: ease-out;
- -ms-transition-timing-function: ease-out;
- -o-transition-timing-function: ease-out;
- transition-timing-function: ease-out;
- -webkit-transition-delay: 0;
- -moz-transition-delay: 0;
- -ms-transition-delay: 0;
- -o-transition-delay: 0;
- transition-delay: 0;
- border: 1px solid #34854c;
- border-radius: 3px;
- background-color: rgba(255,255,255,0.3);
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(255,255,255,0.3)),color-stop(100%, rgba(255,255,255,0)));
- background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.3),rgba(255,255,255,0));
- background-image: -moz-linear-gradient(top, rgba(255,255,255,0.3),rgba(255,255,255,0));
- background-image: -ms-linear-gradient(top, rgba(255,255,255,0.3),rgba(255,255,255,0));
- background-image: -o-linear-gradient(top, rgba(255,255,255,0.3),rgba(255,255,255,0));
- background-image: linear-gradient(top, rgba(255,255,255,0.3),rgba(255,255,255,0));
- background-color: #25b85a;
- -webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.3) inset;
- -moz-box-shadow: 0 1px 0 rgba(255,255,255,0.3) inset;
- box-shadow: 0 1px 0 rgba(255,255,255,0.3) inset;
- color: $white;
- text-align: center;
- margin-top: $baseline;
- padding: ($baseline/2) $baseline;
-}
-
-.widget-layout .form-actions #private-discussion-opt {
- float: none;
- text-align: left;
- margin: 0 0 15px 0;
-}
-
-.widget-layout .form-actions .btn-post_topic:hover, .widget-layout .form-actions .btn-post_topic:active {
- background-color: #16ca57;
- color: $white;
-}
diff --git a/cms/templates/activation_invalid.html b/cms/templates/activation_invalid.html
index 60a7954a56..fd9e5a9e5f 100644
--- a/cms/templates/activation_invalid.html
+++ b/cms/templates/activation_invalid.html
@@ -24,16 +24,6 @@
)}
-
-
diff --git a/cms/templates/base.html b/cms/templates/base.html
index 7d8cda30da..eca989ad37 100644
--- a/cms/templates/base.html
+++ b/cms/templates/base.html
@@ -42,7 +42,6 @@ import json
@@ -65,7 +64,6 @@ import json
<%include file="widgets/sock.html" args="online_help_token=online_help_token" />
% endif
<%include file="widgets/footer.html" />
- <%include file="widgets/tender.html" />
diff --git a/cms/templates/error.html b/cms/templates/error.html
index 99191a3d4d..cebe726544 100644
--- a/cms/templates/error.html
+++ b/cms/templates/error.html
@@ -14,15 +14,8 @@ from django.conf import settings
%block>
<%!
-if settings.TENDER_DOMAIN:
- help_link_start = ''.format(
- domain=settings.TENDER_DOMAIN,
- title=_("Use our feedback tool, Tender, to share your feedback")
- ),
- help_link_end = ' '
-else:
- help_link_start = ''.format(email=settings.TECH_SUPPORT_EMAIL)
- help_link_end = ' '
+help_link_start = ''.format(email=settings.TECH_SUPPORT_EMAIL)
+help_link_end = ' '
%>
<%block name="content">
diff --git a/cms/templates/index.html b/cms/templates/index.html
index 92efdd0d81..162e95a4d5 100644
--- a/cms/templates/index.html
+++ b/cms/templates/index.html
@@ -479,13 +479,6 @@
${_("Getting Started with {studio_name}").format(studio_name=settings.STUDIO_NAME)}
- % if settings.TENDER_DOMAIN:
-
-
- ${_("Request help with {studio_name}").format(studio_name=settings.STUDIO_NAME)}
-
-
- % endif
@@ -513,14 +506,8 @@
<%!
from django.conf import settings
-if settings.TENDER_DOMAIN:
- help_link_start = ''.format(
- domain=settings.TENDER_DOMAIN,
- )
- help_link_end = ' '
-else:
- help_link_start = ''.format(email=settings.TECH_SUPPORT_EMAIL)
- help_link_end = ' '
+help_link_start = ''.format(email=settings.TECH_SUPPORT_EMAIL)
+help_link_end = ' '
%>
${_("Your request to author courses in {studio_name} has been denied. Please {link_start}contact {platform_name} Staff with further questions{link_end}.").format(
studio_name=settings.STUDIO_NAME,
@@ -556,16 +543,6 @@ else:
diff --git a/cms/templates/login.html b/cms/templates/login.html
index 0a2e036654..5e99961f63 100644
--- a/cms/templates/login.html
+++ b/cms/templates/login.html
@@ -45,20 +45,6 @@ from django.utils.translation import ugettext as _
-
- % if settings.TENDER_DOMAIN:
-
- ${_("{studio_name} Support").format(studio_name=settings.STUDIO_SHORT_NAME)}
-
-
-
${_("Need Help?")}
-
${_('Having trouble with your account? Use {link_start}our support center{link_end} to look over self help steps, find solutions others have found to the same problem, or let us know of your issue.').format(
- link_start=''.format(domain=settings.TENDER_DOMAIN),
- link_end=' ',
- )}
-
-
- % endif
%block>
diff --git a/cms/templates/widgets/footer.html b/cms/templates/widgets/footer.html
index 4ddfd3763b..8c1e21fbbf 100644
--- a/cms/templates/widgets/footer.html
+++ b/cms/templates/widgets/footer.html
@@ -19,11 +19,6 @@ from django.core.urlresolvers import reverse
${_("Privacy Policy")}
- % if settings.TENDER_DOMAIN and user.is_authenticated():
-
- ${_("Contact Us")}
-
- % endif
diff --git a/cms/templates/widgets/sock.html b/cms/templates/widgets/sock.html
index 55f588d4e2..3d222fd9ed 100644
--- a/cms/templates/widgets/sock.html
+++ b/cms/templates/widgets/sock.html
@@ -20,46 +20,56 @@ from django.core.urlresolvers import reverse
-
${_("{studio_name} Documentation").format(studio_name=settings.STUDIO_NAME)}
+ <%!
+ from django.conf import settings
-
-
${_("You can click Help in the upper right corner of any page to get more information about the page you're on. You can also use the links below to download the Building and Running an {platform_name} Course PDF file, to go to the {platform_name} Author Support site, or to enroll in edX101.").format(platform_name=settings.PLATFORM_NAME)}
-
+ is_edx_domain = settings.FEATURES.get('IS_EDX_DOMAIN', False)
+ partner_email = settings.FEATURES.get('PARTNER_SUPPORT_EMAIL', '')
-
-
-
- % if settings.TENDER_DOMAIN:
-
-
${_("Request help with {studio_name}").format(studio_name=settings.STUDIO_NAME)}
-
-
-
${_("Have problems, questions, or suggestions about {studio_name}?").format(studio_name=settings.STUDIO_NAME)}
-
+ links = [{
+ 'href': 'http://docs.edx.org',
+ 'sr_mouseover_text': _('Access documentation on http://docs.edx.org'),
+ 'text': _('edX Documentation'),
+ 'condition': True
+ }, {
+ 'href': 'https://partners.edx.org',
+ 'sr_mouseover_text': _('Access Course Staff Support on the Partner Portal to submit or review support tickets'),
+ 'text': _('edX Partner Portal'),
+ 'condition': is_edx_domain
+ }, {
+ 'href': 'https://open.edx.org',
+ 'sr_mouseover_text': _('Access the Open edX Portal'),
+ 'text': _('Open edX Portal'),
+ 'condition': not is_edx_domain
+ }, {
+ 'href': 'https://www.edx.org/course/overview-creating-edx-course-edx-edx101#.VO4eaLPF-n1',
+ 'sr_mouseover_text': _('Enroll in edX101: Overview of Creating an edX Course'),
+ 'text': _('Enroll in edX101'),
+ 'condition': True
+ }, {
+ 'href': 'https://www.edx.org/course/creating-course-edx-studio-edx-studiox',
+ 'sr_mouseover_text': _('Enroll in StudioX: Creating a Course with edX Studio'),
+ 'text': _('Enroll in StudioX'),
+ 'condition': True
+ }, {
+ 'href': 'mailto:{email}'.format(email=partner_email),
+ 'sr_mouseover_text': _('Send an email to {email}').format(email=partner_email),
+ 'text': _('Contact Us'),
+ 'condition': 'PARTNER_SUPPORT_EMAIL' in settings.FEATURES
+ }]
+ %>
- % endif
diff --git a/cms/templates/widgets/tender.html b/cms/templates/widgets/tender.html
deleted file mode 100644
index bf8b9e20de..0000000000
--- a/cms/templates/widgets/tender.html
+++ /dev/null
@@ -1,20 +0,0 @@
-% if settings.TENDER_SUBDOMAIN and user.is_authenticated():
-
-% endif
diff --git a/common/static/js/src/tender_fallback.js b/common/static/js/src/tender_fallback.js
deleted file mode 100644
index 1df3b2f106..0000000000
--- a/common/static/js/src/tender_fallback.js
+++ /dev/null
@@ -1 +0,0 @@
-console.error("Can't load Tender -- anything that relies on it will fail");
diff --git a/common/test/acceptance/pages/studio/utils.py b/common/test/acceptance/pages/studio/utils.py
index cd2607af35..f3c28712dd 100644
--- a/common/test/acceptance/pages/studio/utils.py
+++ b/common/test/acceptance/pages/studio/utils.py
@@ -4,6 +4,7 @@ Utility methods useful for Studio page tests.
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from bok_choy.javascript import js_defined
+from bok_choy.promise import EmptyPromise
from ..common.utils import click_css, wait_for_notification
@@ -199,3 +200,17 @@ def verify_ordering(test_class, page, expected_orderings):
blocks_checked.add(expected)
break
test_class.assertEqual(len(blocks_checked), len(xblocks))
+
+
+def click_studio_help(page):
+ """Click the Studio help link in the page footer."""
+ page.q(css='.cta-show-sock').click()
+ EmptyPromise(
+ lambda: page.q(css='.support .list-actions a').results[0].text != '',
+ 'Support section opened'
+ ).fulfill()
+
+
+def studio_help_links(page):
+ """Return the list of Studio help links in the page footer."""
+ return page.q(css='.support .list-actions a').results
diff --git a/common/test/acceptance/tests/studio/test_studio_help.py b/common/test/acceptance/tests/studio/test_studio_help.py
new file mode 100644
index 0000000000..4561019396
--- /dev/null
+++ b/common/test/acceptance/tests/studio/test_studio_help.py
@@ -0,0 +1,46 @@
+"""
+Test the Studio help links.
+"""
+
+from .base_studio_test import StudioCourseTest
+from ...pages.studio.index import DashboardPage
+from ...pages.studio.utils import click_studio_help, studio_help_links
+
+
+class StudioHelpTest(StudioCourseTest):
+ """Tests for Studio help."""
+
+ def test_studio_help_links(self):
+ """Test that the help links are present and have the correct content."""
+ page = DashboardPage(self.browser)
+ page.visit()
+ click_studio_help(page)
+ links = studio_help_links(page)
+ expected_links = [{
+ 'href': u'http://docs.edx.org/',
+ 'text': u'edX Documentation',
+ 'sr_text': u'Access documentation on http://docs.edx.org'
+ }, {
+ 'href': u'https://open.edx.org/',
+ 'text': u'Open edX Portal',
+ 'sr_text': u'Access the Open edX Portal'
+ }, {
+ 'href': u'https://www.edx.org/course/overview-creating-edx-course-edx-edx101#.VO4eaLPF-n1',
+ 'text': u'Enroll in edX101',
+ 'sr_text': u'Enroll in edX101: Overview of Creating an edX Course'
+ }, {
+ 'href': u'https://www.edx.org/course/creating-course-edx-studio-edx-studiox',
+ 'text': u'Enroll in StudioX',
+ 'sr_text': u'Enroll in StudioX: Creating a Course with edX Studio'
+ }, {
+ 'href': u'mailto:partner-support@example.com',
+ 'text': u'Contact Us',
+ 'sr_text': 'Send an email to partner-support@example.com'
+ }]
+ for expected, actual in zip(expected_links, links):
+ self.assertEqual(expected['href'], actual.get_attribute('href'))
+ self.assertEqual(expected['text'], actual.text)
+ self.assertEqual(
+ expected['sr_text'],
+ actual.find_element_by_xpath('following-sibling::span').text
+ )
diff --git a/lms/static/js/spec/main.js b/lms/static/js/spec/main.js
index 9fac876357..199d7f5acd 100644
--- a/lms/static/js/spec/main.js
+++ b/lms/static/js/spec/main.js
@@ -50,7 +50,6 @@
'domReady': 'xmodule_js/common_static/js/vendor/domReady',
'mathjax': '//cdn.mathjax.org/mathjax/2.4-latest/MathJax.js?config=TeX-MML-AM_HTMLorMML-full&delayStartupUntil=configured',
'youtube': '//www.youtube.com/player_api?noext',
- 'tender': '//api.tenderapp.com/tender_widget',
'coffee/src/ajax_prefix': 'xmodule_js/common_static/coffee/src/ajax_prefix',
'coffee/src/instructor_dashboard/student_admin': 'coffee/src/instructor_dashboard/student_admin',
'xmodule_js/common_static/js/test/add_ajax_prefix': 'xmodule_js/common_static/js/test/add_ajax_prefix',