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:
Sahil Batra
2021-08-27 00:33:27 +05:30
committed by Tim Abbott
parent ed71b3211a
commit d4c8284d24
9 changed files with 92 additions and 16 deletions

View File

@@ -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");

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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",

View File

@@ -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) {

View File

@@ -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();
} }

View File

@@ -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

View File

@@ -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>

View File

@@ -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 %}