first commit

This commit is contained in:
2026-04-27 23:13:18 +02:00
commit 8cc95300c7
10702 changed files with 3223926 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
dupxTplRender('scripts/modules/page-components');
dupxTplRender('scripts/modules/ajax-functions');
dupxTplRender('scripts/modules/progress-bar');
dupxTplRender('scripts/modules/params-module');
dupxTplRender('scripts/modules/system-validation-module');
dupxTplRender('scripts/modules/extraction-module');
dupxTplRender('scripts/modules/top-page-messages');
dupxTplRender('scripts/modules/cpanel');
dupxTplRender('scripts/modules/package-deploy');
dupxTplRender('scripts/modules/db-test');
dupxTplRender('scripts/modules/db-charset');
dupxTplRender('scripts/modules/db-install');
dupxTplRender('scripts/modules/site-replace-and-update');
dupxTplRender('scripts/modules/final-tests');
dupxTplRender('scripts/modules/UrlListMapping');
dupxTplRender('scripts/modules/multisite-items-map');
dupxTplRender('scripts/modules/confirm-dialog');

View File

@@ -0,0 +1,291 @@
<?php
/**
*
* @package Duplicator/Installer
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<script>
class UrlListMapping {
wrapperNode = null;
itemListNode = null;
addItemNode = null;
addButton = null;
newItemTeplate = null;
listInfo = null;
inputName = '';
constructor(mainWrapper, inputName) {
if (mainWrapper.length == 0) {
throw 'Wrapper node don\'t exists';
}
if (inputName.length == 0) {
throw 'Input name is empty';
}
this.wrapperNode = mainWrapper;
this.inputName = inputName;
this.itemListNode = this.wrapperNode.find('.overwrite_sites_list');
this.listInfo = this.itemListNode.data('list-info');
this.addItemNode = this.itemListNode.find('.overwrite_site_item.add_item');
this.initAddButton();
}
initAddButton() {
let thisObj = this;
this.addButton = this.addItemNode.find('.add_button');
this.newItemTeplate = jQuery(this.addButton.data('new-item'));
this.addButton.click(function (event) {
event.stopPropagation();
thisObj.addItem();
return false;
});
this.getItemsList().each(function () {
thisObj.initItemEvents(jQuery(this));
});
}
addItem() {
if (!this.canAddNewItem()) {
return;
}
let itemList = this.getItemsList();
let newItem = this.newItemTeplate.clone();
newItem.find(':disabled').prop('disabled', false);
newItem.insertBefore(this.addItemNode);
DUPX.initJsSelect(newItem.find('.js-select'));
this.setSourceIdOptionsEnabled(itemList, newItem, true);
this.changeSelectSourceId();
this.setTargetIdOptionsEnabled(itemList, newItem, true);
this.changeSelectTargetId();
this.initItemEvents(newItem);
this.setAddItemButtonStatus();
this.setRemoveItemButtonStatus();
this.updateLimitMessages();
DUPX.reavelidateOnChangeAction();
}
initItemEvents(item) {
let thisObj = this;
let sourceId = item.find('.source_id');
let targetId = item.find('.target_id');
let newSlug = item.find('.new_slug');
let sourceNoteSlug = item.find('.source-site-note .site-slug');
let targetNoteSlug = item.find('.target-site-note .site-slug');
item.find('.del_item').click(function (event) {
event.stopPropagation();
thisObj.removeItem(item);
return false;
});
sourceId.change(function () {
let currentVal = parseInt(jQuery(this).val());
thisObj.changeSelectSourceId();
let currentData = thisObj.listInfo.sourceInfo.sites['id_' + currentVal];
sourceNoteSlug.text(currentData.domain + currentData.path);
});
targetId.change(function () {
let currentVal = parseInt(jQuery(this).val());
thisObj.changeSelectTargetId();
item.find('.new-slug-wrapper').toggleClass('no-display', (currentVal > 0));
if (currentVal < 1) {
newSlug.trigger('input');
} else {
let currentData = thisObj.listInfo.targetInfo.sites['id_' + currentVal];
targetNoteSlug.text(currentData.domain + currentData.path);
}
});
newSlug.on('input',function(e){
let newText = '';
let newVal = jQuery(this).val();
switch (parseInt(targetId.val())) {
case -1:
newText = (newVal.length == 0 ? '_____/_____' : newVal);
break;
case 0:
newText = thisObj.listInfo.targetInfo.urlPrefix +
(newVal.length == 0 ? '_____' : newVal) +
thisObj.listInfo.targetInfo.urlPostfix;
break;
default:
return;
}
targetNoteSlug.text(newText)
});
sourceId.trigger('change');
targetId.trigger('change');
}
changeSelectSourceId() {
let thisObj = this;
let itemList = this.getItemsList();
itemList.each(function () {
thisObj.setSourceIdOptionsEnabled(itemList, jQuery(this), false);
});
}
setSourceIdOptionsEnabled(itemList, currentItem, autoSelect) {
let selectObj = currentItem.find('.source_id');
let alreadySelectedIds = itemList.not(currentItem).find('.source_id').map(function(idx, elem) {
return parseInt(jQuery(elem).val());
}).get();
selectObj.find('option').each(function () {
let currentValue = parseInt(jQuery(this).attr('value'));
let isAlreadySelected = (jQuery.inArray(currentValue, alreadySelectedIds) > -1);
jQuery(this).prop('disabled', isAlreadySelected);
});
if (autoSelect) {
selectObj.find('option:not([disabled]):first').prop('selected', true);
selectObj.trigger('change');
}
}
changeSelectTargetId(selectObj) {
let thisObj = this;
let itemList = this.getItemsList();
itemList.each(function () {
thisObj.setTargetIdOptionsEnabled(itemList, jQuery(this), false);
});
}
setTargetIdOptionsEnabled(itemList, currentItem, autoSelect) {
let selectObj = currentItem.find('.target_id');
let alreadySelectedIds = itemList.not(currentItem).find('.target_id').map(function(idx, elem) {
return parseInt(jQuery(elem).val());
}).get();
selectObj.find('option').each(function () {
let currentValue = parseInt(jQuery(this).attr('value'));
if (currentValue == 0 || currentValue == -1) {
return;
}
let isAlreadySelected = (jQuery.inArray(currentValue, alreadySelectedIds) > -1);
jQuery(this).prop('disabled', isAlreadySelected);
});
if (autoSelect) {
selectObj.find('option:not([disabled]):first').prop('selected', true);
selectObj.trigger('change');
}
}
updateFormData(formData) {
if (this.wrapperNode.length == 0) {
return formData;
}
let itemsList = this.getItemsList();
if (itemsList.length == 0) {
return formData;
}
let paramValue = [];
let nameSourceId = itemsList.first().find('.source_id').attr('name').replace(/(.+)\[\]/, '$1');
let nameTargetId = itemsList.first().find('.target_id').attr('name').replace(/(.+)\[\]/, '$1');
let nameNewSlug = itemsList.first().find('.new_slug').attr('name').replace(/(.+)\[\]/, '$1');
itemsList.each(function() {
let node = jQuery(this);
let newObj = {
'sourceId': node.find('.source_id').val(),
'targetId': node.find('.target_id').val(),
'newSlug' : node.find('.new_slug').val()
};
paramValue.push(newObj);
});
delete formData[nameSourceId];
delete formData[nameTargetId];
delete formData[nameNewSlug];
formData[this.inputName] = JSON.stringify(paramValue);
return formData;
}
getItemsList() {
return this.itemListNode.find('.overwrite_site_item:not(.title):not(.add_item)');
}
canAddNewItem() {
let numItems = this.getItemsList().length;
return (
numItems < this.listInfo.sourceInfo.numSites &&
numItems < this.listInfo.hardLimit
);
}
canRemoveItem() {
return (this.getItemsList().length > this.listInfo.minListItems);
}
setAddItemButtonStatus() {
this.addButton.prop('disabled', !this.canAddNewItem());
}
setRemoveItemButtonStatus() {
let thisObj = this;
this.getItemsList().each(function () {
jQuery(this).find('.del_item').toggleClass('disabled', !thisObj.canRemoveItem());
});
}
updateLimitMessages() {
let numItems = this.getItemsList().length;
if (numItems >= this.listInfo.sourceInfo.numSites) {
this.addItemNode.find('.overwrite_site_empty_list_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_full_list_msg').removeClass('no-display');
this.addItemNode.find('.overwrite_site_soft_limit_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_hard_limit_msg').addClass('no-display');
} else if (numItems == 0) {
this.addItemNode.find('.overwrite_site_empty_list_msg').removeClass('no-display');
this.addItemNode.find('.overwrite_site_full_list_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_soft_limit_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_hard_limit_msg').addClass('no-display');
} else if (numItems >= this.listInfo.hardLimit) {
this.addItemNode.find('.overwrite_site_empty_list_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_full_list_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_soft_limit_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_hard_limit_msg').removeClass('no-display');
} else if (numItems >= this.listInfo.softLimit) {
this.addItemNode.find('.overwrite_site_empty_list_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_full_list_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_soft_limit_msg').removeClass('no-display');
this.addItemNode.find('.overwrite_site_hard_limit_msg').addClass('no-display');
} else {
this.addItemNode.find('.overwrite_site_empty_list_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_full_list_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_soft_limit_msg').addClass('no-display');
this.addItemNode.find('.overwrite_site_hard_limit_msg').addClass('no-display');
}
}
removeItem(itemNode) {
if (!this.canRemoveItem()) {
return;
}
itemNode.remove();
this.changeSelectSourceId();
this.changeSelectTargetId();
this.setAddItemButtonStatus();
this.setRemoveItemButtonStatus();
this.updateLimitMessages();
DUPX.reavelidateOnChangeAction();
}
}
</script>

View File

@@ -0,0 +1,87 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Security;
use Duplicator\Libs\Snap\SnapJson;
?>
<script>
$(document).ready(function () {
DUPX.iframeInjectHTML = function(iframeObjs, htmlToInject) {
if (iframeObjs.length == 0) return;
var iframeObj = iframeObjs[0];
var iframeDoc = iframeObj.document;
if (iframeObj.contentDocument) {
iframeDoc = iframeObj.contentDocument;
} else if (iframeObj.contentWindow) {
iframeDoc = iframeObj.contentWindow.document;
}
if (iframeDoc) {
iframeDoc.open();
iframeDoc.write(htmlToInject);
iframeDoc.close();
}
};
DUPX.ajaxError = {
wrapper: $('#ajaxerr-area'),
tryAgainButton: $('#ajax-error-try-again'),
preContent: $('#ajaxerr-data .pre-content'),
htmlContent: $('#ajaxerr-data .html-content'),
iframeContent: $('#ajaxerr-data .iframe-content'),
show: function () {
this.wrapper.removeClass('no-display');
},
hide: function () {
this.wrapper.addClass('no-display');
},
update: function (result, textStatus, jqXHR, tryAgainButtonCallback) {
this.wrapper.find('.message').html(result.message);
if (result.errorContent.pre.length) {
this.preContent.text(result.errorContent.pre).removeClass('no-display');
} else {
this.preContent.addClass('no-display');
}
if (result.errorContent.html.length) {
this.htmlContent.html(result.errorContent.html).removeClass('no-display');
} else {
this.htmlContent.addClass('no-display');
}
if (result.errorContent.iframe.length) {
DUPX.iframeInjectHTML(this.iframeContent, result.errorContent.iframe);
this.iframeContent.removeClass('no-display');
} else {
this.iframeContent.addClass('no-display');
}
if (typeof tryAgainButtonCallback === "function") {
this.tryAgainButton.off().one('click', tryAgainButtonCallback).removeClass('no-display');
} else {
this.tryAgainButton.off().addClass('no-display');
}
}
};
DUPX.ajaxErrorDisplayRestart = function (result, textStatus, jqXHR) {
DUPX.pageComponents.showError(result, textStatus, jqXHR, function () {
window.location.href = <?php echo SnapJson::jsonEncode(Security::getInstance()->getBootUrl()); ?>;
});
};
DUPX.ajaxErrorDisplayHideError = function (result, textStatus, jqXHR) {
DUPX.pageComponents.showError(result, textStatus, jqXHR, function () {
DUPX.pageComponents.showContent();
});
};
});
</script>

View File

@@ -0,0 +1,74 @@
<?php
/**
*
* @package templates/default
*/
use Duplicator\Libs\Snap\SnapJson;
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<script>
DUPX.confirmDialog = {
content: null,
advCheckCheckbox: null,
loadAndOpen: function () {
const confirmDialogAction = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_PROCEED_CONFIRM_DIALOG); ?>;
const confirmDialogToken = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_PROCEED_CONFIRM_DIALOG)); ?>;
let thisObj = this;
if (this.content !== null) {
this.content.remove();
this.content = null;
}
DUPX.StandarJsonAjaxWrapper(
confirmDialogAction,
confirmDialogToken,
{},
function (data) {
thisObj.content = $(data.actionData);
thisObj.advCheckCheckbox = thisObj.content.find("#dialog-adv-confirm-check");
thisObj.open();
}
);
},
open: function () {
if (this.content.length == 0) {
return;
}
let thisObj = this;
this.content.dialog({
resizable: false,
height: "auto",
width: 700,
modal: true,
position: {my: 'top', at: 'top+150'},
buttons: {
"OkButton": {
text: "OK",
id: "db-install-dialog-confirm-button",
click: function () {
if (thisObj.advCheckCheckbox.length > 0 && !thisObj.advCheckCheckbox.is(":checked")) {
return;
}
$(this).dialog("close");
DUPX.deployStep1();
}
},
"CancelButton": {
text: "Cancel",
id: "db-install-dialog-cancel-button",
click: function () {
$(this).dialog("close");
}
}
}
});
}
};
</script>

View File

@@ -0,0 +1,316 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
$archiveConfig = DUPX_ArchiveConfig::getInstance();
?>
<script>
const cpnlHostInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_HOST)); ?>;
const cpnlUserInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_USER)); ?>;
const cpnlPassInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_PASS)); ?>;
const cpnlDbHostInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_DB_HOST)); ?>;
const cpnlDbUserInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_DB_USER_TXT)); ?>;
const cpnlDbPassInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_DB_PASS)); ?>;
const cpnlDbActionInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_DB_ACTION)); ?>;
const cpnlDbNameWrapperId = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_CPNL_DB_NAME_TXT)); ?>;
const cpnlDbNameInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_DB_NAME_TXT)); ?>;
const cpnlDbNameSelWrapperId = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_CPNL_DB_NAME_SEL)); ?>;
const cpnlDbNameSelInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_DB_NAME_SEL)); ?>;
const cpnlPrefixInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_PREFIX)); ?>;
const cpnlDbUserWrapperId = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_CPNL_DB_USER_TXT)); ?>;
const cpnlDbUserSelWrapperId = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_CPNL_DB_USER_SEL)); ?>;
const cpnlDbUserSelInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_DB_USER_SEL)); ?>;
const cpnlDbUserCheckInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_DB_USER_CHK)); ?>;
const cpnlIgnorePrefixInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_CPNL_IGNORE_PREFIX)); ?>;
var cpnlPrefix = '';
var CPNL_TOKEN;
var CPNL_DBINFO = null;
var CPNL_DBUSERS = null;
var CPNL_CONNECTED = false;
var CPNL_PREFIX = false;
/**
* Returns the windows active url */
DUPX.getcPanelURL = function (button)
{
var loc = window.location;
var newVal = loc.protocol + '//' + loc.hostname + ':2038';
$(button).parent().find('input').val(newVal);
};
/**
* Performs cpnl connection and updates UI */
DUPX.cpnlConnect = function ()
{
$('#s2-cpnl-connect-btn').attr('readonly', 'true').val('Connecting... Please Wait!');
$('a#s2-cpnl-status-msg').hide();
var apiAccountActive = function (data)
{
var html = "";
var error = "Unknown Error";
var cpnlPrefix = "";
var validHost = false;
var validUser = false;
if (typeof data == 'undefined') {
error = "Unknown error, unable to retrive data request.";
CPNL_CONNECTED = false;
} else if (data.hasOwnProperty('status') && data.status == 0) {
error = data.hasOwnProperty('statusText') ? data.statusText : "Unknown error, unable to retrive status text.";
CPNL_CONNECTED = false;
} else if (data.hasOwnProperty('result')) {
validHost = data.result.valid_host;
validUser = data.result.valid_user;
CPNL_DBINFO = data.result.hasOwnProperty('dbinfo') ? data.result.dbinfo : null;
CPNL_DBUSERS = data.result.hasOwnProperty('dbusers') ? data.result.dbusers : null;
CPNL_CONNECTED = validHost && validUser;
}
html += validHost ? "<b>Host:</b> <div class='dupx-pass'>Success</div> &nbsp; "
: "<b>Host:</b> <div class='dupx-fail'>Unable to Connect</div> &nbsp;";
html += validUser ? "<b>Account:</b> <div class='dupx-pass'>Found</div><br/>"
: "<b>Account:</b> <div class='dupx-fail'>Not Found</div><br/>";
if (CPNL_CONNECTED)
{
var setupDBName = '<?php echo json_encode($paramsManager->getValue(PrmMng::PARAM_CPNL_DB_NAME_TXT)); ?>';
var setupDBUser = '<?php echo json_encode($paramsManager->getValue(PrmMng::PARAM_CPNL_DB_USER_TXT)); ?>';
var $dbNameSelect = $("#" + cpnlDbNameSelInputId);
var $dbUserSelect = $("#" + cpnlDbUserSelInputId);
//Set Prefix data
if (data.result.is_prefix_on.status)
{
cpnlPrefix = $('#' + cpnlUserInputId).val() + "_";
$('#' + cpnlPrefixInputId).val(cpnlPrefix);
var dbnameTxt = $("#" + cpnlDbNameInputId).val();
var dbuserTxt = $("#" + cpnlDbUserInputId).val();
$("#cpnl-prefix-dbname, #cpnl-prefix-dbuser").show().html(cpnlPrefix);
if (dbnameTxt.indexOf(cpnlPrefix) != -1) {
$("#" + cpnlDbNameInputId).val(dbnameTxt.replace(cpnlPrefix, ''));
}
if (dbuserTxt.indexOf(cpnlPrefix) != -1) {
$("#" + cpnlDbUserInputId).val(dbuserTxt.replace(cpnlPrefix, ''));
}
CPNL_PREFIX = true;
} else {
$("#cpnl-prefix-dbname, #cpnl-prefix-dbuser").hide().html("");
$('#' + cpnlIgnorePrefixInputId).attr('checked', 'true');
$('#' + cpnlIgnorePrefixInputId).attr('onclick', 'return false;');
$('#' + cpnlIgnorePrefixInputId).attr('onkeydown', 'return false;');
var $label = $('label[for="cpnl_ignore_prefix"]');
$label.css('color', 'gray');
$label.html($label.text() + ' <i>(this option has been set to readonly by host)</i>');
CPNL_PREFIX = false;
}
//Enable database inputs and show header green go icon
DUPX.cpnlToggleLogin('on');
$('a#s2-cpnl-status-msg').html('<div class="status-badge success"></div>');
$('div#s2-cpnl-status-details-msg').html(html);
$("div[data-target='#s2-cpnl-area']").trigger('click');
//Load DB Names
$dbNameSelect.find('option').remove().end();
$dbNameSelect.append($("<option selected></option>").val("").text("-- Select Database --"));
$.each(CPNL_DBINFO, function (key, value)
{
(setupDBName == value.db)
? $dbNameSelect.append($("<option selected></option>").val(value.db).text(value.db))
: $dbNameSelect.append($("<option></option>").val(value.db).text(value.db));
});
//Load DB Users
$dbUserSelect.find('option').remove().end();
$dbUserSelect.append($("<option selected></option>").val("").text("-- Select User --"));
$.each(CPNL_DBUSERS, function (key, value)
{
(setupDBUser == value.user)
? $dbUserSelect.append($("<option selected></option>").val(value.user).text(value.user))
: $dbUserSelect.append($("<option></option>").val(value.user).text(value.user));
});
//Warn on host name mismatch
var address = window.location.hostname.replace('www.', '');
($("#" + cpnlHostInputId).val().indexOf(address) == -1)
? $('#cpnl-host-warn').show()
: $('#cpnl-host-warn').hide();
} else
{
//Auto message display
html += "<b>Details:</b> Unable to connect. Error status is: '" + error + "'. <br/>";
$('a#s2-cpnl-status-msg').html('<div class="status-badge fail"></div>');
$('div#s2-cpnl-status-details-msg').html(html);
$('div#s2-cpnl-status-details').show(500);
//Inputs
DUPX.cpnlToggleLogin('off');
}
$('a#s2-cpnl-status-msg').show(200);
$('#s2-cpnl-connect-btn').removeAttr('readonly').val('Connect');
}
DUPX.requestAPI({
operation: '/cpnl/create_token/',
timeout: 10000,
params: {
host: $("#" + cpnlHostInputId).val(),
user: $('#' + cpnlUserInputId).val(),
pass: $('#' + cpnlPassInputId).val()
},
callback: function (data) {
CPNL_TOKEN = data.result;
DUPX.requestAPI({
operation: '/cpnl/get_setup_data/',
timeout: 30000,
params: {token: data.result},
callback: apiAccountActive
});
}
});
};
/**
* Enables/Disables database setup and cPanel login inputs */
DUPX.cpnlToggleLogin = function (state)
{
//Change btn enabled
if (state == 'on') {
$('#' + cpnlHostInputId + ', #' + cpnlUserInputId + ', #' + cpnlPassInputId).addClass('readonly').attr('readonly', 'true');
$('#s2-cpnl-connect-btn').addClass('disabled').attr('disabled', 'true');
$('#s2-cpnl-change-btn').removeAttr('disabled').removeClass('disabled').show();
//Enable cPanel Database
$('#s2-cpnl-db-opts td').css('color', 'black');
$('#s2-cpnl-db-opts input, #s2-cpnl-db-opts select').removeAttr('disabled');
$('#cpnl-host-get-lnk').hide();
}
//Change btn disabled
else {
$('#' + cpnlHostInputId + ', #' + cpnlUserInputId + ', #' + cpnlPassInputId).removeClass('readonly').removeAttr('readonly');
$('#s2-cpnl-connect-btn').removeAttr('disabled', 'true').removeClass('disabled');
$('#s2-cpnl-change-btn').addClass('disabled').attr('disabled', 'true');
//Disable cPanel Database
$('#s2-cpnl-db-opts td').css('color', 'silver');
$('#s2-cpnl-db-opts input, #s2-cpnl-db-opts select').attr('disabled', 'true');
$('#cpnl-host-get-lnk').show();
}
}
/**
* Updates action status */
DUPX.cpnlDBActionChange = function ()
{
var action = $('#' + cpnlDbActionInputId).val();
$('#s2-cpnl-db-opts .s2-warning-manualdb').hide();
$('#s2-cpnl-db-opts .s2-warning-emptydb').hide();
$('#s2-cpnl-db-opts .s2-warning-renamedb').hide();
switch (action) {
case 'create' :
$('#' + cpnlDbNameInputId).val('');
$('#' + cpnlDbNameWrapperId).show();
$('#' + cpnlDbNameSelWrapperId).hide();
break;
case 'empty' :
$('#' + cpnlDbNameSelInputId).trigger('change');
$('#' + cpnlDbNameWrapperId).hide();
$('#' + cpnlDbNameSelWrapperId).show();
$('#s2-cpnl-db-opts .s2-warning-emptydb').show();
break;
case 'rename' :
$('#' + cpnlDbNameSelInputId).trigger('change');
$('#' + cpnlDbNameWrapperId).hide();
$('#' + cpnlDbNameSelWrapperId).show();
$('#s2-cpnl-db-opts .s2-warning-renamedb').show();
break;
case 'manual' :
$('#' + cpnlDbNameSelInputId).trigger('change');
$('#' + cpnlDbNameWrapperId).hide();
$('#' + cpnlDbNameSelWrapperId).show();
$('#s2-cpnl-db-opts .s2-warning-manualdb').show();
break;
}
};
DUPX.cpnlPrefixIgnore = function ()
{
if ($('#' + cpnlIgnorePrefixInputId).prop('checked')) {
CPNL_PREFIX = false;
$("#cpnl-prefix-dbname, #cpnl-prefix-dbuser").hide();
} else {
CPNL_PREFIX = true;
$("#cpnl-prefix-dbname, #cpnl-prefix-dbuser").show();
}
}
/**
* Toggle the DB user name type */
DUPX.cpnlDBUserToggle = function ()
{
$('#' + cpnlDbUserWrapperId + ', #' + cpnlDbUserSelWrapperId).hide();
$('#' + cpnlDbUserSelInputId + ', #' + cpnlDbUserInputId).removeAttr('disabled');
$('#' + cpnlDbUserSelInputId + ', #' + cpnlDbUserInputId).removeAttr('required');
$('#' + cpnlDbUserInputId).attr('required', 'true');
$('#' + cpnlDbPassInputId).attr({
'required': 'true'
});
//Use existing
if ($('#' + cpnlDbUserCheckInputId).prop('checked')) {
$('#' + cpnlDbUserInputId).val('');
$('#' + cpnlDbUserWrapperId).show();
$('#' + cpnlDbUserSelWrapperId).hide();
//Create New
} else {
$('#' + cpnlDbUserSelInputId).trigger('changed');
$('#' + cpnlDbUserWrapperId).hide();
$('#' + cpnlDbUserSelWrapperId).show();
}
}
//DOCUMENT LOAD
$(document).ready(function ()
{
//Custom Validator
window.Parsley.addValidator('cpnluser', {
validateString: function (value) {
var prefix = CPNL_PREFIX
? $('#' + cpnlUserInputId).val() + "_" + value
: value;
return (prefix.length <= 24);
},
messages: {
en: 'Database user cannot be more that 24 characters including prefix'
}
});
//Attach Events
$("#" + cpnlDbActionInputId).on("change", DUPX.cpnlDBActionChange);
$("#" + cpnlDbUserCheckInputId).click(DUPX.cpnlDBUserToggle);
DUPX.cpnlDBActionChange();
DUPX.cpnlDBUserToggle();
DUPX.cpnlToggleLogin('off');
$("input[name='cpnl-dbmysqlmode']").click(function () {
($(this).val() == 'CUSTOM')
? $('#cpnl-dbmysqlmode_3_view').show()
: $('#cpnl-dbmysqlmode_3_view').hide();
});
});
</script>

View File

@@ -0,0 +1,43 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\Descriptors\ParamDescDatabase;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
?>
<script>
const dbCharsetDefaultID = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_DB_CHARSET)); ?>;
const dbCollateDefaultID = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_DB_COLLATE)); ?>;
$(document).ready(function ()
{
$('#' + dbCharsetDefaultID).on('change', function () {
let collateDefault = $(this).find(':selected').data('collation-default');
let collations = $(this).find(':selected').data('collations');
let collateObj = $('#' + dbCollateDefaultID);
collateObj.empty();
$("<option></option>")
.appendTo(collateObj)
.attr('value', '')
.text(<?php echo json_encode(ParamDescDatabase::EMPTY_COLLATION_LABEL); ?> + ' [' + collateDefault + ']')
.prop('selected', true);
for (let i = 0; i < collations.length; i++) {
let label = collations[i] + (collations[i] === collateDefault ? <?php echo json_encode(ParamDescDatabase::DEFAULT_COLLATE_POSTFIX); ?> : '');
$("<option></option>")
.appendTo(collateObj)
.attr('value', collations[i])
.text(label);
}
});
});
</script>

View File

@@ -0,0 +1,124 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
?>
<script>
DUPX.startAjaxDbInstall = function (isTheFirstCall, successCallback)
{
if (isTheFirstCall) {
DUPX.pageComponents.resetTopMessages().showProgress({
'title': 'Installing Database',
'perc': '0%',
'secondary': 'Bytes processed: 0',
'bottomText':
'<i>Keep this window open during the creation process.</i><br/>' +
'<i>This can take several minutes.</i>'
});
}
let dbInstallAction = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_DBINSTALL); ?>;
let dbInstallToken = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_DBINSTALL)); ?>;
let retryAttemp = 0;
DUPX.StandarJsonAjaxWrapper(
dbInstallAction,
dbInstallToken,
{},
function (data) {
DUPX.progress.update({
'perc': data.actionData.perc,
'secondary': data.actionData.queryOffset
});
console.log('dbinstall data', data);
if (data.actionData.is_error) {
const result = {
'success': false,
'message': 'DB INSTALL ERROR: ' + data.actionData.error_msg,
'errorContent': {
'pre': '',
'html': '',
'iframe': ''
},
'actionData': null
};
DUPX.ajaxErrorDisplayHideError(result, null, null);
} else if (data.actionData.continue_chunking) {
DUPX.startAjaxDbInstall(false, successCallback);
} else if (data.actionData.pass) {
if (typeof successCallback === "function") {
successCallback(data);
} else {
alert('db install complete');
}
} else {
const result = {
'success': false,
'message': 'DB INSTALL ERROR: not passed',
'errorContent': {
'pre': '',
'html': '',
'iframe': ''
},
'actionData': null
};
DUPX.ajaxErrorDisplayHideError(result, null, null);
}
},
function (result, textStatus, jqXHR) {
let default_timeout_message = '';
let status = "<b>Server Code:</b> " + jqXHR.status + "<br/>";
status += "<b>Status:</b> " + jqXHR.statusText + "<br/>";
status += "<b>Response:</b> " + jqXHR.responseText + "<hr/>";
if (textStatus && textStatus.toLowerCase() == "timeout" || textStatus.toLowerCase() == "service unavailable") {
status += "<b>Recommendation:</b><br/>";
status += "To resolve this problem please follow the instructions showing " +
"<a target='_blank' href='https://duplicator.com/knowledge-base/how-to-fix-database-connection-issues'>in the FAQ</a>.<br/><br/>";
} else if ((jqXHR.status == 403) || (jqXHR.status == 500)) {
status += "<b>Recommendation</b><br/>";
status += "See <a target='_blank' href='https://duplicator.com/knowledge-base/how-to-resolve-403-500-timeout-issues-on-step-3'>" +
"this section</a> " +
"of the Technical FAQ for possible resolutions.<br/><br/>"
} else if (jqXHR.status == 0) {
status += "<b>Recommendation</b><br/>";
status += "This may be a server timeout and performing a 'Manual Extract' install can avoid timeouts. " +
"See <a target='_blank' href='https://duplicator.com/knowledge-base/how-to-fix-installer-archive-extraction-issues'>" +
"this section</a> " +
"of the FAQ for a description of how to do that.<br/><br/>"
}
result.errorContent.html += status;
DUPX.ajaxErrorDisplayHideError(result, textStatus, jqXHR);
},
{
retryOnFailure: true,
numberOfAttempts: 2,
delayRetryOnFailure: 5000,
callbackOnRetry: function (data, textStatus, jqXHR, options) {
retryAttemp++;
DUPX.progress.update({
'notice': 'Db install failed: ' + data.message + ',<br>' +
'wait ' + (options.delayRetryOnFailure / 1000) + ' seconds and retry.<br>' +
'<b>' + DUPX.stringifyNumber(retryAttemp) + ' attempt</b>'
});
console.log('Callback on retry', data);
}
}
);
};
</script>

View File

@@ -0,0 +1,143 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\InstState;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
if (InstState::getInstance()->getMode() === InstState::MODE_OVR_INSTALL) {
$overwriteData = $paramsManager->getValue(PrmMng::PARAM_OVERWRITE_SITE_DATA);
$ovr_dbhost = $overwriteData['dbhost'];
$ovr_dbname = $overwriteData['dbname'];
$ovr_dbuser = $overwriteData['dbuser'];
$ovr_dbpass = $overwriteData['dbpass'];
} else {
$ovr_dbhost = '';
$ovr_dbname = '';
$ovr_dbuser = '';
$ovr_dbpass = '';
}
?>
<script>
const fileExtractMode = <?php echo SnapJson::jsonEncode(InstState::dbDoNothing()); ?>;
DUPX.toggleFileExtractMode = function(enable = false)
{
if (enable) {
$('.requires-db-hide').hide();
$('.requires-db-disable').prop('disabled', true);
$('.requires-no-db').show();
$('#label-for-advanced').trigger('click');
} else {
$('.requires-db-hide').show();
$('.requires-db-disable').prop('disabled', false);
$('.requires-no-db').hide();
}
}
const dbViewModeInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_DB_VIEW_MODE)); ?>;
const dbHostInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_DB_HOST)); ?>;
const dbNameInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_DB_NAME)); ?>;
const dbUserInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_DB_USER)); ?>;
const dbPassInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_DB_PASS)); ?>;
const dbActionInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_DB_ACTION)); ?>;
DUPX.basicDBActionChange = function ()
{
var action = $('#' + dbActionInputId).val();
$('.s2-basic-pane .s2-warning-manualdb').hide();
$('.s2-basic-pane .s2-warning-emptydb').hide();
$('.s2-basic-pane .s2-warning-renamedb').hide();
DUPX.toggleFileExtractMode(fileExtractMode);
switch (action)
{
case 'create' :
break;
case 'empty' :
$('.s2-basic-pane .s2-warning-emptydb').show(300);
break;
case 'rename' :
$('.s2-basic-pane .s2-warning-renamedb').show(300);
break;
case 'manual' :
$('.s2-basic-pane .s2-warning-manualdb').show(300);
break;
case 'dbdonothing':
DUPX.toggleFileExtractMode(true);
break;
}
};
//DOCUMENT INIT
$(document).ready(function ()
{
$("#" + dbActionInputId).on("change", DUPX.basicDBActionChange);
DUPX.basicDBActionChange();
DUPX.checkOverwriteParameters = function (dbhost, dbname, dbuser, dbpass)
{
$("#" + dbHostInputId).val(<?php echo SnapJson::jsonEncode($ovr_dbhost); ?>).prop('readonly', true);
$("#" + dbNameInputId).val(<?php echo SnapJson::jsonEncode($ovr_dbname); ?>).prop('readonly', true);
$("#" + dbUserInputId).val(<?php echo SnapJson::jsonEncode($ovr_dbuser); ?>).prop('readonly', true);
$("#" + dbPassInputId).val(<?php echo SnapJson::jsonEncode($ovr_dbpass); ?>).prop('readonly', true);
$("#s2-db-basic-setup").show();
};
DUPX.fillInPlaceHolders = function ()
{
$("#" + dbHostInputId).attr('placeholder', <?php echo SnapJson::jsonEncode($ovr_dbhost); ?>).prop('readonly', false);
$("#" + dbNameInputId).attr('placeholder', <?php echo SnapJson::jsonEncode($ovr_dbname); ?>).prop('readonly', false);
$("#" + dbUserInputId).attr('placeholder', <?php echo SnapJson::jsonEncode($ovr_dbuser); ?>).prop('readonly', false);
$("#" + dbPassInputId).attr('placeholder', <?php echo SnapJson::jsonEncode($ovr_dbpass); ?>).prop('readonly', false);
};
DUPX.resetParameters = function ()
{
$("#" + dbHostInputId).val('').attr('placeholder', '').prop('readonly', false);
$("#" + dbNameInputId).val('').attr('placeholder', '').prop('readonly', false);
$("#" + dbUserInputId).val('').attr('placeholder', '').prop('readonly', false);
$("#" + dbPassInputId).val('').attr('placeholder', '').prop('readonly', false);
};
<?php if (InstState::getInstance()->getMode() === InstState::MODE_OVR_INSTALL) : ?>
DUPX.fillInPlaceHolders();
<?php endif; ?>
DUPX.togglePanels = function ()
{
if ($('#' + dbViewModeInputId).val() == 'basic') {
$('#' + dbViewModeInputId).val("cpnl").change();
} else {
$('#' + dbViewModeInputId).val("basic").change();
}
}
$('#' + dbViewModeInputId).change(function () {
switch ($(this).val()) {
case 'cpnl':
$('.s2-cpnl-pane').removeClass('no-display');
$('.s2-basic-pane').addClass('no-display');
$('#' + dbViewModeInputId + "_0").removeClass("active");
$('#' + dbViewModeInputId + "_1").addClass("active");
break;
case 'basic':
default:
$('.s2-cpnl-pane').addClass('no-display');
$('.s2-basic-pane').removeClass('no-display');
$('#' + dbViewModeInputId + "_1").removeClass("active");
$('#' + dbViewModeInputId + "_0").addClass("active");
break;
}
});
});
</script>

View File

@@ -0,0 +1,170 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
$processedStr = DUP_PRO_Extraction::getInitialFileProcessedString();
?>
<script>
DUPX.startAjaxExtraction = function (isTheFirstCall, successCallback)
{
if (isTheFirstCall) {
DUPX.pageComponents.resetTopMessages().showProgress({
'title': 'Extracting Archive Files',
'perc': '0%',
'secondary': <?php echo json_encode($processedStr); ?>,
'bottomText':
'<i>Keep this window open during the extraction process.</i><br/>' +
'<i>This can take several minutes.</i>'
});
}
let extractionAction = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_EXTRACTION); ?>;
let extractionToken = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_EXTRACTION)); ?>;
let retryAttemp = 0;
DUPX.StandarJsonAjaxWrapper(
extractionAction,
extractionToken,
{},
function (data, textStatus, jqXHR) {
DUPX.progress.update({
'perc': data.actionData.perc,
'secondary': data.actionData.processedFiles,
'notice': ''
});
switch (data.actionData.pass) {
case 1:
if (typeof successCallback === "function") {
successCallback(data);
} else {
alert('extraction complete');
}
break;
case - 1:
DUPX.startAjaxExtraction(false, successCallback);
break;
default:
const result = {
'success': false,
'message': 'Unknow pass value :' + data.actionData.pass,
'errorContent': {
'pre': '',
'html': '',
'iframe': ''
},
'actionData': null
};
DUPX.ajaxErrorDisplayHideError(result, textStatus, jqXHR);
return false;
}
return true;
},
function (result, textStatus, jqXHR) {
let default_timeout_message = '';
let status = "<b>Server Code:</b> " + jqXHR.status + "<br/>";
status += "<b>Status:</b> " + jqXHR.statusText + "<br/>";
if (textStatus && textStatus.toLowerCase() == "timeout" || textStatus.toLowerCase() == "service unavailable") {
default_timeout_message = "<b>Recommendation:</b><br/>";
default_timeout_message += "See <a target='_blank' href='" +
"https://duplicator.com/knowledge-base/how-to-fix-installer-archive-extraction-issues'>";
default_timeout_message += "this FAQ item</a> for possible resolutions.";
default_timeout_message += "<hr>";
default_timeout_message += "<b>Additional Resources...</b><br/>";
default_timeout_message += "With thousands of different permutations it's difficult to try and debug/diagnose a server. " +
"If you're running into timeout issues and need help we suggest you follow these steps:<br/><br/>";
default_timeout_message += "<ol>";
default_timeout_message += "<li><strong>Contact Host:</strong> Tell your host that you're running into PHP/Web " +
"Server timeout issues and ask them if they have any recommendations</li>";
default_timeout_message += "<li><strong>Dedicated Help:</strong> " +
"If you're in a time-crunch we suggest that you contact " +
"<a target='_blank' href='https://duplicator.com/knowledge-base/how-should-i-get-help-for-each-duplicator-product'>" +
"professional server administrator</a>. A dedicated resource like this will be able to work with you around " +
"the clock to the solve the issue much faster than we can in most cases.</li>";
default_timeout_message += "<li><strong>Consider Upgrading:</strong> If you're on a budget host then you may run into constraints. " +
"If you're running a larger or more complex site it might be worth upgrading to a " +
"<a target='_blank' href='https://duplicator.com/knowledge-base/how-to-handle-server-timeout-issues'>" +
"managed VPS server</a>. These systems will pretty much give you full control to use the software without constraints and " +
"come with excellent support from the hosting company.</li>";
default_timeout_message += "<li><strong>Contact SnapCreek:</strong> We will try our best to help configure and " +
"point users in the right direction, however these types of issues can be time-consuming and " +
"can take time from our support staff.</li>";
default_timeout_message += "</ol>";
if (page)
{
switch (page)
{
default:
status += default_timeout_message;
break;
case 'extract':
status += "<b>Recommendation:</b><br/>";
status += "See <a target='_blank' href='https://duplicator.com/knowledge-base/how-to-handle-various-install-scenarios'>" +
"this FAQ item</a> for possible resolutions.<br/><br/>";
break;
case 'ping':
status += "<b>Recommendation:</b><br/>";
status += "See " +
"<a target='_blank' href='https://duplicator.com/knowledge-base/how-to-read-fix-various-http-status-codes'>" +
"this FAQ item</a> for possible resolutions.<br/><br/>";
break;
case 'delete-site':
status += "<b>Recommendation:</b><br/>";
status += "See " +
"<a target='_blank' href='https://duplicator.com/knowledge-base/how-to-resolve-403-500-timeout-issues-on-step-3'>" +
"this FAQ item</a> for possible resolutions.<br/><br/>";
break;
}
} else
{
status += default_timeout_message;
}
} else if ((jqXHR.status == 403) || (jqXHR.status == 500)) {
status += "<b>Recommendation:</b><br/>";
status += "See " +
"<a target='_blank' href='https://duplicator.com/knowledge-base/how-to-resolve-403-500-timeout-issues-on-step-3'>" +
"this FAQ item</a> for possible resolutions.<br/><br/>"
} else if ((jqXHR.status == 0) || (jqXHR.status == 200)) {
status += "<b>Recommendation:</b><br/>";
status += "Possible server timeout! Performing a 'Manual Extraction' can avoid timeouts. ";
status += "See " +
"<a target='_blank' href='https://duplicator.com/knowledge-base/how-to-handle-various-install-scenarios'>" +
"this FAQ item</a> for a complete overview.<br/><br/>"
}
result.errorContent.html += status;
DUPX.ajaxErrorDisplayHideError(result, textStatus, jqXHR);
},
{
retryOnFailure: true,
numberOfAttempts: 2,
delayRetryOnFailure: 5000,
callbackOnRetry: function (data, textStatus, jqXHR, options) {
retryAttemp++;
DUPX.progress.update({
'notice': 'Extraction failed: ' + data.message + ',<br>' +
'wait ' + (options.delayRetryOnFailure / 1000) + ' seconds and retry.<br>' +
'<b>' + DUPX.stringifyNumber(retryAttemp) + ' attempt</b>'
});
console.log('Callback on retry', data);
}
}
);
};
</script>

View File

@@ -0,0 +1,113 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Libs\Snap\SnapJson;
?>
<script>
DUPX.finalTests = {
frontendTest: <?php echo json_encode(\Duplicator\Installer\Utils\Tests\WP\TestsExecuter::getFrontendUrl()); ?>,
backendTest: <?php echo json_encode(\Duplicator\Installer\Utils\Tests\WP\TestsExecuter::getBackendUrl()); ?>,
afterCallback: null,
testsResults: {
'wp_frontend': {
'success': false
},
'wp_backend': {
'success': false
}
},
test: function (doneCallback) {
this.doneCallback = doneCallback;
DUPX.finalTests.prepareTest();
},
prepareTest: function () {
DUPX.pageComponents.showProgress({
'title': 'Final WordPress Tests',
'bottomText':
'<i>Keep this window open.</i><br/>' +
'<i>This can take several minutes.</i>'
});
let action = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_FINAL_TESTS_PREPARE); ?>;
let token = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_FINAL_TESTS_PREPARE)); ?>;
DUPX.StandarJsonAjaxWrapper(
action,
token,
{},
function (data) {
console.log(data);
console.log('link frontend', DUPX.finalTests.frontendTest);
console.log('link backend', DUPX.finalTests.backendTest);
DUPX.finalTests.executeTest(DUPX.finalTests.frontendTest, DUPX.finalTests.testsResults.wp_frontend, function () {
DUPX.finalTests.executeTest(DUPX.finalTests.backendTest, DUPX.finalTests.testsResults.wp_backend, DUPX.finalTests.cleanTest);
});
},
DUPX.ajaxErrorDisplayHideError,
{
timeOut: 10000
}
);
},
executeTest: function (urlTest, resultData, doneCallback) {
jQuery.ajax({
type: "GET",
url: urlTest,
dataType: "json",
timeout: 10000,
success: function (result, textStatus, jqXHR) {
resultData.success = result;
if (typeof doneCallback === "function") {
doneCallback(resultData);
} else {
alert('test complete');
}
},
error: function (jqXHR, textStatus, errorThrown) {
resultData.success = false;
if (typeof doneCallback === "function") {
doneCallback(resultData);
} else {
alert('test complete');
}
}
});
},
cleanTest: function () {
console.log('tests results', DUPX.finalTests.testsResults);
DUPX.pageComponents.showProgress({
'title': 'Cleanup Tests',
'bottomText':
'<i>Keep this window open.</i><br/>' +
'<i>This can take several minutes.</i>'
});
let action = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_FINAL_TESTS_AFTER); ?>;
let token = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_FINAL_TESTS_AFTER)); ?>;
DUPX.StandarJsonAjaxWrapper(
action,
token,
{},
function (data) {
if (typeof DUPX.finalTests.doneCallback === "function") {
DUPX.finalTests.doneCallback();
}
},
DUPX.ajaxErrorDisplayHideError,
{
timeOut: 10000
}
);
}
};
</script>

View File

@@ -0,0 +1,39 @@
<?php
/**
*
* @package Duplicator/Installer
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
?>
<script>
const subsiteOwrMapWrapper = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_SUBSITE_OVERWRITE_MAPPING)); ?>;
const subsiteOwrMapInputName = <?php echo SnapJson::jsonEncode(PrmMng::PARAM_SUBSITE_OVERWRITE_MAPPING); ?>;
const muReplaceMapWrapper = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_MU_REPLACE)); ?>;
const muReplaceMapInputName = <?php echo SnapJson::jsonEncode(PrmMng::PARAM_MU_REPLACE); ?>;
(function($) {
$(document).ready(function() {
let owrWrapperNode = $('#' + subsiteOwrMapWrapper)
if (owrWrapperNode.length) {
DUPX.owrMapper = new UrlListMapping(owrWrapperNode, subsiteOwrMapInputName);
} else {
DUPX.owrMapper = null;
}
let muReplaceMapNode = $('#' + muReplaceMapWrapper)
if (muReplaceMapNode.length) {
DUPX.muReplaceMap = new UrlListMapping(muReplaceMapNode, muReplaceMapInputName);
} else {
DUPX.muReplaceMap = null;
}
});
})(jQuery);
</script>

View File

@@ -0,0 +1,30 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
?>
<script>
const createNewInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_WP_ADMIN_CREATE_NEW)); ?>;
$(document).ready(function () {
let fieldsWrapper = $("#new-admin-fields-wrapper");
$('#' + createNewInputId).change(function () {
if ($(this).prop('checked')) {
fieldsWrapper.find('.param-wrapper').removeClass('param-wrapper-disabled').addClass('param-wrapper-enabled');
fieldsWrapper.find('.new-admin-field, .new-admin-field > input').prop('disabled', false);
} else {
fieldsWrapper.find('.param-wrapper').removeClass('param-wrapper-enabled').addClass('param-wrapper-disabled');
fieldsWrapper.find('.new-admin-field, .new-admin-field > input').prop('disabled', true).val('').trigger('keyup').trigger('blur');
}
});
});
</script>

View File

@@ -0,0 +1,36 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
$paramsManager = PrmMng::getInstance();
?>
<script>
DUPX.multipleStepDeploy = function (formObj, nextStepPrams) {
DUPX.sendParamsStep1(formObj, function () {
DUPX.startAjaxExtraction(true, function (data) {
DUPX.redirectMainInstaller('post', nextStepPrams);
});
});
};
DUPX.oneStepDeploy = function (formObj, nextStepPrams) {
DUPX.sendParamsStep1(formObj, function () {
DUPX.startAjaxExtraction(true, function () {
DUPX.startAjaxDbInstall(true, function () {
DUPX.siteProcessingReplaceData(true, function () {
DUPX.finalTests.test(function () {
DUPX.redirectMainInstaller('post', nextStepPrams);
});
});
});
});
});
};
</script>

View File

@@ -0,0 +1,44 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<script>
DUPX.pageComponents = {
pageContent: null,
init: function () {
this.pageContent = $('#main-content-wrapper');
},
resetTopMessages: function () {
DUPX.topMessages.empty();
return this;
},
showProgress: function (options) {
this.pageContent.hide();
DUPX.ajaxError.hide();
DUPX.progress.show(options);
return this;
},
showError: function (result, textStatus, jqXHR, tryAgainButtonCallback) {
DUPX.ajaxError.update(result, textStatus, jqXHR, tryAgainButtonCallback);
DUPX.progress.hide();
this.pageContent.hide();
DUPX.ajaxError.show();
return this;
},
showContent: function () {
DUPX.progress.hide();
DUPX.ajaxError.hide();
this.pageContent.show();
return this;
}
};
$(document).ready(function () {
DUPX.pageComponents.init();
});
</script>

View File

@@ -0,0 +1,396 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\InstState;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Installer\Core\Params\Items\ParamFormTables;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
?>
<script>
const wpUserNameInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_WP_ADMIN_NAME)); ?>;
const wpPwdInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_WP_ADMIN_PASSWORD)); ?>;
const wpMailInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_WP_ADMIN_MAIL)); ?>;
const archiveEngineActionWraper = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_ARCHIVE_ACTION)); ?>;
const extractSkipModeWrapper = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_ARCHIVE_ENGINE_SKIP_WP_FILES)); ?>;
const autoCleanInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_AUTO_CLEAN_INSTALLER_FILES)); ?>;
const tablesItemClass = <?php echo SnapJson::jsonEncode(
($paramsManager->getFormItemId(PrmMng::PARAM_DB_TABLES) . ParamFormTables::TABLE_ITEM_POSTFIX)
); ?>;
const tablesNameClass = <?php echo SnapJson::jsonEncode(
($paramsManager->getFormItemId(PrmMng::PARAM_DB_TABLES) . ParamFormTables::TABLE_NAME_POSTFIX_TNAME)
); ?>;
const tablesNameInputName = <?php echo SnapJson::jsonEncode(PrmMng::PARAM_DB_TABLES); ?>;
const tablesExtractClass = <?php echo SnapJson::jsonEncode(
($paramsManager->getFormItemId(PrmMng::PARAM_DB_TABLES) . ParamFormTables::TABLE_NAME_POSTFIX_EXTRACT)
); ?>;
const tablesExtractInputName = <?php echo SnapJson::jsonEncode(PrmMng::PARAM_DB_TABLES . ParamFormTables::TABLE_NAME_POSTFIX_EXTRACT); ?>;
const tablesReplaceClass = <?php echo SnapJson::jsonEncode(
($paramsManager->getFormItemId(PrmMng::PARAM_DB_TABLES) . ParamFormTables::TABLE_NAME_POSTFIX_REPLACE)
); ?>;
const tablesReplaceInputName = <?php echo SnapJson::jsonEncode(PrmMng::PARAM_DB_TABLES . ParamFormTables::TABLE_NAME_POSTFIX_REPLACE); ?>;
const installTypeInputWrapper = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_INST_TYPE)); ?>;
const subsiteIdInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_SUBSITE_ID)); ?>;
const subsiteIdWrapper = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_SUBSITE_ID)); ?>;
const userModeWrapper = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_USERS_MODE)); ?>;
const tablePrefixWrapper = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_DB_TABLE_PREFIX)); ?>;
const tablePrefixInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_DB_TABLE_PREFIX)); ?>;
DUPX.setTablesFormData = function(formData) {
let tablesList = [];
$('.' + tablesItemClass).each(function() {
let newObj = {
'name' : $(this).find('.' + tablesNameClass).val(),
'extract' : $(this).find('.' + tablesExtractClass).is(':checked'),
'replace' : $(this).find('.' + tablesReplaceClass).is(':checked')
};
tablesList.push(newObj);
});
delete formData[tablesExtractInputName];
delete formData[tablesReplaceInputName];
formData[tablesNameInputName] = JSON.stringify(tablesList);
return formData;
};
DUPX.sendParamsStep1 = function(form, setParamOkCallback) {
DUPX.pageComponents.resetTopMessages().showProgress({
'title': 'Parameters update',
'bottomText': '<i>Keep this window open.</i><br/>' +
'<i>This can take several minutes.</i>'
});
let setParamAction = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_SET_PARAMS_S1); ?>;
let setParamToken = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_SET_PARAMS_S1)); ?>;
var formData = form.serializeForm();
if (DUPX.owrMapper !== null) {
formData = DUPX.owrMapper.updateFormData(formData);
}
if (DUPX.muReplaceMap !== null) {
formData = DUPX.muReplaceMap.updateFormData(formData);
}
DUPX.StandarJsonAjaxWrapper(
setParamAction,
setParamToken,
formData,
function(data) {
if (data.actionData.isValid) {
if (typeof setParamOkCallback === "function") {
setParamOkCallback();
}
} else {
DUPX.pageComponents.showContent();
DUPX.topMessages.add(data.actionData.nextStepMessagesHtml);
}
return true;
},
DUPX.ajaxErrorDisplayHideError
);
};
DUPX.sendParamsStep2 = function(form, setParamOkCallback) {
DUPX.pageComponents.resetTopMessages().showProgress({
'title': 'Parameters update',
'bottomText': '<i>Keep this window open.</i><br/>' +
'<i>This can take several minutes.</i>'
});
let setParamAction = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_SET_PARAMS_S2); ?>;
let setParamToken = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_SET_PARAMS_S2)); ?>;
var formData = form.serializeForm();
formData = DUPX.setTablesFormData(formData);
DUPX.StandarJsonAjaxWrapper(
setParamAction,
setParamToken,
formData,
function(data) {
if (data.actionData.isValid) {
if (typeof setParamOkCallback === "function") {
setParamOkCallback();
}
} else {
DUPX.pageComponents.showContent();
DUPX.topMessages.add(data.actionData.nextStepMessagesHtml);
}
return true;
},
DUPX.ajaxErrorDisplayHideError
);
};
DUPX.sendParamsStep3 = function(form, setParamOkCallback) {
let setParamAction = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_SET_PARAMS_S3); ?>;
let setParamToken = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_SET_PARAMS_S3)); ?>;
//Validation
var wp_username = $.trim($("#" + wpUserNameInputId).val()).length || 0;
var wp_password = $.trim($("#" + wpPwdInputId).val()).length || 0;
var wp_mail = $.trim($("#" + wpMailInputId).val()).length || 0;
if (wp_username >= 1) {
if (wp_username < 4) {
alert("The New Admin Account 'Username' must be four or more characters");
return false;
} else if (wp_password < 6) {
alert("The New Admin Account 'Password' must be six or more characters");
return false;
} else if (wp_mail === 0) {
alert("The New Admin Account 'mail' is required");
return false;
}
}
var nonHttp = false;
var failureText = '';
/* IMPORTANT - not trimming the value for good - just in the check */
$('input[name="search[]"]').each(function() {
var val = $(this).val();
if (val.trim() != "") {
if (val.length < 3) {
failureText = "Custom search fields must be at least three characters.";
}
if (val.toLowerCase().indexOf('http') != 0) {
nonHttp = true;
}
}
});
$('input[name="replace[]"]').each(function() {
var val = $(this).val();
if (val.trim() != "") {
// Replace fields can be anything
if (val.toLowerCase().indexOf('http') != 0) {
nonHttp = true;
}
}
});
if (failureText != '') {
alert(failureText);
return false;
}
if (nonHttp) {
if (confirm('One or more custom search and replace strings are not URLs. Are you sure you want to continue?') == false) {
return false;
}
}
if ($('input[type=radio][name=replace_mode]:checked').val() == 'mapping') {
$("#new-url-container").remove();
} else if ($('input[type=radio][name=replace_mode]:checked').val() == 'legacy') {
$("#subsite-map-container").remove();
}
DUPX.pageComponents.resetTopMessages().showProgress({
'title': 'Parameters update',
'bottomText': '<i>Keep this window open.</i><br/>' +
'<i>This can take several minutes.</i>'
});
var formData = form.serializeForm();
DUPX.StandarJsonAjaxWrapper(
setParamAction,
setParamToken,
formData,
function(data) {
if (data.actionData.isValid) {
if (typeof setParamOkCallback === "function") {
setParamOkCallback();
}
} else {
DUPX.pageComponents.showContent();
DUPX.topMessages.add(data.actionData.nextStepMessagesHtml);
}
return true;
},
DUPX.ajaxErrorDisplayHideError
);
};
DUPX.setAutoCleanFiles = function() {
DUPX.pageComponents.resetTopMessages().showProgress({
'title': 'Send migration data',
'bottomText': '<i>Keep this window open.</i>'
});
let setParamAction = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_SET_AUTO_CLEAN_FILES); ?>;
let setParamToken = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_SET_AUTO_CLEAN_FILES)); ?>;
var formData = {
<?php echo SnapJson::jsonEncode(PrmMng::PARAM_AUTO_CLEAN_INSTALLER_FILES); ?>: $('#' + autoCleanInputId).prop('checked')
};
DUPX.StandarJsonAjaxWrapper(
setParamAction,
setParamToken,
formData,
function(data) {
DUPX.pageComponents.showContent();
if (!data.actionData.isValid) {
DUPX.topMessages.add(data.actionData.nextStepMessagesHtml);
}
return true;
},
function(result, textStatus, jqXHR) {
if (jqXHR.status === 404) {
// ON 404 installer files are already removed on first login
DUPX.pageComponents.showContent();
} else {
DUPX.ajaxErrorDisplayHideError(result, textStatus, jqXHR);
}
}
);
};
$(document).ready(function() {
// prepare per animation
if ($('#overwrite-subsite-on-multisite-wrapper').hasClass('no-display')) {
$('#overwrite-subsite-on-multisite-wrapper').removeClass('no-display').hide();
}
if ($('#url-multisite-mapping-wrapper').hasClass('no-display')) {
$('#url-multisite-mapping-wrapper').removeClass('no-display').hide();
}
$('.select-all-import').click(function () {
let node = $(this);
let tbody = $('#plugins_list_table_selector').find('tbody');
tbody.find('.' + tablesExtractClass).prop('checked',node.is(':checked'));
$(this).closest('thead').find('.select-all-replace')
.prop('checked', !node.is(':checked')).trigger('click')
.prop('disabled', !node.is(':checked'));
tbody.find('.' + tablesReplaceClass).prop('disabled', !node.is(':checked'));
});
$('.select-all-replace').click(function () {
let node = $(this);
let tbody = $('#plugins_list_table_selector').find('tbody');
tbody.find('.' + tablesReplaceClass).prop('checked',node.is(':checked'));
});
$('#' + installTypeInputWrapper + ' input[type=radio]').change(function() {
let selectedVal = $(this).val();
switch (parseInt(selectedVal)) {
case <?php echo InstState::TYPE_SINGLE; ?>:
$('#' + subsiteIdInputId).prop('disabled', true);
$('#' + subsiteIdWrapper).removeClass('param-wrapper-enabled').addClass('param-wrapper-disabled');
$('#' + tablePrefixInputId).prop('disabled', false);
$('#' + tablePrefixWrapper).removeClass('param-wrapper-disabled');
$('#overwrite-subsite-on-multisite-wrapper').hide();
$('#url-multisite-mapping-wrapper').hide();
break;
case <?php echo InstState::TYPE_MSUBDOMAIN; ?>:
case <?php echo InstState::TYPE_MSUBFOLDER; ?>:
$('#' + subsiteIdInputId).prop('disabled', true);
$('#' + subsiteIdWrapper).removeClass('param-wrapper-enabled').addClass('param-wrapper-disabled');
$('#' + tablePrefixInputId).prop('disabled', false);
$('#' + tablePrefixWrapper).removeClass('param-wrapper-disabled');
$('#overwrite-subsite-on-multisite-wrapper').hide();
$('#url-multisite-mapping-wrapper').show();
break;
case <?php echo InstState::TYPE_RBACKUP_SINGLE; ?>:
case <?php echo InstState::TYPE_RBACKUP_MSUBDOMAIN; ?>:
case <?php echo InstState::TYPE_RBACKUP_MSUBFOLDER; ?>:
case <?php echo InstState::TYPE_RECOVERY_SINGLE; ?>:
case <?php echo InstState::TYPE_RECOVERY_MSUBDOMAIN; ?>:
case <?php echo InstState::TYPE_RECOVERY_MSUBFOLDER; ?>:
$('#' + subsiteIdInputId).prop('disabled', true);
$('#' + subsiteIdWrapper).removeClass('param-wrapper-enabled').addClass('param-wrapper-disabled');
$('#' + tablePrefixInputId).prop('disabled', true);
$('#' + tablePrefixWrapper).removeClass('param-wrapper-enabled').addClass('param-wrapper-disabled');
$('#overwrite-subsite-on-multisite-wrapper').hide();
$('#url-multisite-mapping-wrapper').hide();
break;
case <?php echo InstState::TYPE_STANDALONE; ?>:
$('#' + subsiteIdInputId).prop('disabled', false);
$('#' + subsiteIdWrapper).removeClass('param-wrapper-disabled').addClass('param-wrapper-enabled');
$('#' + tablePrefixInputId).prop('disabled', false);
$('#' + tablePrefixWrapper).removeClass('param-wrapper-disabled');
$('#overwrite-subsite-on-multisite-wrapper').hide();
$('#url-multisite-mapping-wrapper').hide();
break;
case <?php echo InstState::TYPE_SINGLE_ON_SUBDOMAIN; ?>:
case <?php echo InstState::TYPE_SINGLE_ON_SUBFOLDER; ?>:
case <?php echo InstState::TYPE_SUBSITE_ON_SUBDOMAIN; ?>:
case <?php echo InstState::TYPE_SUBSITE_ON_SUBFOLDER; ?>:
$('#' + subsiteIdInputId).prop('disabled', true);
$('#' + subsiteIdWrapper).removeClass('param-wrapper-enabled').addClass('param-wrapper-disabled');
$('#' + tablePrefixInputId).prop('disabled', true);
$('#' + tablePrefixWrapper).addClass('param-wrapper-disabled');
$('#overwrite-subsite-on-multisite-wrapper').fadeIn("slow");
$('#url-multisite-mapping-wrapper').hide();
break;
case <?php echo InstState::TYPE_NOT_SET; ?>:
default:
alert('installer state not valid ' + this.value);
}
$('#overview-description-wrapper .overview-description').removeClass('no-display').hide();
$('#overview-description-wrapper .install-type-' + selectedVal).fadeIn("slow");
});
$('.param-form-type-tablessel .' + tablesExtractClass).each(function() {
let extractInput = $(this);
let replaceInput = extractInput.closest('.' + tablesItemClass).find('.' + tablesReplaceClass);
extractInput.change(function() {
if (extractInput.is(':checked')) {
replaceInput.prop('disabled', false);
replaceInput.prop('checked', true);
} else {
replaceInput.prop('disabled', true);
replaceInput.prop('checked', false);
}
});
});
$('.param-form-type-bgroup').each(function() {
let wrapperObj = $(this);
let buttons = wrapperObj.find('button');
let inputObj = wrapperObj.find('input[type="hidden"]');
buttons.click(function() {
buttons.removeClass('active');
$(this).addClass('active');
inputObj.val($(this).val()).trigger('change');
});
});
$('#' + archiveEngineActionWraper + ', #' + extractSkipModeWrapper).each(function() {
let paramWrapper = $(this);
let noteWrapper = paramWrapper.find('.sub-note');
paramWrapper.find('.input-item').change(function() {
noteWrapper.find('.dynamic-sub-note').addClass('no-display');
noteWrapper.find('.dynamic-sub-note-' + $(this).val()).removeClass('no-display');
});
});
$('#' + autoCleanInputId).change(function() {
DUPX.setAutoCleanFiles();
});
});
</script>

View File

@@ -0,0 +1,109 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<script>
DUPX.progress = {
progressObj: null,
data: {},
init: function () {
if (this.progressObj === null) {
this.progressObj = $('#progress-area');
}
},
hide: function () {
this.init();
this.progressObj.addClass('no-display');
},
show: function (options) {
$("html, body").animate({scrollTop: 0}, "slow");
this.init();
options = (typeof options !== 'undefined') ? options : {}
this.data = $.extend(true, {}, this.defaults, options);
this.update(this.data);
this.progressObj.removeClass('no-display');
},
update: function (options) {
this.init();
options = (typeof options !== 'undefined') ? options : {};
if ('title' in options) {
if (options.title.length) {
this.progressObj.find('#progress-title').text(options.title);
} else {
this.progressObj.find('#progress-title').empty();
}
}
if ('perc' in options) {
if (options.perc.length) {
this.progressObj.find('#progress-pct').text(options.perc);
} else {
this.progressObj.find('#progress-pct').empty();
}
}
if ('secondary' in options) {
if (options.secondary.length) {
this.progressObj.find('#secondary-progress-text').text(options.secondary);
} else {
this.progressObj.find('#secondary-progress-text').empty();
}
}
if ('notice' in options) {
if (options.notice.length) {
this.progressObj.find('#progress-notice').html(options.notice);
} else {
this.progressObj.find('#progress-notice').empty();
}
}
if ('progressBar' in options) {
if (options.progressBar) {
this.animateProgressBar()
} else {
this.progressObj.find("#progress-bar").empty();
}
// add or remove bar
}
if ('bottomText' in options) {
this.progressObj.find('#progress-bottom-text').empty().html(options.bottomText);
}
this.data = $.extend(true, {}, this.defaults, options);
},
animateProgressBar: function () {
//Create Progress Bar
var $mainbar = this.progressObj.find("#progress-bar");
$mainbar.progressbar({value: 100});
$mainbar.height(25);
runAnimation($mainbar);
function runAnimation($pb) {
$pb.css({"padding-left": "0%", "padding-right": "90%"});
$pb.progressbar("option", "value", 100);
$pb.animate({paddingLeft: "90%", paddingRight: "0%"}, 3500, "linear", function () {
runAnimation($pb);
});
}
},
defaults: {
'title': 'Wait',
'perc': '',
'secondary': '',
'notice': '',
'progressBar': false,
'bottomText': ''
}
};
</script>

View File

@@ -0,0 +1,98 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
?>
<script>
var siteProcessingReplaceLastChunkPos = 0;
DUPX.siteProcessingReplaceData = function (isTheFirstCall, successCallback) {
if (isTheFirstCall) {
DUPX.pageComponents.resetTopMessages().showProgress({
'title': 'Processing Data Replacement',
'perc': '0%',
'secondary': '',
'bottomText':
'<i>Keep this window open during the replacement process.</i><br/>' +
'<i>This can take several minutes.</i>'
});
}
let action = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_WEBSITE_UPDATE); ?>;
let token = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_WEBSITE_UPDATE)); ?>;
let retryAttemp = 0;
DUPX.StandarJsonAjaxWrapper(
action,
token,
{},
function (data, textStatus, jqXHR) {
DUPX.progress.update({
'perc': data.actionData.step3.progress_perc + '%',
'secondary': ''
});
if (data.actionData.step3.chunk == 1) {
if (JSON.stringify(siteProcessingReplaceLastChunkPos) !== JSON.stringify(data.actionData.step3.chunkPos)) {
var siteProcessingReplaceLastChunkPos = data.actionData.step3.chunkPos;
DUPX.siteProcessingReplaceData(false, successCallback);
} else {
console.error('Chunk is stuck: ' + data.actionData);
let status = "<b>Server Code:</b> " + jqXHR.status + "<br/>";
status += "<b>Status:</b> " + jqXHR.statusText + "<br/>";
status += "<b>Response:</b> " + jqXHR.responseText + "<hr/>";
status += "Chunking is stuck<br>";
const result = {
'success': false,
'message': 'DB INSTALL ERROR: ' + data.actionData.error_msg,
'errorContent': {
'pre': '',
'html': status,
'iframe': ''
},
'actionData': null
};
DUPX.ajaxErrorDisplayHideError(result, null, null);
return false;
}
} else if (data.actionData.step3.pass == 1) {
if (typeof successCallback === "function") {
successCallback(data.actionData);
} else {
alert('Processing complete');
}
} else {
DUPX.hideProgressBar();
}
},
DUPX.ajaxErrorDisplayHideError,
{
retryOnFailure: true,
numberOfAttempts: 2,
delayRetryOnFailure: 5000,
callbackOnRetry: function (data, textStatus, jqXHR, options) {
retryAttemp++;
DUPX.progress.update({
'notice': 'failed processing data replacement: ' + data.message + ',<br>' +
'wait ' + (options.delayRetryOnFailure / 1000) + ' seconds and retry.<br>' +
'<b>' + DUPX.stringifyNumber(retryAttemp) + ' attempt</b>'
});
console.log('Callback on retry', data);
}
}
);
};
</script>

View File

@@ -0,0 +1,59 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
?>
<script>
const validateAction = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_VALIDATE); ?>;
const validateToken = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_VALIDATE)); ?>;
DUPX.initialValidateAction = function (validateCallback, showContentOnResult, resetTopMessage) {
if (resetTopMessage) {
DUPX.pageComponents.resetTopMessages();
}
DUPX.pageComponents.showProgress({
'title': 'System validation',
'bottomText':
'<i>Keep this window open during the validation process.</i><br/>' +
'<i>This can take several minutes.</i>'
});
DUPX.StandarJsonAjaxWrapper(
validateAction,
validateToken,
{},
function (data) {
if (showContentOnResult) {
DUPX.pageComponents.showContent();
DUPX.topMessages.add(data.actionData.nextStepMessagesHtml);
}
if (typeof validateCallback === "function") {
validateCallback(data.actionData);
} else {
alert('Validate ' + data.actionData.mainText);
}
},
DUPX.ajaxErrorDisplayRestart
);
};
DUPX.setValidationBadge = function (selector, newClass) {
let item = $(selector);
if (!item.length) {
return;
}
item.removeClass('wait fail warn hwarn good pass success');
if (newClass) {
item.addClass(newClass);
}
};
</script>

View File

@@ -0,0 +1,24 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<script>
DUPX.topMessages = {
wrapper: null,
empty: function () {
this.wrapper.empty();
},
add: function (html) {
this.wrapper.html(html);
}
};
$(document).ready(function () {
DUPX.topMessages.wrapper = $('#page-top-messages');
});
</script>

View File

@@ -0,0 +1,57 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Security;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Installer\Utils\SecureCsrf;
use Duplicator\Libs\Snap\SnapJson;
$nextStepPrams = array(
PrmMng::PARAM_CTRL_ACTION => 'ctrl-step1',
Security::CTRL_TOKEN => SecureCsrf::generate('ctrl-step1'),
PrmMng::PARAM_STEP_ACTION => DUPX_CTRL::ACTION_STEP_INIZIALIZED,
);
?>
<script>
$(document).ready(function () {
const secureAction = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_PWD_CHECK); ?>;
const secureToken = <?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_PWD_CHECK)); ?>;
const passForm = $('#i1-pass-form');
/**
* Submits the password for validation
*/
DUPX.checkPassword = function ()
{
passForm.parsley().validate();
if (!passForm.parsley().isValid()) {
return;
}
var formData = passForm.serializeForm();
DUPX.StandarJsonAjaxWrapper(
secureAction,
secureToken,
formData,
function (data) {
if (data.actionData) {
DUPX.redirectMainInstaller('post', <?php echo SnapJson::jsonEncode($nextStepPrams); ?>);
} else {
$('#pwd-check-fail').show();
}
},
DUPX.ajaxErrorDisplayHideError
);
};
passForm.submit(function (event) {
event.preventDefault();
DUPX.checkPassword();
});
});
</script>

View File

@@ -0,0 +1,36 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\InstState;
use Duplicator\Installer\Core\Security;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Installer\Utils\SecureCsrf;
use Duplicator\Libs\Snap\SnapJson;
if (!InstState::dbDoNothing()) {
$nextStepParams = array(
PrmMng::PARAM_CTRL_ACTION => 'ctrl-step2',
Security::CTRL_TOKEN => SecureCsrf::generate('ctrl-step2'),
);
} else {
$nextStepParams = array(
PrmMng::PARAM_CTRL_ACTION => 'ctrl-step4',
Security::CTRL_TOKEN => SecureCsrf::generate('ctrl-step4'),
);
}
?>
<script>
DUPX.deployStep1 = function () {
<?php if (!InstState::dbDoNothing()) { ?>
DUPX.multipleStepDeploy($('#s1-input-form'), <?php echo SnapJson::jsonEncode($nextStepParams); ?>);
<?php } else { ?>
DUPX.oneStepDeploy($('#s1-input-form'), <?php echo SnapJson::jsonEncode($nextStepParams); ?>);
<?php } ?>
};
</script>

View File

@@ -0,0 +1,328 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Security;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Installer\Utils\SecureCsrf;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
?>
<script>
const urlNewInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_URL_NEW)); ?>;
const pathNewInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_PATH_NEW)); ?>;
const exeSafeModeInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_SAFE_MODE)); ?>;
const htConfigInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_HTACCESS_CONFIG)); ?>;
const htConfigWrapperId = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_HTACCESS_CONFIG)); ?>;
const otConfigInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_OTHER_CONFIG)); ?>;
const otConfigWrapperId = <?php echo SnapJson::jsonEncode($paramsManager->getFormWrapperId(PrmMng::PARAM_OTHER_CONFIG)); ?>;
const archiveEngineInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_ARCHIVE_ENGINE)); ?>;
const validationShowInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_VALIDATION_SHOW_ALL)); ?>;
const acceptContinueInputId = <?php echo SnapJson::jsonEncode($paramsManager->getFormItemId(PrmMng::PARAM_ACCEPT_TERM_COND)); ?>;
$(document).ready(function () {
let validateArea = $('#validate-area');
let validateAreaHeader = $('#validate-area-header');
let overviewAreaHeader = $('#overview-area-header');
let basicSetupAreaHeader = $('#base-setup-area-header');
let optionsAreaHeader = $('#options-area-header');
let validateNoResult = validateArea.find('#validate-no-result');
let stepActions = $('.bottom-step-action');
let step1Form = $('#s1-input-form');
DUPX.beforeUnloadCheck(true);
DUPX.onSafeModeSwitch = function ()
{
var safeObj = $('#' + exeSafeModeInputId)
var mode = safeObj ? parseInt(safeObj.val()) : 0;
var htWr = $('#' + htConfigWrapperId);
var otWr = $('#' + otConfigWrapperId);
switch (mode) {
case 1:
case 2:
htWr.find('#' + htConfigInputId + '_0').prop("checked", true);
htWr.find('input').prop("disabled", true);
otWr.find('#' + otConfigInputId + '_0').prop("checked", true);
otWr.find('input').prop("disabled", true);
break;
case 0:
default:
htWr.find('input').prop("disabled", false);
otWr.find('input').prop("disabled", false);
break;
}
console.log("mode set to" + mode);
};
DUPX.toggleSetupType = function ()
{
var val = $("input:radio[name='setup_type']:checked").val();
$('div.s1-setup-type-sub').hide();
$('#s1-setup-type-sub-' + val).show(200);
};
/**
* Sets the focus to the next available input as needed. */
DUPX.autoFocusInput = function ()
{
var $host = $('#param_item_dbhost');
var $name = $('#param_item_dbname');
var $user = $('#param_item_dbuser');
var $pass = $('#param_item_dbpass');
function _setFocus($input) {
if ($input && $input.val() !== undefined && $input.val().length === 0) {
$input.focus();
}
}
_setFocus($pass);
_setFocus($user);
_setFocus($name);
_setFocus($host);
}
/**
* Accetps Usage Warning */
DUPX.acceptWarning = function (agreeMsg)
{
if ($("#" + acceptContinueInputId).is(':checked')) {
$("#s1-deploy-btn").removeAttr("disabled");
$("#s1-deploy-btn").removeAttr("title");
} else {
$("#s1-deploy-btn").attr("disabled", "true");
$("#s1-deploy-btn").attr("title", agreeMsg);
}
};
DUPX.setPageActions = function (inputActions) {
let actions = $.extend({}, {
'error': false,
'validate': false,
'hwarn': false,
'next': false
}, inputActions);
stepActions.addClass('no-display');
if (actions.next) {
stepActions.filter("#next_action").removeClass('no-display');
}
if (actions.validate) {
stepActions.filter("#validate_action").removeClass('no-display');
}
if (actions.hwarn) {
stepActions.filter("#hard_warning_action").removeClass('no-display');
}
if (actions.error) {
stepActions.filter("#error_action").removeClass('no-display');
}
}
DUPX.openValidateArea = function () {
if (validateAreaHeader.hasClass('open')) {
validateAreaHeader.trigger('click');
}
}
DUPX.closeValidateArea = function () {
if (validateAreaHeader.hasClass('close')) {
validateAreaHeader.trigger('click');
}
}
DUPX.openBasicSetupArea = function () {
if (basicSetupAreaHeader.hasClass('open')) {
basicSetupAreaHeader.trigger('click');
}
}
DUPX.closeBasicSetupArea = function () {
if (basicSetupAreaHeader.hasClass('close')) {
basicSetupAreaHeader.trigger('click');
}
}
DUPX.closeOptionsSetupArea = function () {
if (optionsAreaHeader.hasClass('close')) {
optionsAreaHeader.trigger('click');
}
}
DUPX.resetValidationResult = function () {
DUPX.setValidationBadge('#validate-global-badge-status', false);
$('.database-setup-title').removeClass('warning');
validateArea.find('#validation-result').empty().append(validateNoResult);
}
DUPX.autoUpdateOnMainChanges = function () {
var originalUrlMainVal = $('#' + urlNewInputId).val();
var urlRegex = new RegExp('^' + originalUrlMainVal, '');
$('.auto-updatable').each(function () {
$(this).data('original-default-value', $(this).find('input').val());
});
$('#' + urlNewInputId).bind("keyup change", function () {
var newUrlVal = $(this).val().replace(/\/$/, '');
$('.auto-updatable.autoupdate-enabled[data-auto-update-from-input="' + urlNewInputId + '"]').each(function () {
let originalVal = $(this).data('original-default-value');
$(this).find('input').val(originalVal.replace(urlRegex, newUrlVal));
});
});
var orginalPathMainVal = $('#' + pathNewInputId).val();
var pathRegex = new RegExp('^' + orginalPathMainVal, '');
$('#' + pathNewInputId).bind("keyup change", function () {
var newPathlVal = $(this).val().replace(/\/$/, '');
$('.auto-updatable.autoupdate-enabled[data-auto-update-from-input="' + pathNewInputId + '"]').each(function () {
let originalVal = $(this).data('original-default-value');
$(this).find('input').val(originalVal.replace(pathRegex, newPathlVal));
});
});
};
DUPX.onValidateResult = function (validateData) {
validateNoResult.detach();
validateArea.find('#validation-result').empty().append(validateData.htmlResult);
validateArea.find("*[data-type='toggle']").click(DUPX.toggleClick);
DUPX.setValidationBadge('#validate-global-badge-status', validateData.mainBagedClass);
if (validateData.categoriesLevels.database == 0) {
$('.database-setup-title').addClass('warning');
DUPX.openBasicSetupArea();
} else {
DUPX.closeBasicSetupArea();
}
DUPX.closeOptionsSetupArea();
switch (validateData.mainLevel) {
case <?php echo DUPX_Validation_abstract_item::LV_PASS; ?>:
case <?php echo DUPX_Validation_abstract_item::LV_GOOD; ?>:
DUPX.openValidateArea();
DUPX.setPageActions({'next': true});
break;
case <?php echo DUPX_Validation_abstract_item::LV_SOFT_WARNING; ?>:
DUPX.openValidateArea();
DUPX.setPageActions({'next': true});
break;
case <?php echo DUPX_Validation_abstract_item::LV_HARD_WARNING; ?>:
DUPX.openValidateArea();
DUPX.setPageActions({'hwarn': true, 'next': true});
break;
case <?php echo DUPX_Validation_abstract_item::LV_FAIL; ?>:
default:
DUPX.openValidateArea();
DUPX.setPageActions({'error': true, 'validate': true});
}
};
DUPX.reavelidateOnChangeAction = function (oldValue, obj) {
if (obj == null || obj.val() !== oldValue) {
DUPX.resetValidationResult();
DUPX.setPageActions({'validate': true});
}
return (obj == null ? true : obj.val());
}
DUPX.revalidateOnChange = function () {
$('.revalidate-on-change').each(function () {
$(this).find('input, select, textarea').each(function () {
if ($(this).is(':checkbox, :radio')) {
$(this).bind("click", function () {
DUPX.reavelidateOnChangeAction(false, $(this));
});
} else {
var oldValue = $(this).val();
$(this).bind("keyup change", function () {
oldValue = DUPX.reavelidateOnChangeAction(oldValue, $(this));
});
}
});
});
}
//INIT Routines
$("*[data-type='toggle']").click(DUPX.toggleClick);
$(".tabs").tabs();
DUPX.acceptWarning();
DUPX.toggleSetupType();
DUPX.autoUpdateOnMainChanges();
DUPX.revalidateOnChange();
DUPX.autoFocusInput();
validateArea.on("click", '#' + validationShowInputId, function () {
if ($(this).is(":checked")) {
validateArea.removeClass('show-warnings').addClass('show-all');
} else {
validateArea.removeClass('show-all').addClass('show-warnings');
}
});
$('#s1-deploy-btn').click(function () {
DUPX.confirmDialog.loadAndOpen();
});
$('#validate-button').click(function () {
DUPX.sendParamsStep1(step1Form, function () {
<?php
// reload page to reinit interface
$onValidatePrams = array(
PrmMng::PARAM_CTRL_ACTION => 'ctrl-step1',
Security::CTRL_TOKEN => SecureCsrf::generate('ctrl-step1'),
PrmMng::PARAM_STEP_ACTION => DUPX_CTRL::ACTION_STEP_ON_VALIDATE,
);
?>
let onValidateParam = <?php echo SnapJson::jsonEncode($onValidatePrams); ?>;
DUPX.redirectMainInstaller('post', onValidateParam);
});
});
$('.s1-switch-template-btn').click(function () {
let tplButton = $(this);
if (tplButton.hasClass('active') || !tplButton.data('template')) {
return;
}
<?php
$switchPrams = array(
PrmMng::PARAM_CTRL_ACTION => 'ctrl-step1',
Security::CTRL_TOKEN => SecureCsrf::generate('ctrl-step1'),
PrmMng::PARAM_STEP_ACTION => DUPX_CTRL::ACTION_STEP_SET_TEMPLATE,
);
?>
let redirectParam = <?php echo SnapJson::jsonEncode($switchPrams); ?>;
redirectParam[<?php echo SnapJson::jsonEncode(PrmMng::PARAM_TEMPLATE); ?>] = tplButton.data('template');
DUPX.redirectMainInstaller('post', redirectParam);
});
validateArea.on("click", ".test-title", function () {
let content = $(this).closest('.test-wrapper').find('.test-content');
let faIcon = $(this).find('> .fa');
if (content.hasClass('no-display')) {
faIcon.removeClass('fa-caret-right').addClass('fa-caret-down');
content.removeClass('no-display');
} else {
faIcon.removeClass('fa-caret-down').addClass('fa-caret-right');
content.addClass('no-display');
}
});
<?php
if (DUPX_Validation_manager::validateOnLoad()) {
?>
DUPX.initialValidateAction(DUPX.onValidateResult, true, true);
<?php } ?>
});
</script>
<?php
dupxTplRender('scripts/step1-deploy');

View File

@@ -0,0 +1,40 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Security;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Installer\Utils\SecureCsrf;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
$nextStepPrams = array(
PrmMng::PARAM_CTRL_ACTION => 'ctrl-step3',
Security::CTRL_TOKEN => SecureCsrf::generate('ctrl-step3'),
);
?><script>
$("#tabs").tabs({
create: function (event, ui) {
$("#tabs").removeClass('no-display');
}
});
DUPX.beforeUnloadCheck(true);
DUPX.runDeployment = function () {
//Validate input data
var formInput = $('#s2-input-form');
DUPX.sendParamsStep2(formInput, function () {
DUPX.startAjaxDbInstall(true, function () {
DUPX.redirectMainInstaller('post', <?php echo SnapJson::jsonEncode($nextStepPrams); ?>);
});
});
};
</script>

View File

@@ -0,0 +1,116 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Security;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Installer\Utils\SecureCsrf;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
$nextStepPrams = array(
PrmMng::PARAM_CTRL_ACTION => 'ctrl-step4',
Security::CTRL_TOKEN => SecureCsrf::generate('ctrl-step4'),
);
dupxTplRender('scripts/modules/new-admin-user');
?>
<script>
DUPX.runSiteUpdate = function ()
{
DUPX.sendParamsStep3($('#s3-input-form'), function () {
DUPX.siteProcessingReplaceData(true, function () {
DUPX.finalTests.test(function () {
DUPX.redirectMainInstaller('post', <?php echo SnapJson::jsonEncode($nextStepPrams); ?>);
});
});
});
};
DUPX.beforeUnloadCheck(true);
var searchReplaceIndex = 1;
/**
* Adds a search and replace line */
DUPX.addSearchReplace = function ()
{
$("#search-replace-table").append("<tr valign='top' id='search-" + searchReplaceIndex + "'>" +
"<td style='width:80px;padding-top:20px'>Search:</td>" +
"<td style='padding-top:20px'>" +
"<input class=\"w95\" type='text' name='search[]' style='margin-right:5px' />" +
"<a href='javascript:DUPX.removeSearchReplace(" + searchReplaceIndex + ")'><i class='fa fa-minus-circle'></i></a>" +
"</td>" +
"</tr>" +
"<tr valign='top' id='replace-" + searchReplaceIndex + "'>" +
"<td>Replace:</td>" +
"<td>" +
"<input class=\"w95\" type='text' name='replace[]' />" +
"</td>" +
"</tr> ");
searchReplaceIndex++;
};
/**
* Removes a search and replace line */
DUPX.removeSearchReplace = function (index)
{
$("#search-" + index).remove();
$("#replace-" + index).remove();
};
//DOCUMENT LOAD
$(document).ready(function () {
$("#tabs").tabs({
create: function (event, ui) {
$("#tabs").removeClass('no-display');
}
});
$("*[data-type='toggle']").click(DUPX.toggleClick);
$('.strength-pwd-check .pwd-simulation').password({
'closestSelector': '.input-container',
'minimumLength': <?php echo DUPX_Constants::MIN_NEW_PASSWORD_LEN; ?>,
'enterPass': 'Type your password',
'shortPass': 'The password is too short',
'steps': {
13: 'Weak',
50: 'Good',
80: 'Strong'
}
});
$('input[type=radio][name=replace_mode]').change(function () {
if (this.value == 'mapping') {
$("#subsite-map-container").show();
$("#new-url-container").hide();
} else if (this.value == 'legacy') {
$("#new-url-container").show();
$("#subsite-map-container").hide();
}
});
$('#param_item_mode_chunking').change(function () {
if (this.value == '2') {
$('#progress-area .progress-perc').show();
} else {
$('#progress-area .progress-perc').hide();
}
});
$('#param_item_mode_chunking').change();
// Sync new urls link
var inputs_new_urls = $(".sync_url_new");
inputs_new_urls.keyup(function () {
inputs_new_urls.val($(this).val());
});
});
</script>

View File

@@ -0,0 +1,22 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?><script>
//DOCUMENT LOAD
$(document).ready(function () {
DUPX.beforeUnloadCheck(false);
$('[data-go-step-one-url]').click(function () {
document.location.href = decodeURIComponent($(this).data('go-step-one-url'));
});
//INIT Routines
$("*[data-type='toggle']").click(DUPX.toggleClick);
$("#tabs").tabs();
});
</script>