mirror of https://github.com/zulip/zulip.git
models: Replace allow_community_topic_editing with edit_topic_policy.
This commit replaces the allow_community_topic_editing boolean with integer field edit_topic_policy and includes both frontend and backend changes. We also update settings_ui.disable_sub_settings_onchange to not change the color of label as we did previously when the setting was a checkbox. But now as the setting is dropdown we keep the label as it is and we don't do anything with label when disabling dropdowns. Also, this function was used only here so we can safely change this.
This commit is contained in:
parent
283a3a5c28
commit
828759d2ba
|
@ -9,6 +9,7 @@ const {page_params} = require("../zjsunit/zpage_params");
|
|||
page_params.realm_community_topic_editing_limit_seconds = 259200;
|
||||
|
||||
const message_edit = zrequire("message_edit");
|
||||
const settings_config = zrequire("settings_config");
|
||||
|
||||
const get_editability = message_edit.get_editability;
|
||||
const editability_types = message_edit.editability_types;
|
||||
|
@ -81,7 +82,8 @@ run_test("get_editability", () => {
|
|||
sent_by_me: false,
|
||||
type: "stream",
|
||||
};
|
||||
page_params.realm_allow_community_topic_editing = true;
|
||||
page_params.realm_edit_topic_policy =
|
||||
settings_config.common_message_policy_values.by_everyone.code;
|
||||
page_params.realm_allow_message_editing = true;
|
||||
page_params.realm_message_content_edit_limit_seconds = 0;
|
||||
page_params.realm_community_topic_editing_limit_seconds = 259200;
|
||||
|
@ -93,15 +95,18 @@ run_test("get_editability", () => {
|
|||
assert.equal(message_edit.is_topic_editable(message), true);
|
||||
|
||||
message.sent_by_me = true;
|
||||
page_params.realm_allow_community_topic_editing = false;
|
||||
page_params.realm_edit_topic_policy =
|
||||
settings_config.common_message_policy_values.by_admins_only.code;
|
||||
assert.equal(message_edit.is_topic_editable(message), true);
|
||||
|
||||
message.sent_by_me = false;
|
||||
page_params.realm_allow_community_topic_editing = false;
|
||||
page_params.realm_edit_topic_policy =
|
||||
settings_config.common_message_policy_values.by_admins_only.code;
|
||||
assert.equal(message_edit.is_topic_editable(message), false);
|
||||
|
||||
message.sent_by_me = false;
|
||||
page_params.realm_allow_community_topic_editing = false;
|
||||
page_params.realm_edit_topic_policy =
|
||||
settings_config.common_message_policy_values.by_admins_only.code;
|
||||
page_params.is_admin = true;
|
||||
assert.equal(message_edit.is_topic_editable(message), true);
|
||||
|
||||
|
|
|
@ -583,16 +583,16 @@ function test_discard_changes_button(discard_changes) {
|
|||
};
|
||||
|
||||
page_params.realm_allow_edit_history = true;
|
||||
page_params.realm_allow_community_topic_editing = true;
|
||||
page_params.realm_edit_topic_policy =
|
||||
settings_config.common_message_policy_values.by_everyone.code;
|
||||
page_params.realm_allow_message_editing = true;
|
||||
page_params.realm_message_content_edit_limit_seconds = 3600;
|
||||
page_params.realm_allow_message_deleting = true;
|
||||
page_params.realm_message_content_delete_limit_seconds = 120;
|
||||
|
||||
const allow_edit_history = $("#id_realm_allow_edit_history").prop("checked", false);
|
||||
const allow_community_topic_editing = $("#id_realm_allow_community_topic_editing").prop(
|
||||
"checked",
|
||||
true,
|
||||
const edit_topic_policy = $("#id_realm_edit_topic_policy").val(
|
||||
settings_config.common_message_policy_values.by_admins_only.code,
|
||||
);
|
||||
const msg_edit_limit_setting = $("#id_realm_msg_edit_limit_setting").val("custom_limit");
|
||||
const message_content_edit_limit_minutes = $(
|
||||
|
@ -606,7 +606,7 @@ function test_discard_changes_button(discard_changes) {
|
|||
allow_edit_history.attr("id", "id_realm_allow_edit_history");
|
||||
msg_edit_limit_setting.attr("id", "id_realm_msg_edit_limit_setting");
|
||||
msg_delete_limit_setting.attr("id", "id_realm_msg_delete_limit_setting");
|
||||
allow_community_topic_editing.attr("id", "id_realm_allow_community_topic_editing");
|
||||
edit_topic_policy.attr("id", "id_realm_edit_topic_policy");
|
||||
message_content_edit_limit_minutes.attr("id", "id_realm_message_content_edit_limit_minutes");
|
||||
message_content_delete_limit_minutes.attr(
|
||||
"id",
|
||||
|
@ -618,7 +618,7 @@ function test_discard_changes_button(discard_changes) {
|
|||
allow_edit_history,
|
||||
msg_edit_limit_setting,
|
||||
msg_delete_limit_setting,
|
||||
allow_community_topic_editing,
|
||||
edit_topic_policy,
|
||||
message_content_edit_limit_minutes,
|
||||
message_content_delete_limit_minutes,
|
||||
];
|
||||
|
@ -633,7 +633,10 @@ function test_discard_changes_button(discard_changes) {
|
|||
discard_changes(ev);
|
||||
|
||||
assert.equal(allow_edit_history.prop("checked"), true);
|
||||
assert.equal(allow_community_topic_editing.prop("checked"), true);
|
||||
assert.equal(
|
||||
edit_topic_policy.val(),
|
||||
settings_config.common_message_policy_values.by_everyone.code,
|
||||
);
|
||||
assert.equal(msg_edit_limit_setting.val(), "upto_one_hour");
|
||||
assert.equal(message_content_edit_limit_minutes.val(), "60");
|
||||
assert.equal(msg_delete_limit_setting.val(), "upto_two_min");
|
||||
|
@ -685,9 +688,6 @@ test("set_up", ({override}) => {
|
|||
const waiting_period_parent_elem = $.create("waiting-period-parent-stub");
|
||||
$("#id_realm_waiting_period_threshold").set_parent(waiting_period_parent_elem);
|
||||
|
||||
const allow_topic_edit_label_parent = $.create("allow-topic-edit-label-parent");
|
||||
$("#id_realm_allow_community_topic_editing_label").set_parent(allow_topic_edit_label_parent);
|
||||
|
||||
// TEST set_up() here, but this mostly just allows us to
|
||||
// get access to the click handlers.
|
||||
override(settings_org, "maybe_disable_widgets", noop);
|
||||
|
|
|
@ -18,9 +18,6 @@ import * as settings_toggle from "./settings_toggle";
|
|||
|
||||
const admin_settings_label = {
|
||||
// Organization settings
|
||||
realm_allow_community_topic_editing: $t({
|
||||
defaultMessage: "Users can edit the topic of any message",
|
||||
}),
|
||||
realm_allow_edit_history: $t({defaultMessage: "Enable message edit history"}),
|
||||
realm_mandatory_topics: $t({defaultMessage: "Require topics in stream messages"}),
|
||||
realm_notifications_stream: $t({defaultMessage: "New stream notifications:"}),
|
||||
|
@ -82,7 +79,6 @@ export function build_page() {
|
|||
realm_avatar_changes_disabled: page_params.realm_avatar_changes_disabled,
|
||||
realm_add_emoji_by_admins_only: page_params.realm_add_emoji_by_admins_only,
|
||||
can_add_emojis: settings_emoji.can_add_emoji(),
|
||||
realm_allow_community_topic_editing: page_params.realm_allow_community_topic_editing,
|
||||
realm_message_content_edit_limit_minutes: settings_org.get_realm_time_limits_in_minutes(
|
||||
"realm_message_content_edit_limit_seconds",
|
||||
),
|
||||
|
|
|
@ -24,6 +24,7 @@ import * as overlays from "./overlays";
|
|||
import {page_params} from "./page_params";
|
||||
import * as resize from "./resize";
|
||||
import * as rows from "./rows";
|
||||
import * as settings_config from "./settings_config";
|
||||
import * as settings_data from "./settings_data";
|
||||
import * as stream_bar from "./stream_bar";
|
||||
import * as stream_data from "./stream_data";
|
||||
|
@ -68,7 +69,10 @@ export function is_topic_editable(message, edit_limit_seconds_buffer = 0) {
|
|||
return true;
|
||||
}
|
||||
|
||||
if (!page_params.realm_allow_community_topic_editing) {
|
||||
if (
|
||||
page_params.realm_edit_topic_policy ===
|
||||
settings_config.common_message_policy_values.by_admins_only.code
|
||||
) {
|
||||
// If you're another non-admin user, you need community topic editing enabled.
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -179,7 +179,7 @@ export function dispatch_normal_event(event) {
|
|||
allow_edit_history: noop,
|
||||
allow_message_deleting: noop,
|
||||
allow_message_editing: noop,
|
||||
allow_community_topic_editing: noop,
|
||||
edit_topic_policy: noop,
|
||||
user_group_edit_policy: noop,
|
||||
avatar_changes_disabled: settings_account.update_avatar_change_display,
|
||||
bot_creation_policy: settings_bots.update_bot_permissions_ui,
|
||||
|
|
|
@ -198,6 +198,19 @@ export const wildcard_mention_policy_values = {
|
|||
},
|
||||
};
|
||||
|
||||
export const common_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([
|
||||
[
|
||||
"any_time",
|
||||
|
|
|
@ -104,6 +104,9 @@ export function get_organization_settings_options() {
|
|||
options.wildcard_mention_policy_values = get_sorted_options_list(
|
||||
settings_config.wildcard_mention_policy_values,
|
||||
);
|
||||
options.common_message_policy_values = get_sorted_options_list(
|
||||
settings_config.common_message_policy_values,
|
||||
);
|
||||
return options;
|
||||
}
|
||||
|
||||
|
@ -207,6 +210,7 @@ const simple_dropdown_properties = [
|
|||
"realm_invite_to_realm_policy",
|
||||
"realm_wildcard_mention_policy",
|
||||
"realm_move_messages_between_streams_policy",
|
||||
"realm_edit_topic_policy",
|
||||
];
|
||||
|
||||
function set_property_dropdown_value(property_name) {
|
||||
|
@ -248,11 +252,7 @@ function set_msg_edit_limit_dropdown() {
|
|||
"id_realm_message_content_edit_limit_minutes",
|
||||
value === "custom_limit",
|
||||
);
|
||||
settings_ui.disable_sub_setting_onchange(
|
||||
value !== "never",
|
||||
"id_realm_allow_community_topic_editing",
|
||||
true,
|
||||
);
|
||||
settings_ui.disable_sub_setting_onchange(value !== "never", "id_realm_edit_topic_policy", true);
|
||||
}
|
||||
|
||||
function set_msg_delete_limit_dropdown() {
|
||||
|
|
|
@ -76,13 +76,7 @@ export function do_settings_change(
|
|||
export function disable_sub_setting_onchange(is_checked, sub_setting_id, disable_on_uncheck) {
|
||||
if ((is_checked && disable_on_uncheck) || (!is_checked && !disable_on_uncheck)) {
|
||||
$(`#${CSS.escape(sub_setting_id)}`).prop("disabled", false);
|
||||
$(`#${CSS.escape(sub_setting_id)}_label`)
|
||||
.parent()
|
||||
.removeClass("control-label-disabled");
|
||||
} else if ((is_checked && !disable_on_uncheck) || (!is_checked && disable_on_uncheck)) {
|
||||
$(`#${CSS.escape(sub_setting_id)}`).prop("disabled", true);
|
||||
$(`#${CSS.escape(sub_setting_id)}_label`)
|
||||
.parent()
|
||||
.addClass("control-label-disabled");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,11 +143,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{{> settings_checkbox
|
||||
setting_name="realm_allow_community_topic_editing"
|
||||
prefix="id_"
|
||||
is_checked=realm_allow_community_topic_editing
|
||||
label=admin_settings_label.realm_allow_community_topic_editing}}
|
||||
<div class="input-group">
|
||||
<label for="realm_edit_topic_policy" class="dropdown-title">{{t "Who can edit the topic of any message" }}</label>
|
||||
<select name="realm_edit_topic_policy" id="id_realm_edit_topic_policy" class="prop-element" data-setting-widget-type="number">
|
||||
{{> dropdown_options_widget option_values=common_message_policy_values}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{> settings_checkbox
|
||||
setting_name="realm_allow_edit_history"
|
||||
|
|
|
@ -11,6 +11,11 @@ below features are supported.
|
|||
|
||||
## Changes in Zulip 5.0
|
||||
|
||||
**Feature level 75**
|
||||
|
||||
* [`POST /register`](/api/register-queue), `PATCH /realm`: Replaced `allow_community_topic_editing`
|
||||
field with an integer field `edit_topic_policy`.
|
||||
|
||||
**Feature level 74**
|
||||
|
||||
* [`POST /register`](/api/register-queue): Added `server_needs_upgrade`
|
||||
|
|
|
@ -33,7 +33,7 @@ DESKTOP_WARNING_VERSION = "5.4.3"
|
|||
# Changes should be accompanied by documentation explaining what the
|
||||
# new level means in templates/zerver/api/changelog.md, as well as
|
||||
# "**Changes**" entries in the endpoint's documentation in `zulip.yaml`.
|
||||
API_FEATURE_LEVEL = 74
|
||||
API_FEATURE_LEVEL = 75
|
||||
|
||||
# Bump the minor PROVISION_VERSION to indicate that folks should provision
|
||||
# only when going from an old version of the code to a newer version. Bump
|
||||
|
|
|
@ -874,25 +874,25 @@ def do_set_realm_message_editing(
|
|||
realm: Realm,
|
||||
allow_message_editing: bool,
|
||||
message_content_edit_limit_seconds: int,
|
||||
allow_community_topic_editing: bool,
|
||||
edit_topic_policy: int,
|
||||
*,
|
||||
acting_user: Optional[UserProfile],
|
||||
) -> None:
|
||||
old_values = dict(
|
||||
allow_message_editing=realm.allow_message_editing,
|
||||
message_content_edit_limit_seconds=realm.message_content_edit_limit_seconds,
|
||||
allow_community_topic_editing=realm.allow_community_topic_editing,
|
||||
edit_topic_policy=realm.edit_topic_policy,
|
||||
)
|
||||
|
||||
realm.allow_message_editing = allow_message_editing
|
||||
realm.message_content_edit_limit_seconds = message_content_edit_limit_seconds
|
||||
realm.allow_community_topic_editing = allow_community_topic_editing
|
||||
realm.edit_topic_policy = edit_topic_policy
|
||||
|
||||
event_time = timezone_now()
|
||||
updated_properties = dict(
|
||||
allow_message_editing=allow_message_editing,
|
||||
message_content_edit_limit_seconds=message_content_edit_limit_seconds,
|
||||
allow_community_topic_editing=allow_community_topic_editing,
|
||||
edit_topic_policy=edit_topic_policy,
|
||||
)
|
||||
|
||||
for updated_property, updated_value in updated_properties.items():
|
||||
|
@ -2823,8 +2823,8 @@ def can_edit_content_or_topic(
|
|||
if user_profile.is_realm_admin:
|
||||
return True
|
||||
|
||||
# The community_topic_editing setting controls normal users editing topics.
|
||||
if user_profile.realm.allow_community_topic_editing:
|
||||
# The edit_topic_policy setting controls which users can edit topics.
|
||||
if user_profile.realm.edit_topic_policy == Realm.POLICY_EVERYONE:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
|
|
@ -931,7 +931,7 @@ message_edit_data = DictType(
|
|||
required_keys=[
|
||||
("allow_message_editing", bool),
|
||||
("message_content_edit_limit_seconds", int),
|
||||
("allow_community_topic_editing", bool),
|
||||
("edit_topic_policy", int),
|
||||
]
|
||||
)
|
||||
|
||||
|
|
|
@ -218,8 +218,8 @@ def fetch_initial_state_data(
|
|||
state["realm_allow_message_editing"] = (
|
||||
False if user_profile is None else realm.allow_message_editing
|
||||
)
|
||||
state["realm_allow_community_topic_editing"] = (
|
||||
False if user_profile is None else realm.allow_community_topic_editing
|
||||
state["realm_edit_topic_policy"] = (
|
||||
Realm.POLICY_ADMINS_ONLY if user_profile is None else realm.edit_topic_policy
|
||||
)
|
||||
state["realm_allow_message_deleting"] = (
|
||||
False if user_profile is None else realm.allow_message_deleting
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.2.2 on 2021-05-26 09:39
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("zerver", "0326_alter_realm_authentication_methods"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="realm",
|
||||
name="edit_topic_policy",
|
||||
field=models.PositiveSmallIntegerField(default=5),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,46 @@
|
|||
# Generated by Django 3.2.2 on 2021-05-26 09:43
|
||||
|
||||
from django.db import migrations
|
||||
from django.db.backends.postgresql.schema import DatabaseSchemaEditor
|
||||
from django.db.migrations.state import StateApps
|
||||
|
||||
|
||||
def migrate_to_edit_topic_policy(apps: StateApps, schema_editor: DatabaseSchemaEditor) -> None:
|
||||
Realm = apps.get_model("zerver", "Realm")
|
||||
Realm.POLICY_EVERYONE = 5
|
||||
Realm.POLICY_ADMINS_ONLY = 2
|
||||
Realm.objects.filter(allow_community_topic_editing=False).update(
|
||||
edit_topic_policy=Realm.POLICY_ADMINS_ONLY
|
||||
)
|
||||
Realm.objects.filter(allow_community_topic_editing=True).update(
|
||||
edit_topic_policy=Realm.POLICY_EVERYONE
|
||||
)
|
||||
|
||||
|
||||
def reverse_migrate_to_edit_topic_policy(
|
||||
apps: StateApps, schema_editor: DatabaseSchemaEditor
|
||||
) -> None:
|
||||
Realm = apps.get_model("zerver", "Realm")
|
||||
Realm.POLICY_EVERYONE = 5
|
||||
Realm.POLICY_ADMINS_ONLY = 2
|
||||
Realm.objects.filter(edit_topic_policy=Realm.POLICY_ADMINS_ONLY).update(
|
||||
allow_community_topic_editing=False
|
||||
)
|
||||
Realm.objects.filter(edit_topic_policy=Realm.POLICY_EVERYONE).update(
|
||||
allow_community_topic_editing=True
|
||||
)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("zerver", "0327_realm_edit_topic_policy"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(
|
||||
migrate_to_edit_topic_policy,
|
||||
reverse_code=reverse_migrate_to_edit_topic_policy,
|
||||
elidable=True,
|
||||
),
|
||||
]
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 3.2.2 on 2021-05-26 09:48
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("zerver", "0328_migrate_to_edit_topic_policy"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="realm",
|
||||
name="allow_community_topic_editing",
|
||||
),
|
||||
]
|
|
@ -254,6 +254,7 @@ class Realm(models.Model):
|
|||
POLICY_ADMINS_ONLY = 2
|
||||
POLICY_FULL_MEMBERS_ONLY = 3
|
||||
POLICY_MODERATORS_ONLY = 4
|
||||
POLICY_EVERYONE = 5
|
||||
|
||||
COMMON_POLICY_TYPES = [
|
||||
POLICY_MEMBERS_ONLY,
|
||||
|
@ -262,9 +263,19 @@ class Realm(models.Model):
|
|||
POLICY_MODERATORS_ONLY,
|
||||
]
|
||||
|
||||
COMMON_MESSAGE_POLICY_TYPES = [
|
||||
POLICY_ADMINS_ONLY,
|
||||
POLICY_EVERYONE,
|
||||
]
|
||||
|
||||
DEFAULT_COMMUNITY_TOPIC_EDITING_LIMIT_SECONDS = 259200
|
||||
|
||||
# Who in the organization is allowed to create streams.
|
||||
create_stream_policy: int = models.PositiveSmallIntegerField(default=POLICY_MEMBERS_ONLY)
|
||||
|
||||
# Who in the organization is allowed to edit topics of any message.
|
||||
edit_topic_policy: int = models.PositiveSmallIntegerField(default=POLICY_EVERYONE)
|
||||
|
||||
# Who in the organization is allowed to invite other users to organization.
|
||||
invite_to_realm_policy: int = models.PositiveSmallIntegerField(default=POLICY_MEMBERS_ONLY)
|
||||
|
||||
|
@ -362,9 +373,6 @@ class Realm(models.Model):
|
|||
# Whether users have access to message edit history
|
||||
allow_edit_history: bool = models.BooleanField(default=True)
|
||||
|
||||
DEFAULT_COMMUNITY_TOPIC_EDITING_LIMIT_SECONDS = 259200
|
||||
allow_community_topic_editing: bool = models.BooleanField(default=True)
|
||||
|
||||
# Defaults for new users
|
||||
default_twenty_four_hour_time: bool = models.BooleanField(default=False)
|
||||
default_language: str = models.CharField(default="en", max_length=MAX_LANGUAGE_ID_LENGTH)
|
||||
|
|
|
@ -3483,11 +3483,16 @@ paths:
|
|||
description: |
|
||||
Whether this organizations [message edit policy](/help/configure-message-editing-and-deletion)
|
||||
allows editing the content of messages.
|
||||
allow_community_topic_editing:
|
||||
type: boolean
|
||||
edit_topic_policy:
|
||||
type: integer
|
||||
description: |
|
||||
Whether [community topic editing](/help/community-topic-edits) is enabled
|
||||
in this organization.
|
||||
The policy for which users can edit topics of any message.
|
||||
|
||||
* 2 = admins only
|
||||
* 5 = everyone
|
||||
|
||||
**Changes**: New in Zulip 5.0 (feature level 75), replacing the
|
||||
previous `allow_community_topic_editing` boolean.
|
||||
message_content_edit_limit_seconds:
|
||||
type: integer
|
||||
description: |
|
||||
|
@ -3780,7 +3785,7 @@ paths:
|
|||
{
|
||||
"allow_message_editing": false,
|
||||
"message_content_edit_limit_seconds": 0,
|
||||
"allow_community_topic_editing": false,
|
||||
"edit_topic_policy": 2,
|
||||
},
|
||||
"id": 0,
|
||||
}
|
||||
|
@ -8733,13 +8738,18 @@ paths:
|
|||
|
||||
Whether this organizations [message edit policy](/help/configure-message-editing-and-deletion)
|
||||
allows editing the content of messages.
|
||||
realm_allow_community_topic_editing:
|
||||
type: boolean
|
||||
realm_edit_topic_policy:
|
||||
type: integer
|
||||
description: |
|
||||
Present if `realm` is present in `fetch_event_types`.
|
||||
|
||||
Whether [community topic editing](/help/community-topic-edits) is enabled
|
||||
in this organization.
|
||||
The policy for which users can edit topics of any message.
|
||||
|
||||
* 2 = admins only
|
||||
* 5 = everyone
|
||||
|
||||
**Changes**: New in Zulip 5.0 (feature level 75), replacing the
|
||||
previous `allow_community_topic_editing` boolean.
|
||||
realm_message_content_edit_limit_seconds:
|
||||
type: integer
|
||||
description: |
|
||||
|
|
|
@ -41,6 +41,7 @@ from zerver.lib.streams import create_stream_if_needed
|
|||
from zerver.lib.test_classes import ZulipTestCase
|
||||
from zerver.models import (
|
||||
Message,
|
||||
Realm,
|
||||
RealmAuditLog,
|
||||
Recipient,
|
||||
Subscription,
|
||||
|
@ -412,13 +413,13 @@ class TestRealmAuditLog(ZulipTestCase):
|
|||
RealmAuditLog.NEW_VALUE: 1000,
|
||||
},
|
||||
{
|
||||
"property": "allow_community_topic_editing",
|
||||
RealmAuditLog.OLD_VALUE: True,
|
||||
RealmAuditLog.NEW_VALUE: False,
|
||||
"property": "edit_topic_policy",
|
||||
RealmAuditLog.OLD_VALUE: Realm.POLICY_EVERYONE,
|
||||
RealmAuditLog.NEW_VALUE: Realm.POLICY_ADMINS_ONLY,
|
||||
},
|
||||
]
|
||||
|
||||
do_set_realm_message_editing(realm, True, 1000, False, acting_user=user)
|
||||
do_set_realm_message_editing(realm, True, 1000, Realm.POLICY_ADMINS_ONLY, acting_user=user)
|
||||
realm_audit_logs = RealmAuditLog.objects.filter(
|
||||
realm=realm,
|
||||
event_type=RealmAuditLog.REALM_PROPERTY_CHANGED,
|
||||
|
|
|
@ -1241,7 +1241,7 @@ class NormalActionsTest(BaseAction):
|
|||
self.user_profile.realm,
|
||||
allow_message_editing,
|
||||
message_content_edit_limit_seconds,
|
||||
False,
|
||||
Realm.POLICY_ADMINS_ONLY,
|
||||
acting_user=None,
|
||||
)
|
||||
)
|
||||
|
|
|
@ -138,7 +138,6 @@ class HomeTest(ZulipTestCase):
|
|||
"prompt_for_invites",
|
||||
"queue_id",
|
||||
"realm_add_emoji_by_admins_only",
|
||||
"realm_allow_community_topic_editing",
|
||||
"realm_allow_edit_history",
|
||||
"realm_allow_message_deleting",
|
||||
"realm_allow_message_editing",
|
||||
|
@ -161,6 +160,7 @@ class HomeTest(ZulipTestCase):
|
|||
"realm_digest_weekday",
|
||||
"realm_disallow_disposable_email_addresses",
|
||||
"realm_domains",
|
||||
"realm_edit_topic_policy",
|
||||
"realm_email_address_visibility",
|
||||
"realm_email_auth_enabled",
|
||||
"realm_email_changes_disabled",
|
||||
|
|
|
@ -722,16 +722,14 @@ class EditMessageTest(EditMessageTestCase):
|
|||
def set_message_editing_params(
|
||||
allow_message_editing: bool,
|
||||
message_content_edit_limit_seconds: int,
|
||||
allow_community_topic_editing: bool,
|
||||
edit_topic_policy: int,
|
||||
) -> None:
|
||||
result = self.client_patch(
|
||||
"/json/realm",
|
||||
{
|
||||
"allow_message_editing": orjson.dumps(allow_message_editing).decode(),
|
||||
"message_content_edit_limit_seconds": message_content_edit_limit_seconds,
|
||||
"allow_community_topic_editing": orjson.dumps(
|
||||
allow_community_topic_editing
|
||||
).decode(),
|
||||
"edit_topic_policy": edit_topic_policy,
|
||||
},
|
||||
)
|
||||
self.assert_json_success(result)
|
||||
|
@ -781,46 +779,44 @@ class EditMessageTest(EditMessageTestCase):
|
|||
|
||||
# test the various possible message editing settings
|
||||
# high enough time limit, all edits allowed
|
||||
set_message_editing_params(True, 240, False)
|
||||
set_message_editing_params(True, 240, Realm.POLICY_ADMINS_ONLY)
|
||||
do_edit_message_assert_success(id_, "A")
|
||||
|
||||
# out of time, only topic editing allowed
|
||||
set_message_editing_params(True, 120, False)
|
||||
set_message_editing_params(True, 120, Realm.POLICY_ADMINS_ONLY)
|
||||
do_edit_message_assert_success(id_, "B", True)
|
||||
do_edit_message_assert_error(id_, "C", "The time limit for editing this message has passed")
|
||||
|
||||
# infinite time, all edits allowed
|
||||
set_message_editing_params(True, 0, False)
|
||||
set_message_editing_params(True, 0, Realm.POLICY_ADMINS_ONLY)
|
||||
do_edit_message_assert_success(id_, "D")
|
||||
|
||||
# without allow_message_editing, nothing is allowed
|
||||
set_message_editing_params(False, 240, False)
|
||||
set_message_editing_params(False, 240, Realm.POLICY_ADMINS_ONLY)
|
||||
do_edit_message_assert_error(
|
||||
id_, "E", "Your organization has turned off message editing", True
|
||||
)
|
||||
set_message_editing_params(False, 120, False)
|
||||
set_message_editing_params(False, 120, Realm.POLICY_ADMINS_ONLY)
|
||||
do_edit_message_assert_error(
|
||||
id_, "F", "Your organization has turned off message editing", True
|
||||
)
|
||||
set_message_editing_params(False, 0, False)
|
||||
set_message_editing_params(False, 0, Realm.POLICY_ADMINS_ONLY)
|
||||
do_edit_message_assert_error(
|
||||
id_, "G", "Your organization has turned off message editing", True
|
||||
)
|
||||
|
||||
def test_allow_community_topic_editing(self) -> None:
|
||||
def test_edit_topic_policy(self) -> None:
|
||||
def set_message_editing_params(
|
||||
allow_message_editing: bool,
|
||||
message_content_edit_limit_seconds: int,
|
||||
allow_community_topic_editing: bool,
|
||||
edit_topic_policy: int,
|
||||
) -> None:
|
||||
result = self.client_patch(
|
||||
"/json/realm",
|
||||
{
|
||||
"allow_message_editing": orjson.dumps(allow_message_editing).decode(),
|
||||
"message_content_edit_limit_seconds": message_content_edit_limit_seconds,
|
||||
"allow_community_topic_editing": orjson.dumps(
|
||||
allow_community_topic_editing
|
||||
).decode(),
|
||||
"edit_topic_policy": edit_topic_policy,
|
||||
},
|
||||
)
|
||||
self.assert_json_success(result)
|
||||
|
@ -855,21 +851,21 @@ class EditMessageTest(EditMessageTestCase):
|
|||
message.save()
|
||||
|
||||
# any user can edit the topic of a message
|
||||
set_message_editing_params(True, 0, True)
|
||||
set_message_editing_params(True, 0, Realm.POLICY_EVERYONE)
|
||||
# log in as a new user
|
||||
self.login("cordelia")
|
||||
do_edit_message_assert_success(id_, "A")
|
||||
|
||||
# only admins can edit the topics of messages
|
||||
self.login("iago")
|
||||
set_message_editing_params(True, 0, False)
|
||||
set_message_editing_params(True, 0, Realm.POLICY_ADMINS_ONLY)
|
||||
do_edit_message_assert_success(id_, "B")
|
||||
self.login("cordelia")
|
||||
do_edit_message_assert_error(id_, "C", "You don't have permission to edit this message")
|
||||
|
||||
# users cannot edit topics if allow_message_editing is False
|
||||
self.login("iago")
|
||||
set_message_editing_params(False, 0, True)
|
||||
set_message_editing_params(False, 0, Realm.POLICY_EVERYONE)
|
||||
self.login("cordelia")
|
||||
do_edit_message_assert_error(id_, "D", "Your organization has turned off message editing")
|
||||
|
||||
|
@ -877,7 +873,7 @@ class EditMessageTest(EditMessageTestCase):
|
|||
message.date_sent = message.date_sent - datetime.timedelta(seconds=290000)
|
||||
message.save()
|
||||
self.login("iago")
|
||||
set_message_editing_params(True, 0, True)
|
||||
set_message_editing_params(True, 0, Realm.POLICY_EVERYONE)
|
||||
do_edit_message_assert_success(id_, "E")
|
||||
self.login("cordelia")
|
||||
do_edit_message_assert_error(
|
||||
|
@ -1537,7 +1533,7 @@ class EditMessageTest(EditMessageTestCase):
|
|||
)
|
||||
|
||||
realm = user_profile.realm
|
||||
realm.allow_community_topic_editing = False
|
||||
realm.edit_topic_policy = Realm.POLICY_ADMINS_ONLY
|
||||
realm.save()
|
||||
self.login("cordelia")
|
||||
|
||||
|
|
|
@ -910,25 +910,31 @@ class RealmAPITest(ZulipTestCase):
|
|||
"""Tests updating the realm property 'allow_message_editing'."""
|
||||
self.set_up_db("allow_message_editing", False)
|
||||
self.set_up_db("message_content_edit_limit_seconds", 0)
|
||||
self.set_up_db("allow_community_topic_editing", False)
|
||||
self.set_up_db("edit_topic_policy", Realm.POLICY_ADMINS_ONLY)
|
||||
realm = self.update_with_api("allow_message_editing", True)
|
||||
realm = self.update_with_api("message_content_edit_limit_seconds", 100)
|
||||
realm = self.update_with_api("allow_community_topic_editing", True)
|
||||
realm = self.update_with_api("edit_topic_policy", Realm.POLICY_EVERYONE)
|
||||
self.assertEqual(realm.allow_message_editing, True)
|
||||
self.assertEqual(realm.message_content_edit_limit_seconds, 100)
|
||||
self.assertEqual(realm.allow_community_topic_editing, True)
|
||||
self.assertEqual(realm.edit_topic_policy, Realm.POLICY_EVERYONE)
|
||||
realm = self.update_with_api("allow_message_editing", False)
|
||||
self.assertEqual(realm.allow_message_editing, False)
|
||||
self.assertEqual(realm.message_content_edit_limit_seconds, 100)
|
||||
self.assertEqual(realm.allow_community_topic_editing, True)
|
||||
self.assertEqual(realm.edit_topic_policy, Realm.POLICY_EVERYONE)
|
||||
realm = self.update_with_api("message_content_edit_limit_seconds", 200)
|
||||
self.assertEqual(realm.allow_message_editing, False)
|
||||
self.assertEqual(realm.message_content_edit_limit_seconds, 200)
|
||||
self.assertEqual(realm.allow_community_topic_editing, True)
|
||||
realm = self.update_with_api("allow_community_topic_editing", False)
|
||||
self.assertEqual(realm.edit_topic_policy, Realm.POLICY_EVERYONE)
|
||||
realm = self.update_with_api("edit_topic_policy", Realm.POLICY_ADMINS_ONLY)
|
||||
self.assertEqual(realm.allow_message_editing, False)
|
||||
self.assertEqual(realm.message_content_edit_limit_seconds, 200)
|
||||
self.assertEqual(realm.allow_community_topic_editing, False)
|
||||
self.assertEqual(realm.edit_topic_policy, Realm.POLICY_ADMINS_ONLY)
|
||||
|
||||
# Test an invalid value for edit_topic_policy
|
||||
invalid_edit_topic_policy_value = 10
|
||||
req = {"edit_topic_policy": orjson.dumps(invalid_edit_topic_policy_value).decode()}
|
||||
result = self.client_patch("/json/realm", req)
|
||||
self.assert_json_error(result, "Invalid edit_topic_policy")
|
||||
|
||||
def test_update_realm_allow_message_deleting(self) -> None:
|
||||
"""Tests updating the realm property 'allow_message_deleting'."""
|
||||
|
|
|
@ -66,7 +66,9 @@ def update_realm(
|
|||
converter=to_non_negative_int, default=None
|
||||
),
|
||||
allow_message_editing: Optional[bool] = REQ(json_validator=check_bool, default=None),
|
||||
allow_community_topic_editing: Optional[bool] = REQ(json_validator=check_bool, default=None),
|
||||
edit_topic_policy: Optional[int] = REQ(
|
||||
json_validator=check_int_in(Realm.COMMON_MESSAGE_POLICY_TYPES), default=None
|
||||
),
|
||||
mandatory_topics: Optional[bool] = REQ(json_validator=check_bool, default=None),
|
||||
message_content_edit_limit_seconds: Optional[int] = REQ(
|
||||
converter=to_non_negative_int, default=None
|
||||
|
@ -181,27 +183,24 @@ def update_realm(
|
|||
message_content_edit_limit_seconds is not None
|
||||
and realm.message_content_edit_limit_seconds != message_content_edit_limit_seconds
|
||||
)
|
||||
or (
|
||||
allow_community_topic_editing is not None
|
||||
and realm.allow_community_topic_editing != allow_community_topic_editing
|
||||
)
|
||||
or (edit_topic_policy is not None and realm.edit_topic_policy != edit_topic_policy)
|
||||
):
|
||||
if allow_message_editing is None:
|
||||
allow_message_editing = realm.allow_message_editing
|
||||
if message_content_edit_limit_seconds is None:
|
||||
message_content_edit_limit_seconds = realm.message_content_edit_limit_seconds
|
||||
if allow_community_topic_editing is None:
|
||||
allow_community_topic_editing = realm.allow_community_topic_editing
|
||||
if edit_topic_policy is None:
|
||||
edit_topic_policy = realm.edit_topic_policy
|
||||
do_set_realm_message_editing(
|
||||
realm,
|
||||
allow_message_editing,
|
||||
message_content_edit_limit_seconds,
|
||||
allow_community_topic_editing,
|
||||
edit_topic_policy,
|
||||
acting_user=user_profile,
|
||||
)
|
||||
data["allow_message_editing"] = allow_message_editing
|
||||
data["message_content_edit_limit_seconds"] = message_content_edit_limit_seconds
|
||||
data["allow_community_topic_editing"] = allow_community_topic_editing
|
||||
data["edit_topic_policy"] = edit_topic_policy
|
||||
|
||||
# Realm.notifications_stream and Realm.signup_notifications_stream are not boolean,
|
||||
# str or integer field, and thus doesn't fit into the do_set_realm_property framework.
|
||||
|
|
Loading…
Reference in New Issue