Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/editsets.tmpl

[%
USE Whostmgr;
USE CPScalar;

    stylesheets = [
    Whostmgr.find_file_url('css/tweaksettings_optimized.css'),
    Whostmgr.find_file_url('yui/tabview/assets/skins/sam/tabview.css'),
    Whostmgr.find_file_url('css/_gentweakpage.css')
    ]
    scripts = [
    Whostmgr.find_file_url('yui/tabview/tabview.js')
    ];

    SET rs_nameservers_set = 0;
    FOREACH ns IN data.reseller_nameservers;
        IF ns;
            rs_nameservers_set = 1;
        END;
    END;

#set nameserver_prefix first
VIEW nameserver_table;
    BLOCK text;
        item;
    END;
    BLOCK list;
%]
<div id="[% nameserver_prefix %]_nameServerActions" class="nameservers actions" data-testid="addressRecordsTable" [% table_styles %] >
    <table style class="inline-table" border="0" class="nrmtxt">
        [% FOR cur_nameserver IN item -%]
        [% SET formkey = nameserver_prefix _ ( loop.index ? loop.index + 1 : '' ) -%]
        <tr>
            <td>Nameserver [% loop.index + 1 %]:</td>
            <td><input type="text" name="[% formkey %]" id="input[% formkey %]" value="[% cur_nameserver || '' %]" /></td>

            [% IF Whostmgr.hasroot() %]
                <td><input type="button" id="button-input[% formkey %]" class="btn-secondary" onclick="addns(this.form.[% formkey %]);" value="Configure Address Records" /></td>
            [% END %]
        </tr>
        [% END %]
    </table>
</div>
[%
    END;
END;

WRAPPER 'master_templates/master.tmpl' theme="yui"
app_key='basic_webhost_manager_setup'
;
-%]

<form method="post" action="[% cp_security_token %]/scripts/saveedits" id="fmain" name="fmain">

[% IF data.wwwacct;
    PROCESS '_gentweakpage.tmpl'
        tweakmodule = 'Basic'
        tweakcfg = { display_name => 1, always_show_help => 1, }
        conf = data.wwwacct
        ts_conf = data.ts_conf
        ts_texts = data.ts_texts
    ;
END;
-%]

<h3>Nameservers</h3>
[% SET nameservers_html = [] -%]

[% IF data.reseller_nameservers -%]
[% BLOCK inherit_toggles %]
<div>
    <div style="margin-left:20px;margin-bottom:10px;">
        <label for="inheritFromRootYes">
            <input type="radio" id="inheritFromRootYes" name="inheritFromRoot" value="1" style="margin-left:-20px;" [% rs_nameservers_set ? '' : 'checked' %] />
            [% locale.maketext('Inherit Nameservers from [asis,root]') %]
        </label><br />
        [% FOREACH ns IN data.suggested_nameservers %]
            <div style="color:#737373;font-size:13px;">
                [% IF ns %]
                    [% locale.maketext("Nameserver [_1]: “[_2]”", loop.index + 1, ns) %]
                [% END %]
            </div>
        [% END %]
    </div>
    <div style="margin-left:20px;margin-bottom:10px;">
        <label for="inheritFromRootNo">
            <input type="radio" id="inheritFromRootNo" name="inheritFromRoot" value="0"  style="margin-left:-20px;" [% rs_nameservers_set ? 'checked' : '' %] />
            [% locale.maketext('Explicitly Set the Nameservers') %]
        </label><br />
        <span style="color:#737373;font-size:13px;">[% locale.maketext('Nameservers that you explicitly set will transfer with the user to the new servers upon migration.') %]</span>
    </div>
</div>
[% END %]
[% inherit_root_toggles = PROCESS inherit_toggles %]
[% SET nameserver_prefix = 'reseller_NS' -%]
[% SET table_styles = rs_nameservers_set ? '' : 'style="display:none"' %]
[% nameservers_html.push(
    '<p class="description">Your account’s default nameservers used when you create an account.</p>'
    _ inherit_root_toggles
    _ nameserver_table.print(data.reseller_nameservers)
) -%]
[% END -%]

[% IF data.root_nameservers %]
[% SET nameserver_prefix = 'NS' -%]
[% SET table_styles = '' %]
[% nameservers_html.push(
    '<p class="description">The root account’s default nameservers used when root creates an account.</p>'
    _ nameserver_table.print(data.root_nameservers)
) -%]
[% END -%]

[% nameservers_html.join('<br />') -%]

<br />
<br />

<div class="alert alert-warning acl-warning" id="warning-ns">
    <div class="alert-message acl-warning-message">
        <span class="fa fa-exclamation-triangle"></span>
        [% code_auto_domain = CPScalar.sprintf( '<code>%s</code>', data.autodomain ); %]
        [% locale.maketext("Default nameservers of the type [asis,_1] are not compatible with [asis,_2] domain registrations.", code_auto_domain, "<code>.com</code>") %]
        <a
            href="https://go.cpanel.net/PrivateNameservers"
            target="nameserversDocumentation"
            rel="noopener noreferrer"
            id="nameservers-warning-link"
        >
            [% locale.maketext("Learn More") %]
            <i class="ri-external-link-line"></i>
        </a>
    </div>
</div>
<div>
    <input type="submit" class="btn-primary" value="Save Changes" id="btnSaveChanges" />
</div>
<br />
<br />

</form><!-- end fmain -->

<script type="text/javascript" src="[% MagicRevision('/js/popupbox.js') %]"></script>
<script type="text/javascript">
//<![CDATA[
var addns = function(forme) {
    var nameserver = forme.value;
    do_quick_popupbox({
        title:'Configure Address Records',
        url:'[% cp_security_token %]/scripts2/addaforns',
        showloading:1,
        iframe:1,
        height: 375},'nameserver',nameserver);
};
//]]>

var unconfigurable_ns_domain_re = [% data.unconfigurable_ns_domain_re.json() %]; // '\.cprapid\.com$' -> 'reason'
var suggested_nameservers = [% data.suggested_nameservers.json() or "[]" %];

(function() {
    var suggested_nameservers_are_unconfigurable = suggested_nameservers.filter(_ => !!_).some(unconfigurable);
    var warningNS = document.getElementById('warning-ns');
    var inheritFromRoot = false;
    var inheritFromRootYes = document.getElementById("inheritFromRootYes");
    var showWarning = {};

    function unconfigurable(value) {
        return Object.keys(unconfigurable_ns_domain_re).some((domain_re) => value.match(new RegExp(domain_re)))
    }

    function updateWarning() {
        var show = Object.values(showWarning).some(_ => _);
        show ? warningNS.classList.remove('hidden') : warningNS.classList.add('hidden')
    }

    function registerNS(selector) {
        var nsValues = {}
        var nsInputs = document.querySelectorAll(selector);
        if (!nsInputs.length) { return; }

        nsInputs.forEach(function(el) {
            nsValues[el.id] = el.value;
            el.addEventListener('input', function(event) {
                var target = event.target;
                nsValues[target.id] = target.value;
                showWarning[selector] = Object.values(nsValues).some(unconfigurable)
                showWarning['suggested'] = showWarning[selector]
                updateWarning();
            })
        })
        showWarning[selector] = Object.values(nsValues).some(unconfigurable)
    }

    function _inhertiFromRootListener() {
        inheritFromRoot = inheritFromRootYes.checked;
        var suggested_warning;

        if (showWarning['input[name^="NS"][type="text"]'] == undefined) {
            suggested_warning = suggested_nameservers_are_unconfigurable;
        }

        if (inheritFromRoot) {
            showWarning['suggested'] = suggested_warning;
            showWarning['input[name^=reseller_NS]'] = false;
        } else {
            registerNS('input[name^=reseller_NS]');
            showWarning['suggested'] = false;
        }
        updateWarning();
    }

    if (inheritFromRootYes) {
        _inhertiFromRootListener();

        inheritFromRootYes.addEventListener('change', _inhertiFromRootListener);
        inheritFromRootNo.addEventListener('change', _inhertiFromRootListener);
    }

    registerNS('input[name^="NS"][type="text"]');

    updateWarning();

}())
/*
 * For the "Configure Address Records" buttons near the bottom.
 */
var _updateButtonDisablement = function(eventOrId) {
    var id        = eventOrId instanceof InputEvent ? eventOrId.target.id : eventOrId;
    var textNS    = document.getElementById(id);
    var buttonNS  = document.getElementById('button-' + id);
    if (!buttonNS) { return; }

    var disableReason;
    for (domain_re in unconfigurable_ns_domain_re) {
        if ( textNS.value.match( new RegExp(domain_re) ) ){
            disableReason = unconfigurable_ns_domain_re[domain_re];
        }
    }

    if (disableReason) {
        buttonNS.disabled = true;
        buttonNS.title    = disableReason;
    } else {
        buttonNS.disabled = false;
        buttonNS.removeAttribute('title');
    }
};

var addNSTextListener = function(type, n) {
    var name = type + ( n ? n + 1 : '' ); // same as 'formkey' in TT above

    var textNS = document.getElementById('input' + name);
    if (!textNS) { return; }
    textNS.addEventListener('input', _updateButtonDisablement);
    _updateButtonDisablement('input' + name);
};

var root_nameservers            = [% data.root_nameservers.json() or  "[]" %];
for (var n = 0; n < root_nameservers.length; n++) {
    addNSTextListener('NS', n);
}

[% IF data.reseller_nameservers -%]
var reseller_nameservers        = [% data.reseller_nameservers.json() %];
for (var n = 0; n < reseller_nameservers.length; n++) {
    addNSTextListener('reseller_NS', n);
}
[% END %]

</script>

[% IF data.reseller_nameservers -%]
<script type="text/javascript">
       (function(){
            // Gather Pieces
            var fmain = document.getElementById("fmain");
                nameserverActions = document.getElementById("reseller_NS_nameServerActions"),
                inheritFromRootYes = document.getElementById("inheritFromRootYes"),
                inheritFromRootNo = document.getElementById("inheritFromRootNo"),
                nameserverFields = [],
                nameserversSet = false;

            for (var i = 0; i < fmain.length; i++) {
                if(fmain.elements[i].name.match(/^reseller_NS/)){
                    nameserverFields.push(fmain.elements[i]);
                }
            }

            // Watch for updates
            function _updateInheritRadio(){
                if(inheritFromRootYes.checked){
                    nameserverActions.style.display = "none";
                }else{
                    nameserverActions.style.display = "block";
                }
            }
            inheritFromRootYes.addEventListener("change",_updateInheritRadio);
            inheritFromRootNo.addEventListener("change",_updateInheritRadio);
        })();
</script>
[% END -%]
[% END -%]
Back to Directory File Manager