From 443d8b6a65b870fec6d159c44f5cd9c5e226b679 Mon Sep 17 00:00:00 2001 From: Sahil Batra Date: Fri, 19 Nov 2021 22:06:00 +0530 Subject: [PATCH] settings: Add user_can_create_web_public_streams function. This commit adds user_can_create_web_public_streams function in settings_data.js which will be used in further commits to disable or hide the UI elements for creating web-public streams. --- frontend_tests/node_tests/settings_data.js | 46 ++++++++++++++++++++++ static/js/page_params.ts | 4 ++ static/js/settings_config.ts | 23 +++++++++++ static/js/settings_data.ts | 25 ++++++++++++ 4 files changed, 98 insertions(+) diff --git a/frontend_tests/node_tests/settings_data.js b/frontend_tests/node_tests/settings_data.js index d32e704ce2..103f4d361b 100644 --- a/frontend_tests/node_tests/settings_data.js +++ b/frontend_tests/node_tests/settings_data.js @@ -283,3 +283,49 @@ run_test("user_can_invite_others_to_realm_nobody_case", () => { settings_config.invite_to_realm_policy_values.nobody.code; assert.equal(settings_data.user_can_invite_others_to_realm(), false); }); + +run_test("user_can_create_web_public_streams", () => { + page_params.is_owner = true; + page_params.server_web_public_streams_enabled = true; + page_params.realm_enable_spectator_access = true; + page_params.realm_create_web_public_stream_policy = + settings_config.create_web_public_stream_policy_values.nobody.code; + assert.equal(settings_data.user_can_create_web_public_streams(), false); + + page_params.realm_create_web_public_stream_policy = + settings_config.create_web_public_stream_policy_values.by_owners_only.code; + assert.equal(settings_data.user_can_create_web_public_streams(), true); + + page_params.realm_enable_spectator_access = false; + page_params.server_web_public_streams_enabled = true; + assert.equal(settings_data.user_can_create_web_public_streams(), false); + + page_params.realm_enable_spectator_access = true; + page_params.server_web_public_streams_enabled = false; + assert.equal(settings_data.user_can_create_web_public_streams(), false); + + page_params.realm_enable_spectator_access = false; + page_params.server_web_public_streams_enabled = false; + assert.equal(settings_data.user_can_create_web_public_streams(), false); + + page_params.realm_enable_spectator_access = true; + page_params.server_web_public_streams_enabled = true; + page_params.is_owner = false; + page_params.is_admin = true; + assert.equal(settings_data.user_can_create_web_public_streams(), false); + + page_params.realm_create_web_public_stream_policy = + settings_config.create_web_public_stream_policy_values.by_admins_only.code; + assert.equal(settings_data.user_can_create_web_public_streams(), true); + + page_params.is_admin = false; + page_params.is_moderator = true; + assert.equal(settings_data.user_can_create_web_public_streams(), false); + + page_params.realm_create_web_public_stream_policy = + settings_config.create_web_public_stream_policy_values.by_moderators_only.code; + assert.equal(settings_data.user_can_create_web_public_streams(), true); + + page_params.is_moderator = false; + assert.equal(settings_data.user_can_create_web_public_streams(), false); +}); diff --git a/static/js/page_params.ts b/static/js/page_params.ts index 87af33abb7..6f631d9e1c 100644 --- a/static/js/page_params.ts +++ b/static/js/page_params.ts @@ -12,14 +12,17 @@ export const page_params: { is_admin: boolean; is_guest: boolean; is_moderator: boolean; + is_owner: boolean; is_spectator: boolean; realm_add_custom_emoji_policy: number; realm_avatar_changes_disabled: boolean; realm_create_private_stream_policy: number; realm_create_public_stream_policy: number; + realm_create_web_public_stream_policy: number; realm_delete_own_message_policy: number; realm_edit_topic_policy: number; realm_email_address_visibility: number; + realm_enable_spectator_access: boolean; realm_invite_to_realm_policy: number; realm_invite_to_stream_policy: number; realm_move_messages_between_streams_policy: number; @@ -30,6 +33,7 @@ export const page_params: { request_language: string; server_avatar_changes_disabled: boolean; server_name_changes_disabled: boolean; + server_web_public_streams_enabled: boolean; translation_data: Record; zulip_plan_is_not_limited: boolean; } = $("#page-params").remove().data("params"); diff --git a/static/js/settings_config.ts b/static/js/settings_config.ts index 734c0756ec..32e819d1d0 100644 --- a/static/js/settings_config.ts +++ b/static/js/settings_config.ts @@ -227,6 +227,29 @@ export const wildcard_mention_policy_values = { }, }; +export const create_web_public_stream_policy_values = { + by_moderators_only: { + order: 1, + code: 4, + description: $t({defaultMessage: "Admins and moderators"}), + }, + by_admins_only: { + order: 2, + code: 2, + description: $t({defaultMessage: "Admins only"}), + }, + by_owners_only: { + order: 3, + code: 7, + description: $t({defaultMessage: "Owners only"}), + }, + nobody: { + order: 4, + code: 6, + description: $t({defaultMessage: "Nobody"}), + }, +}; + export const common_message_policy_values = { by_everyone: { order: 1, diff --git a/static/js/settings_data.ts b/static/js/settings_data.ts index 394671591e..4120032617 100644 --- a/static/js/settings_data.ts +++ b/static/js/settings_data.ts @@ -181,6 +181,31 @@ export function user_can_create_public_streams(): boolean { return user_has_permission(page_params.realm_create_public_stream_policy); } +export function user_can_create_web_public_streams(): boolean { + if ( + !page_params.server_web_public_streams_enabled || + !page_params.realm_enable_spectator_access + ) { + return false; + } + + if ( + page_params.realm_create_web_public_stream_policy === + settings_config.create_web_public_stream_policy_values.nobody.code + ) { + return false; + } + + if ( + page_params.realm_create_web_public_stream_policy === + settings_config.create_web_public_stream_policy_values.by_owners_only.code + ) { + return page_params.is_owner; + } + + return user_has_permission(page_params.realm_create_web_public_stream_policy); +} + export function user_can_move_messages_between_streams(): boolean { return user_has_permission(page_params.realm_move_messages_between_streams_policy); }