diff --git a/frontend_tests/node_tests/settings_data.js b/frontend_tests/node_tests/settings_data.js index 3a062dde7f..6bf4c2d1e5 100644 --- a/frontend_tests/node_tests/settings_data.js +++ b/frontend_tests/node_tests/settings_data.js @@ -259,3 +259,11 @@ run_test("using_dark_theme", () => { page_params.color_scheme = settings_config.color_scheme_values.day.code; assert.equal(settings_data.using_dark_theme(), false); }); + +run_test("user_can_invite_others_to_realm_nobody_case", () => { + page_params.is_admin = true; + page_params.is_guest = false; + page_params.realm_invite_to_realm_policy = + settings_config.invite_to_realm_policy_values.nobody.code; + assert.equal(settings_data.user_can_invite_others_to_realm(), false); +}); diff --git a/static/js/settings_config.js b/static/js/settings_config.js index 66084d0557..53a22c8489 100644 --- a/static/js/settings_config.js +++ b/static/js/settings_config.js @@ -130,6 +130,34 @@ export const common_policy_values = { }, }; +export const invite_to_realm_policy_values = { + nobody: { + order: 1, + code: 6, + description: $t({defaultMessage: "Nobody"}), + }, + by_admins_only: { + order: 2, + code: 2, + description: $t({defaultMessage: "Admins"}), + }, + by_moderators_only: { + order: 3, + code: 4, + description: $t({defaultMessage: "Admins and moderators"}), + }, + by_full_members: { + order: 4, + code: 3, + description: $t({defaultMessage: "Admins and full members"}), + }, + by_members: { + order: 5, + code: 1, + description: $t({defaultMessage: "Admins and members"}), + }, +}; + export const private_message_policy_values = { by_anyone: { order: 1, diff --git a/static/js/settings_data.js b/static/js/settings_data.js index e710b6a232..6f28cc620e 100644 --- a/static/js/settings_data.js +++ b/static/js/settings_data.js @@ -137,6 +137,12 @@ function user_has_permission(policy_value) { } export function user_can_invite_others_to_realm() { + if ( + page_params.realm_invite_to_realm_policy === + settings_config.invite_to_realm_policy_values.nobody.code + ) { + return false; + } return user_has_permission(page_params.realm_invite_to_realm_policy); } diff --git a/static/js/settings_org.js b/static/js/settings_org.js index 548709c954..7281505a5a 100644 --- a/static/js/settings_org.js +++ b/static/js/settings_org.js @@ -104,6 +104,9 @@ export function get_organization_settings_options() { options.common_message_policy_values = get_sorted_options_list( settings_config.common_message_policy_values, ); + options.invite_to_realm_policy_values = get_sorted_options_list( + settings_config.invite_to_realm_policy_values, + ); return options; } diff --git a/static/templates/settings/organization_permissions_admin.hbs b/static/templates/settings/organization_permissions_admin.hbs index 23ab0f228f..1fce706930 100644 --- a/static/templates/settings/organization_permissions_admin.hbs +++ b/static/templates/settings/organization_permissions_admin.hbs @@ -10,7 +10,7 @@