diff --git a/frontend_tests/node_tests/settings_data.js b/frontend_tests/node_tests/settings_data.js index 64d83443c6..3c8253ba8d 100644 --- a/frontend_tests/node_tests/settings_data.js +++ b/frontend_tests/node_tests/settings_data.js @@ -45,6 +45,17 @@ run_test("email_for_user_settings", () => { page_params.realm_email_address_visibility = settings_config.email_address_visibility_values.everyone.code; assert.equal(email(isaac), isaac.email); + + page_params.realm_email_address_visibility = + settings_config.email_address_visibility_values.moderators.code; + assert.equal(email(isaac), undefined); + + page_params.is_moderator = true; + assert.equal(email(isaac), isaac.delivery_email); + + page_params.is_moderator = false; + page_params.is_admin = true; + assert.equal(email(isaac), isaac.delivery_email); }); run_test("user_can_change_name", () => { diff --git a/static/js/settings_config.js b/static/js/settings_config.js index 56eb360f61..ed5578a393 100644 --- a/static/js/settings_config.js +++ b/static/js/settings_config.js @@ -93,6 +93,10 @@ export const email_address_visibility_values = { // code: 2, // description: $t({defaultMessage: "Members and admins"}), // }, + moderators: { + code: 5, + description: $t({defaultMessage: "Admins and moderators"}), + }, admins_only: { code: 3, description: $t({defaultMessage: "Admins only"}), diff --git a/static/js/settings_data.js b/static/js/settings_data.js index 12b9efb42c..18daaa3f3e 100644 --- a/static/js/settings_data.js +++ b/static/js/settings_data.js @@ -12,6 +12,29 @@ import * as settings_config from "./settings_config"; about page_params and settings_config details. */ +function user_can_access_delivery_email() { + // This function checks whether the current user should expect to + // see .delivery_email fields on user objects that it can access. + // + // If false, either everyone has access to emails (and there is no + // delivery_email field for anyone) or this user does not have + // access to emails (and this client will never receive a user + // object with a delivery_email field). + if ( + page_params.realm_email_address_visibility === + settings_config.email_address_visibility_values.admins_only.code + ) { + return page_params.is_admin; + } + if ( + page_params.realm_email_address_visibility === + settings_config.email_address_visibility_values.moderators.code + ) { + return page_params.is_admin || page_params.is_moderator; + } + return undefined; +} + export function show_email() { if ( page_params.realm_email_address_visibility === @@ -19,13 +42,7 @@ export function show_email() { ) { return true; } - if ( - page_params.realm_email_address_visibility === - settings_config.email_address_visibility_values.admins_only.code - ) { - return page_params.is_admin; - } - return undefined; + return user_can_access_delivery_email(); } export function email_for_user_settings(person) { @@ -33,12 +50,7 @@ export function email_for_user_settings(person) { return undefined; } - if ( - page_params.is_admin && - person.delivery_email && - page_params.realm_email_address_visibility === - settings_config.email_address_visibility_values.admins_only.code - ) { + if (person.delivery_email && user_can_access_delivery_email()) { return person.delivery_email; }