mirror of
https://github.com/zulip/zulip.git
synced 2025-11-13 02:17:19 +00:00
settings: Use new group setting to check web-public stream creation.
This commit updates code in webapp to use new group-based setting for checking web-public stream creation permission.
This commit is contained in:
@@ -211,8 +211,6 @@ export function build_page() {
|
||||
realm_name_in_email_notifications_policy_values:
|
||||
settings_config.realm_name_in_email_notifications_policy_values,
|
||||
twenty_four_hour_time_values: settings_config.twenty_four_hour_time_values,
|
||||
create_web_public_stream_policy_values:
|
||||
settings_config.create_web_public_stream_policy_values,
|
||||
disable_enable_spectator_access_setting:
|
||||
!realm.server_web_public_streams_enabled || !realm.zulip_plan_is_not_limited,
|
||||
realm_push_notifications_enabled: realm.realm_push_notifications_enabled,
|
||||
|
||||
@@ -205,7 +205,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_web_public_stream_policy: noop,
|
||||
invite_to_stream_policy: noop,
|
||||
default_code_block_language: noop,
|
||||
default_language: noop,
|
||||
@@ -266,12 +265,9 @@ export function dispatch_normal_event(event) {
|
||||
gear_menu.rerender();
|
||||
}
|
||||
|
||||
if (
|
||||
event.property === "create_web_public_stream_policy" ||
|
||||
event.property === "enable_spectator_access"
|
||||
) {
|
||||
if (event.property === "enable_spectator_access") {
|
||||
stream_settings_ui.update_stream_privacy_choices(
|
||||
"create_web_public_stream_policy",
|
||||
"can_create_web_public_channel_group",
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -293,7 +289,8 @@ export function dispatch_normal_event(event) {
|
||||
|
||||
if (
|
||||
key === "can_create_public_channel_group" ||
|
||||
key === "can_create_private_channel_group"
|
||||
key === "can_create_private_channel_group" ||
|
||||
key === "can_create_web_public_channel_group"
|
||||
) {
|
||||
stream_settings_ui.update_stream_privacy_choices(key);
|
||||
}
|
||||
|
||||
@@ -210,7 +210,6 @@ export function get_subsection_property_elements($subsection: JQuery): HTMLEleme
|
||||
type simple_dropdown_realm_settings = Pick<
|
||||
typeof realm,
|
||||
| "realm_create_private_stream_policy"
|
||||
| "realm_create_web_public_stream_policy"
|
||||
| "realm_invite_to_stream_policy"
|
||||
| "realm_user_group_edit_policy"
|
||||
| "realm_add_custom_emoji_policy"
|
||||
@@ -479,6 +478,7 @@ const dropdown_widget_map = new Map<string, DropdownWidget | null>([
|
||||
["can_mention_group", null],
|
||||
["realm_can_create_public_channel_group", null],
|
||||
["realm_can_create_private_channel_group", null],
|
||||
["realm_can_create_web_public_channel_group", null],
|
||||
["realm_direct_message_initiator_group", null],
|
||||
["realm_direct_message_permission_group", null],
|
||||
]);
|
||||
@@ -793,6 +793,7 @@ export function check_realm_settings_property_changed(elem: HTMLElement): boolea
|
||||
case "realm_can_access_all_users_group":
|
||||
case "realm_can_create_public_channel_group":
|
||||
case "realm_can_create_private_channel_group":
|
||||
case "realm_can_create_web_public_channel_group":
|
||||
case "realm_direct_message_initiator_group":
|
||||
case "realm_direct_message_permission_group":
|
||||
proposed_val = get_dropdown_list_widget_setting_value($elem);
|
||||
@@ -988,6 +989,7 @@ export function populate_data_for_realm_settings_request(
|
||||
const realm_group_settings_using_new_api_format = new Set([
|
||||
"can_create_private_channel_group",
|
||||
"can_create_public_channel_group",
|
||||
"can_create_web_public_channel_group",
|
||||
"direct_message_initiator_group",
|
||||
"direct_message_permission_group",
|
||||
]);
|
||||
|
||||
@@ -303,29 +303,6 @@ 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,
|
||||
|
||||
@@ -55,21 +55,11 @@ export function user_can_change_logo(): boolean {
|
||||
}
|
||||
|
||||
function user_has_permission(policy_value: number): boolean {
|
||||
/* At present, nobody and by_owners_only is not present in
|
||||
* common_policy_values, but we include a check for it here,
|
||||
* so that code using create_web_public_stream_policy_values
|
||||
* or other supersets can use this function. */
|
||||
if (policy_value === settings_config.create_web_public_stream_policy_values.nobody.code) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (current_user.is_owner) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (
|
||||
policy_value === settings_config.create_web_public_stream_policy_values.by_owners_only.code
|
||||
) {
|
||||
/* At present, nobody is not present in common_policy_values,
|
||||
* but we include a check for it here, so that code using
|
||||
* email_invite_to_realm_policy_values or other supersets can
|
||||
* use this function. */
|
||||
if (policy_value === settings_config.email_invite_to_realm_policy_values.nobody.code) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -116,12 +106,6 @@ function user_has_permission(policy_value: number): boolean {
|
||||
}
|
||||
|
||||
export function user_can_invite_users_by_email(): boolean {
|
||||
if (
|
||||
realm.realm_invite_to_realm_policy ===
|
||||
settings_config.email_invite_to_realm_policy_values.nobody.code
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return user_has_permission(realm.realm_invite_to_realm_policy);
|
||||
}
|
||||
|
||||
@@ -164,7 +148,14 @@ export function user_can_create_web_public_streams(): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
return user_has_permission(realm.realm_create_web_public_stream_policy);
|
||||
if (page_params.is_spectator) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return user_groups.is_user_in_group(
|
||||
realm.realm_can_create_web_public_channel_group,
|
||||
current_user.user_id,
|
||||
);
|
||||
}
|
||||
|
||||
export function user_can_move_messages_between_streams(): boolean {
|
||||
|
||||
@@ -124,7 +124,6 @@ export function get_org_type_dropdown_options() {
|
||||
}
|
||||
|
||||
const simple_dropdown_properties = [
|
||||
"realm_create_web_public_stream_policy",
|
||||
"realm_invite_to_stream_policy",
|
||||
"realm_user_group_edit_policy",
|
||||
"realm_add_custom_emoji_policy",
|
||||
@@ -363,7 +362,7 @@ function set_digest_emails_weekday_visibility() {
|
||||
|
||||
function set_create_web_public_stream_dropdown_visibility() {
|
||||
settings_components.change_element_block_display_property(
|
||||
"id_realm_create_web_public_stream_policy",
|
||||
"id_realm_can_create_web_public_channel_group",
|
||||
realm.server_web_public_streams_enabled &&
|
||||
realm.zulip_plan_is_not_limited &&
|
||||
realm.realm_enable_spectator_access,
|
||||
@@ -506,6 +505,7 @@ export function discard_realm_property_element_changes(elem) {
|
||||
case "realm_can_access_all_users_group":
|
||||
case "realm_can_create_public_channel_group":
|
||||
case "realm_can_create_private_channel_group":
|
||||
case "realm_can_create_web_public_channel_group":
|
||||
settings_components.set_dropdown_list_widget_setting_value(
|
||||
property_name,
|
||||
property_value,
|
||||
|
||||
@@ -267,9 +267,9 @@ const realm_schema = z.object({
|
||||
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_can_create_web_public_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(),
|
||||
realm_date_created: z.number(),
|
||||
realm_default_code_block_language: z.string(),
|
||||
realm_default_external_accounts: z.record(
|
||||
|
||||
@@ -935,7 +935,7 @@ export function update_stream_privacy_choices(policy) {
|
||||
if (policy === "can_create_public_channel_group") {
|
||||
stream_settings_components.update_public_stream_privacy_option_state($container);
|
||||
}
|
||||
if (policy === "create_web_public_stream_policy") {
|
||||
if (policy === "can_create_web_public_channel_group") {
|
||||
stream_ui_updates.update_web_public_stream_privacy_option_state($container);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,12 +81,11 @@
|
||||
label=admin_settings_label.realm_enable_spectator_access
|
||||
is_disabled=disable_enable_spectator_access_setting
|
||||
help_link="/help/public-access-option"}}
|
||||
<div class="input-group realm_create_web_public_stream_policy">
|
||||
<label for="realm_create_web_public_stream_policy" class="settings-field-label">{{t "Who can create web-public channels" }}</label>
|
||||
<select name="realm_create_web_public_stream_policy" id="id_realm_create_web_public_stream_policy" class="prop-element settings_select bootstrap-focus-style" data-setting-widget-type="number">
|
||||
{{> dropdown_options_widget option_values=create_web_public_stream_policy_values}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{> ../dropdown_widget_with_label
|
||||
widget_name="realm_can_create_web_public_channel_group"
|
||||
label=(t 'Who can create web-public channels')
|
||||
value_type="number"}}
|
||||
|
||||
{{> ../dropdown_widget_with_label
|
||||
widget_name="realm_can_create_private_channel_group"
|
||||
|
||||
@@ -491,17 +491,7 @@ run_test("realm settings", ({override}) => {
|
||||
assert.equal(realm[parameter_name], 1);
|
||||
}
|
||||
|
||||
let update_called = false;
|
||||
let event = event_fixtures.realm__update__create_web_public_stream_policy;
|
||||
stream_settings_ui.update_stream_privacy_choices = (property) => {
|
||||
assert_same(property, "create_web_public_stream_policy");
|
||||
update_called = true;
|
||||
};
|
||||
dispatch(event);
|
||||
assert_same(realm.realm_create_web_public_stream_policy, 2);
|
||||
assert_same(update_called, true);
|
||||
|
||||
event = event_fixtures.realm__update__invite_to_stream_policy;
|
||||
let event = event_fixtures.realm__update__invite_to_stream_policy;
|
||||
test_realm_integer(event, "realm_invite_to_stream_policy");
|
||||
|
||||
event = event_fixtures.realm__update__bot_creation_policy;
|
||||
@@ -553,9 +543,9 @@ run_test("realm settings", ({override}) => {
|
||||
dispatch(event);
|
||||
assert_same(realm.realm_default_code_block_language, "javascript");
|
||||
|
||||
update_called = false;
|
||||
let update_called = false;
|
||||
stream_settings_ui.update_stream_privacy_choices = (property) => {
|
||||
assert_same(property, "create_web_public_stream_policy");
|
||||
assert_same(property, "can_create_web_public_channel_group");
|
||||
update_called = true;
|
||||
};
|
||||
event = event_fixtures.realm__update__enable_spectator_access;
|
||||
|
||||
@@ -263,13 +263,6 @@ exports.fixtures = {
|
||||
value: 1,
|
||||
},
|
||||
|
||||
realm__update__create_web_public_stream_policy: {
|
||||
type: "realm",
|
||||
op: "update",
|
||||
property: "create_web_public_stream_policy",
|
||||
value: 2,
|
||||
},
|
||||
|
||||
realm__update__default_code_block_language: {
|
||||
type: "realm",
|
||||
op: "update",
|
||||
|
||||
@@ -263,52 +263,6 @@ run_test("user_can_invite_others_to_realm_nobody_case", () => {
|
||||
assert.equal(settings_data.user_can_invite_users_by_email(), false);
|
||||
});
|
||||
|
||||
run_test("user_can_create_web_public_streams", () => {
|
||||
current_user.is_owner = true;
|
||||
realm.server_web_public_streams_enabled = true;
|
||||
realm.realm_enable_spectator_access = true;
|
||||
realm.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);
|
||||
|
||||
realm.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);
|
||||
|
||||
realm.realm_enable_spectator_access = false;
|
||||
realm.server_web_public_streams_enabled = true;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), false);
|
||||
|
||||
realm.realm_enable_spectator_access = true;
|
||||
realm.server_web_public_streams_enabled = false;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), false);
|
||||
|
||||
realm.realm_enable_spectator_access = false;
|
||||
realm.server_web_public_streams_enabled = false;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), false);
|
||||
|
||||
realm.realm_enable_spectator_access = true;
|
||||
realm.server_web_public_streams_enabled = true;
|
||||
current_user.is_owner = false;
|
||||
current_user.is_admin = true;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), false);
|
||||
|
||||
realm.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);
|
||||
|
||||
current_user.is_admin = false;
|
||||
current_user.is_moderator = true;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), false);
|
||||
|
||||
realm.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);
|
||||
|
||||
current_user.is_moderator = false;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), false);
|
||||
});
|
||||
|
||||
run_test("user_email_not_configured", () => {
|
||||
const user_email_not_configured = settings_data.user_email_not_configured;
|
||||
|
||||
@@ -473,3 +427,40 @@ run_test("user_can_create_private_streams", () => {
|
||||
settings_data.user_can_create_private_streams,
|
||||
);
|
||||
});
|
||||
|
||||
run_test("user_can_create_web_public_streams", () => {
|
||||
realm.server_web_public_streams_enabled = true;
|
||||
realm.realm_enable_spectator_access = true;
|
||||
|
||||
test_realm_group_settings(
|
||||
"realm_can_create_web_public_channel_group",
|
||||
settings_data.user_can_create_web_public_streams,
|
||||
);
|
||||
const owner_user_id = 4;
|
||||
const owners = {
|
||||
name: "Admins",
|
||||
id: 3,
|
||||
members: new Set([owner_user_id]),
|
||||
is_system_group: true,
|
||||
direct_subgroup_ids: new Set([]),
|
||||
};
|
||||
current_user.user_id = owner_user_id;
|
||||
user_groups.initialize({realm_user_groups: [owners]});
|
||||
|
||||
realm.server_web_public_streams_enabled = true;
|
||||
realm.realm_enable_spectator_access = true;
|
||||
realm.realm_can_create_web_public_channel_group = owners.id;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), true);
|
||||
|
||||
realm.realm_enable_spectator_access = false;
|
||||
realm.server_web_public_streams_enabled = true;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), false);
|
||||
|
||||
realm.realm_enable_spectator_access = true;
|
||||
realm.server_web_public_streams_enabled = false;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), false);
|
||||
|
||||
realm.realm_enable_spectator_access = false;
|
||||
realm.server_web_public_streams_enabled = false;
|
||||
assert.equal(settings_data.user_can_create_web_public_streams(), false);
|
||||
});
|
||||
|
||||
@@ -641,8 +641,8 @@ test("set_up", ({override, override_rewire}) => {
|
||||
$("#allowed_domains_label").set_parent($.create("<stub-allowed-domain-label-parent>"));
|
||||
const $waiting_period_parent_elem = $.create("waiting-period-parent-stub");
|
||||
$("#id_realm_waiting_period_threshold").set_parent($waiting_period_parent_elem);
|
||||
$("#id_realm_create_web_public_stream_policy").set_parent(
|
||||
$.create("<stub-create-web-public-stream-policy-parent>"),
|
||||
$("#id_realm_can_create_web_public_channel_group").set_parent(
|
||||
$.create("<stub-can-create-web-public-channel-group-parent>"),
|
||||
);
|
||||
|
||||
override_rewire(settings_components, "get_input_element_value", (elem) => {
|
||||
|
||||
Reference in New Issue
Block a user