mirror of
https://github.com/zulip/zulip.git
synced 2025-11-17 12:21:58 +00:00
settings: Realms with limited plans cannot change can_create_groups.
We do not allow realms on a limited plan to create groups. This commit adds a banner to upgrade to the can_create_groups org setting and disables editing it on the backend. This commit also adds a new method called `disable_group_permission_setting` to easily disable similar settings.
This commit is contained in:
committed by
Tim Abbott
parent
cccf1eacb1
commit
7cfa110934
@@ -1490,6 +1490,12 @@ export function disable_opening_typeahead_on_clicking_label($container: JQuery):
|
|||||||
$group_setting_labels.off("click");
|
$group_setting_labels.off("click");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function disable_group_permission_setting($container: JQuery): void {
|
||||||
|
$container.find(".input").prop("contenteditable", false);
|
||||||
|
$container.closest(".input-group").addClass("group_setting_disabled");
|
||||||
|
disable_opening_typeahead_on_clicking_label($container.closest(".input-group"));
|
||||||
|
}
|
||||||
|
|
||||||
export const group_setting_widget_map = new Map<string, GroupSettingPillContainer | null>([
|
export const group_setting_widget_map = new Map<string, GroupSettingPillContainer | null>([
|
||||||
["can_add_members_group", null],
|
["can_add_members_group", null],
|
||||||
["can_join_group", null],
|
["can_join_group", null],
|
||||||
|
|||||||
@@ -144,11 +144,7 @@ export function enable_or_disable_group_permission_settings(): void {
|
|||||||
];
|
];
|
||||||
for (const setting_name of owner_editable_settings) {
|
for (const setting_name of owner_editable_settings) {
|
||||||
const $permission_pill_container = $(`#id_${CSS.escape(setting_name)}`);
|
const $permission_pill_container = $(`#id_${CSS.escape(setting_name)}`);
|
||||||
$permission_pill_container.find(".input").prop("contenteditable", false);
|
settings_components.disable_group_permission_setting($permission_pill_container);
|
||||||
$permission_pill_container.closest(".input-group").addClass("group_setting_disabled");
|
|
||||||
settings_components.disable_opening_typeahead_on_clicking_label(
|
|
||||||
$permission_pill_container.closest(".input-group"),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -156,9 +152,7 @@ export function enable_or_disable_group_permission_settings(): void {
|
|||||||
const $permission_pill_container_elements = $("#organization-permissions").find(
|
const $permission_pill_container_elements = $("#organization-permissions").find(
|
||||||
".pill-container",
|
".pill-container",
|
||||||
);
|
);
|
||||||
$permission_pill_container_elements.find(".input").prop("contenteditable", false);
|
settings_components.disable_group_permission_setting($permission_pill_container_elements);
|
||||||
$permission_pill_container_elements.closest(".input-group").addClass("group_setting_disabled");
|
|
||||||
settings_components.disable_opening_typeahead_on_clicking_label($("#organization-permissions"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type OrganizationSettingsOptions = {
|
type OrganizationSettingsOptions = {
|
||||||
@@ -355,6 +349,14 @@ function set_create_web_public_stream_dropdown_visibility(): void {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function disable_create_user_groups_if_on_limited_plan(): void {
|
||||||
|
if (!realm.zulip_plan_is_not_limited) {
|
||||||
|
settings_components.disable_group_permission_setting(
|
||||||
|
$("#id_realm_can_create_groups").closest(".input-group"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function check_disable_direct_message_initiator_group_widget(): void {
|
export function check_disable_direct_message_initiator_group_widget(): void {
|
||||||
const direct_message_permission_group_widget = settings_components.get_group_setting_widget(
|
const direct_message_permission_group_widget = settings_components.get_group_setting_widget(
|
||||||
"realm_direct_message_permission_group",
|
"realm_direct_message_permission_group",
|
||||||
@@ -369,12 +371,8 @@ export function check_disable_direct_message_initiator_group_widget(): void {
|
|||||||
direct_message_permission_group_widget,
|
direct_message_permission_group_widget,
|
||||||
);
|
);
|
||||||
if (user_groups.is_setting_group_empty(direct_message_permission_value)) {
|
if (user_groups.is_setting_group_empty(direct_message_permission_value)) {
|
||||||
$("#id_realm_direct_message_initiator_group").find(".input").prop("contenteditable", false);
|
settings_components.disable_group_permission_setting(
|
||||||
$("#id_realm_direct_message_initiator_group")
|
$("#id_realm_direct_message_initiator_group"),
|
||||||
.closest(".input-group")
|
|
||||||
.addClass("group_setting_disabled");
|
|
||||||
settings_components.disable_opening_typeahead_on_clicking_label(
|
|
||||||
$("#id_realm_direct_message_initiator_group").closest(".input-group"),
|
|
||||||
);
|
);
|
||||||
} else if (current_user.is_admin) {
|
} else if (current_user.is_admin) {
|
||||||
$("#id_realm_direct_message_initiator_group").find(".input").prop("contenteditable", true);
|
$("#id_realm_direct_message_initiator_group").find(".input").prop("contenteditable", true);
|
||||||
@@ -1124,6 +1122,7 @@ export function build_page(): void {
|
|||||||
set_message_content_in_email_notifications_visibility();
|
set_message_content_in_email_notifications_visibility();
|
||||||
set_digest_emails_weekday_visibility();
|
set_digest_emails_weekday_visibility();
|
||||||
set_create_web_public_stream_dropdown_visibility();
|
set_create_web_public_stream_dropdown_visibility();
|
||||||
|
disable_create_user_groups_if_on_limited_plan();
|
||||||
|
|
||||||
register_save_discard_widget_handlers($(".admin-realm-form"), "/json/realm", false);
|
register_save_discard_widget_handlers($(".admin-realm-form"), "/json/realm", false);
|
||||||
|
|
||||||
|
|||||||
@@ -129,16 +129,13 @@ function update_group_permission_settings_elements(group) {
|
|||||||
});
|
});
|
||||||
settings_components.enable_opening_typeahead_on_clicking_label($group_permission_settings);
|
settings_components.enable_opening_typeahead_on_clicking_label($group_permission_settings);
|
||||||
} else {
|
} else {
|
||||||
$permission_pill_container_elements.find(".input").prop("contenteditable", false);
|
|
||||||
|
|
||||||
$permission_input_groups.addClass("group_setting_disabled");
|
|
||||||
$permission_input_groups.each(function () {
|
$permission_input_groups.each(function () {
|
||||||
settings_components.initialize_disable_button_hint_popover(
|
settings_components.initialize_disable_button_hint_popover(
|
||||||
$(this),
|
$(this),
|
||||||
$t({defaultMessage: "You do not have permission to edit this setting."}),
|
$t({defaultMessage: "You do not have permission to edit this setting."}),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
settings_components.disable_opening_typeahead_on_clicking_label($group_permission_settings);
|
settings_components.disable_group_permission_setting($permission_input_groups);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -109,7 +109,7 @@
|
|||||||
{{> group_setting_value_pill_input
|
{{> group_setting_value_pill_input
|
||||||
setting_name="realm_can_manage_all_groups"
|
setting_name="realm_can_manage_all_groups"
|
||||||
label=(t 'Who can administer all user groups')}}
|
label=(t 'Who can administer all user groups')}}
|
||||||
|
{{> upgrade_tip_widget . }}
|
||||||
{{> group_setting_value_pill_input
|
{{> group_setting_value_pill_input
|
||||||
setting_name="realm_can_create_groups"
|
setting_name="realm_can_create_groups"
|
||||||
label=(t 'Who can create user groups')}}
|
label=(t 'Who can create user groups')}}
|
||||||
|
|||||||
@@ -625,6 +625,10 @@ test("set_up", ({override, override_rewire}) => {
|
|||||||
$.create("<stub-can-create-web-public-channel-group-parent>"),
|
$.create("<stub-can-create-web-public-channel-group-parent>"),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Make our plan not limited so we don't have to stub all the
|
||||||
|
// elements involved in disabling the can_create_groups input.
|
||||||
|
override(realm, "zulip_plan_is_not_limited", true);
|
||||||
|
|
||||||
override_rewire(settings_components, "get_input_element_value", (elem) => {
|
override_rewire(settings_components, "get_input_element_value", (elem) => {
|
||||||
if ($(elem).data() === "number") {
|
if ($(elem).data() === "number") {
|
||||||
return Number.parseInt($(elem).val(), 10);
|
return Number.parseInt($(elem).val(), 10);
|
||||||
|
|||||||
@@ -2358,6 +2358,16 @@ class RealmAPITest(ZulipTestCase):
|
|||||||
result = self.client_patch("/json/realm", req)
|
result = self.client_patch("/json/realm", req)
|
||||||
self.assert_json_error(result, "Available on Zulip Cloud Standard. Upgrade to access.")
|
self.assert_json_error(result, "Available on Zulip Cloud Standard. Upgrade to access.")
|
||||||
|
|
||||||
|
def test_can_create_groups_limited_plan_realms(self) -> None:
|
||||||
|
self.login("iago")
|
||||||
|
realm = get_realm("zulip")
|
||||||
|
do_change_realm_plan_type(realm, Realm.PLAN_TYPE_LIMITED, acting_user=None)
|
||||||
|
|
||||||
|
members_group = NamedUserGroup.objects.get(name="role:members", realm=realm)
|
||||||
|
req = {"can_create_groups": orjson.dumps({"new": members_group.id}).decode()}
|
||||||
|
result = self.client_patch("/json/realm", req)
|
||||||
|
self.assert_json_error(result, "Available on Zulip Cloud Standard. Upgrade to access.")
|
||||||
|
|
||||||
def test_changing_can_access_all_users_group_based_on_plan_type(self) -> None:
|
def test_changing_can_access_all_users_group_based_on_plan_type(self) -> None:
|
||||||
realm = get_realm("zulip")
|
realm = get_realm("zulip")
|
||||||
do_change_realm_plan_type(realm, Realm.PLAN_TYPE_LIMITED, acting_user=None)
|
do_change_realm_plan_type(realm, Realm.PLAN_TYPE_LIMITED, acting_user=None)
|
||||||
|
|||||||
@@ -217,6 +217,9 @@ def update_realm(
|
|||||||
message_retention_days_raw, Realm.MESSAGE_RETENTION_SPECIAL_VALUES_MAP
|
message_retention_days_raw, Realm.MESSAGE_RETENTION_SPECIAL_VALUES_MAP
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if can_create_groups is not None:
|
||||||
|
realm.ensure_not_on_limited_plan()
|
||||||
|
|
||||||
if (
|
if (
|
||||||
invite_required is not None
|
invite_required is not None
|
||||||
or create_multiuse_invite_group is not None
|
or create_multiuse_invite_group is not None
|
||||||
|
|||||||
Reference in New Issue
Block a user