user_groups: Disable actions for deactivated groups.

Joining/leaving the group as well as
adding or removing others is disabled.
This commit is contained in:
apoorvapendse
2025-02-12 18:18:55 +05:30
committed by Tim Abbott
parent d12feb1872
commit b5e123a613
5 changed files with 75 additions and 17 deletions

View File

@@ -176,7 +176,10 @@ export function can_manage_user_group(group_id: number): boolean {
export function can_add_members_to_user_group(group_id: number): boolean {
const group = user_groups.get_user_group_from_id(group_id);
// We cannot add members if the group is deactivated.
if (group.deactivated) {
return false;
}
if (
user_has_permission_for_group_setting(
group.can_add_members_group,
@@ -192,7 +195,10 @@ export function can_add_members_to_user_group(group_id: number): boolean {
export function can_remove_members_from_user_group(group_id: number): boolean {
const group = user_groups.get_user_group_from_id(group_id);
// We cannot remove members if the group is deactivated.
if (group.deactivated) {
return false;
}
if (
user_has_permission_for_group_setting(
group.can_remove_members_group,
@@ -208,7 +214,10 @@ export function can_remove_members_from_user_group(group_id: number): boolean {
export function can_join_user_group(group_id: number): boolean {
const group = user_groups.get_user_group_from_id(group_id);
// One cannot join a deactivated group.
if (group.deactivated) {
return false;
}
if (user_has_permission_for_group_setting(group.can_join_group, "can_join_group", "group")) {
return true;
}
@@ -217,8 +226,11 @@ export function can_join_user_group(group_id: number): boolean {
}
export function can_leave_user_group(group_id: number): boolean {
// One cannot leave a deactivated group.
const group = user_groups.get_user_group_from_id(group_id);
if (group.deactivated) {
return false;
}
if (user_has_permission_for_group_setting(group.can_leave_group, "can_leave_group", "group")) {
return true;
}

View File

@@ -141,9 +141,12 @@ function update_add_members_elements(group: UserGroup): void {
$button_element.prop("disabled", true);
$add_members_container.addClass("add_members_disabled");
const disable_hint = group.deactivated
? $t({defaultMessage: "Can't add members to a deactivated group"})
: $t({defaultMessage: "You are not allowed to add members to this group"});
settings_components.initialize_disable_button_hint_popover(
$add_members_container,
$t({defaultMessage: "You are not allowed to add members to this group."}),
disable_hint,
);
}
}
@@ -260,8 +263,13 @@ function initialize_tooltip_for_membership_button(group_id: number): void {
".join_leave_button_wrapper",
);
const is_member = user_groups.is_user_in_group(group_id, people.my_current_user_id());
const is_deactivated = user_groups.get_user_group_from_id(group_id).deactivated;
let tooltip_message;
if (is_member) {
if (is_deactivated && is_member) {
tooltip_message = $t({defaultMessage: "You cannot leave a deactivated user group."});
} else if (is_deactivated) {
tooltip_message = $t({defaultMessage: "You cannot join a deactivated user group."});
} else if (is_member) {
tooltip_message = $t({defaultMessage: "You do not have permission to leave this group."});
} else {
tooltip_message = $t({defaultMessage: "You do not have permission to join this group."});

View File

@@ -18,11 +18,19 @@
</template>
<template id="cannot-leave-{{name}}-group-tooltip-template">
<span>
{{#tr}}
You do not have permission to leave this group.
{{/tr}}
</span>
{{#if deactivated}}
<span>
{{#tr}}
You cannot leave a deactivated user group.
{{/tr}}
</span>
{{else}}
<span>
{{#tr}}
You do not have permission to leave this group.
{{/tr}}
</span>
{{/if}}
</template>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100%" height="100%" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
@@ -41,11 +49,19 @@
</template>
<template id="cannot-join-{{name}}-group-tooltip-template">
<span>
{{#tr}}
You do not have permission to join this group.
{{/tr}}
</span>
{{#if deactivated}}
<span>
{{#tr}}
You cannot join a deactivated user group.
{{/tr}}
</span>
{{else}}
<span>
{{#tr}}
You do not have permission to join this group.
{{/tr}}
</span>
{{/if}}
</template>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100%" height="100%" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">

View File

@@ -10,7 +10,9 @@
{{/if}}
</button>
</div>
{{#unless group.deactivated}}
<button class="button small rounded button-danger deactivate deactivate-group-button tippy-zulip-delayed-tooltip" data-tippy-content="{{t 'Deactivate group'}}" type="button"> <i class="zulip-icon zulip-icon-user-group-x" aria-hidden="true"></i></button>
{{/unless}}
</div>
</div>
<div class="user_group_settings_wrapper" data-group-id="{{group.id}}">

View File

@@ -38,6 +38,7 @@ const admins = {
can_manage_group: 4,
can_mention_group: 1,
can_remove_members_group: 4,
deactivated: false,
};
const moderators = {
description: "Moderators",
@@ -52,6 +53,7 @@ const moderators = {
can_manage_group: 4,
can_mention_group: 1,
can_remove_members_group: 4,
deactivated: false,
};
const members = {
description: "Members",
@@ -66,6 +68,7 @@ const members = {
can_manage_group: 4,
can_mention_group: 4,
can_remove_members_group: 4,
deactivated: false,
};
const nobody = {
description: "Nobody",
@@ -80,6 +83,7 @@ const nobody = {
can_manage_group: 4,
can_mention_group: 2,
can_remove_members_group: 4,
deactivated: false,
};
const students = {
description: "Students group",
@@ -98,6 +102,19 @@ const students = {
can_mention_group: 3,
can_remove_members_group: 1,
creator_id: 4,
deactivated: false,
};
const deactivated_group = {
name: "Deactivated test group",
id: 3,
members: new Set([1, 2, 3]),
is_system_group: false,
direct_subgroup_ids: new Set([4, 5, 6]),
can_join_group: 1,
can_leave_group: 1,
can_manage_group: 1,
can_mention_group: 1,
deactivated: true,
};
const group_permission_settings = mock_esm("../src/group_permission_settings", {});
@@ -364,7 +381,7 @@ run_test("can_manage_user_group", ({override}) => {
function test_user_group_permission_setting(override, setting_name, permission_func) {
user_groups.initialize({
realm_user_groups: [admins, moderators, members, nobody, students],
realm_user_groups: [admins, moderators, members, nobody, students, deactivated_group],
});
override(realm, "realm_can_manage_all_groups", nobody.id);
@@ -414,6 +431,9 @@ function test_user_group_permission_setting(override, setting_name, permission_f
override(realm, "realm_can_manage_all_groups", moderators.id);
override(current_user, "user_id", 2);
assert.ok(permission_func(students.id));
// Cannot perform any join, leave, add, remove if group is deactivated
assert.ok(!permission_func(deactivated_group.id));
}
run_test("can_join_user_group", ({override}) => {