mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
settings: Add UI for realm-level defaults of notification settings.
This commit adds UI for realm-level defaults of user notification settings. We do not have "Send test notification" option here.
This commit is contained in:
@@ -58,6 +58,24 @@ function insert_tip_box() {
|
|||||||
.prepend(tip_box);
|
.prepend(tip_box);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_realm_level_notification_settings(options) {
|
||||||
|
const all_notifications_settings = settings_config.all_notifications(
|
||||||
|
realm_user_settings_defaults,
|
||||||
|
);
|
||||||
|
|
||||||
|
// We remove enable_marketing_emails setting from all_notification_settings, since there is no
|
||||||
|
// realm-level default of this setting.
|
||||||
|
all_notifications_settings.settings.other_email_settings = [
|
||||||
|
"enable_digest_emails",
|
||||||
|
"enable_login_emails",
|
||||||
|
];
|
||||||
|
|
||||||
|
options.general_settings = all_notifications_settings.general_settings;
|
||||||
|
options.notification_settings = all_notifications_settings.settings;
|
||||||
|
options.show_push_notifications_tooltip =
|
||||||
|
all_notifications_settings.show_push_notifications_tooltip;
|
||||||
|
}
|
||||||
|
|
||||||
export function build_page() {
|
export function build_page() {
|
||||||
const options = {
|
const options = {
|
||||||
custom_profile_field_types: page_params.custom_profile_field_types,
|
custom_profile_field_types: page_params.custom_profile_field_types,
|
||||||
@@ -129,7 +147,13 @@ export function build_page() {
|
|||||||
default_view_values: settings_config.default_view_values,
|
default_view_values: settings_config.default_view_values,
|
||||||
settings_object: realm_user_settings_defaults,
|
settings_object: realm_user_settings_defaults,
|
||||||
display_settings: settings_config.get_all_display_settings(),
|
display_settings: settings_config.get_all_display_settings(),
|
||||||
settings_label: settings_config.display_settings_labels,
|
settings_label: settings_config.realm_user_settings_defaults_labels,
|
||||||
|
desktop_icon_count_display_values: settings_config.desktop_icon_count_display_values,
|
||||||
|
enable_sound_select:
|
||||||
|
realm_user_settings_defaults.enable_sounds ||
|
||||||
|
realm_user_settings_defaults.enable_stream_audible_notifications,
|
||||||
|
email_notifications_batching_period_values:
|
||||||
|
settings_config.email_notifications_batching_period_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") {
|
||||||
@@ -144,6 +168,8 @@ export function build_page() {
|
|||||||
"https://zulip.readthedocs.io/en/latest/production/giphy-gif-integration.html";
|
"https://zulip.readthedocs.io/en/latest/production/giphy-gif-integration.html";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_realm_level_notification_settings(options);
|
||||||
|
|
||||||
const rendered_admin_tab = render_admin_tab(options);
|
const rendered_admin_tab = render_admin_tab(options);
|
||||||
$("#settings_content .organization-box").html(rendered_admin_tab);
|
$("#settings_content .organization-box").html(rendered_admin_tab);
|
||||||
$("#settings_content .alert").removeClass("show");
|
$("#settings_content .alert").removeClass("show");
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import * as narrow_state from "./narrow_state";
|
|||||||
import * as navigate from "./navigate";
|
import * as navigate from "./navigate";
|
||||||
import {page_params} from "./page_params";
|
import {page_params} from "./page_params";
|
||||||
import * as people from "./people";
|
import * as people from "./people";
|
||||||
|
import {realm_user_settings_defaults} from "./realm_user_settings_defaults";
|
||||||
import * as settings_config from "./settings_config";
|
import * as settings_config from "./settings_config";
|
||||||
import * as spoilers from "./spoilers";
|
import * as spoilers from "./spoilers";
|
||||||
import * as stream_data from "./stream_data";
|
import * as stream_data from "./stream_data";
|
||||||
@@ -90,6 +91,10 @@ export function initialize() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
update_notification_sound_source($("#user-notification-sound-audio"), user_settings);
|
update_notification_sound_source($("#user-notification-sound-audio"), user_settings);
|
||||||
|
update_notification_sound_source(
|
||||||
|
$("#realm-default-notification-sound-audio"),
|
||||||
|
realm_user_settings_defaults,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function update_notification_sound_source(container_elem, settings_object) {
|
function update_notification_sound_source(container_elem, settings_object) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
type RealmDefaultSettingsType = {
|
export type RealmDefaultSettingsType = {
|
||||||
color_scheme: number;
|
color_scheme: number;
|
||||||
default_language: string;
|
default_language: string;
|
||||||
default_view: string;
|
default_view: string;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import Handlebars from "handlebars/runtime";
|
|||||||
|
|
||||||
import {$t, $t_html} from "./i18n";
|
import {$t, $t_html} from "./i18n";
|
||||||
import {page_params} from "./page_params";
|
import {page_params} from "./page_params";
|
||||||
|
import type {RealmDefaultSettingsType} from "./realm_user_settings_defaults";
|
||||||
import type {UserSettingsType} from "./user_settings";
|
import type {UserSettingsType} from "./user_settings";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -371,6 +372,29 @@ export const display_settings_labels = {
|
|||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const realm_user_settings_defaults_labels = {
|
||||||
|
enable_online_push_notifications: $t({
|
||||||
|
defaultMessage: "Send mobile notifications even if user is online (useful for testing)",
|
||||||
|
}),
|
||||||
|
pm_content_in_desktop_notifications: $t({
|
||||||
|
defaultMessage: "Include content of private messages in desktop notifications",
|
||||||
|
}),
|
||||||
|
desktop_icon_count_display: $t({
|
||||||
|
defaultMessage: "Unread count summary (appears in desktop sidebar and browser tab)",
|
||||||
|
}),
|
||||||
|
enable_digest_emails: $t({defaultMessage: "Send digest emails when user is away"}),
|
||||||
|
enable_login_emails: $t({
|
||||||
|
defaultMessage: "Send email notifications for new logins to the account",
|
||||||
|
}),
|
||||||
|
message_content_in_email_notifications: $t({
|
||||||
|
defaultMessage: "Include message content in message notification emails",
|
||||||
|
}),
|
||||||
|
realm_name_in_notifications: $t({
|
||||||
|
defaultMessage: "Include organization name in subject of message notification emails",
|
||||||
|
}),
|
||||||
|
...display_settings_labels,
|
||||||
|
};
|
||||||
|
|
||||||
// NOTIFICATIONS
|
// NOTIFICATIONS
|
||||||
|
|
||||||
export const general_notifications_table_labels = {
|
export const general_notifications_table_labels = {
|
||||||
@@ -404,7 +428,7 @@ export const stream_specific_notification_settings = [
|
|||||||
"wildcard_mentions_notify",
|
"wildcard_mentions_notify",
|
||||||
];
|
];
|
||||||
|
|
||||||
type SettingsObjectType = UserSettingsType;
|
type SettingsObjectType = UserSettingsType | RealmDefaultSettingsType;
|
||||||
type PageParamsItem = keyof SettingsObjectType;
|
type PageParamsItem = keyof SettingsObjectType;
|
||||||
export const stream_notification_settings: PageParamsItem[] = [
|
export const stream_notification_settings: PageParamsItem[] = [
|
||||||
"enable_stream_desktop_notifications",
|
"enable_stream_desktop_notifications",
|
||||||
|
|||||||
@@ -52,11 +52,13 @@ function change_notification_setting(setting, value, status_element, url) {
|
|||||||
settings_ui.do_settings_change(channel.patch, url, data, status_element);
|
settings_ui.do_settings_change(channel.patch, url, data, status_element);
|
||||||
}
|
}
|
||||||
|
|
||||||
function update_desktop_icon_count_display(container, settings_object) {
|
function update_desktop_icon_count_display(container, settings_object, for_realm_settings) {
|
||||||
container
|
container
|
||||||
.find(".setting_desktop_icon_count_display")
|
.find(".setting_desktop_icon_count_display")
|
||||||
.val(settings_object.desktop_icon_count_display);
|
.val(settings_object.desktop_icon_count_display);
|
||||||
unread_ui.update_unread_counts();
|
if (!for_realm_settings) {
|
||||||
|
unread_ui.update_unread_counts();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function set_enable_digest_emails_visibility(container) {
|
export function set_enable_digest_emails_visibility(container) {
|
||||||
@@ -76,9 +78,14 @@ export function set_enable_marketing_emails_visibility() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function set_up(container, settings_object) {
|
export function set_up(container, settings_object, for_realm_settings) {
|
||||||
const patch_url = "/json/settings";
|
let patch_url = "/json/settings";
|
||||||
const notification_sound_elem = $("#user-notification-sound-audio");
|
let notification_sound_elem = $("#user-notification-sound-audio");
|
||||||
|
if (for_realm_settings) {
|
||||||
|
patch_url = "/json/realm/user_settings_defaults";
|
||||||
|
notification_sound_elem = $("#realm-default-notification-sound-audio");
|
||||||
|
}
|
||||||
|
|
||||||
container.find(".notification-settings-form").on("change", "input, select", function (e) {
|
container.find(".notification-settings-form").on("change", "input, select", function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
@@ -96,13 +103,15 @@ export function set_up(container, settings_object) {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
update_desktop_icon_count_display(container, settings_object);
|
update_desktop_icon_count_display(container, settings_object, for_realm_settings);
|
||||||
|
|
||||||
container.find(".send_test_notification").on("click", () => {
|
if (!for_realm_settings) {
|
||||||
notifications.send_test_notification(
|
container.find(".send_test_notification").on("click", () => {
|
||||||
$t({defaultMessage: "This is what a Zulip notification looks like."}),
|
notifications.send_test_notification(
|
||||||
);
|
$t({defaultMessage: "This is what a Zulip notification looks like."}),
|
||||||
});
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
container.find(".play_notification_sound").on("click", () => {
|
container.find(".play_notification_sound").on("click", () => {
|
||||||
if (settings_object.notification_sound !== "none") {
|
if (settings_object.notification_sound !== "none") {
|
||||||
@@ -134,8 +143,10 @@ export function set_up(container, settings_object) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
set_enable_digest_emails_visibility(container);
|
set_enable_digest_emails_visibility(container);
|
||||||
set_enable_marketing_emails_visibility();
|
if (!for_realm_settings) {
|
||||||
rerender_ui();
|
set_enable_marketing_emails_visibility();
|
||||||
|
rerender_ui();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function update_page(container, settings_object) {
|
export function update_page(container, settings_object) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import $ from "jquery";
|
|||||||
import {page_params} from "./page_params";
|
import {page_params} from "./page_params";
|
||||||
import {realm_user_settings_defaults} from "./realm_user_settings_defaults";
|
import {realm_user_settings_defaults} from "./realm_user_settings_defaults";
|
||||||
import * as settings_display from "./settings_display";
|
import * as settings_display from "./settings_display";
|
||||||
|
import * as settings_notifications from "./settings_notifications";
|
||||||
|
|
||||||
export function maybe_disable_widgets() {
|
export function maybe_disable_widgets() {
|
||||||
if (!page_params.is_admin) {
|
if (!page_params.is_admin) {
|
||||||
@@ -18,5 +19,6 @@ export function maybe_disable_widgets() {
|
|||||||
export function set_up() {
|
export function set_up() {
|
||||||
const container = $("#realm-user-default-settings");
|
const container = $("#realm-user-default-settings");
|
||||||
settings_display.set_up(container, realm_user_settings_defaults, true);
|
settings_display.set_up(container, realm_user_settings_defaults, true);
|
||||||
|
settings_notifications.set_up(container, realm_user_settings_defaults, true);
|
||||||
maybe_disable_widgets();
|
maybe_disable_widgets();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,9 @@
|
|||||||
<h3 class="inline-block">{{t "Desktop message notifications" }}</h3>
|
<h3 class="inline-block">{{t "Desktop message notifications" }}</h3>
|
||||||
<div class="alert-notification"></div>
|
<div class="alert-notification"></div>
|
||||||
|
|
||||||
|
{{#unless for_realm_settings}}
|
||||||
<p><a class="send_test_notification">{{t "Test desktop notification" }}</a></p>
|
<p><a class="send_test_notification">{{t "Test desktop notification" }}</a></p>
|
||||||
|
{{/unless}}
|
||||||
|
|
||||||
{{#each notification_settings.desktop_notification_settings}}
|
{{#each notification_settings.desktop_notification_settings}}
|
||||||
{{> settings_checkbox
|
{{> settings_checkbox
|
||||||
|
|||||||
@@ -3,4 +3,6 @@
|
|||||||
{{t "Configure the default personal preference settings for new users joining your organization." }}
|
{{t "Configure the default personal preference settings for new users joining your organization." }}
|
||||||
</div>
|
</div>
|
||||||
{{> display_settings prefix="realm_" for_realm_settings=true}}
|
{{> display_settings prefix="realm_" for_realm_settings=true}}
|
||||||
|
|
||||||
|
{{> notification_settings prefix="realm_" for_realm_settings=true}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -208,6 +208,10 @@
|
|||||||
<source class="notification-sound-source-ogg" type="audio/ogg" />
|
<source class="notification-sound-source-ogg" type="audio/ogg" />
|
||||||
<source class="notification-sound-source-mp3" type="audio/mpeg" />
|
<source class="notification-sound-source-mp3" type="audio/mpeg" />
|
||||||
</audio>
|
</audio>
|
||||||
|
<audio id="realm-default-notification-sound-audio">
|
||||||
|
<source class="notification-sound-source-ogg" type="audio/ogg" />
|
||||||
|
<source class="notification-sound-source-mp3" type="audio/mpeg" />
|
||||||
|
</audio>
|
||||||
<div id="login-to-access-modal-holder"></div>
|
<div id="login-to-access-modal-holder"></div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Reference in New Issue
Block a user