Commit 0d9146a2 by Douglas Hall Committed by GitHub

Merge pull request #15196 from open-craft/uman/OC-2662

[ENT-370] Update Support Link on Sign In Page
parents c140ef32 13ac08a4
...@@ -94,6 +94,7 @@ from lms.envs.common import ( ...@@ -94,6 +94,7 @@ from lms.envs.common import (
HELP_TOKENS_BOOKS, HELP_TOKENS_BOOKS,
SUPPORT_SITE_LINK, SUPPORT_SITE_LINK,
PASSWORD_RESET_SUPPORT_LINK,
ACTIVATION_EMAIL_SUPPORT_LINK, ACTIVATION_EMAIL_SUPPORT_LINK,
CONTACT_EMAIL, CONTACT_EMAIL,
......
...@@ -128,6 +128,9 @@ def login_and_registration_form(request, initial_mode="login"): ...@@ -128,6 +128,9 @@ def login_and_registration_form(request, initial_mode="login"):
'third_party_auth_hint': third_party_auth_hint or '', 'third_party_auth_hint': third_party_auth_hint or '',
'platform_name': configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME), 'platform_name': configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME),
'support_link': configuration_helpers.get_value('SUPPORT_SITE_LINK', settings.SUPPORT_SITE_LINK), 'support_link': configuration_helpers.get_value('SUPPORT_SITE_LINK', settings.SUPPORT_SITE_LINK),
'password_reset_support_link': configuration_helpers.get_value(
'PASSWORD_RESET_SUPPORT_LINK', settings.PASSWORD_RESET_SUPPORT_LINK
) or settings.SUPPORT_SITE_LINK,
'account_activation_messages': account_activation_messages, 'account_activation_messages': account_activation_messages,
# Include form descriptions retrieved from the user API. # Include form descriptions retrieved from the user API.
...@@ -555,6 +558,9 @@ def account_settings_context(request): ...@@ -555,6 +558,9 @@ def account_settings_context(request):
} }
}, },
'platform_name': configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME), 'platform_name': configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME),
'password_reset_support_link': configuration_helpers.get_value(
'PASSWORD_RESET_SUPPORT_LINK', settings.PASSWORD_RESET_SUPPORT_LINK
) or settings.SUPPORT_SITE_LINK,
'user_accounts_api_url': reverse("accounts_api", kwargs={'username': user.username}), 'user_accounts_api_url': reverse("accounts_api", kwargs={'username': user.username}),
'user_preferences_api_url': reverse('preferences_api', kwargs={'username': user.username}), 'user_preferences_api_url': reverse('preferences_api', kwargs={'username': user.username}),
'disable_courseware_js': True, 'disable_courseware_js': True,
......
...@@ -309,9 +309,11 @@ ENABLE_COMPREHENSIVE_THEMING = ENV_TOKENS.get('ENABLE_COMPREHENSIVE_THEMING', EN ...@@ -309,9 +309,11 @@ ENABLE_COMPREHENSIVE_THEMING = ENV_TOKENS.get('ENABLE_COMPREHENSIVE_THEMING', EN
# Marketing link overrides # Marketing link overrides
MKTG_URL_LINK_MAP.update(ENV_TOKENS.get('MKTG_URL_LINK_MAP', {})) MKTG_URL_LINK_MAP.update(ENV_TOKENS.get('MKTG_URL_LINK_MAP', {}))
# Intentional defaults.
SUPPORT_SITE_LINK = ENV_TOKENS.get('SUPPORT_SITE_LINK', SUPPORT_SITE_LINK) SUPPORT_SITE_LINK = ENV_TOKENS.get('SUPPORT_SITE_LINK', SUPPORT_SITE_LINK)
PASSWORD_RESET_SUPPORT_LINK = ENV_TOKENS.get('PASSWORD_RESET_SUPPORT_LINK', SUPPORT_SITE_LINK)
ACTIVATION_EMAIL_SUPPORT_LINK = ENV_TOKENS.get( ACTIVATION_EMAIL_SUPPORT_LINK = ENV_TOKENS.get(
'ACTIVATION_EMAIL_SUPPORT_LINK', SUPPORT_SITE_LINK # Intentional default. 'ACTIVATION_EMAIL_SUPPORT_LINK', SUPPORT_SITE_LINK
) )
# Mobile store URL overrides # Mobile store URL overrides
......
...@@ -137,6 +137,7 @@ ...@@ -137,6 +137,7 @@
"SITE_NAME": "localhost:8003", "SITE_NAME": "localhost:8003",
"STATIC_URL_BASE": "/static/", "STATIC_URL_BASE": "/static/",
"SUPPORT_SITE_LINK": "https://support.example.com", "SUPPORT_SITE_LINK": "https://support.example.com",
"PASSWORD_RESET_SUPPORT_LINK": "https://support.example.com/password-reset-help.html",
"ACTIVATION_EMAIL_SUPPORT_LINK": "https://support.example.com/activation-email-help.html", "ACTIVATION_EMAIL_SUPPORT_LINK": "https://support.example.com/activation-email-help.html",
"SYSLOG_SERVER": "", "SYSLOG_SERVER": "",
"TECH_SUPPORT_EMAIL": "technical@example.com", "TECH_SUPPORT_EMAIL": "technical@example.com",
......
...@@ -2271,6 +2271,7 @@ MKTG_URL_LINK_MAP = { ...@@ -2271,6 +2271,7 @@ MKTG_URL_LINK_MAP = {
STATIC_TEMPLATE_VIEW_DEFAULT_FILE_EXTENSION = 'html' STATIC_TEMPLATE_VIEW_DEFAULT_FILE_EXTENSION = 'html'
SUPPORT_SITE_LINK = '' SUPPORT_SITE_LINK = ''
PASSWORD_RESET_SUPPORT_LINK = ''
ACTIVATION_EMAIL_SUPPORT_LINK = '' ACTIVATION_EMAIL_SUPPORT_LINK = ''
############################# SOCIAL MEDIA SHARING ############################# ############################# SOCIAL MEDIA SHARING #############################
......
...@@ -361,6 +361,7 @@ MKTG_URL_LINK_MAP = { ...@@ -361,6 +361,7 @@ MKTG_URL_LINK_MAP = {
} }
SUPPORT_SITE_LINK = 'https://support.example.com' SUPPORT_SITE_LINK = 'https://support.example.com'
PASSWORD_RESET_SUPPORT_LINK = 'https://support.example.com/password-reset-help.html'
ACTIVATION_EMAIL_SUPPORT_LINK = 'https://support.example.com/activation-email-help.html' ACTIVATION_EMAIL_SUPPORT_LINK = 'https://support.example.com/activation-email-help.html'
############################ STATIC FILES ############################# ############################ STATIC FILES #############################
......
...@@ -14,50 +14,15 @@ define(['backbone', ...@@ -14,50 +14,15 @@ define(['backbone',
'use strict'; 'use strict';
describe('edx.user.AccountSettingsFactory', function() { describe('edx.user.AccountSettingsFactory', function() {
var FIELDS_DATA = {
'country': {
'options': Helpers.FIELD_OPTIONS
}, 'gender': {
'options': Helpers.FIELD_OPTIONS
}, 'language': {
'options': Helpers.FIELD_OPTIONS
}, 'level_of_education': {
'options': Helpers.FIELD_OPTIONS
}, 'password': {
'url': '/password_reset'
}, 'year_of_birth': {
'options': Helpers.FIELD_OPTIONS
}, 'preferred_language': {
'options': Helpers.FIELD_OPTIONS
}, 'time_zone': {
'options': Helpers.FIELD_OPTIONS
}
};
var AUTH_DATA = {
'providers': [
{
'id': 'oa2-network1',
'name': 'Network1',
'connected': true,
'accepts_logins': 'true',
'connect_url': 'yetanother1.com/auth/connect',
'disconnect_url': 'yetanother1.com/auth/disconnect'
},
{
'id': 'oa2-network2',
'name': 'Network2',
'connected': true,
'accepts_logins': 'true',
'connect_url': 'yetanother2.com/auth/connect',
'disconnect_url': 'yetanother2.com/auth/disconnect'
}
]
};
var createAccountSettingsPage = function() { var createAccountSettingsPage = function() {
var context = AccountSettingsPage( var context = AccountSettingsPage(
FIELDS_DATA, [], AUTH_DATA, Helpers.USER_ACCOUNTS_API_URL, Helpers.USER_PREFERENCES_API_URL, 'edX' Helpers.FIELDS_DATA,
[],
Helpers.AUTH_DATA,
Helpers.PASSWORD_RESET_SUPPORT_LINK,
Helpers.USER_ACCOUNTS_API_URL,
Helpers.USER_PREFERENCES_API_URL,
Helpers.PLATFORM_NAME
); );
return context.accountSettingsView; return context.accountSettingsView;
}; };
......
...@@ -7,12 +7,63 @@ define(['underscore'], function(_) { ...@@ -7,12 +7,63 @@ define(['underscore'], function(_) {
var IMAGE_UPLOAD_API_URL = '/api/profile_images/v0/staff/upload'; var IMAGE_UPLOAD_API_URL = '/api/profile_images/v0/staff/upload';
var IMAGE_REMOVE_API_URL = '/api/profile_images/v0/staff/remove'; var IMAGE_REMOVE_API_URL = '/api/profile_images/v0/staff/remove';
var FIND_COURSES_URL = '/courses'; var FIND_COURSES_URL = '/courses';
var PASSWORD_RESET_SUPPORT_LINK = 'https://support.edx.org/hc/en-us/articles/206212088-What-if-I-did-not-receive-a-password-reset-message-'; // eslint-disable-line max-len
var PLATFORM_NAME = 'edX';
var PROFILE_IMAGE = { var PROFILE_IMAGE = {
image_url_large: '/media/profile-images/image.jpg', image_url_large: '/media/profile-images/image.jpg',
has_image: true has_image: true
}; };
var FIELD_OPTIONS = [
['0', 'Option 0'],
['1', 'Option 1'],
['2', 'Option 2'],
['3', 'Option 3']
];
var TIME_ZONE_RESPONSE = [{
time_zone: 'America/Guyana',
description: 'America/Guyana (ECT, UTC-0500)'
}];
var FIELDS_DATA = {
country: {
options: FIELD_OPTIONS
}, gender: {
options: FIELD_OPTIONS
}, language: {
options: FIELD_OPTIONS
}, level_of_education: {
options: FIELD_OPTIONS
}, password: {
url: '/password_reset'
}, year_of_birth: {
options: FIELD_OPTIONS
}, preferred_language: {
options: FIELD_OPTIONS
}, time_zone: {
options: FIELD_OPTIONS
}
};
var AUTH_DATA = {
providers: [
{
id: 'oa2-network1',
name: 'Network1',
connected: true,
accepts_logins: 'true',
connect_url: 'yetanother1.com/auth/connect',
disconnect_url: 'yetanother1.com/auth/disconnect'
},
{
id: 'oa2-network2',
name: 'Network2',
connected: true,
accepts_logins: 'true',
connect_url: 'yetanother2.com/auth/connect',
disconnect_url: 'yetanother2.com/auth/disconnect'
}
]
};
var IMAGE_MAX_BYTES = 1024 * 1024;
var IMAGE_MIN_BYTES = 100;
var DEFAULT_ACCOUNT_SETTINGS_DATA = { var DEFAULT_ACCOUNT_SETTINGS_DATA = {
username: 'student', username: 'student',
name: 'Student', name: 'Student',
...@@ -28,35 +79,19 @@ define(['underscore'], function(_) { ...@@ -28,35 +79,19 @@ define(['underscore'], function(_) {
profile_image: PROFILE_IMAGE, profile_image: PROFILE_IMAGE,
accomplishments_shared: false accomplishments_shared: false
}; };
var createAccountSettingsData = function(options) {
return _.extend(_.extend({}, DEFAULT_ACCOUNT_SETTINGS_DATA), options);
};
var DEFAULT_USER_PREFERENCES_DATA = { var DEFAULT_USER_PREFERENCES_DATA = {
'pref-lang': '2', 'pref-lang': '2',
'time_zone': null 'time_zone': null
}; };
var createAccountSettingsData = function(options) {
return _.extend(_.extend({}, DEFAULT_ACCOUNT_SETTINGS_DATA), options);
};
var createUserPreferencesData = function(options) { var createUserPreferencesData = function(options) {
return _.extend(_.extend({}, DEFAULT_USER_PREFERENCES_DATA), options); return _.extend(_.extend({}, DEFAULT_USER_PREFERENCES_DATA), options);
}; };
var FIELD_OPTIONS = [
['0', 'Option 0'],
['1', 'Option 1'],
['2', 'Option 2'],
['3', 'Option 3']
];
var TIME_ZONE_RESPONSE = [{
time_zone: 'America/Guyana',
description: 'America/Guyana (ECT, UTC-0500)'
}];
var IMAGE_MAX_BYTES = 1024 * 1024;
var IMAGE_MIN_BYTES = 100;
var expectLoadingIndicatorIsVisible = function(view, visible) { var expectLoadingIndicatorIsVisible = function(view, visible) {
if (visible) { if (visible) {
expect($('.ui-loading-indicator')).not.toHaveClass('is-hidden'); expect($('.ui-loading-indicator')).not.toHaveClass('is-hidden');
...@@ -88,10 +123,6 @@ define(['underscore'], function(_) { ...@@ -88,10 +123,6 @@ define(['underscore'], function(_) {
} }
}; };
var expectSettingsSectionsButNotFieldsToBeRendered = function(accountSettingsView) {
expectSettingsSectionsAndFieldsToBeRendered(accountSettingsView, false);
};
var expectSettingsSectionsAndFieldsToBeRendered = function(accountSettingsView, fieldsAreRendered) { var expectSettingsSectionsAndFieldsToBeRendered = function(accountSettingsView, fieldsAreRendered) {
var sectionsData = accountSettingsView.options.tabSections.aboutTabSections; var sectionsData = accountSettingsView.options.tabSections.aboutTabSections;
...@@ -99,7 +130,8 @@ define(['underscore'], function(_) { ...@@ -99,7 +130,8 @@ define(['underscore'], function(_) {
expect(sectionElements.length).toBe(sectionsData.length); expect(sectionElements.length).toBe(sectionsData.length);
_.each(sectionElements, function(sectionElement, sectionIndex) { _.each(sectionElements, function(sectionElement, sectionIndex) {
expect($(sectionElement).find('.section-header').text().trim()).toBe(sectionsData[sectionIndex].title); expect($(sectionElement).find('.section-header').text()
.trim()).toBe(sectionsData[sectionIndex].title);
var sectionFieldElements = $(sectionElement).find('.u-field'); var sectionFieldElements = $(sectionElement).find('.u-field');
...@@ -115,6 +147,10 @@ define(['underscore'], function(_) { ...@@ -115,6 +147,10 @@ define(['underscore'], function(_) {
}); });
}; };
var expectSettingsSectionsButNotFieldsToBeRendered = function(accountSettingsView) {
expectSettingsSectionsAndFieldsToBeRendered(accountSettingsView, false);
};
return { return {
USER_ACCOUNTS_API_URL: USER_ACCOUNTS_API_URL, USER_ACCOUNTS_API_URL: USER_ACCOUNTS_API_URL,
USER_PREFERENCES_API_URL: USER_PREFERENCES_API_URL, USER_PREFERENCES_API_URL: USER_PREFERENCES_API_URL,
...@@ -122,13 +158,17 @@ define(['underscore'], function(_) { ...@@ -122,13 +158,17 @@ define(['underscore'], function(_) {
FIND_COURSES_URL: FIND_COURSES_URL, FIND_COURSES_URL: FIND_COURSES_URL,
IMAGE_UPLOAD_API_URL: IMAGE_UPLOAD_API_URL, IMAGE_UPLOAD_API_URL: IMAGE_UPLOAD_API_URL,
IMAGE_REMOVE_API_URL: IMAGE_REMOVE_API_URL, IMAGE_REMOVE_API_URL: IMAGE_REMOVE_API_URL,
PASSWORD_RESET_SUPPORT_LINK: PASSWORD_RESET_SUPPORT_LINK,
PLATFORM_NAME: PLATFORM_NAME,
PROFILE_IMAGE: PROFILE_IMAGE,
FIELD_OPTIONS: FIELD_OPTIONS,
TIME_ZONE_RESPONSE: TIME_ZONE_RESPONSE,
FIELDS_DATA: FIELDS_DATA,
AUTH_DATA: AUTH_DATA,
IMAGE_MAX_BYTES: IMAGE_MAX_BYTES, IMAGE_MAX_BYTES: IMAGE_MAX_BYTES,
IMAGE_MIN_BYTES: IMAGE_MIN_BYTES, IMAGE_MIN_BYTES: IMAGE_MIN_BYTES,
PROFILE_IMAGE: PROFILE_IMAGE,
createAccountSettingsData: createAccountSettingsData, createAccountSettingsData: createAccountSettingsData,
createUserPreferencesData: createUserPreferencesData, createUserPreferencesData: createUserPreferencesData,
FIELD_OPTIONS: FIELD_OPTIONS,
TIME_ZONE_RESPONSE: TIME_ZONE_RESPONSE,
expectLoadingIndicatorIsVisible: expectLoadingIndicatorIsVisible, expectLoadingIndicatorIsVisible: expectLoadingIndicatorIsVisible,
expectLoadingErrorIsVisible: expectLoadingErrorIsVisible, expectLoadingErrorIsVisible: expectLoadingErrorIsVisible,
expectElementContainsField: expectElementContainsField, expectElementContainsField: expectElementContainsField,
......
...@@ -72,6 +72,7 @@ ...@@ -72,6 +72,7 @@
this.platformName = options.platform_name; this.platformName = options.platform_name;
this.supportURL = options.support_link; this.supportURL = options.support_link;
this.passwordResetSupportUrl = options.password_reset_support_link;
this.createAccountOption = options.account_creation_allowed; this.createAccountOption = options.account_creation_allowed;
// The login view listens for 'sync' events from the reset model // The login view listens for 'sync' events from the reset model
...@@ -129,6 +130,7 @@ ...@@ -129,6 +130,7 @@
accountActivationMessages: this.accountActivationMessages, accountActivationMessages: this.accountActivationMessages,
platformName: this.platformName, platformName: this.platformName,
supportURL: this.supportURL, supportURL: this.supportURL,
passwordResetSupportUrl: this.passwordResetSupportUrl,
createAccountOption: this.createAccountOption createAccountOption: this.createAccountOption
}); });
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
fieldsData, fieldsData,
ordersHistoryData, ordersHistoryData,
authData, authData,
passwordResetSupportUrl,
userAccountsApiUrl, userAccountsApiUrl,
userPreferencesApiUrl, userPreferencesApiUrl,
accountUserId, accountUserId,
...@@ -76,6 +77,7 @@ ...@@ -76,6 +77,7 @@
screenReaderTitle: gettext('Reset Your Password'), screenReaderTitle: gettext('Reset Your Password'),
valueAttribute: 'password', valueAttribute: 'password',
emailAttribute: 'email', emailAttribute: 'email',
passwordResetSupportUrl: passwordResetSupportUrl,
linkTitle: gettext('Reset Your Password'), linkTitle: gettext('Reset Your Password'),
linkHref: fieldsData.password.url, linkHref: fieldsData.password.url,
helpMessage: StringUtils.interpolate( helpMessage: StringUtils.interpolate(
...@@ -191,7 +193,7 @@ ...@@ -191,7 +193,7 @@
), ),
fields: _.map(authData.providers, function(provider) { fields: _.map(authData.providers, function(provider) {
return { return {
'view': new AccountSettingsFieldViews.AuthFieldView({ view: new AccountSettingsFieldViews.AuthFieldView({
title: provider.name, title: provider.name,
valueAttribute: 'auth-' + provider.id, valueAttribute: 'auth-' + provider.id,
helpMessage: '', helpMessage: '',
...@@ -208,10 +210,10 @@ ...@@ -208,10 +210,10 @@
ordersHistoryData.unshift( ordersHistoryData.unshift(
{ {
'title': gettext('ORDER NAME'), title: gettext('ORDER NAME'),
'order_date': gettext('ORDER PLACED'), order_date: gettext('ORDER PLACED'),
'price': gettext('TOTAL'), price: gettext('TOTAL'),
'number': gettext('ORDER NUMBER') number: gettext('ORDER NUMBER')
} }
); );
...@@ -228,7 +230,7 @@ ...@@ -228,7 +230,7 @@
orderNumber = 'orderId'; orderNumber = 'orderId';
} }
return { return {
'view': new AccountSettingsFieldViews.OrderHistoryFieldView({ view: new AccountSettingsFieldViews.OrderHistoryFieldView({
totalPrice: order.price, totalPrice: order.price,
orderId: order.number, orderId: order.number,
orderDate: order.order_date, orderDate: order.order_date,
......
...@@ -25,8 +25,7 @@ ...@@ -25,8 +25,7 @@
field_order_history_template, field_order_history_template,
StringUtils, StringUtils,
HtmlUtils HtmlUtils
) ) {
{
var AccountSettingsFieldViews = { var AccountSettingsFieldViews = {
ReadonlyFieldView: FieldViews.ReadonlyFieldView.extend({ ReadonlyFieldView: FieldViews.ReadonlyFieldView.extend({
fieldTemplate: field_readonly_account_template fieldTemplate: field_readonly_account_template
...@@ -44,7 +43,7 @@ ...@@ -44,7 +43,7 @@
this.indicators.success, this.indicators.success,
StringUtils.interpolate( StringUtils.interpolate(
gettext('We\'ve sent a confirmation message to {new_email_address}. Click the link in the message to update your email address.'), // eslint-disable-line max-len gettext('We\'ve sent a confirmation message to {new_email_address}. Click the link in the message to update your email address.'), // eslint-disable-line max-len
{'new_email_address': this.fieldValue()} {new_email_address: this.fieldValue()}
) )
); );
} }
...@@ -53,7 +52,7 @@ ...@@ -53,7 +52,7 @@
fieldTemplate: field_dropdown_account_template, fieldTemplate: field_dropdown_account_template,
saveSucceeded: function() { saveSucceeded: function() {
var data = { var data = {
'language': this.modelValue() language: this.modelValue()
}; };
var view = this; var view = this;
...@@ -189,9 +188,19 @@ ...@@ -189,9 +188,19 @@
successMessage: function() { successMessage: function() {
return HtmlUtils.joinHtml( return HtmlUtils.joinHtml(
this.indicators.success, this.indicators.success,
StringUtils.interpolate( HtmlUtils.interpolateHtml(
gettext('We\'ve sent a message to {email_address}. Click the link in the message to reset your password.'), // eslint-disable-line max-len gettext('We\'ve sent a message to {email}. Click the link in the message to reset your password. Didn\'t receive the message? Contact {anchorStart}technical support{anchorEnd}.'), // eslint-disable-line max-len
{'email_address': this.model.get(this.options.emailAttribute)} {
email: this.model.get(this.options.emailAttribute),
anchorStart: HtmlUtils.HTML(
StringUtils.interpolate(
'<a href="{passwordResetSupportUrl}">', {
passwordResetSupportUrl: this.options.passwordResetSupportUrl
}
)
),
anchorEnd: HtmlUtils.HTML('</a>')
}
) )
); );
} }
...@@ -209,7 +218,7 @@ ...@@ -209,7 +218,7 @@
saveValue: function() { saveValue: function() {
if (this.persistChanges === true) { if (this.persistChanges === true) {
var attributes = {}, var attributes = {},
value = this.fieldValue() ? [{'code': this.fieldValue()}] : []; value = this.fieldValue() ? [{code: this.fieldValue()}] : [];
attributes[this.options.valueAttribute] = value; attributes[this.options.valueAttribute] = value;
this.saveAttributes(attributes); this.saveAttributes(attributes);
} }
......
...@@ -41,6 +41,7 @@ from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_str ...@@ -41,6 +41,7 @@ from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_str
fieldsData, fieldsData,
ordersHistoryData, ordersHistoryData,
authData, authData,
'${ password_reset_support_link | n, js_escaped_string }',
'${ user_accounts_api_url | n, js_escaped_string }', '${ user_accounts_api_url | n, js_escaped_string }',
'${ user_preferences_api_url | n, js_escaped_string }', '${ user_preferences_api_url | n, js_escaped_string }',
${ user.id | n, dump_js_escaped_json }, ${ user.id | n, dump_js_escaped_json },
......
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