mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 23:13:25 +00:00
settings: Add moderators and full members options in user-group setting.
This commit adds moderators and full members options for user group settings in frontend.
This commit is contained in:
@@ -181,6 +181,11 @@ test_policy(
|
|||||||
"realm_move_messages_between_streams_policy",
|
"realm_move_messages_between_streams_policy",
|
||||||
settings_data.user_can_move_messages_between_streams,
|
settings_data.user_can_move_messages_between_streams,
|
||||||
);
|
);
|
||||||
|
test_policy(
|
||||||
|
"user_can_edit_user_groups",
|
||||||
|
"realm_user_group_edit_policy",
|
||||||
|
settings_data.user_can_edit_user_groups,
|
||||||
|
);
|
||||||
|
|
||||||
function test_message_policy(label, policy, validation_func) {
|
function test_message_policy(label, policy, validation_func) {
|
||||||
run_test(label, () => {
|
run_test(label, () => {
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ const ui_report = mock_esm("../../static/js/ui_report");
|
|||||||
|
|
||||||
const people = zrequire("people");
|
const people = zrequire("people");
|
||||||
const settings_config = zrequire("settings_config");
|
const settings_config = zrequire("settings_config");
|
||||||
|
const settings_data = zrequire("settings_data");
|
||||||
const settings_user_groups = zrequire("settings_user_groups");
|
const settings_user_groups = zrequire("settings_user_groups");
|
||||||
const user_pill = zrequire("user_pill");
|
const user_pill = zrequire("user_pill");
|
||||||
|
|
||||||
@@ -51,16 +52,10 @@ function test_ui(label, f) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test_ui("can_edit", () => {
|
test_ui("can_edit", () => {
|
||||||
page_params.is_guest = false;
|
settings_data.user_can_edit_user_groups = () => false;
|
||||||
page_params.is_admin = true;
|
|
||||||
assert.ok(settings_user_groups.can_edit(1));
|
|
||||||
|
|
||||||
page_params.is_admin = false;
|
|
||||||
page_params.is_guest = true;
|
|
||||||
assert.ok(!settings_user_groups.can_edit(1));
|
assert.ok(!settings_user_groups.can_edit(1));
|
||||||
|
|
||||||
page_params.is_guest = false;
|
settings_data.user_can_edit_user_groups = () => true;
|
||||||
page_params.is_admin = false;
|
|
||||||
user_groups.is_member_of = (group_id, user_id) => {
|
user_groups.is_member_of = (group_id, user_id) => {
|
||||||
assert.equal(group_id, 1);
|
assert.equal(group_id, 1);
|
||||||
assert.equal(user_id, undefined);
|
assert.equal(user_id, undefined);
|
||||||
@@ -68,20 +63,15 @@ test_ui("can_edit", () => {
|
|||||||
};
|
};
|
||||||
assert.ok(!settings_user_groups.can_edit(1));
|
assert.ok(!settings_user_groups.can_edit(1));
|
||||||
|
|
||||||
page_params.realm_user_group_edit_policy = 2;
|
|
||||||
page_params.is_admin = true;
|
page_params.is_admin = true;
|
||||||
assert.ok(settings_user_groups.can_edit(1));
|
assert.ok(settings_user_groups.can_edit(1));
|
||||||
|
|
||||||
page_params.is_admin = false;
|
page_params.is_admin = false;
|
||||||
user_groups.is_member_of = (group_id, user_id) => {
|
page_params.is_moderator = true;
|
||||||
assert.equal(group_id, 1);
|
assert.ok(settings_user_groups.can_edit(1));
|
||||||
assert.equal(user_id, undefined);
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
assert.ok(!settings_user_groups.can_edit(1));
|
|
||||||
|
|
||||||
page_params.realm_user_group_edit_policy = 1;
|
|
||||||
page_params.is_admin = false;
|
page_params.is_admin = false;
|
||||||
|
page_params.is_moderator = false;
|
||||||
user_groups.is_member_of = (group_id, user_id) => {
|
user_groups.is_member_of = (group_id, user_id) => {
|
||||||
assert.equal(group_id, 1);
|
assert.equal(group_id, 1);
|
||||||
assert.equal(user_id, undefined);
|
assert.equal(user_id, undefined);
|
||||||
|
|||||||
@@ -73,7 +73,6 @@ export function build_page() {
|
|||||||
realm_default_twenty_four_hour_time_values: settings_config.twenty_four_hour_time_values,
|
realm_default_twenty_four_hour_time_values: settings_config.twenty_four_hour_time_values,
|
||||||
realm_authentication_methods: page_params.realm_authentication_methods,
|
realm_authentication_methods: page_params.realm_authentication_methods,
|
||||||
realm_user_group_edit_policy: page_params.realm_user_group_edit_policy,
|
realm_user_group_edit_policy: page_params.realm_user_group_edit_policy,
|
||||||
USER_GROUP_EDIT_POLICY_MEMBERS: 1,
|
|
||||||
realm_name_changes_disabled: page_params.realm_name_changes_disabled,
|
realm_name_changes_disabled: page_params.realm_name_changes_disabled,
|
||||||
realm_email_changes_disabled: page_params.realm_email_changes_disabled,
|
realm_email_changes_disabled: page_params.realm_email_changes_disabled,
|
||||||
realm_avatar_changes_disabled: page_params.realm_avatar_changes_disabled,
|
realm_avatar_changes_disabled: page_params.realm_avatar_changes_disabled,
|
||||||
@@ -122,6 +121,8 @@ export function build_page() {
|
|||||||
email_address_visibility_values: settings_config.email_address_visibility_values,
|
email_address_visibility_values: settings_config.email_address_visibility_values,
|
||||||
can_invite_others_to_realm: settings_data.user_can_invite_others_to_realm(),
|
can_invite_others_to_realm: settings_data.user_can_invite_others_to_realm(),
|
||||||
realm_invite_required: page_params.realm_invite_required,
|
realm_invite_required: page_params.realm_invite_required,
|
||||||
|
can_edit_user_groups: settings_data.user_can_edit_user_groups(),
|
||||||
|
policy_values: settings_config.common_policy_values,
|
||||||
...settings_org.get_organization_settings_options(),
|
...settings_org.get_organization_settings_options(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -130,19 +130,6 @@ export const common_policy_values = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const user_group_edit_policy_values = {
|
|
||||||
by_admins_only: {
|
|
||||||
order: 1,
|
|
||||||
code: 2,
|
|
||||||
description: $t({defaultMessage: "Admins"}),
|
|
||||||
},
|
|
||||||
by_members: {
|
|
||||||
order: 2,
|
|
||||||
code: 1,
|
|
||||||
description: $t({defaultMessage: "Admins and members"}),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
export const private_message_policy_values = {
|
export const private_message_policy_values = {
|
||||||
by_anyone: {
|
by_anyone: {
|
||||||
order: 1,
|
order: 1,
|
||||||
|
|||||||
@@ -149,6 +149,10 @@ export function user_can_move_messages_between_streams() {
|
|||||||
return user_has_permission(page_params.realm_move_messages_between_streams_policy);
|
return user_has_permission(page_params.realm_move_messages_between_streams_policy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function user_can_edit_user_groups() {
|
||||||
|
return user_has_permission(page_params.realm_user_group_edit_policy);
|
||||||
|
}
|
||||||
|
|
||||||
export function user_can_edit_topic_of_any_message() {
|
export function user_can_edit_topic_of_any_message() {
|
||||||
if (
|
if (
|
||||||
page_params.realm_edit_topic_policy ===
|
page_params.realm_edit_topic_policy ===
|
||||||
|
|||||||
@@ -95,9 +95,6 @@ export function get_sorted_options_list(option_values_object) {
|
|||||||
export function get_organization_settings_options() {
|
export function get_organization_settings_options() {
|
||||||
const options = {};
|
const options = {};
|
||||||
options.common_policy_values = get_sorted_options_list(settings_config.common_policy_values);
|
options.common_policy_values = get_sorted_options_list(settings_config.common_policy_values);
|
||||||
options.user_group_edit_policy_values = get_sorted_options_list(
|
|
||||||
settings_config.user_group_edit_policy_values,
|
|
||||||
);
|
|
||||||
options.private_message_policy_values = get_sorted_options_list(
|
options.private_message_policy_values = get_sorted_options_list(
|
||||||
settings_config.private_message_policy_values,
|
settings_config.private_message_policy_values,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import {$t, $t_html} from "./i18n";
|
|||||||
import {page_params} from "./page_params";
|
import {page_params} from "./page_params";
|
||||||
import * as people from "./people";
|
import * as people from "./people";
|
||||||
import * as pill_typeahead from "./pill_typeahead";
|
import * as pill_typeahead from "./pill_typeahead";
|
||||||
|
import * as settings_data from "./settings_data";
|
||||||
import * as ui_report from "./ui_report";
|
import * as ui_report from "./ui_report";
|
||||||
import * as user_groups from "./user_groups";
|
import * as user_groups from "./user_groups";
|
||||||
import * as user_pill from "./user_pill";
|
import * as user_pill from "./user_pill";
|
||||||
@@ -32,21 +33,18 @@ export function reload() {
|
|||||||
populate_user_groups();
|
populate_user_groups();
|
||||||
}
|
}
|
||||||
|
|
||||||
const USER_GROUP_EDIT_POLICY_MEMBERS = 1;
|
|
||||||
|
|
||||||
export function can_edit(group_id) {
|
export function can_edit(group_id) {
|
||||||
if (page_params.is_admin) {
|
if (!settings_data.user_can_edit_user_groups()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admins and moderators are allowed to edit user groups even if they
|
||||||
|
// are not a member of that user group. Members can edit user groups
|
||||||
|
// only if they belong to that group.
|
||||||
|
if (page_params.is_admin || page_params.is_moderator) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (page_params.is_guest) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (page_params.realm_user_group_edit_policy !== USER_GROUP_EDIT_POLICY_MEMBERS) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return user_groups.is_member_of(group_id, people.my_current_user_id());
|
return user_groups.is_member_of(group_id, people.my_current_user_id());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -205,7 +205,7 @@
|
|||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<label for="realm_user_group_edit_policy" class="dropdown-title">{{t "Who can create and manage user groups" }}</label>
|
<label for="realm_user_group_edit_policy" class="dropdown-title">{{t "Who can create and manage user groups" }}</label>
|
||||||
<select name="realm_user_group_edit_policy" id="id_realm_user_group_edit_policy" class="prop-element" data-setting-widget-type="number">
|
<select name="realm_user_group_edit_policy" id="id_realm_user_group_edit_policy" class="prop-element" data-setting-widget-type="number">
|
||||||
{{> dropdown_options_widget option_values=user_group_edit_policy_values}}
|
{{> dropdown_options_widget option_values=common_policy_values}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
<div id="user-groups-admin" class="settings-section" data-name="user-groups-admin">
|
<div id="user-groups-admin" class="settings-section" data-name="user-groups-admin">
|
||||||
{{#if (eq realm_user_group_edit_policy USER_GROUP_EDIT_POLICY_MEMBERS) }}
|
{{#if (eq realm_user_group_edit_policy policy_values.by_members.code) }}
|
||||||
<div class="tip">{{t 'Only group members and organization administrators can modify a group.' }}</div>
|
<div class="tip">{{t 'Only group members, organization administrators and moderators can modify a group.' }}</div>
|
||||||
|
{{else if (eq realm_user_group_edit_policy policy_values.by_full_members.code) }}
|
||||||
|
<div class="tip">{{t 'Only full members belonging to the group, organization administrators and moderators can modify a group.' }}</div>
|
||||||
|
{{else if (eq realm_user_group_edit_policy policy_values.by_moderators_only.code) }}
|
||||||
|
<div class="tip">{{t 'Only organization administrators and moderators can modify user groups in this organization.' }}</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<div class="tip">{{t 'Only organization administrators can modify user groups in this organization.' }}</div>
|
<div class="tip">{{t 'Only organization administrators can modify user groups in this organization.' }}</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@@ -12,7 +16,7 @@
|
|||||||
{{#*inline "z-link"}}<a href="/help/mention-a-user-or-group" target="_blank" rel="noopener noreferrer">{{> @partial-block}}</a>{{/inline}}
|
{{#*inline "z-link"}}<a href="/help/mention-a-user-or-group" target="_blank" rel="noopener noreferrer">{{> @partial-block}}</a>{{/inline}}
|
||||||
{{/tr}}
|
{{/tr}}
|
||||||
</p>
|
</p>
|
||||||
{{#if (or is_admin (eq realm_user_group_edit_policy USER_GROUP_EDIT_POLICY_MEMBERS))}}
|
{{#if can_edit_user_groups}}
|
||||||
<form class="form-horizontal admin-user-group-form">
|
<form class="form-horizontal admin-user-group-form">
|
||||||
<div class="add-new-user-group-box grey-box">
|
<div class="add-new-user-group-box grey-box">
|
||||||
<div class="new-user-group-form">
|
<div class="new-user-group-form">
|
||||||
|
|||||||
Reference in New Issue
Block a user