Add mktg links override capability
This commit adds a feature that allows overriding any marketing URL, either by configuration on lms.env.json or SiteConfiguration, regardless if a marketing website is set up. The links can be set by passing MKTG_URL_OVERRIDES to either `lms.env.json` or `SiteConfiguration`.
This commit is contained in:
@@ -1443,6 +1443,7 @@ EDXMKTG_USER_INFO_COOKIE_NAME = 'edx-user-info'
|
||||
EDXMKTG_USER_INFO_COOKIE_VERSION = 1
|
||||
|
||||
MKTG_URLS = {}
|
||||
MKTG_URL_OVERRIDES = {}
|
||||
MKTG_URL_LINK_MAP = {
|
||||
|
||||
}
|
||||
|
||||
@@ -258,6 +258,7 @@ ADMINS = ENV_TOKENS.get('ADMINS', ADMINS)
|
||||
SERVER_EMAIL = ENV_TOKENS.get('SERVER_EMAIL', SERVER_EMAIL)
|
||||
MKTG_URLS = ENV_TOKENS.get('MKTG_URLS', MKTG_URLS)
|
||||
MKTG_URL_LINK_MAP.update(ENV_TOKENS.get('MKTG_URL_LINK_MAP', {}))
|
||||
MKTG_URL_OVERRIDES.update(ENV_TOKENS.get('MKTG_URL_OVERRIDES', MKTG_URL_OVERRIDES))
|
||||
TECH_SUPPORT_EMAIL = ENV_TOKENS.get('TECH_SUPPORT_EMAIL', TECH_SUPPORT_EMAIL)
|
||||
|
||||
for name, value in ENV_TOKENS.get("CODE_JAIL", {}).items():
|
||||
|
||||
@@ -21,6 +21,8 @@ from django.http import HttpResponse
|
||||
from django.template import engines
|
||||
from django.urls import reverse
|
||||
from six.moves.urllib.parse import urljoin
|
||||
from django.core.validators import URLValidator
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
|
||||
from openedx.core.djangoapps.theming.helpers import is_request_in_themed_site
|
||||
@@ -50,6 +52,20 @@ def marketing_link(name):
|
||||
'MKTG_URLS',
|
||||
settings.MKTG_URLS
|
||||
)
|
||||
marketing_url_overrides = configuration_helpers.get_value(
|
||||
'MKTG_URL_OVERRIDES',
|
||||
settings.MKTG_URL_OVERRIDES
|
||||
)
|
||||
|
||||
if name in marketing_url_overrides:
|
||||
validate = URLValidator()
|
||||
url = marketing_url_overrides.get(name)
|
||||
try:
|
||||
validate(url)
|
||||
return url
|
||||
except ValidationError as err:
|
||||
log.debug("Invalid link set for link %s: %s", name, err)
|
||||
return '#'
|
||||
|
||||
if enable_mktg_site and name in marketing_urls:
|
||||
# special case for when we only want the root marketing URL
|
||||
|
||||
@@ -72,6 +72,32 @@ class ShortcutsTests(UrlResetMixin, TestCase):
|
||||
# return any cms url name
|
||||
return 'organizations'
|
||||
|
||||
@override_settings(MKTG_URLS={'ROOT': 'https://dummy-root', 'TOS': '/tos'})
|
||||
@override_settings(MKTG_URL_OVERRIDES={'TOS': 'https://edx.org'})
|
||||
def test_override_marketing_link_valid(self):
|
||||
expected_link = 'https://edx.org'
|
||||
# test marketing site on
|
||||
with patch.dict('django.conf.settings.FEATURES', {'ENABLE_MKTG_SITE': True}):
|
||||
link = marketing_link('TOS')
|
||||
self.assertEquals(link, expected_link)
|
||||
# test marketing site off
|
||||
with patch.dict('django.conf.settings.FEATURES', {'ENABLE_MKTG_SITE': False}):
|
||||
link = marketing_link('TOS')
|
||||
self.assertEquals(link, expected_link)
|
||||
|
||||
@override_settings(MKTG_URLS={'ROOT': 'https://dummy-root', 'TOS': '/tos'})
|
||||
@override_settings(MKTG_URL_OVERRIDES={'TOS': '123456'})
|
||||
def test_override_marketing_link_invalid(self):
|
||||
expected_link = '#'
|
||||
# test marketing site on
|
||||
with patch.dict('django.conf.settings.FEATURES', {'ENABLE_MKTG_SITE': True}):
|
||||
link = marketing_link('TOS')
|
||||
self.assertEquals(link, expected_link)
|
||||
# test marketing site off
|
||||
with patch.dict('django.conf.settings.FEATURES', {'ENABLE_MKTG_SITE': False}):
|
||||
link = marketing_link('TOS')
|
||||
self.assertEquals(link, expected_link)
|
||||
|
||||
|
||||
class AddLookupTests(TestCase):
|
||||
"""
|
||||
|
||||
@@ -2562,6 +2562,7 @@ EDXMKTG_USER_INFO_COOKIE_NAME = 'edx-user-info'
|
||||
EDXMKTG_USER_INFO_COOKIE_VERSION = 1
|
||||
|
||||
MKTG_URLS = {}
|
||||
MKTG_URL_OVERRIDES = {}
|
||||
MKTG_URL_LINK_MAP = {
|
||||
'ABOUT': 'about',
|
||||
'CONTACT': 'contact',
|
||||
|
||||
@@ -342,12 +342,13 @@ COMPREHENSIVE_THEME_LOCALE_PATHS = ENV_TOKENS.get('COMPREHENSIVE_THEME_LOCALE_PA
|
||||
DEFAULT_SITE_THEME = ENV_TOKENS.get('DEFAULT_SITE_THEME', DEFAULT_SITE_THEME)
|
||||
ENABLE_COMPREHENSIVE_THEMING = ENV_TOKENS.get('ENABLE_COMPREHENSIVE_THEMING', ENABLE_COMPREHENSIVE_THEMING)
|
||||
|
||||
# Marketing link overrides
|
||||
MKTG_URL_LINK_MAP.update(ENV_TOKENS.get('MKTG_URL_LINK_MAP', {}))
|
||||
ENTERPRISE_MARKETING_FOOTER_QUERY_PARAMS = ENV_TOKENS.get(
|
||||
'ENTERPRISE_MARKETING_FOOTER_QUERY_PARAMS',
|
||||
ENTERPRISE_MARKETING_FOOTER_QUERY_PARAMS
|
||||
)
|
||||
# Marketing link overrides
|
||||
MKTG_URL_OVERRIDES.update(ENV_TOKENS.get('MKTG_URL_OVERRIDES', MKTG_URL_OVERRIDES))
|
||||
|
||||
# Intentional defaults.
|
||||
SUPPORT_SITE_LINK = ENV_TOKENS.get('SUPPORT_SITE_LINK', SUPPORT_SITE_LINK)
|
||||
|
||||
Reference in New Issue
Block a user