settings: Add moderators and members option to msg-delete dropdown.

This commit adds moderators, full members and members options to
the delete_own_message_policy dropdown.
This commit is contained in:
sahil839
2021-06-23 16:23:38 +05:30
committed by Tim Abbott
parent 9dd69c17ee
commit 1e1f08fa4e
10 changed files with 43 additions and 30 deletions

View File

@@ -122,10 +122,9 @@ run_test("get_editability", ({override}) => {
assert.equal(message_edit.is_topic_editable(message), false); assert.equal(message_edit.is_topic_editable(message), false);
}); });
run_test("get_deletability", () => { run_test("get_deletability", ({override}) => {
page_params.is_admin = true; page_params.is_admin = true;
page_params.realm_delete_own_message_policy = override(settings_data, "user_can_delete_own_message", () => false);
settings_config.delete_own_message_policy_values.by_admins_only.code;
page_params.realm_message_content_delete_limit_seconds = null; page_params.realm_message_content_delete_limit_seconds = null;
const message = { const message = {
sent_by_me: false, sent_by_me: false,
@@ -146,8 +145,7 @@ run_test("get_deletability", () => {
message.locally_echoed = false; message.locally_echoed = false;
assert.equal(message_edit.get_deletability(message), false); assert.equal(message_edit.get_deletability(message), false);
page_params.realm_delete_own_message_policy = override(settings_data, "user_can_delete_own_message", () => true);
settings_config.delete_own_message_policy_values.by_everyone.code;
assert.equal(message_edit.get_deletability(message), true); assert.equal(message_edit.get_deletability(message), true);
const now = new Date(); const now = new Date();

View File

@@ -243,6 +243,12 @@ test_message_policy(
settings_data.user_can_edit_topic_of_any_message, settings_data.user_can_edit_topic_of_any_message,
); );
test_message_policy(
"user_can_delete_own_message",
"realm_delete_own_message_policy",
settings_data.user_can_delete_own_message,
);
run_test("using_dark_theme", () => { run_test("using_dark_theme", () => {
user_settings.color_scheme = settings_config.color_scheme_values.night.code; user_settings.color_scheme = settings_config.color_scheme_values.night.code;
assert.equal(settings_data.using_dark_theme(), true); assert.equal(settings_data.using_dark_theme(), true);

View File

@@ -576,7 +576,7 @@ function test_discard_changes_button(discard_changes) {
page_params.realm_allow_message_editing = true; page_params.realm_allow_message_editing = true;
page_params.realm_message_content_edit_limit_seconds = 3600; page_params.realm_message_content_edit_limit_seconds = 3600;
page_params.realm_delete_own_message_policy = page_params.realm_delete_own_message_policy =
settings_config.delete_own_message_policy_values.by_everyone.code; settings_config.common_message_policy_values.by_everyone.code;
page_params.realm_message_content_delete_limit_seconds = 120; page_params.realm_message_content_delete_limit_seconds = 120;
const allow_edit_history = $("#id_realm_allow_edit_history").prop("checked", false); const allow_edit_history = $("#id_realm_allow_edit_history").prop("checked", false);

View File

@@ -137,6 +137,9 @@ export function build_page() {
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(), can_edit_user_groups: settings_data.user_can_edit_user_groups(),
policy_values: settings_config.common_policy_values, policy_values: settings_config.common_policy_values,
realm_delete_own_message_policy: page_params.realm_delete_own_message_policy,
DELETE_OWN_MESSAGE_POLICY_ADMINS_ONLY:
settings_config.common_message_policy_values.by_admins_only.code,
...settings_org.get_organization_settings_options(), ...settings_org.get_organization_settings_options(),
demote_inactive_streams_values: settings_config.demote_inactive_streams_values, demote_inactive_streams_values: settings_config.demote_inactive_streams_values,
color_scheme_values: settings_config.color_scheme_values, color_scheme_values: settings_config.color_scheme_values,

View File

@@ -28,7 +28,6 @@ import * as overlays from "./overlays";
import {page_params} from "./page_params"; import {page_params} from "./page_params";
import * as resize from "./resize"; import * as resize from "./resize";
import * as rows from "./rows"; import * as rows from "./rows";
import * as settings_config from "./settings_config";
import * as settings_data from "./settings_data"; import * as settings_data from "./settings_data";
import * as stream_bar from "./stream_bar"; import * as stream_bar from "./stream_bar";
import * as stream_data from "./stream_data"; import * as stream_data from "./stream_data";
@@ -168,10 +167,7 @@ export function get_deletability(message) {
if (message.locally_echoed) { if (message.locally_echoed) {
return false; return false;
} }
if ( if (!settings_data.user_can_delete_own_message()) {
page_params.realm_delete_own_message_policy ===
settings_config.delete_own_message_policy_values.by_admins_only.code
) {
return false; return false;
} }

View File

@@ -16,6 +16,7 @@ export const page_params: {
realm_add_custom_emoji_policy: number; realm_add_custom_emoji_policy: number;
realm_avatar_changes_disabled: boolean; realm_avatar_changes_disabled: boolean;
realm_create_stream_policy: number; realm_create_stream_policy: number;
realm_delete_own_message_policy: number;
realm_edit_topic_policy: number; realm_edit_topic_policy: number;
realm_email_address_visibility: number; realm_email_address_visibility: number;
realm_invite_to_realm_policy: number; realm_invite_to_realm_policy: number;

View File

@@ -255,19 +255,6 @@ export const common_message_policy_values = {
}, },
}; };
export const delete_own_message_policy_values = {
by_everyone: {
order: 1,
code: 5,
description: $t({defaultMessage: "Admins, members and guests"}),
},
by_admins_only: {
order: 2,
code: 2,
description: $t({defaultMessage: "Admins only"}),
},
};
const time_limit_dropdown_values = new Map([ const time_limit_dropdown_values = new Map([
[ [
"any_time", "any_time",

View File

@@ -121,6 +121,13 @@ function user_has_permission(policy_value: number): boolean {
return false; return false;
} }
/* At present, by_everyone is not present in common_policy_values,
* but we include a check for it here, so that code using
* common_message_policy_values or other supersets can use this function. */
if (policy_value === settings_config.common_message_policy_values.by_everyone.code) {
return true;
}
if (page_params.is_guest) { if (page_params.is_guest) {
return false; return false;
} }
@@ -192,6 +199,10 @@ export function user_can_edit_topic_of_any_message(): boolean {
return user_has_permission(page_params.realm_edit_topic_policy); return user_has_permission(page_params.realm_edit_topic_policy);
} }
export function user_can_delete_own_message(): boolean {
return user_has_permission(page_params.realm_delete_own_message_policy);
}
export function using_dark_theme(): boolean { export function using_dark_theme(): boolean {
if (user_settings.color_scheme === settings_config.color_scheme_values.night.code) { if (user_settings.color_scheme === settings_config.color_scheme_values.night.code) {
return true; return true;

View File

@@ -109,9 +109,6 @@ export function get_organization_settings_options() {
options.invite_to_realm_policy_values = get_sorted_options_list( options.invite_to_realm_policy_values = get_sorted_options_list(
settings_config.invite_to_realm_policy_values, settings_config.invite_to_realm_policy_values,
); );
options.delete_own_message_policy_values = get_sorted_options_list(
settings_config.delete_own_message_policy_values,
);
return options; return options;
} }
@@ -249,18 +246,32 @@ function set_msg_edit_limit_dropdown() {
settings_ui.disable_sub_setting_onchange(value !== "never", "id_realm_edit_topic_policy", true); settings_ui.disable_sub_setting_onchange(value !== "never", "id_realm_edit_topic_policy", true);
} }
function message_delete_limit_setting_enabled() {
// This function is used to check whether the time-limit setting
// should be enabled. The setting is disabled when delete_own_message_policy
// is set to 'admins only' as admins can delete messages irrespective of
// time limit.
if (
page_params.realm_delete_own_message_policy ===
settings_config.common_message_policy_values.by_admins_only.code
) {
return false;
}
return true;
}
function set_delete_own_message_policy_dropdown() { function set_delete_own_message_policy_dropdown() {
const value = get_property_value("realm_delete_own_message_policy"); const value = get_property_value("realm_delete_own_message_policy");
$("#id_realm_delete_own_message_policy").val(value); $("#id_realm_delete_own_message_policy").val(value);
settings_ui.disable_sub_setting_onchange( settings_ui.disable_sub_setting_onchange(
value !== settings_config.delete_own_message_policy_values.by_admins_only.code, message_delete_limit_setting_enabled(),
"id_realm_msg_delete_limit_setting", "id_realm_msg_delete_limit_setting",
true, true,
); );
const limit_value = get_property_value("realm_msg_delete_limit_setting"); const limit_value = get_property_value("realm_msg_delete_limit_setting");
if (limit_value === "custom_limit") { if (limit_value === "custom_limit") {
settings_ui.disable_sub_setting_onchange( settings_ui.disable_sub_setting_onchange(
value !== settings_config.delete_own_message_policy_values.by_admins_only.code, message_delete_limit_setting_enabled(),
"id_realm_message_content_delete_limit_minutes", "id_realm_message_content_delete_limit_minutes",
true, true,
); );

View File

@@ -164,7 +164,7 @@
aria-hidden="true" data-tippy-content="{{t 'Administrators can delete any message.' }}"></i> aria-hidden="true" data-tippy-content="{{t 'Administrators can delete any message.' }}"></i>
</label> </label>
<select name="realm_delete_own_message_policy" id="id_realm_delete_own_message_policy" class="prop-element" data-setting-widget-type="number"> <select name="realm_delete_own_message_policy" id="id_realm_delete_own_message_policy" class="prop-element" data-setting-widget-type="number">
{{> dropdown_options_widget option_values=delete_own_message_policy_values}} {{> dropdown_options_widget option_values=common_message_policy_values}}
</select> </select>
</div> </div>