mirror of https://github.com/zulip/zulip.git
settings: Migrate twenty_four_hour_time setting to RealmUserDefault.
This commit removes the existing default_twenty_four_hour_time field in Realm table which was used to set the twenty_four_hour_time setting of new user on joining and instead we now use the twenty_four_hour_time field of RealmUserDefault table for the same. With some tweaks by tabbott to clarify the documentation.
This commit is contained in:
parent
0ef5cb4813
commit
c233ee9935
|
@ -373,9 +373,6 @@ run_test("realm settings", ({override}) => {
|
||||||
event = event_fixtures.realm__update__disallow_disposable_email_addresses;
|
event = event_fixtures.realm__update__disallow_disposable_email_addresses;
|
||||||
test_realm_boolean(event, "realm_disallow_disposable_email_addresses");
|
test_realm_boolean(event, "realm_disallow_disposable_email_addresses");
|
||||||
|
|
||||||
event = event_fixtures.realm__update__default_twenty_four_hour_time;
|
|
||||||
test_realm_boolean(event, "realm_default_twenty_four_hour_time");
|
|
||||||
|
|
||||||
event = event_fixtures.realm__update__email_addresses_visibility;
|
event = event_fixtures.realm__update__email_addresses_visibility;
|
||||||
dispatch(event);
|
dispatch(event);
|
||||||
assert_same(page_params.realm_email_address_visibility, 3);
|
assert_same(page_params.realm_email_address_visibility, 3);
|
||||||
|
|
|
@ -254,13 +254,6 @@ exports.fixtures = {
|
||||||
value: "javascript",
|
value: "javascript",
|
||||||
},
|
},
|
||||||
|
|
||||||
realm__update__default_twenty_four_hour_time: {
|
|
||||||
type: "realm",
|
|
||||||
op: "update",
|
|
||||||
property: "default_twenty_four_hour_time",
|
|
||||||
value: false,
|
|
||||||
},
|
|
||||||
|
|
||||||
realm__update__disallow_disposable_email_addresses: {
|
realm__update__disallow_disposable_email_addresses: {
|
||||||
type: "realm",
|
type: "realm",
|
||||||
op: "update",
|
op: "update",
|
||||||
|
|
|
@ -169,7 +169,6 @@ function test_submit_settings_form(override, submit_form) {
|
||||||
realm_create_stream_by_admins_only: true,
|
realm_create_stream_by_admins_only: true,
|
||||||
realm_waiting_period_threshold: 1,
|
realm_waiting_period_threshold: 1,
|
||||||
realm_default_language: '"es"',
|
realm_default_language: '"es"',
|
||||||
realm_default_twenty_four_hour_time: false,
|
|
||||||
realm_invite_to_stream_policy: settings_config.common_policy_values.by_admins_only.code,
|
realm_invite_to_stream_policy: settings_config.common_policy_values.by_admins_only.code,
|
||||||
realm_create_stream_policy: settings_config.common_policy_values.by_members.code,
|
realm_create_stream_policy: settings_config.common_policy_values.by_members.code,
|
||||||
realm_invite_to_realm_policy: settings_config.common_policy_values.by_members.code,
|
realm_invite_to_realm_policy: settings_config.common_policy_values.by_members.code,
|
||||||
|
@ -262,24 +261,16 @@ function test_submit_settings_form(override, submit_form) {
|
||||||
realm_default_language_elem.val("en");
|
realm_default_language_elem.val("en");
|
||||||
realm_default_language_elem.attr("id", "id_realm_default_language");
|
realm_default_language_elem.attr("id", "id_realm_default_language");
|
||||||
realm_default_language_elem.data = () => "string";
|
realm_default_language_elem.data = () => "string";
|
||||||
const realm_default_twenty_four_hour_time_elem = $("#id_realm_default_twenty_four_hour_time");
|
|
||||||
realm_default_twenty_four_hour_time_elem.val("true");
|
|
||||||
realm_default_twenty_four_hour_time_elem.attr("id", "id_realm_default_twenty_four_hour_time");
|
|
||||||
realm_default_twenty_four_hour_time_elem.data = () => "boolean";
|
|
||||||
|
|
||||||
subsection_elem = $(`#org-${CSS.escape(subsection)}`);
|
subsection_elem = $(`#org-${CSS.escape(subsection)}`);
|
||||||
subsection_elem.closest = () => subsection_elem;
|
subsection_elem.closest = () => subsection_elem;
|
||||||
subsection_elem.set_find_results(".prop-element", [
|
subsection_elem.set_find_results(".prop-element", [realm_default_language_elem]);
|
||||||
realm_default_language_elem,
|
|
||||||
realm_default_twenty_four_hour_time_elem,
|
|
||||||
]);
|
|
||||||
|
|
||||||
submit_form(ev);
|
submit_form(ev);
|
||||||
assert.ok(patched);
|
assert.ok(patched);
|
||||||
|
|
||||||
expected_value = {
|
expected_value = {
|
||||||
default_language: "en",
|
default_language: "en",
|
||||||
default_twenty_four_hour_time: "true",
|
|
||||||
};
|
};
|
||||||
assert.deepEqual(data, expected_value);
|
assert.deepEqual(data, expected_value);
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ const admin_settings_label = {
|
||||||
realm_signup_notifications_stream: $t({defaultMessage: "New user notifications:"}),
|
realm_signup_notifications_stream: $t({defaultMessage: "New user notifications:"}),
|
||||||
realm_inline_image_preview: $t({defaultMessage: "Show previews of uploaded and linked images"}),
|
realm_inline_image_preview: $t({defaultMessage: "Show previews of uploaded and linked images"}),
|
||||||
realm_inline_url_embed_preview: $t({defaultMessage: "Show previews of linked websites"}),
|
realm_inline_url_embed_preview: $t({defaultMessage: "Show previews of linked websites"}),
|
||||||
realm_default_twenty_four_hour_time: $t({defaultMessage: "Time format"}),
|
|
||||||
realm_send_welcome_emails: $t({defaultMessage: "Send emails introducing Zulip to new users"}),
|
realm_send_welcome_emails: $t({defaultMessage: "Send emails introducing Zulip to new users"}),
|
||||||
realm_message_content_allowed_in_email_notifications: $t({
|
realm_message_content_allowed_in_email_notifications: $t({
|
||||||
defaultMessage: "Allow message content in message notification emails",
|
defaultMessage: "Allow message content in message notification emails",
|
||||||
|
@ -88,7 +87,6 @@ export function build_page() {
|
||||||
server_inline_image_preview: page_params.server_inline_image_preview,
|
server_inline_image_preview: page_params.server_inline_image_preview,
|
||||||
realm_inline_url_embed_preview: page_params.realm_inline_url_embed_preview,
|
realm_inline_url_embed_preview: page_params.realm_inline_url_embed_preview,
|
||||||
server_inline_url_embed_preview: page_params.server_inline_url_embed_preview,
|
server_inline_url_embed_preview: page_params.server_inline_url_embed_preview,
|
||||||
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,
|
||||||
realm_name_changes_disabled: page_params.realm_name_changes_disabled,
|
realm_name_changes_disabled: page_params.realm_name_changes_disabled,
|
||||||
|
@ -154,6 +152,7 @@ export function build_page() {
|
||||||
realm_user_settings_defaults.enable_stream_audible_notifications,
|
realm_user_settings_defaults.enable_stream_audible_notifications,
|
||||||
email_notifications_batching_period_values:
|
email_notifications_batching_period_values:
|
||||||
settings_config.email_notifications_batching_period_values,
|
settings_config.email_notifications_batching_period_values,
|
||||||
|
twenty_four_hour_time_values: settings_config.twenty_four_hour_time_values,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (options.realm_logo_source !== "D" && options.realm_night_logo_source === "D") {
|
if (options.realm_logo_source !== "D" && options.realm_night_logo_source === "D") {
|
||||||
|
@ -182,13 +181,6 @@ export function build_page() {
|
||||||
|
|
||||||
$("#id_realm_default_language").val(page_params.realm_default_language);
|
$("#id_realm_default_language").val(page_params.realm_default_language);
|
||||||
$("#id_realm_digest_weekday").val(options.realm_digest_weekday);
|
$("#id_realm_digest_weekday").val(options.realm_digest_weekday);
|
||||||
|
|
||||||
// default_twenty_four_hour time is a boolean in the API but a
|
|
||||||
// dropdown, so we need to convert the value to a string for
|
|
||||||
// storage in the browser's DOM.
|
|
||||||
$("#id_realm_default_twenty_four_hour_time").val(
|
|
||||||
JSON.stringify(page_params.realm_default_twenty_four_hour_time),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function launch(section) {
|
export function launch(section) {
|
||||||
|
|
|
@ -193,7 +193,6 @@ export function dispatch_normal_event(event) {
|
||||||
invite_to_stream_policy: noop,
|
invite_to_stream_policy: noop,
|
||||||
default_code_block_language: noop,
|
default_code_block_language: noop,
|
||||||
default_language: noop,
|
default_language: noop,
|
||||||
default_twenty_four_hour_time: noop,
|
|
||||||
description: noop,
|
description: noop,
|
||||||
digest_emails_enabled: noop,
|
digest_emails_enabled: noop,
|
||||||
digest_weekday: noop,
|
digest_weekday: noop,
|
||||||
|
@ -397,6 +396,7 @@ export function dispatch_normal_event(event) {
|
||||||
"left_side_userlist",
|
"left_side_userlist",
|
||||||
"translate_emoticons",
|
"translate_emoticons",
|
||||||
"starred_message_counts",
|
"starred_message_counts",
|
||||||
|
"twenty_four_hour_time",
|
||||||
];
|
];
|
||||||
|
|
||||||
const container_elem = $("#realm-user-default-settings");
|
const container_elem = $("#realm-user-default-settings");
|
||||||
|
|
|
@ -133,13 +133,13 @@ export function set_up(settings_panel) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
overlays.open_modal(language_modal_elem);
|
overlays.open_modal(language_modal_elem);
|
||||||
});
|
});
|
||||||
|
|
||||||
container.find(".setting_twenty_four_hour_time").on("change", function () {
|
|
||||||
const data = {twenty_four_hour_time: this.value};
|
|
||||||
change_display_setting(data, settings_panel, ".time-settings-status");
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
container.find(".setting_twenty_four_hour_time").on("change", function () {
|
||||||
|
const data = {twenty_four_hour_time: this.value};
|
||||||
|
change_display_setting(data, settings_panel, ".time-settings-status");
|
||||||
|
});
|
||||||
|
|
||||||
container.find(".setting_demote_inactive_streams").on("change", function () {
|
container.find(".setting_demote_inactive_streams").on("change", function () {
|
||||||
const data = {demote_inactive_streams: this.value};
|
const data = {demote_inactive_streams: this.value};
|
||||||
change_display_setting(data, settings_panel, ".display-settings-status");
|
change_display_setting(data, settings_panel, ".display-settings-status");
|
||||||
|
|
|
@ -179,10 +179,6 @@ function get_property_value(property_name) {
|
||||||
return "no_restriction";
|
return "no_restriction";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (property_name === "realm_default_twenty_four_hour_time") {
|
|
||||||
return JSON.stringify(page_params[property_name]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return page_params[property_name];
|
return page_params[property_name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -866,13 +862,6 @@ export function build_page() {
|
||||||
data = {};
|
data = {};
|
||||||
data.authentication_methods = JSON.stringify(get_auth_method_table_data());
|
data.authentication_methods = JSON.stringify(get_auth_method_table_data());
|
||||||
break;
|
break;
|
||||||
case "user_defaults": {
|
|
||||||
const realm_default_twenty_four_hour_time = $(
|
|
||||||
"#id_realm_default_twenty_four_hour_time",
|
|
||||||
).val();
|
|
||||||
data.default_twenty_four_hour_time = realm_default_twenty_four_hour_time;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#unless for_realm_settings}}
|
|
||||||
<div class="time-settings">
|
<div class="time-settings">
|
||||||
<h3 class="inline-block">{{t "Time settings" }}</h3>
|
<h3 class="inline-block">{{t "Time settings" }}</h3>
|
||||||
<div class="alert-notification time-settings-status"></div>
|
<div class="alert-notification time-settings-status"></div>
|
||||||
|
@ -72,7 +71,6 @@
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/unless}}
|
|
||||||
|
|
||||||
<div class="emoji-settings">
|
<div class="emoji-settings">
|
||||||
<h3 class="inline-block light">{{t "Emoji settings" }}</h3>
|
<h3 class="inline-block light">{{t "Emoji settings" }}</h3>
|
||||||
|
|
|
@ -65,14 +65,6 @@
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group">
|
|
||||||
<label for="realm_default_twenty_four_hour_time" class="dropdown-title">{{ admin_settings_label.realm_default_twenty_four_hour_time }}</label>
|
|
||||||
<select name="realm_default_twenty_four_hour_time" class ="setting-widget prop-element" id="id_realm_default_twenty_four_hour_time" data-setting-widget-type="string">
|
|
||||||
{{#each realm_default_twenty_four_hour_time_values}}
|
|
||||||
<option value='{{ this.value }}'>{{ this.description }}</option>
|
|
||||||
{{/each}}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,18 @@ below features are supported.
|
||||||
|
|
||||||
## Changes in Zulip 5.0
|
## Changes in Zulip 5.0
|
||||||
|
|
||||||
|
**Feature level 99**
|
||||||
|
|
||||||
|
* [`PATCH /realm/user_settings_defaults`](/api/update-realm-user-settings-defaults),
|
||||||
|
`PATCH /realm`: The `default_twenty_four_hour_time` parameter to
|
||||||
|
`PATCH /realm` has been replaced by the `twenty_four_hour_time` parameter
|
||||||
|
to `PATCH /realm/user_settings_defaults`, to match the new model for
|
||||||
|
user preference defaults settings.
|
||||||
|
|
||||||
|
* [`POST /register`](/api/register-queue): Removed `realm_default_twenty_four_hour_time`
|
||||||
|
from the response object. This value is now available in the
|
||||||
|
`twenty_four_hour_time` field of the `realm_user_settings_default` object.
|
||||||
|
|
||||||
**Feature level 98**
|
**Feature level 98**
|
||||||
|
|
||||||
* [`POST /subscribe`](/api/subscribe): Added `is_web_public` parameter
|
* [`POST /subscribe`](/api/subscribe): Added `is_web_public` parameter
|
||||||
|
|
|
@ -33,7 +33,7 @@ DESKTOP_WARNING_VERSION = "5.4.3"
|
||||||
# Changes should be accompanied by documentation explaining what the
|
# Changes should be accompanied by documentation explaining what the
|
||||||
# new level means in templates/zerver/api/changelog.md, as well as
|
# new level means in templates/zerver/api/changelog.md, as well as
|
||||||
# "**Changes**" entries in the endpoint's documentation in `zulip.yaml`.
|
# "**Changes**" entries in the endpoint's documentation in `zulip.yaml`.
|
||||||
API_FEATURE_LEVEL = 98
|
API_FEATURE_LEVEL = 99
|
||||||
|
|
||||||
# Bump the minor PROVISION_VERSION to indicate that folks should provision
|
# 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
|
# only when going from an old version of the code to a newer version. Bump
|
||||||
|
|
|
@ -29,9 +29,7 @@ def copy_default_settings(
|
||||||
#
|
#
|
||||||
# Note that this function will do at least one save() on target_profile.
|
# Note that this function will do at least one save() on target_profile.
|
||||||
for settings_name in UserBaseSettings.property_types:
|
for settings_name in UserBaseSettings.property_types:
|
||||||
if settings_name in ["default_language", "twenty_four_hour_time"] and isinstance(
|
if settings_name == "default_language" and isinstance(settings_source, RealmUserDefault):
|
||||||
settings_source, RealmUserDefault
|
|
||||||
):
|
|
||||||
continue
|
continue
|
||||||
value = getattr(settings_source, settings_name)
|
value = getattr(settings_source, settings_name)
|
||||||
setattr(target_profile, settings_name, value)
|
setattr(target_profile, settings_name, value)
|
||||||
|
@ -110,7 +108,6 @@ def create_user_profile(
|
||||||
enter_sends=enter_sends,
|
enter_sends=enter_sends,
|
||||||
onboarding_steps=orjson.dumps([]).decode(),
|
onboarding_steps=orjson.dumps([]).decode(),
|
||||||
default_language=realm.default_language,
|
default_language=realm.default_language,
|
||||||
twenty_four_hour_time=realm.default_twenty_four_hour_time,
|
|
||||||
delivery_email=email,
|
delivery_email=email,
|
||||||
**extra_kwargs,
|
**extra_kwargs,
|
||||||
)
|
)
|
||||||
|
|
|
@ -920,7 +920,7 @@ def check_realm_default_update(
|
||||||
_check_realm_default_update(var_name, event)
|
_check_realm_default_update(var_name, event)
|
||||||
|
|
||||||
assert prop == event["property"]
|
assert prop == event["property"]
|
||||||
assert prop not in ["default_language", "twenty_four_hour_time"]
|
assert prop != "default_language"
|
||||||
assert prop in RealmUserDefault.property_types
|
assert prop in RealmUserDefault.property_types
|
||||||
|
|
||||||
prop_type = RealmUserDefault.property_types[prop]
|
prop_type = RealmUserDefault.property_types[prop]
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
# Generated by Django 3.2.6 on 2021-09-17 17:08
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
from django.db.backends.postgresql.schema import DatabaseSchemaEditor
|
||||||
|
from django.db.migrations.state import StateApps
|
||||||
|
from django.db.models import F
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_twenty_four_hour_time_to_realmuserdefault(
|
||||||
|
apps: StateApps, schema_editor: DatabaseSchemaEditor
|
||||||
|
) -> None:
|
||||||
|
RealmUserDefault = apps.get_model("zerver", "RealmUserDefault")
|
||||||
|
realm_user_default_objects = RealmUserDefault.objects.exclude(
|
||||||
|
twenty_four_hour_time=F("realm__default_twenty_four_hour_time")
|
||||||
|
)
|
||||||
|
for realm_user_default in realm_user_default_objects:
|
||||||
|
realm = realm_user_default.realm
|
||||||
|
realm_user_default.twenty_four_hour_time = realm.default_twenty_four_hour_time
|
||||||
|
realm_user_default.save(update_fields=["twenty_four_hour_time"])
|
||||||
|
|
||||||
|
|
||||||
|
def reverse_migrate_twenty_four_hour_time_to_realmuserdefault(
|
||||||
|
apps: StateApps, schema_editor: DatabaseSchemaEditor
|
||||||
|
) -> None:
|
||||||
|
RealmUserDefault = apps.get_model("zerver", "RealmUserDefault")
|
||||||
|
realm_user_default_objects = RealmUserDefault.objects.exclude(
|
||||||
|
realm__default_twenty_four_hour_time=F("twenty_four_hour_time")
|
||||||
|
)
|
||||||
|
for realm_user_default in realm_user_default_objects:
|
||||||
|
realm = realm_user_default.realm
|
||||||
|
realm.default_twenty_four_hour_time = realm_user_default.twenty_four_hour_time
|
||||||
|
realm.save(update_fields=["default_twenty_four_hour_time"])
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("zerver", "0351_user_topic_visibility_indexes"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RunPython(
|
||||||
|
migrate_twenty_four_hour_time_to_realmuserdefault,
|
||||||
|
reverse_code=reverse_migrate_twenty_four_hour_time_to_realmuserdefault,
|
||||||
|
elidable=True,
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Generated by Django 3.2.6 on 2021-09-17 18:25
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("zerver", "0352_migrate_twenty_four_hour_time_to_realmuserdefault"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name="realm",
|
||||||
|
name="default_twenty_four_hour_time",
|
||||||
|
),
|
||||||
|
]
|
|
@ -387,7 +387,6 @@ class Realm(models.Model):
|
||||||
allow_edit_history: bool = models.BooleanField(default=True)
|
allow_edit_history: bool = models.BooleanField(default=True)
|
||||||
|
|
||||||
# Defaults for new users
|
# 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)
|
default_language: str = models.CharField(default="en", max_length=MAX_LANGUAGE_ID_LENGTH)
|
||||||
|
|
||||||
DEFAULT_NOTIFICATION_STREAM_NAME = "general"
|
DEFAULT_NOTIFICATION_STREAM_NAME = "general"
|
||||||
|
@ -606,7 +605,6 @@ class Realm(models.Model):
|
||||||
invite_to_stream_policy=int,
|
invite_to_stream_policy=int,
|
||||||
move_messages_between_streams_policy=int,
|
move_messages_between_streams_policy=int,
|
||||||
default_language=str,
|
default_language=str,
|
||||||
default_twenty_four_hour_time=bool,
|
|
||||||
description=str,
|
description=str,
|
||||||
digest_emails_enabled=bool,
|
digest_emails_enabled=bool,
|
||||||
disallow_disposable_email_addresses=bool,
|
disallow_disposable_email_addresses=bool,
|
||||||
|
|
|
@ -3894,6 +3894,9 @@ paths:
|
||||||
|
|
||||||
[new-user-defaults]: /help/configure-default-new-user-settings
|
[new-user-defaults]: /help/configure-default-new-user-settings
|
||||||
|
|
||||||
|
See [PATCH /realm/user_settings_defaults](/api/update-realm-user-settings-defaults)
|
||||||
|
for details on possible properties.
|
||||||
|
|
||||||
**Changes**: New in Zulip 5.0 (feature level 95).
|
**Changes**: New in Zulip 5.0 (feature level 95).
|
||||||
properties:
|
properties:
|
||||||
id:
|
id:
|
||||||
|
@ -7832,6 +7835,17 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
type: boolean
|
type: boolean
|
||||||
example: true
|
example: true
|
||||||
|
- name: twenty_four_hour_time
|
||||||
|
in: query
|
||||||
|
description: |
|
||||||
|
Whether time should be [displayed in 24-hour notation](/help/change-the-time-format).
|
||||||
|
|
||||||
|
**Changes**: New in Zulip 5.0 (feature level 99).
|
||||||
|
Previously, this default was edited using the
|
||||||
|
`default_twenty_four_hour_time` parameter to the `PATCH /realm` endpoint.
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
example: true
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: Success
|
description: Success
|
||||||
|
@ -10373,13 +10387,6 @@ paths:
|
||||||
Present if `realm` is present in `fetch_event_types`.
|
Present if `realm` is present in `fetch_event_types`.
|
||||||
|
|
||||||
The default UI language for new users joining this organization.
|
The default UI language for new users joining this organization.
|
||||||
realm_default_twenty_four_hour_time:
|
|
||||||
type: boolean
|
|
||||||
description: |
|
|
||||||
Present if `realm` is present in `fetch_event_types`.
|
|
||||||
|
|
||||||
Whether new members of this organization will see times displayed in
|
|
||||||
24-hour time (true) or 12-hour time (false).
|
|
||||||
realm_description:
|
realm_description:
|
||||||
type: string
|
type: string
|
||||||
description: |
|
description: |
|
||||||
|
@ -11071,6 +11078,12 @@ paths:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: |
|
description: |
|
||||||
Whether time should be [displayed in 24-hour notation](/help/change-the-time-format).
|
Whether time should be [displayed in 24-hour notation](/help/change-the-time-format).
|
||||||
|
|
||||||
|
**Changes**: New in Zulip 5.0 (feature level 99).
|
||||||
|
This value was previously available as
|
||||||
|
`realm_default_twenty_four_hour_time` in
|
||||||
|
the top-level response object (only when `realm` was
|
||||||
|
present in `fetch_event_types`).
|
||||||
dense_mode:
|
dense_mode:
|
||||||
type: boolean
|
type: boolean
|
||||||
description: |
|
description: |
|
||||||
|
|
|
@ -2265,7 +2265,7 @@ class RealmPropertyActionTest(BaseAction):
|
||||||
|
|
||||||
def test_change_realm_user_default_setting(self) -> None:
|
def test_change_realm_user_default_setting(self) -> None:
|
||||||
for prop in RealmUserDefault.property_types:
|
for prop in RealmUserDefault.property_types:
|
||||||
if prop in ["default_language", "twenty_four_hour_time"]:
|
if prop == "default_language":
|
||||||
continue
|
continue
|
||||||
self.do_set_realm_user_default_setting_test(prop)
|
self.do_set_realm_user_default_setting_test(prop)
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,6 @@ class HomeTest(ZulipTestCase):
|
||||||
"realm_default_language",
|
"realm_default_language",
|
||||||
"realm_default_stream_groups",
|
"realm_default_stream_groups",
|
||||||
"realm_default_streams",
|
"realm_default_streams",
|
||||||
"realm_default_twenty_four_hour_time",
|
|
||||||
"realm_description",
|
"realm_description",
|
||||||
"realm_digest_emails_enabled",
|
"realm_digest_emails_enabled",
|
||||||
"realm_digest_weekday",
|
"realm_digest_weekday",
|
||||||
|
|
|
@ -910,10 +910,10 @@ class RealmAPITest(ZulipTestCase):
|
||||||
for prop in RealmUserDefault.property_types:
|
for prop in RealmUserDefault.property_types:
|
||||||
# enable_marketing_emails setting is not actually used and thus cannot be updated
|
# enable_marketing_emails setting is not actually used and thus cannot be updated
|
||||||
# using this endpoint. It is included in notification_setting_types only for avoiding
|
# using this endpoint. It is included in notification_setting_types only for avoiding
|
||||||
# duplicate code. default_language and twenty_four_hour_time are currently present
|
# duplicate code. default_language is currently present in Realm table also and thus
|
||||||
# in Realm table also and thus are updated using '/realm' endpoint, but those
|
# is updated using '/realm' endpoint, but this will be removed in future and the
|
||||||
# will be removed in future and the settings in RealmUserDefault table will be used.
|
# settings in RealmUserDefault table will be used.
|
||||||
if prop in ["default_language", "twenty_four_hour_time", "enable_marketing_emails"]:
|
if prop in ["default_language", "enable_marketing_emails"]:
|
||||||
continue
|
continue
|
||||||
self.do_test_realm_default_setting_update_api(prop)
|
self.do_test_realm_default_setting_update_api(prop)
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ from zerver.lib.actions import (
|
||||||
do_get_user_invites,
|
do_get_user_invites,
|
||||||
do_invite_users,
|
do_invite_users,
|
||||||
do_set_realm_property,
|
do_set_realm_property,
|
||||||
|
do_set_realm_user_default_setting,
|
||||||
get_default_streams_for_realm,
|
get_default_streams_for_realm,
|
||||||
)
|
)
|
||||||
from zerver.lib.email_notifications import enqueue_welcome_emails, followup_day2_email_delay
|
from zerver.lib.email_notifications import enqueue_welcome_emails, followup_day2_email_delay
|
||||||
|
@ -89,6 +90,7 @@ from zerver.models import (
|
||||||
PreregistrationUser,
|
PreregistrationUser,
|
||||||
Realm,
|
Realm,
|
||||||
RealmAuditLog,
|
RealmAuditLog,
|
||||||
|
RealmUserDefault,
|
||||||
Recipient,
|
Recipient,
|
||||||
ScheduledEmail,
|
ScheduledEmail,
|
||||||
Stream,
|
Stream,
|
||||||
|
@ -3714,7 +3716,10 @@ class UserSignUpTest(InviteUserBase):
|
||||||
email = self.nonreg_email("newguy")
|
email = self.nonreg_email("newguy")
|
||||||
password = "newpassword"
|
password = "newpassword"
|
||||||
realm = get_realm("zulip")
|
realm = get_realm("zulip")
|
||||||
do_set_realm_property(realm, "default_twenty_four_hour_time", True, acting_user=None)
|
realm_user_default = RealmUserDefault.objects.get(realm=realm)
|
||||||
|
do_set_realm_user_default_setting(
|
||||||
|
realm_user_default, "twenty_four_hour_time", True, acting_user=None
|
||||||
|
)
|
||||||
|
|
||||||
result = self.client_post("/accounts/home/", {"email": email})
|
result = self.client_post("/accounts/home/", {"email": email})
|
||||||
self.assertEqual(result.status_code, 302)
|
self.assertEqual(result.status_code, 302)
|
||||||
|
@ -3731,7 +3736,10 @@ class UserSignUpTest(InviteUserBase):
|
||||||
self.assertEqual(result.status_code, 302)
|
self.assertEqual(result.status_code, 302)
|
||||||
|
|
||||||
user_profile = self.nonreg_user("newguy")
|
user_profile = self.nonreg_user("newguy")
|
||||||
self.assertEqual(user_profile.twenty_four_hour_time, realm.default_twenty_four_hour_time)
|
realm_user_default = RealmUserDefault.objects.get(realm=realm)
|
||||||
|
self.assertEqual(
|
||||||
|
user_profile.twenty_four_hour_time, realm_user_default.twenty_four_hour_time
|
||||||
|
)
|
||||||
|
|
||||||
def test_signup_already_active(self) -> None:
|
def test_signup_already_active(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -118,7 +118,6 @@ def update_realm(
|
||||||
email_address_visibility: Optional[int] = REQ(
|
email_address_visibility: Optional[int] = REQ(
|
||||||
json_validator=check_int_in(Realm.EMAIL_ADDRESS_VISIBILITY_TYPES), default=None
|
json_validator=check_int_in(Realm.EMAIL_ADDRESS_VISIBILITY_TYPES), default=None
|
||||||
),
|
),
|
||||||
default_twenty_four_hour_time: Optional[bool] = REQ(json_validator=check_bool, default=None),
|
|
||||||
video_chat_provider: Optional[int] = REQ(json_validator=check_int, default=None),
|
video_chat_provider: Optional[int] = REQ(json_validator=check_int, default=None),
|
||||||
giphy_rating: Optional[int] = REQ(json_validator=check_int, default=None),
|
giphy_rating: Optional[int] = REQ(json_validator=check_int, default=None),
|
||||||
default_code_block_language: Optional[str] = REQ(default=None),
|
default_code_block_language: Optional[str] = REQ(default=None),
|
||||||
|
@ -350,6 +349,7 @@ def update_realm_user_settings_defaults(
|
||||||
email_notifications_batching_period_seconds: Optional[int] = REQ(
|
email_notifications_batching_period_seconds: Optional[int] = REQ(
|
||||||
json_validator=check_int, default=None
|
json_validator=check_int, default=None
|
||||||
),
|
),
|
||||||
|
twenty_four_hour_time: Optional[bool] = REQ(json_validator=check_bool, default=None),
|
||||||
) -> HttpResponse:
|
) -> HttpResponse:
|
||||||
if notification_sound is not None or email_notifications_batching_period_seconds is not None:
|
if notification_sound is not None or email_notifications_batching_period_seconds is not None:
|
||||||
check_settings_values(notification_sound, email_notifications_batching_period_seconds)
|
check_settings_values(notification_sound, email_notifications_batching_period_seconds)
|
||||||
|
|
Loading…
Reference in New Issue