Viewing File: /usr/local/cpanel/base/frontend/jupiter/js2/mail/mx.js

/* globals LANG:false */

var MXCHECK_UPDATING = 0;

var toggle_info_for = function(routing_option) {
    var more_link = document.getElementById(routing_option + "_toggle_more");
    var less_link = document.getElementById(routing_option + "_toggle_less");
    var toggle_details = document.getElementById("mxcheck_" + routing_option + "_desc");
    if (/less/.test(toggle_details.className)) {
        more_link.style.display = "none";
        less_link.style.display = "inline";
        toggle_details.className = toggle_details.className.replace(/(?:^|\s)less(?!\S)/g, "");
    } else {
        toggle_details.className += " less";
        less_link.style.display = "none";
        more_link.style.display = "inline";
    }
};

var show_routing_form = function() {
    document.getElementById("mx_input_and_table").style.display = "inline";
};

var hide_routing_form = function() {
    document.getElementById("mx_input_and_table").style.display = "none";
};

var show_error_message = function(message) {
    if (message) {
        document.getElementById("error_message_box").style.display = "block";
        document.getElementById("error_message_text").innerHTML = message;
    }
};

var hide_error_message = function() {
    document.getElementById("error_message_box").style.display = "none";
    document.getElementById("error_message_text").innerHTML = "";
};

var deselect_mxcheck_ui = function() {
    document.getElementById("mxcheck_auto").checked = false;
    document.getElementById("mxcheck_local").checked = false;
    document.getElementById("mxcheck_secondary").checked = false;
    document.getElementById("mxcheck_remote").checked = false;

    document.getElementById("mxcheck_auto_label").style["font-weight"] = "normal";
    document.getElementById("mxcheck_local_label").style["font-weight"] = "normal";
    document.getElementById("mxcheck_secondary_label").style["font-weight"] = "normal";
    document.getElementById("mxcheck_remote_label").style["font-weight"] = "normal";

    document.getElementById("mxcheck_auto_current_setting").innerHTML = "";
    document.getElementById("mxcheck_detected_state_local").innerHTML = "";
    document.getElementById("mxcheck_detected_state_secondary").innerHTML = "";
    document.getElementById("mxcheck_detected_state_remote").innerHTML = "";
};

var get_mxcheck_for_domain_state_ui = function() {
    var mxcheck_state = document.getElementById("mxcheck_state").value;
    var detected_state = document.getElementById("detected_state").value;

    document.getElementById("change_mxcheck_button").disabled = false;
    deselect_mxcheck_ui();
    if (mxcheck_state === "auto" || mxcheck_state === "local" || mxcheck_state === "secondary" || mxcheck_state === "remote") {
        document.getElementById("mxcheck_" + mxcheck_state).checked = true;
        document.getElementById("mxcheck_" + mxcheck_state + "_label").style["font-weight"] = "bold";

        if (mxcheck_state === "auto") {
            if (detected_state === "secondary") {
                document.getElementById("mxcheck_auto_current_setting").innerHTML = ": " + LANG.MX_Backup;
            } else if (detected_state === "remote") {
                document.getElementById("mxcheck_auto_current_setting").innerHTML = ": " + LANG.MX_Remote;
            } else {
                document.getElementById("mxcheck_auto_current_setting").innerHTML = ": " + LANG.MX_Local;
            }
            if (detected_state !== "auto") {
                document.getElementById("mxcheck_detected_state_" + detected_state).innerHTML = "(" + LANG.MX_current_detected_setting + ")";
            }
        }
    }
};

var update_mx_state_from_checkmx = function(checkmx) {
    document.getElementById("mxcheck_state").value = checkmx.mxcheck;
    document.getElementById("detected_state").value = checkmx.detected;
    document.getElementById("mxcheck_status").innerHTML = "";
    get_mxcheck_for_domain_state_ui();
};

var send_api_request = function(api_call_url, callback) {
    var mxcheck_request = new XMLHttpRequest();
    mxcheck_request.onreadystatechange = function() {
        if (mxcheck_request.readyState === 4 ) {
            if (mxcheck_request.status === 200) {
                callback.success(mxcheck_request);
            } else {
                callback.failure();
            }
        }
    };
    mxcheck_request.open("GET", api_call_url, true);
    mxcheck_request.send();
};

var get_mxcheck_for_domain = function() {
    if (MXCHECK_UPDATING) {
        return;
    }

    hide_error_message();

    MXCHECK_UPDATING = 1;
    var mxcheck_domain = document.getElementById("domain").value;

    var api2_call = {
        "cpanel_jsonapi_version": 2,
        "cpanel_jsonapi_module": "Email",
        "cpanel_jsonapi_func": "listmx",
        "show_a_records": 1,
        "domain": mxcheck_domain
    };

    var callback = {
        success: function(o) {
            MXCHECK_UPDATING = 0;
            try {
                var results = JSON.parse(o.responseText);
                var routing_option = {};
                var data = results.cpanelresult.data[0] || {
                    "mxcheck": "",
                    "detected": "",
                };
                routing_option.mxcheck = data.mxcheck;
                routing_option.detected = data.detected;
                update_mx_state_from_checkmx(routing_option);
            } catch (error) {
                show_error_message(LOCALE.maketext("JSON parse failed."));
            }
            get_mxcheck_for_domain_state_ui();
        },
        failure: function() {
            MXCHECK_UPDATING = 0;
            show_error_message(LOCALE.maketext("AJAX Error") + ": " + LOCALE.maketext("Please refresh the page and try again."));
        }
    };

    // send the AJAX request
    send_api_request(CPANEL.urls.json_api(api2_call), callback);
    document.getElementById("change_mxcheck_button").disabled = true;
    document.getElementById("mxcheck_status").innerHTML = LOCALE.maketext("Loading …");
    deselect_mxcheck_ui();
};

var change_mxcheck = function() {

    // don't submit the request if the state hasn't changed
    var mxcheck_state_el = document.getElementById("mxcheck_state");
    var mxcheck = CPANEL.util.get_radio_value("mxcheck", "mxcheck_options_div");
    if (mxcheck_state_el.value === mxcheck) {
        return true;
    }

    hide_error_message();

    var api2_call = {
        "cpanel_jsonapi_version": 2,
        "cpanel_jsonapi_module": "Email",
        "cpanel_jsonapi_func": "setmxcheck",
        "domain": document.getElementById("domain").value,
        "mxcheck": mxcheck
    };

    // callback
    var callback = {
        success: function(o) {
            try {
                var data = JSON.parse(o.responseText);
                if (data.cpanelresult.error) {
                    show_error_message(data.cpanelresult.error);
                } else if (data.cpanelresult.data[0].status === 1) {
                    mxcheck_state_el.value = data.cpanelresult.data[0].mxcheck;
                    document.getElementById("detected_state").value = data.cpanelresult.data[0].detected;
                    document.getElementById("mxcheck_status").innerHTML = "";
                } else {
                    show_error_message(data.cpanelresult.data[0].statusmsg);
                }
            } catch (e) {
                show_error_message(LOCALE.maketext("JSON parse failed."));
            }
            get_mxcheck_for_domain_state_ui();
        },
        failure: function()  {
            show_error_message(LOCALE.maketext("AJAX Error") + ": " + LOCALE.maketext("Please refresh the page and try again."));
            get_mxcheck_for_domain_state_ui();
        }
    };

    // send the request
    send_api_request(CPANEL.urls.json_api(api2_call), callback);

    document.getElementById("change_mxcheck_button").disabled = true;
    document.getElementById("mxcheck_status").innerHTML = CPANEL.icons.ajax + " " + LANG.MX_changing;
};

var toggle_domain = function() {
    var domain = document.getElementById("domain").value;
    if (domain === "_select_") {
        hide_routing_form();
    } else {
        get_mxcheck_for_domain();
        show_routing_form();
    }
};

var init_page = function() {
    var domain_el = document.getElementById("domain");

    // attach event listeners here instead of in template
    if (domain_el.tagName === "SELECT") {
        domain_el.addEventListener("change", toggle_domain);
    }

    document.getElementById("change_mxcheck_button").addEventListener("click", change_mxcheck);

    document.getElementById("mxcheck_auto_toggle").addEventListener("click", function() {
        toggle_info_for("auto");
    }, false);

    document.getElementById("mxcheck_remote_toggle").addEventListener("click", function() {
        toggle_info_for("remote");
    }, false);

    document.getElementById("mxcheck_secondary_toggle").addEventListener("click", function() {
        toggle_info_for("secondary");
    }, false);

    document.getElementById("mxcheck_local_toggle").addEventListener("click", function() {
        toggle_info_for("local");
    }, false);

    if (domain_el.value === "_select_") {
        hide_routing_form();
    } else {
        get_mxcheck_for_domain();
        show_routing_form();
    }
};

document.addEventListener("DOMContentLoaded", init_page);
Back to Directory File Manager