mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	settings: Refactor code for realm message retention setting.
This commit refactors the code for realm message retention setting to make it more similar to code for other time-limit realm settings. There are still separate functions for the message retention setting but they are similar to that of other time-limit settings and can probably help us to deduplicate the code in future. This refactor also helps us in reusing some code for stream message retention setting for changes in #23013. This commit also fixes a bug where save-discard widget not being hidden when resetting the setting to original value. This can only be reproduced when the original setting value is "retain_forever". Following changes have been done in this commit - - Added data-setting-widget-type attribute which is set to "message-retention-setting" similar to "time-limit" value for message edit and delete limit settings. - Added get_message_retention_setting_value function similar to get_time_limit_setting_value function which is used by get_input_element_value. - Removed "message-retention" block from get_complete_data_for_subsection and the message retention setting is now added to request data in populate_data_for_request itself using data-setting-widget-type attribute. - Updated id and class of elements to support the above changes.
This commit is contained in:
		@@ -557,7 +557,9 @@ test("set_up", ({override, override_rewire}) => {
 | 
			
		||||
    );
 | 
			
		||||
    $custom_delete_limit_input.attr("id", "id_realm_message_content_delete_limit_minutes");
 | 
			
		||||
 | 
			
		||||
    $("#id_realm_message_retention_days").set_parent($.create("<stub retention period parent>"));
 | 
			
		||||
    $("#id_realm_message_retention_custom_input").set_parent(
 | 
			
		||||
        $.create("<stub retention period parent>"),
 | 
			
		||||
    );
 | 
			
		||||
    $("#message_content_in_email_notifications_label").set_parent(
 | 
			
		||||
        $.create("<stub in-content setting checkbox>"),
 | 
			
		||||
    );
 | 
			
		||||
 
 | 
			
		||||
@@ -162,13 +162,6 @@ function get_property_value(property_name, for_realm_default_settings) {
 | 
			
		||||
        return "custom_days";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (property_name === "realm_message_retention_setting") {
 | 
			
		||||
        if (page_params.realm_message_retention_days === settings_config.retain_message_forever) {
 | 
			
		||||
            return "retain_forever";
 | 
			
		||||
        }
 | 
			
		||||
        return "retain_for_period";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (property_name === "realm_org_join_restrictions") {
 | 
			
		||||
        if (page_params.realm_emails_restricted_to_domains) {
 | 
			
		||||
            return "only_selected_domain";
 | 
			
		||||
@@ -371,19 +364,45 @@ function set_msg_delete_limit_dropdown() {
 | 
			
		||||
    set_time_limit_setting("realm_message_content_delete_limit_seconds");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function set_message_retention_setting_dropdown() {
 | 
			
		||||
    const value = get_property_value("realm_message_retention_setting");
 | 
			
		||||
    $("#id_realm_message_retention_setting").val(value);
 | 
			
		||||
    change_element_block_display_property(
 | 
			
		||||
        "id_realm_message_retention_days",
 | 
			
		||||
        value === "retain_for_period",
 | 
			
		||||
    );
 | 
			
		||||
    if (
 | 
			
		||||
        get_property_value("realm_message_retention_days") ===
 | 
			
		||||
        settings_config.retain_message_forever
 | 
			
		||||
    ) {
 | 
			
		||||
        $("#id_realm_message_retention_days").val("");
 | 
			
		||||
function get_message_retention_setting_value($input_elem, for_api_data = true) {
 | 
			
		||||
    const select_elem_val = $input_elem.val();
 | 
			
		||||
    if (select_elem_val === "retain_forever") {
 | 
			
		||||
        if (!for_api_data) {
 | 
			
		||||
            return settings_config.retain_message_forever;
 | 
			
		||||
        }
 | 
			
		||||
        return JSON.stringify("unlimited");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const $custom_input = $input_elem.parent().find(".message-retention-setting-custom-input");
 | 
			
		||||
    if ($custom_input.val().length === 0) {
 | 
			
		||||
        return settings_config.retain_message_forever;
 | 
			
		||||
    }
 | 
			
		||||
    return Number.parseInt($custom_input.val(), 10);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function get_dropdown_value_for_message_retention_setting(setting_value) {
 | 
			
		||||
    if (setting_value === settings_config.retain_message_forever) {
 | 
			
		||||
        return "retain_forever";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return "retain_for_period";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function set_message_retention_setting_dropdown() {
 | 
			
		||||
    const value = get_property_value("realm_message_retention_days");
 | 
			
		||||
    const dropdown_val = get_dropdown_value_for_message_retention_setting(value);
 | 
			
		||||
    $("#id_realm_message_retention_days").val(dropdown_val);
 | 
			
		||||
 | 
			
		||||
    change_element_block_display_property(
 | 
			
		||||
        "id_realm_message_retention_custom_input",
 | 
			
		||||
        dropdown_val === "retain_for_period",
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    let custom_input_val = "";
 | 
			
		||||
    if (dropdown_val === "retain_for_period") {
 | 
			
		||||
        custom_input_val = value;
 | 
			
		||||
    }
 | 
			
		||||
    $("#id_realm_message_retention_custom_input").val(custom_input_val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function set_org_join_restrictions_dropdown() {
 | 
			
		||||
@@ -484,9 +503,6 @@ function update_dependent_subsettings(property_name) {
 | 
			
		||||
        case "realm_allow_message_editing":
 | 
			
		||||
            update_message_edit_sub_settings(page_params.realm_allow_message_editing);
 | 
			
		||||
            break;
 | 
			
		||||
        case "realm_message_retention_days":
 | 
			
		||||
            set_message_retention_setting_dropdown();
 | 
			
		||||
            break;
 | 
			
		||||
        case "realm_delete_own_message_policy":
 | 
			
		||||
            set_delete_own_message_policy_dropdown(page_params.realm_delete_own_message_policy);
 | 
			
		||||
            break;
 | 
			
		||||
@@ -578,6 +594,9 @@ function discard_property_element_changes(elem, for_realm_default_settings) {
 | 
			
		||||
        case "realm_message_content_delete_limit_seconds":
 | 
			
		||||
            set_time_limit_setting(property_name);
 | 
			
		||||
            break;
 | 
			
		||||
        case "realm_message_retention_days":
 | 
			
		||||
            set_message_retention_setting_dropdown();
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            if (property_value !== undefined) {
 | 
			
		||||
                set_input_element_value($elem, property_value);
 | 
			
		||||
@@ -732,6 +751,8 @@ export function get_input_element_value(input_elem, input_type) {
 | 
			
		||||
            return undefined;
 | 
			
		||||
        case "time-limit":
 | 
			
		||||
            return get_time_limit_setting_value($input_elem);
 | 
			
		||||
        case "message-retention-setting":
 | 
			
		||||
            return get_message_retention_setting_value($input_elem);
 | 
			
		||||
        default:
 | 
			
		||||
            return undefined;
 | 
			
		||||
    }
 | 
			
		||||
@@ -828,6 +849,9 @@ function check_property_changed(elem, for_realm_default_settings) {
 | 
			
		||||
        case "realm_message_content_delete_limit_seconds":
 | 
			
		||||
            proposed_val = get_time_limit_setting_value($elem, false);
 | 
			
		||||
            break;
 | 
			
		||||
        case "realm_message_retention_days":
 | 
			
		||||
            proposed_val = get_message_retention_setting_value($elem, false);
 | 
			
		||||
            break;
 | 
			
		||||
        case "realm_default_language":
 | 
			
		||||
            proposed_val = $(
 | 
			
		||||
                "#org-notifications .language_selection_widget .language_selection_button span",
 | 
			
		||||
@@ -984,19 +1008,6 @@ export function register_save_discard_widget_handlers(
 | 
			
		||||
                    "#org-notifications .language_selection_widget .language_selection_button span",
 | 
			
		||||
                ).attr("data-language-code");
 | 
			
		||||
                break;
 | 
			
		||||
            case "message_retention": {
 | 
			
		||||
                const message_retention_setting_value = $(
 | 
			
		||||
                    "#id_realm_message_retention_setting",
 | 
			
		||||
                ).val();
 | 
			
		||||
                if (message_retention_setting_value === "retain_forever") {
 | 
			
		||||
                    data.message_retention_days = JSON.stringify("unlimited");
 | 
			
		||||
                } else {
 | 
			
		||||
                    data.message_retention_days = JSON.stringify(
 | 
			
		||||
                        get_input_element_value($("#id_realm_message_retention_days")),
 | 
			
		||||
                    );
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case "other_settings": {
 | 
			
		||||
                const code_block_language_value = default_code_language_widget.value();
 | 
			
		||||
                // No need to JSON-encode, since this value is already a string.
 | 
			
		||||
@@ -1156,10 +1167,10 @@ export function build_page() {
 | 
			
		||||
        update_custom_value_input("realm_message_content_delete_limit_seconds");
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    $("#id_realm_message_retention_setting").on("change", (e) => {
 | 
			
		||||
    $("#id_realm_message_retention_days").on("change", (e) => {
 | 
			
		||||
        const message_retention_setting_dropdown_value = e.target.value;
 | 
			
		||||
        change_element_block_display_property(
 | 
			
		||||
            "id_realm_message_retention_days",
 | 
			
		||||
            "id_realm_message_retention_custom_input",
 | 
			
		||||
            message_retention_setting_dropdown_value === "retain_for_period",
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -69,23 +69,23 @@
 | 
			
		||||
 | 
			
		||||
            <div class="inline-block organization-settings-parent">
 | 
			
		||||
                <div class="input-group">
 | 
			
		||||
                    <label for="id_realm_message_retention_setting" class="dropdown-title">{{t "Message retention period" }}
 | 
			
		||||
                    <label for="id_realm_message_retention_days" class="dropdown-title">{{t "Message retention period" }}
 | 
			
		||||
                    </label>
 | 
			
		||||
                    <select name="realm_message_retention_setting"
 | 
			
		||||
                      id="id_realm_message_retention_setting" class="prop-element"
 | 
			
		||||
                    <select name="realm_message_retention_days"
 | 
			
		||||
                      id="id_realm_message_retention_days" class="prop-element"
 | 
			
		||||
                      data-setting-widget-type="message-retention-setting"
 | 
			
		||||
                      {{#unless zulip_plan_is_not_limited}}disabled{{/unless}}>
 | 
			
		||||
                        <option value="retain_forever">{{t 'Retain forever' }}</option>
 | 
			
		||||
                        <option value="retain_for_period">{{t 'Retain for N days after posting' }}</option>
 | 
			
		||||
                    </select>
 | 
			
		||||
 | 
			
		||||
                    <div class="dependent-inline-block">
 | 
			
		||||
                        <label for="id_realm_message_retention_days" class="inline-block realm-time-limit-label">
 | 
			
		||||
                        <label for="id_realm_message_retention_custom_input" class="inline-block realm-time-limit-label">
 | 
			
		||||
                            {{t 'N' }}:
 | 
			
		||||
                        </label>
 | 
			
		||||
                        <input type="text" id="id_realm_message_retention_days" autocomplete="off"
 | 
			
		||||
                          name="realm_message_retention_days"
 | 
			
		||||
                          class="admin-realm-message-retention-days prop-element"
 | 
			
		||||
                          value="{{ realm_message_retention_days }}"
 | 
			
		||||
                        <input type="text" id="id_realm_message_retention_custom_input" autocomplete="off"
 | 
			
		||||
                          name="realm_message_retention_custom_input"
 | 
			
		||||
                          class="admin-realm-message-retention-days message-retention-setting-custom-input"
 | 
			
		||||
                          data-setting-widget-type="number"
 | 
			
		||||
                          {{#unless zulip_plan_is_not_limited}}disabled{{/unless}}/>
 | 
			
		||||
                    </div>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user