From 469cc5318798f3d72b3e5ba640fc7031394cc35e Mon Sep 17 00:00:00 2001 From: Prakhar Pratyush Date: Tue, 24 Dec 2024 16:32:39 +0530 Subject: [PATCH] export: Add banner if admin's private data export setting is disabled. This commit introduces a banner on the "Start Export" modal to notify the admin that their personal setting to export private data is not toggled ON. The banner is shown when the 'Export type' is 'Standard' and admin's personal setting to export private data is not toggled ON. The banner ensures admins are aware their private data will not be exported unless they enable the respective setting. --- web/src/server_events_dispatch.js | 3 ++ web/src/settings_exports.ts | 34 +++++++++++++++++++ .../allow_private_data_export_banner.hbs | 8 +++++ web/templates/start_export_modal.hbs | 1 + web/tests/dispatch.test.cjs | 6 ++++ web/tests/lib/events.cjs | 7 ++++ 6 files changed, 59 insertions(+) create mode 100644 web/templates/modal_banner/allow_private_data_export_banner.hbs diff --git a/web/src/server_events_dispatch.js b/web/src/server_events_dispatch.js index 47799bfa7b..f4f69ba827 100644 --- a/web/src/server_events_dispatch.js +++ b/web/src/server_events_dispatch.js @@ -764,6 +764,9 @@ export function dispatch_normal_event(event) { if (event.property === "presence_enabled") { activity_ui.redraw_user(current_user.user_id); } + if (event.property === "allow_private_data_export") { + settings_exports.refresh_allow_private_data_export_banner(); + } break; } diff --git a/web/src/settings_exports.ts b/web/src/settings_exports.ts index 7b45f17972..4aefe8c3e4 100644 --- a/web/src/settings_exports.ts +++ b/web/src/settings_exports.ts @@ -3,12 +3,14 @@ import type * as tippy from "tippy.js"; import {z} from "zod"; import render_confirm_delete_data_export from "../templates/confirm_dialog/confirm_delete_data_export.hbs"; +import render_allow_private_data_export_banner from "../templates/modal_banner/allow_private_data_export_banner.hbs"; import render_admin_export_consent_list from "../templates/settings/admin_export_consent_list.hbs"; import render_admin_export_list from "../templates/settings/admin_export_list.hbs"; import render_start_export_modal from "../templates/start_export_modal.hbs"; import * as channel from "./channel.ts"; import * as components from "./components.ts"; +import * as compose_banner from "./compose_banner.ts"; import * as confirm_dialog from "./confirm_dialog.ts"; import * as dialog_widget from "./dialog_widget.ts"; import * as dropdown_widget from "./dropdown_widget.ts"; @@ -23,6 +25,7 @@ import * as settings_config from "./settings_config.ts"; import * as timerender from "./timerender.ts"; import type {HTMLSelectOneElement} from "./types.ts"; import * as ui_report from "./ui_report.ts"; +import {user_settings} from "./user_settings.ts"; export const export_consent_schema = z.object({ user_id: z.number(), @@ -257,6 +260,32 @@ export function populate_export_consents_table(): void { filter_by_consent_dropdown_widget.setup(); } +function maybe_show_allow_private_data_export_banner(): void { + if (!user_settings.allow_private_data_export) { + const context = { + banner_type: compose_banner.WARNING, + classname: "allow_private_data_export_warning", + hide_close_button: true, + }; + $("#allow_private_data_export_banner_container").html( + render_allow_private_data_export_banner(context), + ); + } +} + +export function refresh_allow_private_data_export_banner(): void { + if (user_settings.allow_private_data_export) { + $(".allow_private_data_export_warning").remove(); + } else if ($("#allow_private_data_export_banner_container").length > 0) { + maybe_show_allow_private_data_export_banner(); + const $export_type = $("select:not([multiple])#export_type"); + const selected_export_type = Number.parseInt($export_type.val()!, 10); + if (selected_export_type === settings_config.export_type_values.export_public.value) { + $(".allow_private_data_export_warning").hide(); + } + } +} + function show_start_export_modal(): void { const html_body = render_start_export_modal({ export_type_values: settings_config.export_type_values, @@ -300,6 +329,9 @@ function show_start_export_modal(): void { {users_consented_for_export_count, total_users_count}, ), ); + + maybe_show_allow_private_data_export_banner(); + const $export_type = $("select:not([multiple])#export_type"); $export_type.on("change", () => { const selected_export_type = Number.parseInt($export_type.val()!, 10); @@ -308,8 +340,10 @@ function show_start_export_modal(): void { settings_config.export_type_values.export_full_with_consent.value ) { $("#allow_private_data_export_stats").show(); + $(".allow_private_data_export_warning").show(); } else { $("#allow_private_data_export_stats").hide(); + $(".allow_private_data_export_warning").hide(); } }); } diff --git a/web/templates/modal_banner/allow_private_data_export_banner.hbs b/web/templates/modal_banner/allow_private_data_export_banner.hbs new file mode 100644 index 0000000000..1fc539f41e --- /dev/null +++ b/web/templates/modal_banner/allow_private_data_export_banner.hbs @@ -0,0 +1,8 @@ +{{#> modal_banner . }} + +{{/modal_banner}} diff --git a/web/templates/start_export_modal.hbs b/web/templates/start_export_modal.hbs index d046ea6589..df47e12ed8 100644 --- a/web/templates/start_export_modal.hbs +++ b/web/templates/start_export_modal.hbs @@ -1,3 +1,4 @@ +

{{#tr}} A public data export is a complete data export for your organization other than diff --git a/web/tests/dispatch.test.cjs b/web/tests/dispatch.test.cjs index a8fe383f44..3b34b3ece1 100644 --- a/web/tests/dispatch.test.cjs +++ b/web/tests/dispatch.test.cjs @@ -1208,6 +1208,12 @@ run_test("user_settings", ({override}) => { dispatch(event); assert.equal($("#automatically_offer_update_time_zone").prop("checked"), false); } + + event = event_fixtures.user_settings__allow_private_data_export; + override(user_settings, "allow_private_data_export", false); + override(settings_exports, "refresh_allow_private_data_export_banner", noop); + dispatch(event); + assert_same(user_settings.allow_private_data_export, true); }); run_test("update_message (read)", ({override}) => { diff --git a/web/tests/lib/events.cjs b/web/tests/lib/events.cjs index cc5559554e..e720d530b4 100644 --- a/web/tests/lib/events.cjs +++ b/web/tests/lib/events.cjs @@ -883,6 +883,13 @@ exports.fixtures = { }, }, + user_settings__allow_private_data_export: { + type: "user_settings", + op: "update", + property: "allow_private_data_export", + value: true, + }, + user_settings__color_scheme_automatic: { type: "user_settings", op: "update",