38217-vm/wp-content/plugins/mainwp/assets/js/mainwp-managesites-import.js
2026-02-05 17:08:59 +03:00

836 lines
32 KiB
JavaScript

/**
* Bulk upload sites
*/
let import_current = 0;
let import_stop_by_user = false;
let import_total = 0;
let import_count_success = 0;
let import_count_fails = 0;
window.mainwpVars = window.mainwpVars || {};
jQuery(function () {
import_total = jQuery('#mainwp_managesites_total_import').val();
jQuery(document).on('click', '#mainwp_managesites_btn_import', function () {
if (!import_stop_by_user) {
import_stop_by_user = true;
jQuery('#mainwp_managesites_import_logging .log').append(__('Paused import by user.') + "\n");
jQuery('#mainwp_managesites_btn_import').val(__('Continue'));
jQuery('#mainwp_managesites_btn_save_csv').prop("disabled", false); //Enable
} else {
import_stop_by_user = false;
jQuery('#mainwp_managesites_import_logging .log').append(__('Continue import.') + "\n");
jQuery('#mainwp_managesites_btn_import').val(__('Pause'));
jQuery('#mainwp_managesites_btn_save_csv').attr('disabled', 'true'); // Disable
mainwp_managesites_import_sites();
}
});
jQuery(document).on('click', '#mainwp_managesites_btn_save_csv', function () {
let fail_data = '';
jQuery('#mainwp_managesites_import_fail_logging span').each(function () {
fail_data += jQuery(this).html() + "\r";
});
let blob = new Blob([fail_data], { type: "text/plain;charset=utf-8" });
saveAs(blob, "import_sites_fails.csv");
});
if (jQuery('#mainwp_managesites_do_import').val() == 1) {
mainwp_managesites_import_sites();
}
});
// eslint-disable-next-line complexity
let mainwp_managesites_import_sites = function () { // NOSONAR - to compatible.
if (import_stop_by_user)
return;
let page_href = jQuery("#mainwp-import-sites-modal").attr('data-page-url');
jQuery('#mainwp-importing-sites').hide();
import_current++;
if (import_current > import_total) {
jQuery('#mainwp-import-sites-status-message').hide();
jQuery('#mainwp_managesites_btn_import').attr('disabled', 'true'); //Disable
if (import_count_success < import_total) {
jQuery('#mainwp_managesites_btn_save_csv').prop("disabled", false); //Enable
}
if (import_count_fails == 0) {
jQuery('#mainwp_managesites_import_logging .log').html('<div style="text-align:center;margin:50px 0;"><h2 class="ui icon header"><i class="green check icon"></i><div class="content">Congratulations!<div class="sub header">' + import_count_success + ' sites imported successfully.</div></div></h2></div>');
jQuery('#mainwp_managesites_btn_import').hide();
if (page_href !== undefined && page_href !== '') {
setTimeout(function () {
window.location.href = page_href;
}, 2000);
} else {
setTimeout(function () {
location.reload();
}, 2000);
}
} else {
jQuery('#mainwp_managesites_import_logging .log').append('<div class="ui yellow message">Process completed with errors. ' + import_count_fails + ' site(s) failed to import. Please review logs to resolve problems and try again.</div>');
jQuery('#mainwp_managesites_btn_import').hide();
jQuery('#mainwp-import-sites-modal-try-again').show();
jQuery('#mainwp-import-sites-modal-continue').show();
}
jQuery('#mainwp_managesites_import_logging').scrollTop(jQuery('#mainwp_managesites_import_logging .log').height());
return;
}
// Call the customer constructor without the website on the last run.
if (import_current == import_total) {
mainwp_managesites_import_client_no_website();
}
let import_data = jQuery('#mainwp_managesites_import_csv_line_' + import_current).attr('encoded-data');
let import_line_orig = jQuery('#mainwp_managesites_import_csv_line_' + import_current).attr('original');
const is_page_managesites = jQuery('#mainwp_managesites_do_managesites_import').val(); // Get value page managesites
let decodedVal = JSON.parse(import_data);
let import_wpname = decodedVal.name;
let import_wpurl = decodedVal.url;
let import_wpadmin = decodedVal.adminname;
let import_wpadmin_pwd = decodedVal.adminpwd;
let import_wpgroups = decodedVal.wpgroups;
let import_uniqueId = decodedVal.uniqueId;
let import_http_username = decodedVal.http_user;
let import_http_password = decodedVal.http_pass;
let import_verify_certificate = decodedVal.verify_certificate;
if (typeof (import_wpname) == "undefined")
import_wpname = '';
if (typeof (import_wpurl) == "undefined")
import_wpurl = '';
if (typeof (import_wpadmin) == "undefined")
import_wpadmin = '';
if (typeof (import_wpgroups) == "undefined")
import_wpgroups = '';
if (typeof (import_uniqueId) == "undefined")
import_uniqueId = '';
if (typeof (import_wpadmin_pwd) == "undefined") {
import_wpadmin_pwd = '';
}
jQuery('#mainwp_managesites_import_logging .log').append('<strong>[' + import_current + '] << ' + import_line_orig + '</strong><br/>');
let errors = [];
if (import_wpname == '') {
errors.push(__('Please enter the site name.'));
}
if (import_wpurl == '') {
errors.push(__('Please enter the site URL.'));
}
if (import_wpadmin == '') {
errors.push(__('Please enter username of the site administrator.'));
}
if (errors.length > 0) {
jQuery('#mainwp_managesites_import_logging .log').append('[' + import_current + '] >> Error - ' + errors.join(" ") + '<br/>');
jQuery('#mainwp_managesites_import_fail_logging').append('<span>' + import_line_orig + '</span>');
import_count_fails++;
mainwp_managesites_import_sites();
return;
}
let data = mainwp_secure_data({
action: 'mainwp_checkwp',
name: import_wpname,
url: import_wpurl,
admin: import_wpadmin,
check_me: import_current,
verify_certificate: import_verify_certificate,
http_user: import_http_username,
http_pass: import_http_password
});
jQuery.post(ajaxurl, data, function (res_things) {
let response = res_things.response ?? '';
let check_result = '[' + res_things.check_me + '] >> ';
response = response.trim();
let url = import_wpurl;
if (url.substring(0, 4) != 'http') {
url = 'https://' + url; // default https://.
}
if (!url.endsWith('/')) {
url += '/';
}
url = url.replace(/"/g, '&quot;');
if (response == 'HTTPERROR') {
errors.push(check_result + __('HTTP error: website does not exist!'));
} else if (response == 'NOMAINWP') {
errors.push(check_result + __('MainWP Child plugin not detected! First install and activate the MainWP Child plugin and add your site to MainWP afterwards. Click <a href="%1" target="_blank">here</a> to install <a href="%2" target="_blank">MainWP</a> plugin (do not forget to activate it after installation)', url + 'wp-admin/plugin-install.php?tab=search&type=term&s=mainwp&plugin-search-input=Search+Plugins', url + 'wp-admin/plugin-install.php?tab=search&type=term&s=mainwp&plugin-search-input=Search+Plugins'));
} else if (response.substring(0, 5) == 'ERROR') {
if (response.length == 5) {
errors.push(check_result + __('Undefined error!'));
} else {
errors.push(check_result + 'ERROR: ' + response.substring(6));
}
} else if (response == 'OK') {
let groupids = [];
let data = mainwp_secure_data({
action: "mainwp_addwp",
managesites_add_wpname: import_wpname,
managesites_add_wpurl: url,
managesites_add_wpadmin: import_wpadmin,
managesites_add_adminpwd: encodeURIComponent(import_wpadmin_pwd),
managesites_add_uniqueId: import_uniqueId,
"groupids[]": groupids,
groupnames_import: import_wpgroups,
add_me: import_current,
verify_certificate: import_verify_certificate,
managesites_add_http_user: import_http_username,
managesites_add_http_pass: import_http_password,
});
jQuery.post(ajaxurl, data, function (res_things) {
if (res_things.error) {
response = 'ERROR: ' + res_things.error;
} else {
response = res_things.response;
}
let add_result = '[' + res_things.add_me + '] >> ';
response = response.trim();
if (response.substring(0, 5) == 'ERROR') {
jQuery('#mainwp_managesites_import_fail_logging').append('<span>' + import_line_orig + '</span>');
jQuery('#mainwp_managesites_import_logging .log').append(add_result + response.substring(6) + "<br/>");
import_count_fails++;
} else {
//Message the WP was added.
jQuery('#mainwp_managesites_import_logging .log').append(add_result + response + "<br/>");
// Check if you are on page managesites and import by form.
if (is_page_managesites !== undefined && Number(is_page_managesites) === 1) {
let data_temp_managesites = mainwp_secure_data({
action: 'mainwp_delete_temp_import_website',
managesites_add_wpurl: url,
managesites_add_wpadmin: import_wpadmin,
});
jQuery.post(ajaxurl, data_temp_managesites, function () { });
}
// Create Client
mainwp_managesites_import_client(import_current, res_things.siteid);
import_count_success++;
}
mainwp_managesites_import_sites();
}, 'json').fail(function (xhr, textStatus, errorThrown) {
jQuery('#mainwp_managesites_import_fail_logging').append('<span>' + import_line_orig + '</span>');
jQuery('#mainwp_managesites_import_logging .log').append("error: " + errorThrown + "<br/>");
import_count_fails++;
mainwp_managesites_import_sites();
});
}
if (errors.length > 0) {
jQuery('#mainwp_managesites_import_fail_logging').append('<span>' + import_line_orig + '</span>');
jQuery('#mainwp_managesites_import_logging .log').append(errors.join("\n") + '<br/>');
import_count_fails++;
mainwp_managesites_import_sites();
}
jQuery('#mainwp_managesites_import_logging').scrollTop(jQuery('#mainwp_managesites_import_logging .log').height());
}, 'json');
};
// Handle add new client
const mainwp_managesites_import_client = function (index, siteid) {
let import_client_data = jQuery('#mainwp_managesites_import_client_line_' + index).attr('encoded-data');
if (typeof (import_client_data) == "undefined")
import_client_data = '';
if (import_client_data !== '') {
const data = mainwp_secure_data({
action: 'mainwp_import_website_add_client',
client: import_client_data,
site_id: siteid
});
jQuery.post(ajaxurl, data, function () { });
}
return true;
}
// Handle add new client no website
const mainwp_managesites_import_client_no_website = function () {
let client_data = [];
jQuery('.mainwp_managesites_import_client_no_site_lines').each(function () {
let data = jQuery(this).attr('encoded-data');
client_data.push(data);
});
if (client_data.length > 0) {
const data = mainwp_secure_data({
action: 'mainwp_import_website_add_client_no_site',
client: client_data,
});
jQuery.post(ajaxurl, data, function () { });
}
return true;
}
// Handle page import website
jQuery(document).ready(function ($) {
// Get default value
let import_index = $("#mainwp-managesites-import-row").attr(
"data-default-row"
);
let is_page_setup = $("#mainwp-managesites-import-row").attr(
"data-page-setup"
);
// Store the initial value of the input
let initial_value = "";
// Add new row by clicking Add New Row button
$("#mainwp-managesites-import-row").on("click", function (e) {
e.preventDefault();
import_index++; // Update index before create row.
let new_row = "";
if (Number(is_page_setup) === 1) {
new_row =
mainwp_managesites_import_sites_page_setup_add_row(import_index);
} else {
new_row = mainwp_managesites_import_sites_add_row(import_index);
}
$(this).parent().parent().before(new_row);
});
// When user focuses on input, save initial value
$("#mainwp-managesites-row-import-sites").on("focus", "input", function () {
initial_value = $(this).val();
});
// Attach blur event to all input fields whose name is site_url
$("#mainwp-managesites-row-import-sites").on(
"blur",
".mainwp-managesites-import-site-url",
function () {
const input = $(this);
if (input.val() === initial_value) {
return;
}
const row_index = input.attr("data-row-index");
const input_site_name = $(
"#mainwp-managesites-import-site-name-" + row_index
);
const parsed_url = mainwp_managesites_import_sites_extract_domain(
input.val()
);
if (parsed_url !== "" && parsed_url !== undefined) {
// Update input value with domain name only
input.val(`${parsed_url.origin}${parsed_url.pathname}`);
// Set value site name
input_site_name.val(`${parsed_url.origin}`);
} else {
const user_confirmed = confirm(
__(
"Please enter a valid URL. Example: http://example.com\nClick OK to stay and correct, or Cancel to continue without correcting."
)
);
if (user_confirmed) {
setTimeout(function () {
input.focus();
}, 1); // Reset focus immediately after confirm
}
input_site_name.val(input.val());
}
}
);
// Catch paste event to check URL as soon as data is pasted
$(document).on(
"paste",
".mainwp-managesites-import-site-url",
function () {
const input = $(this);
if (input.val() === initial_value) {
return;
}
const row_index = input.attr("data-row-index");
const input_site_name = $(
"#mainwp-managesites-import-site-name-" + row_index
);
const parsed_url = mainwp_managesites_import_sites_extract_domain(
input.val()
);
if (parsed_url !== "" && parsed_url !== undefined) {
// Update input value with domain name only
input.val(`${parsed_url.origin}${parsed_url.pathname}`);
// Set value site name
input_site_name.val(`${parsed_url.origin}`);
} else {
// Show confirm, asking the user if they want to edit or not
const user_confirmed = confirm(
__(
"The pasted URL is invalid. Example: http://example.com\nClick OK to stay and correct, or Cancel to continue without correcting."
)
);
if (user_confirmed) {
setTimeout(function () {
input.focus();
}, 1); // Reset focus if user selects OK
input_site_name.val(input.val());
}
}
}
);
// Save data when leaving inputs in a row.
$("#mainwp-managesites-row-import-sites").on("blur", "input", function () {
const current_value = $(this).val();
// Check if value has changed before calling AJAX
if (current_value !== initial_value) {
const row_index = $(this).attr("data-row-index");
mainwp_managesites_save_row_temp_data(row_index);
}
});
});
// Function to send temporary data of a row to the server.
const mainwp_managesites_save_row_temp_data = function (row_index) {
const row = jQuery("#mainwp-managesites-import-row-" + row_index);
const site_url = row
.find(`input[name="mainwp_managesites_import[${row_index}][site_url]"]`)
.val();
const admin_name = row
.find(`input[name="mainwp_managesites_import[${row_index}][admin_name]"]`)
.val();
const admin_password = row
.find(
`input[name="mainwp_managesites_import[${row_index}][admin_password]"]`
)
.val();
// Check if the fields site_url, admin_name and admin_password are not empty.
if (site_url && admin_name && admin_password) {
const site_name = row
.find(`input[name="mainwp_managesites_import[${row_index}][site_name]"]`)
.val();
const tag = row
.find(`input[name="mainwp_managesites_import[${row_index}][tag]"]`)
.val();
const security_id = row
.find(
`input[name="mainwp_managesites_import[${row_index}][security_id]"]`
)
.val();
const http_username = row
.find(
`input[name="mainwp_managesites_import[${row_index}][http_username]"]`
)
.val();
const http_password = row
.find(
`input[name="mainwp_managesites_import[${row_index}][http_password]"]`
)
.val();
const verify_certificate = row
.find(
`input[name="mainwp_managesites_import[${row_index}][verify_certificate]"]`
)
.val();
const ssl_version = row
.find(
`input[name="mainwp_managesites_import[${row_index}][ssl_version]"]`
)
.val();
const data = mainwp_secure_data({
action: "mainwp_save_temp_import_website",
status: "save_temp",
row_index: Number(row_index),
site_url: site_url,
admin_name: admin_name,
admin_password: admin_password,
site_name: site_name,
tag: tag,
security_id: security_id,
http_username: http_username,
http_password: http_password,
verify_certificate: verify_certificate,
ssl_version: ssl_version,
});
// Send row save data to server.
jQuery.post(ajaxurl, data, function () { });
}
};
// Function to get the domain part from the entered URL
const mainwp_managesites_import_sites_extract_domain = function (url) { // NOSONAR - to compatible.
try {
// Use URL API to parse URL and get only protocol and host part
return new URL(url);
} catch (e) {
console.log(e);
// If the URL is invalid or contains an error, return an empty string.
}
return "";
};
// Delete row when pressing Delete button.
const mainwp_managesites_import_sites_delete_row = function (index) {
const row = jQuery("#mainwp-managesites-import-row-" + index);
const site_url = row
.find(`input[name="mainwp_managesites_import[${index}][site_url]"]`)
.val();
const admin_name = row
.find(`input[name="mainwp_managesites_import[${index}][admin_name]"]`)
.val();
// Check if the fields site_url, admin_name are not empty.
if (site_url && admin_name) {
const data = mainwp_secure_data({
action: "mainwp_save_temp_import_website",
status: "delete_temp",
row_index: Number(index),
});
jQuery.post(ajaxurl, data, function (response) { });
}
jQuery("#mainwp-managesites-import-row-" + index).remove();
return true;
};
// Toggle form field in page setup wizard.
const mainwp_managesites_import_sites_more_row = function (index) {
jQuery(".mainwp-managesites-import-column-more-" + index).fadeToggle("slow");
jQuery("#icon-visible-" + index).toggle();
jQuery("#icon-hidden-" + index).toggle();
return false;
};
const mainwp_managesites_import_sites_page_setup_add_row = function (row_index) {
row_index--;
return `<div class="row mainwp-managesites-import-rows" id="mainwp-managesites-import-row-${row_index}" data-index="${row_index}">
<div class="four wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"site_url",
"mainwp-managesites-import-site-url-" + row_index,
"mainwp-managesites-import-site-url"
)}
</div>
<div class="four wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"site_name",
"mainwp-managesites-import-site-name-" + row_index,
"mainwp-managesites-import-site-name"
)}
</div>
<div class="four wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"admin_name",
"mainwp-managesites-import-admin-name-" + row_index,
"mainwp-managesites-import-admin-name"
)}
</div>
<div class="three wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"admin_password",
"mainwp-managesites-import-admin-password-" + row_index,
"mainwp-managesites-import-admin-password",
"",
"",
"password"
)}
</div>
<div class="one wide column">
<div class="ui mini fluid input">
<a class="mainwp-managesites-more-import-row" href="javascript:void(0)" onclick="mainwp_managesites_import_sites_more_row(${row_index})" style="margin-right: 10px !important;">
<i class="eye outline icon" id="icon-visible-${row_index}" ></i>
<i class="eye slash outline icon" id="icon-hidden-${row_index}" style="display: none;"></i>
</a>
${mainwp_managesites_import_sites_render_button_remove(row_index)}
</div>
</div>
<div class="three wide column mainwp-managesites-import-column-more-${row_index}" style="display:none">
${mainwp_managesites_import_sites_render_column(
row_index,
"Tag",
"tag",
"tag"
)}
</div>
<div class="three wide column mainwp-managesites-import-column-more-${row_index}" style="display:none">
${mainwp_managesites_import_sites_render_column(
row_index,
"Security ID",
"security_id",
"security-id"
)}
</div>
<div class="three wide column mainwp-managesites-import-column-more-${row_index}" style="display:none">
${mainwp_managesites_import_sites_render_column(
row_index,
"HTTP Username",
"http_username",
"http-username"
)}
</div>
<div class="three wide column mainwp-managesites-import-column-more-${row_index}" style="display:none">
${mainwp_managesites_import_sites_render_column(
row_index,
"HTTP Password",
"http_password",
"http-password"
)}
</div>
<div class="two wide column mainwp-managesites-import-column-more-${row_index}" style="display:none">
${mainwp_managesites_import_sites_render_column(
row_index,
"Verify Certificate",
"verify_certificate",
"verify-certificate",
"number",
1
)}
</div>
<div class="two wide column mainwp-managesites-import-column-more-${row_index}" style="display:none">
${mainwp_managesites_import_sites_render_column(
row_index,
"SSL Version",
"ssl_version",
"ssl-version",
"",
"auto"
)}
</div>
</div>`;
};
// Add new row by clicking Add New Row button.
const mainwp_managesites_import_sites_add_row = function (row_index) {
row_index--;
return `
<div class="row mainwp-managesites-import-rows" id="mainwp-managesites-import-row-${row_index}" data-index="${row_index}" data-temp-id="${row_index}">
<div class="two wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"site_url",
"mainwp-managesites-import-site-url-" + row_index,
"mainwp-managesites-import-site-url"
)}
</div>
<div class="two wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"site_name",
"mainwp-managesites-import-site-name-" + row_index,
"mainwp-managesites-import-site-name"
)}
</div>
<div class="two wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"admin_name",
"mainwp-managesites-import-admin-name-" + row_index,
"mainwp-managesites-import-admin-name"
)}
</div>
<div class="two wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"admin_password",
"mainwp-managesites-import-admin-password-" + row_index,
"mainwp-managesites-import-admin-password",
"",
"",
"password"
)}
</div>
<div class="one wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"tag",
"mainwp-managesites-import-tag-" + row_index,
"mainwp-managesites-import-tag"
)}
</div>
<div class="one wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"security_id",
"mainwp-managesites-import-security-id-" + row_index,
"mainwp-managesites-import-security-id"
)}
</div>
<div class="two wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"http_username",
"mainwp-managesites-import-http-username-" + row_index,
"mainwp-managesites-import-http-username"
)}
</div>
<div class="one wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"http_password",
"mainwp-managesites-import-http-password-" + row_index,
"mainwp-managesites-import-http-password"
)}
</div>
<div class="one wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"verify_certificate",
"mainwp-managesites-import-verify-certificate-" + row_index,
"mainwp-managesites-import-verify-certificate",
"number",
1
)}
</div>
<div class="one wide column">
${mainwp_managesites_import_sites_render_input(
row_index,
"ssl_version",
"mainwp-managesites-import-ssl-version" + row_index,
"mainwp-managesites-import-ssl-version",
"",
"auto"
)}
</div>
<div class="one wide column">
${mainwp_managesites_import_sites_render_button_remove(row_index)}
</div>
</div>`;
};
// Render column.
const mainwp_managesites_import_sites_render_column = function (
row_index,
label,
input_name,
input_class,
input_type = "",
value = ""
) {
return `
<div class="">
<span class="ui small text">${label}</span>
${mainwp_managesites_import_sites_render_input(
row_index,
input_name,
"mainwp-managesites-import-" + input_class + "-" + row_index,
"mainwp-managesites-import-" + input_class,
input_type,
value
)}
</div>`;
};
// Render input.
const mainwp_managesites_import_sites_render_input = function (
row_index,
name,
id = "",
class_st = "",
type = "",
value = "",
filed_type = "text",
) {
return `
<div class="ui mini fluid input">
<input type="${filed_type}" value="${value}" id="${id}" class="mini ${class_st}" name="mainwp_managesites_import[${row_index}][${name}]" data-row-index="${row_index}" ${type === "number" ? "oninput=\"this.value = this.value.replace(/[^0-9]/g, '')\"" : ""}/>
</div>`;
};
// Render button remove row.
const mainwp_managesites_import_sites_render_button_remove = function (
row_index
) {
return `
<a class="mainwp-managesites-delete-import-row" href="#" onclick="mainwp_managesites_import_sites_delete_row(${row_index})">
<i class="trash alternate outline icon"></i>
</a>`;
};
// validate form before submitting form managesites_import.
const mainwp_managesites_import_handle_form_before_submit = function () {
let has_table_data = false;
let csv_selected = jQuery(`input[name="mainwp_managesites_file_bulkupload"]`).val() !== ""; // Check if CSV file is selected
let error_messages = [];
// Iterate through each row in the rows
has_table_data = mainwp_managesites_validate_import_rows(error_messages);
// Check if both CSV and table have data
if (csv_selected && has_table_data) {
error_messages.push(__("You can only submit either the table data or a CSV file, not both at the same time"));
}
// Check if both are empty
if (!csv_selected && !has_table_data) {
error_messages.push(__("Please fill in the table or select a CSV file."));
}
return error_messages;
};
// Check data in model table add new website.
const mainwp_managesites_validate_import_rows = function (error_messages, is_valid_row = false) {
let has_table_data = false;
let valid_row_count = 0;
jQuery(
"#mainwp-managesites-row-import-sites .mainwp-managesites-import-rows"
).each(function (index) {
let site_url = jQuery(
`input[name="mainwp_managesites_import[${index}][site_url]"]`
).val();
let admin_name = jQuery(
`input[name="mainwp_managesites_import[${index}][admin_name]"]`
).val();
let admin_password = jQuery(
`input[name="mainwp_managesites_import[${index}][admin_password]"]`
).val();
// If there is data in any row of the table, check the required fields
if (site_url || admin_name || admin_password) {
has_table_data = true;
let msg = "";
if (!site_url) {
msg = __("Site URL is required in row %1", index + 1);
error_messages.push(msg);
}
if (!admin_name) {
msg = __("Admin Name is required in row %1", index + 1);
error_messages.push(msg);
}
if (!admin_password) {
msg = __("Admin Password is required in row %1", index + 1);
error_messages.push(msg);
}
// If both site_url, admin_name and admin_password have values, increment the counter variable.
if (site_url && admin_name && admin_password) {
valid_row_count++;
}
}
});
if (is_valid_row && error_messages.length === 0 && valid_row_count === 0) {
error_messages.push(__("At least one row must have both Site URL, Admin Name and Admin Password."));
}
return has_table_data;
}