diff --git a/web/e2e-tests/admin.test.ts b/web/e2e-tests/admin.test.ts index 585aedb209..e462a91c45 100644 --- a/web/e2e-tests/admin.test.ts +++ b/web/e2e-tests/admin.test.ts @@ -103,7 +103,6 @@ async function test_changing_create_streams_and_invite_to_stream_policies( page: Page, ): Promise { const policies = { - "create private stream": "#id_realm_create_private_stream_policy", "invite to stream": "#id_realm_invite_to_stream_policy", }; const policy_values = { diff --git a/web/src/server_events_dispatch.js b/web/src/server_events_dispatch.js index 090cb0c7da..a4f2e4b1c4 100644 --- a/web/src/server_events_dispatch.js +++ b/web/src/server_events_dispatch.js @@ -204,7 +204,6 @@ export function dispatch_normal_event(event) { avatar_changes_disabled: settings_account.update_avatar_change_display, bot_creation_policy: settings_bots.update_bot_permissions_ui, create_multiuse_invite_group: noop, - create_private_stream_policy: noop, create_web_public_stream_policy: noop, invite_to_stream_policy: noop, default_code_block_language: noop, @@ -265,15 +264,10 @@ export function dispatch_normal_event(event) { gear_menu.rerender(); } - const stream_creation_settings = [ - "create_private_stream_policy", - "create_web_public_stream_policy", - ]; - if (stream_creation_settings.includes(event.property)) { - stream_settings_ui.update_stream_privacy_choices(event.property); - } - - if (event.property === "enable_spectator_access") { + if ( + event.property === "create_web_public_stream_policy" || + event.property === "enable_spectator_access" + ) { stream_settings_ui.update_stream_privacy_choices( "create_web_public_stream_policy", ); @@ -295,7 +289,10 @@ export function dispatch_normal_event(event) { gear_menu.rerender(); } - if (key === "can_create_public_channel_group") { + if ( + key === "can_create_public_channel_group" || + key === "can_create_private_channel_group" + ) { stream_settings_ui.update_stream_privacy_choices(key); } diff --git a/web/src/settings_components.ts b/web/src/settings_components.ts index dde54bf292..269f0eec22 100644 --- a/web/src/settings_components.ts +++ b/web/src/settings_components.ts @@ -473,6 +473,7 @@ const dropdown_widget_map = new Map([ ["realm_can_access_all_users_group", null], ["can_mention_group", null], ["realm_can_create_public_channel_group", null], + ["realm_can_create_private_channel_group", null], ]); export function get_widget_for_dropdown_list_settings( @@ -779,6 +780,7 @@ export function check_realm_settings_property_changed(elem: HTMLElement): boolea case "realm_create_multiuse_invite_group": case "realm_can_access_all_users_group": case "realm_can_create_public_channel_group": + case "realm_can_create_private_channel_group": proposed_val = get_dropdown_list_widget_setting_value($elem); break; case "realm_message_content_edit_limit_seconds": @@ -976,6 +978,15 @@ export function populate_data_for_realm_settings_request( }); continue; } + + if (property_name === "can_create_private_channel_group") { + data[property_name] = JSON.stringify({ + new: input_value, + old: realm.realm_can_create_private_channel_group, + }); + continue; + } + data[property_name] = input_value; } } diff --git a/web/src/settings_data.ts b/web/src/settings_data.ts index 7ab2cb8247..73bd311653 100644 --- a/web/src/settings_data.ts +++ b/web/src/settings_data.ts @@ -140,7 +140,13 @@ export function user_can_subscribe_other_users(): boolean { } export function user_can_create_private_streams(): boolean { - return user_has_permission(realm.realm_create_private_stream_policy); + if (page_params.is_spectator) { + return false; + } + return user_groups.is_user_in_group( + realm.realm_can_create_private_channel_group, + current_user.user_id, + ); } export function user_can_create_public_streams(): boolean { diff --git a/web/src/settings_org.js b/web/src/settings_org.js index 5c5bfe03ed..834a6c5361 100644 --- a/web/src/settings_org.js +++ b/web/src/settings_org.js @@ -119,7 +119,6 @@ export function get_org_type_dropdown_options() { } const simple_dropdown_properties = [ - "realm_create_private_stream_policy", "realm_create_web_public_stream_policy", "realm_invite_to_stream_policy", "realm_user_group_edit_policy", @@ -487,6 +486,7 @@ export function discard_realm_property_element_changes(elem) { case "realm_create_multiuse_invite_group": case "realm_can_access_all_users_group": case "realm_can_create_public_channel_group": + case "realm_can_create_private_channel_group": settings_components.set_dropdown_list_widget_setting_value( property_name, property_value, diff --git a/web/src/state_data.ts b/web/src/state_data.ts index f049050e08..e57a21b1d1 100644 --- a/web/src/state_data.ts +++ b/web/src/state_data.ts @@ -85,6 +85,7 @@ export const realm_schema = z.object({ realm_bot_domain: z.string(), realm_can_access_all_users_group: z.number(), realm_can_create_public_channel_group: z.number(), + realm_can_create_private_channel_group: z.number(), realm_create_multiuse_invite_group: z.number(), realm_create_private_stream_policy: z.number(), realm_create_web_public_stream_policy: z.number(), diff --git a/web/src/stream_settings_ui.js b/web/src/stream_settings_ui.js index 0d139984dc..1f0fc98ba8 100644 --- a/web/src/stream_settings_ui.js +++ b/web/src/stream_settings_ui.js @@ -947,7 +947,7 @@ export function update_stream_privacy_choices(policy) { $container = $("#stream_permission_settings"); } - if (policy === "create_private_stream_policy") { + if (policy === "can_create_private_channel_group") { stream_ui_updates.update_private_stream_privacy_option_state($container); } if (policy === "can_create_public_channel_group") { diff --git a/web/src/ui_init.js b/web/src/ui_init.js index 9aff0809eb..4ef60c2ca6 100644 --- a/web/src/ui_init.js +++ b/web/src/ui_init.js @@ -560,9 +560,9 @@ export function initialize_everything(state_data) { "realm_bot_creation_policy", "realm_bot_domain", "realm_can_access_all_users_group", + "realm_can_create_private_channel_group", "realm_can_create_public_channel_group", "realm_create_multiuse_invite_group", - "realm_create_private_stream_policy", "realm_create_web_public_stream_policy", "realm_date_created", "realm_default_code_block_language", diff --git a/web/templates/settings/organization_permissions_admin.hbs b/web/templates/settings/organization_permissions_admin.hbs index 36d28c5f63..2af872cd7a 100644 --- a/web/templates/settings/organization_permissions_admin.hbs +++ b/web/templates/settings/organization_permissions_admin.hbs @@ -87,12 +87,12 @@ {{> dropdown_options_widget option_values=create_web_public_stream_policy_values}} -
- - -
+ + {{> ../dropdown_widget_with_label + widget_name="realm_can_create_private_channel_group" + label=(t 'Who can create private channels') + value_type="number"}} +