first commit
This commit is contained in:
@@ -0,0 +1,413 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
*/
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
use Duplicator\Models\GlobalEntity;
|
||||
use Duplicator\Libs\Snap\SnapIO;
|
||||
use Duplicator\Libs\Snap\SnapUtil;
|
||||
use Duplicator\Models\DynamicGlobalEntity;
|
||||
use Duplicator\Utils\LockUtil;
|
||||
use Duplicator\Libs\WpUtils\WpArchiveUtils;
|
||||
|
||||
$global = GlobalEntity::getInstance();
|
||||
$dGlobal = DynamicGlobalEntity::getInstance();
|
||||
|
||||
$max_execution_time = (int) SnapUtil::phpIniGet("max_execution_time", 0);
|
||||
$max_execution_time = $max_execution_time < 0 ? PHP_INT_MAX : $max_execution_time;
|
||||
$max_execution_time = empty($max_execution_time) ? 30 : $max_execution_time;
|
||||
$workerTimeCapRange = [
|
||||
10,
|
||||
min(180, max(30, (int) (0.7 * (float) $max_execution_time))),
|
||||
];
|
||||
$workerTimeValue = (int) max($workerTimeCapRange[0], min((int) $global->php_max_worker_time_in_sec, $workerTimeCapRange[1]));
|
||||
?>
|
||||
<div class="dup-accordion-wrapper display-separators close">
|
||||
<div class="accordion-header">
|
||||
<h3 class="title">
|
||||
<?php esc_html_e("Advanced", 'duplicator-pro'); ?>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="accordion-content">
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Thread Lock", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
type="radio"
|
||||
name="lock_mode"
|
||||
id="lock_mode_flock"
|
||||
class="margin-0"
|
||||
value="<?php echo (int) LockUtil::LOCK_MODE_FILE; ?>"
|
||||
<?php checked($global->lock_mode, LockUtil::LOCK_MODE_FILE); ?>>
|
||||
<label for="lock_mode_flock">
|
||||
<?php esc_html_e("File", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<input
|
||||
type="radio"
|
||||
name="lock_mode"
|
||||
id="lock_mode_sql"
|
||||
class="margin-0"
|
||||
value="<?php echo (int) LockUtil::LOCK_MODE_SQL; ?>"
|
||||
<?php checked($global->lock_mode, LockUtil::LOCK_MODE_SQL); ?>>
|
||||
<label for="lock_mode_sql">
|
||||
<?php esc_html_e("SQL", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Max Worker Time", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
data-parsley-required
|
||||
data-parsley-errors-container="#php_max_worker_time_in_sec_error_container"
|
||||
data-parsley-range="<?php echo esc_attr(wp_json_encode($workerTimeCapRange)); ?>"
|
||||
data-parsley-type="number"
|
||||
class="width-small inline-display margin-0"
|
||||
type="text"
|
||||
name="php_max_worker_time_in_sec"
|
||||
id="php_max_worker_time_in_sec"
|
||||
value="<?php echo (int) $workerTimeValue; ?>">
|
||||
<span>
|
||||
<?php esc_html_e('Seconds', 'duplicator-pro'); ?>
|
||||
</span>
|
||||
<div id="php_max_worker_time_in_sec_error_container" class="duplicator-error-container"></div>
|
||||
<p class="description">
|
||||
<?php
|
||||
esc_html_e(
|
||||
'This setting controls how long each processing chunk can run. A lower value makes the process more reliable but slower.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?><br />
|
||||
<?php
|
||||
esc_html_e(
|
||||
"Try a low value (30 seconds or lower) if the build fails with the recommended setting.",
|
||||
'duplicator-pro'
|
||||
); ?>
|
||||
</p>
|
||||
</div>
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Ajax", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
type="radio"
|
||||
id="ajax_protocol_1"
|
||||
name="ajax_protocol"
|
||||
class="ajax_protocol margin-0"
|
||||
value="admin"
|
||||
<?php checked($global->ajax_protocol, 'admin'); ?>>
|
||||
<label for="ajax_protocol_1">
|
||||
<?php esc_html_e("Auto", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<input
|
||||
type="radio"
|
||||
id="ajax_protocol_2"
|
||||
name="ajax_protocol"
|
||||
class="ajax_protocol margin-0"
|
||||
value="http"
|
||||
<?php checked($global->ajax_protocol == 'http'); ?>>
|
||||
<label for="ajax_protocol_2">
|
||||
<?php esc_html_e("HTTP", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<input
|
||||
type="radio"
|
||||
id="ajax_protocol_3"
|
||||
name="ajax_protocol"
|
||||
class="ajax_protocol margin-0"
|
||||
value="https"
|
||||
<?php checked($global->ajax_protocol == 'https'); ?>>
|
||||
<label for="ajax_protocol_3">
|
||||
<?php esc_html_e("HTTPS", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<input
|
||||
type="radio"
|
||||
id="ajax_protocol_4"
|
||||
name="ajax_protocol"
|
||||
class="ajax_protocol margin-0"
|
||||
value="custom"
|
||||
<?php checked($global->ajax_protocol, 'custom'); ?>>
|
||||
<label for="ajax_protocol_4">
|
||||
<?php esc_html_e("Custom URL", 'duplicator-pro'); ?>
|
||||
</label> <br />
|
||||
<input
|
||||
type="<?php echo ($global->ajax_protocol == 'custom' ? 'text' : 'hidden'); ?>"
|
||||
id="custom_ajax_url"
|
||||
name="custom_ajax_url"
|
||||
class="width-xlarge"
|
||||
placeholder="<?php esc_attr_e('Consult support before changing.', 'duplicator-pro'); ?>"
|
||||
value="<?php echo esc_url($global->custom_ajax_url); ?>">
|
||||
<span id="custom_ajax_url_error" class="alert-color">
|
||||
<?php esc_html_e("Bad URL!", 'duplicator-pro'); ?>
|
||||
</span>
|
||||
<p class="description">
|
||||
<?php esc_html_e("Used to kick off build worker. Only change if Backups get stuck at the start of a build.", 'duplicator-pro'); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e('Root path', 'duplicator-pro') ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
type="checkbox"
|
||||
name="homepath_as_abspath"
|
||||
id="homepath_as_abspath"
|
||||
class="margin-0"
|
||||
<?php disabled(WpArchiveUtils::isAbspathHomepathEquivalent()); ?>
|
||||
<?php checked($global->homepath_as_abspath); ?>
|
||||
value="1">
|
||||
<label for="homepath_as_abspath">
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'Use ABSPATH %s as root path.',
|
||||
'%s represents the ABSPATH surrounded with bold (<b>) tags',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<b>' . esc_html(WpArchiveUtils::getArchiveListPaths('abs')) . '</b>'
|
||||
);
|
||||
?>
|
||||
<br>
|
||||
</label>
|
||||
<p class="description">
|
||||
<?php
|
||||
if (WpArchiveUtils::isAbspathHomepathEquivalent()) {
|
||||
esc_html_e('Abspath and home path are equivalent so this option is disabled', 'duplicator-pro');
|
||||
} else {
|
||||
?>
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'In this installation the default root path is %s.',
|
||||
'%s represents the root path surrounded with bold (<b>) tags',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<b>' . esc_html(SnapIO::safePathUntrailingslashit(get_home_path(), true)) . '</b>'
|
||||
); ?><br>
|
||||
<?php
|
||||
esc_html_e(
|
||||
'The path of the WordPress core is different. Activate this option if you want to consider ABSPATH as root path.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
}
|
||||
?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e('Scan File Checks', 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
type="checkbox"
|
||||
name="_skip_archive_scan"
|
||||
id="_skip_archive_scan"
|
||||
class="margin-0"
|
||||
<?php checked($global->skip_archive_scan); ?>>
|
||||
<label for="_skip_archive_scan">
|
||||
<?php esc_html_e("Skip", 'duplicator-pro') ?>
|
||||
</label><br />
|
||||
<p class="description">
|
||||
<?php
|
||||
esc_html_e(
|
||||
'If enabled all files check on scan will be skipped before Backup creation.
|
||||
In some cases, this option can be beneficial if the scan process is having issues running or returning errors.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e('Client-side Kickoff', 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
type="checkbox"
|
||||
name="_clientside_kickoff"
|
||||
id="_clientside_kickoff"
|
||||
class="margin-0"
|
||||
<?php checked($global->clientside_kickoff); ?> />
|
||||
<label for="_clientside_kickoff">
|
||||
<?php esc_html_e("Enabled", 'duplicator-pro') ?>
|
||||
</label><br />
|
||||
<p class="description">
|
||||
<?php esc_html_e('Initiate Backup build from client. Only check this if instructed to by Duplicator support.', 'duplicator-pro'); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Password-Protected Access", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
type="checkbox"
|
||||
name="_basic_auth_enabled"
|
||||
id="_basic_auth_enabled"
|
||||
value="1"
|
||||
class="margin-0"
|
||||
<?php checked($dGlobal->getValBool('basic_auth_enabled')); ?>>
|
||||
<label for="_basic_auth_enabled">
|
||||
<?php esc_html_e("Enabled", 'duplicator-pro') ?>
|
||||
</label>
|
||||
<i class="fa-solid fa-question-circle fa-sm dark-gray-color"
|
||||
data-tooltip-title="<?php esc_attr_e("HTTP Basic authentication", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php esc_attr_e(
|
||||
"When HTTP Basic authentication is applied Duplicator needs to attach the login credentials to each request to the server.
|
||||
This is required for the build process to work properly. If you see a browser popup login window when accessing the admin area,
|
||||
then basic authentication should be enabled. If you are not sure, please consult your hosting provider.",
|
||||
'duplicator-pro'
|
||||
); ?>"></i>
|
||||
<div id="dup-basic-auth-login-wrapper">
|
||||
<input
|
||||
autocomplete="off"
|
||||
placeholder="<?php esc_attr_e('User', 'duplicator-pro'); ?>"
|
||||
type="text"
|
||||
name="basic_auth_user"
|
||||
id="basic_auth_user"
|
||||
class="margin-0"
|
||||
value="<?php echo esc_attr($dGlobal->getValString('basic_auth_user')); ?>"
|
||||
<?php disabled(!$dGlobal->getValBool('basic_auth_enabled')); ?>>
|
||||
<span class="dup-password-toggle">
|
||||
<input
|
||||
id="auth_password"
|
||||
autocomplete="off"
|
||||
placeholder="<?php esc_attr_e('Password', 'duplicator-pro'); ?>"
|
||||
type="password"
|
||||
name="basic_auth_password"
|
||||
id="basic_auth_password"
|
||||
class="margin-0"
|
||||
value="<?php echo esc_attr($dGlobal->getValString('basic_auth_password')); ?>"
|
||||
<?php disabled(!$dGlobal->getValBool('basic_auth_enabled')); ?>>
|
||||
<button type="button">
|
||||
<i class="fas fa-eye fa-sm"></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<p class="description">
|
||||
<?php esc_html_e(
|
||||
'Enable this function and provide username and password in case Backup creation error.
|
||||
Essential for making authorized HTTP requests in a server protected folder.',
|
||||
'duplicator-pro'
|
||||
); ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function($) {
|
||||
$('#_basic_auth_enabled').on('change', function() {
|
||||
if ($(this).is(':checked')) {
|
||||
$('#dup-basic-auth-login-wrapper input').prop('disabled', false);
|
||||
} else {
|
||||
$('#dup-basic-auth-login-wrapper input').prop('disabled', true);
|
||||
}
|
||||
});
|
||||
|
||||
var url_error = $('#custom_ajax_url_error');
|
||||
// Check URL is valid
|
||||
$.urlExists = function(url) {
|
||||
var http = new XMLHttpRequest();
|
||||
try {
|
||||
http.open('HEAD', url, false);
|
||||
http.send();
|
||||
} catch (err) {
|
||||
$('#custom_ajax_url_error').html(err.message);
|
||||
return false;
|
||||
}
|
||||
return http.status != 404;
|
||||
};
|
||||
var debounce;
|
||||
$('#custom_ajax_url').on('input keyup keydown change paste focus', function(e) {
|
||||
clearTimeout(debounce);
|
||||
var $this = $(this);
|
||||
debounce = setTimeout(function() {
|
||||
$this.css({
|
||||
'border': ''
|
||||
});
|
||||
url_error.hide();
|
||||
if (!$.urlExists($this.val())) {
|
||||
$this.css({
|
||||
'border': 'maroon 1px solid'
|
||||
});
|
||||
url_error.show();
|
||||
}
|
||||
}, 500);
|
||||
});
|
||||
|
||||
(function($this) {
|
||||
$this.css({
|
||||
'border': ''
|
||||
});
|
||||
url_error.hide();
|
||||
setTimeout(function() {
|
||||
var isCustomAjaxUrl = $('#ajax_protocol_4').is(':checked');
|
||||
if (isCustomAjaxUrl && !$.urlExists($this.val())) {
|
||||
$this.css({
|
||||
'border': 'maroon 1px solid'
|
||||
});
|
||||
url_error.show();
|
||||
}
|
||||
if (isCustomAjaxUrl) {
|
||||
$('#custom_ajax_url').attr('data-parsley-required', 'true');
|
||||
} else {
|
||||
$('#custom_ajax_url').removeAttr('data-parsley-required');
|
||||
}
|
||||
}, 0);
|
||||
}($('#custom_ajax_url')))
|
||||
|
||||
/*
|
||||
* DISPLAY OR HIDE CUSTOM_AJAX_URL
|
||||
*/
|
||||
$('.ajax_protocol').on('input click change select touchstart', function(e) {
|
||||
// Setup and collect value
|
||||
var $this = $(this),
|
||||
value = $this.val(),
|
||||
hideField = $('#custom_ajax_url'),
|
||||
hideFieldState = hideField.attr('type'),
|
||||
offset = 200;
|
||||
url_error.hide();
|
||||
if (value == 'custom') {
|
||||
// Display hidden field
|
||||
if (hideFieldState == 'hidden') {
|
||||
hideField.hide().attr('type', 'text').fadeIn(offset).attr('data-parsley-required', 'true');
|
||||
hideField.css({
|
||||
'border': ''
|
||||
});
|
||||
url_error.hide();
|
||||
if (!$.urlExists(hideField.val())) {
|
||||
hideField.css({
|
||||
'border': 'maroon 1px solid'
|
||||
});
|
||||
url_error.show();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Hide field but keep it active for POST reading
|
||||
if (hideFieldState == 'text') {
|
||||
var parsleyId = $('#custom_ajax_url').data('parsley-id');
|
||||
var errorUlId = '#parsley-id-' + parsleyId;
|
||||
if ($(errorUlId).length)
|
||||
$(errorUlId).remove();
|
||||
hideField.fadeOut(Math.round(offset / 2), function() {
|
||||
$(this).attr('type', 'hidden').show();
|
||||
}).removeAttr('data-parsley-required');;
|
||||
}
|
||||
}
|
||||
});
|
||||
}(window.jQuery || jQuery))
|
||||
</script>
|
||||
@@ -0,0 +1,191 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
*/
|
||||
|
||||
use Duplicator\Libs\Shell\ShellZipUtils;
|
||||
use Duplicator\Models\GlobalEntity;
|
||||
use Duplicator\Package\Archive\PackageArchive;
|
||||
use Duplicator\Utils\ZipArchiveExtended;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
$global = GlobalEntity::getInstance();
|
||||
$isZipArchiveAvailable = ZipArchiveExtended::isPhpZipAvailable();
|
||||
$isShellZipAvailable = (ShellZipUtils::getShellExecZipPath() != null);
|
||||
?>
|
||||
|
||||
<h3 class="title">
|
||||
<?php esc_html_e("Archive", 'duplicator-pro') ?>
|
||||
</h3>
|
||||
<hr size="1" />
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Compression", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
type="radio"
|
||||
name="archive_compression"
|
||||
id="archive_compression_off"
|
||||
value="0"
|
||||
class="margin-0"
|
||||
<?php checked($global->archive_compression, false); ?>>
|
||||
<label for="archive_compression_off">
|
||||
<?php esc_html_e("Off", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<input
|
||||
type="radio"
|
||||
name="archive_compression"
|
||||
id="archive_compression_on"
|
||||
value="1"
|
||||
class="margin-0"
|
||||
<?php checked($global->archive_compression); ?>>
|
||||
<label for="archive_compression_on">
|
||||
<?php esc_html_e("On", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<?php $tipContent = __(
|
||||
'This setting controls archive compression. The setting apply to all Archive Engine formats.
|
||||
For ZipArchive this setting only works on PHP 7.0 or higher.',
|
||||
'duplicator-pro'
|
||||
); ?>
|
||||
<i style="margin-right:7px;" class="fa-solid fa-question-circle fa-sm dark-gray-color"
|
||||
data-tooltip-title="<?php esc_attr_e("Archive Compression", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php echo esc_attr($tipContent); ?>">
|
||||
</i>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Archive Engine", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<div class="engine-radio">
|
||||
<input
|
||||
onclick="DupliJs.UI.SetArchiveOptionStates();"
|
||||
type="radio"
|
||||
name="archive_build_mode" id="archive_build_mode3"
|
||||
class="margin-0"
|
||||
value="<?php echo (int) PackageArchive::BUILD_MODE_DUP_ARCHIVE; ?>"
|
||||
<?php checked($global->getBuildMode() == PackageArchive::BUILD_MODE_DUP_ARCHIVE); ?>
|
||||
<?php disabled(!$global->isBuildModeAvailable(PackageArchive::BUILD_MODE_DUP_ARCHIVE)) ?>>
|
||||
<label for="archive_build_mode3"><?php esc_html_e("DupArchive", 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
<div class="engine-radio <?php echo ($isShellZipAvailable) ? '' : 'engine-radio-disabled'; ?>">
|
||||
<input
|
||||
onclick="DupliJs.UI.SetArchiveOptionStates();"
|
||||
type="radio"
|
||||
name="archive_build_mode"
|
||||
id="archive_build_mode1"
|
||||
class="margin-0"
|
||||
value="<?php echo (int) PackageArchive::BUILD_MODE_SHELL_EXEC; ?>"
|
||||
<?php checked($global->getBuildMode() == PackageArchive::BUILD_MODE_SHELL_EXEC); ?>
|
||||
<?php disabled(!$global->isBuildModeAvailable(PackageArchive::BUILD_MODE_SHELL_EXEC)) ?>>
|
||||
<label for="archive_build_mode1"><?php esc_html_e("Shell Zip", 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
<div class="engine-radio">
|
||||
<input
|
||||
onclick="DupliJs.UI.SetArchiveOptionStates();"
|
||||
type="radio"
|
||||
name="archive_build_mode"
|
||||
id="archive_build_mode2"
|
||||
class="margin-0"
|
||||
value="<?php echo (int) PackageArchive::BUILD_MODE_ZIP_ARCHIVE; ?>"
|
||||
<?php checked($global->getBuildMode() == PackageArchive::BUILD_MODE_ZIP_ARCHIVE); ?>
|
||||
<?php disabled(!$global->isBuildModeAvailable(PackageArchive::BUILD_MODE_ZIP_ARCHIVE)) ?>>
|
||||
<label for="archive_build_mode2"><?php esc_html_e("ZipArchive", 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
|
||||
<br style="clear:both" />
|
||||
|
||||
<!-- DUPARCHIVE -->
|
||||
<div class="engine-sub-opts" id="engine-details-3" style="display:none">
|
||||
<?php
|
||||
esc_html_e('This option creates a custom Duplicator Archive Format (.daf) archive file.', 'duplicator-pro');
|
||||
echo '<br/> ';
|
||||
esc_html_e('This option is fully multi-threaded and recommended for large sites or throttled servers.', 'duplicator-pro');
|
||||
echo '<br/> ';
|
||||
printf(
|
||||
'%s <a href="' . esc_url(DUPLICATOR_DUPLICATOR_DOCS_URL . 'how-to-work-with-daf-files-and-the-duparchive-extraction-tool')
|
||||
. '" target="_blank">%s</a> ',
|
||||
esc_html__('For details on how to use and manually extract the DAF format please see the ', 'duplicator-pro'),
|
||||
esc_html__('online documentation.', 'duplicator-pro')
|
||||
);
|
||||
?>
|
||||
</div>
|
||||
|
||||
<!-- SHELL EXEC -->
|
||||
<div class="engine-sub-opts" id="engine-details-1" style="display:none">
|
||||
<?php
|
||||
$tplMng->render(
|
||||
'parts/settings/shellZipMessage',
|
||||
['hasShellZip' => $isShellZipAvailable]
|
||||
);
|
||||
?>
|
||||
</div>
|
||||
|
||||
<!-- ZIP ARCHIVE -->
|
||||
<div class="engine-sub-opts" id="engine-details-2" style="display:none;">
|
||||
<div class="margin-bottom-1">
|
||||
<span><?php esc_html_e("Process Mode", 'duplicator-pro'); ?></span>
|
||||
<select name="ziparchive_mode" id="ziparchive_mode" onchange="DupliJs.UI.setZipArchiveMode();" class="inline-display width-medium margin-0">
|
||||
<option <?php selected($global->ziparchive_mode, PackageArchive::ZIP_MODE_MULTI_THREAD); ?>
|
||||
value="<?php echo (int) PackageArchive::ZIP_MODE_MULTI_THREAD ?>">
|
||||
<?php esc_html_e("Multi-Threaded", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
<option <?php selected($global->ziparchive_mode == PackageArchive::ZIP_MODE_SINGLE_THREAD); ?>
|
||||
value="<?php echo (int) PackageArchive::ZIP_MODE_SINGLE_THREAD ?>">
|
||||
<?php esc_html_e("Single-Threaded", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
</select>
|
||||
<i style="margin-right:7px;" class="fa-solid fa-question-circle fa-sm dark-gray-color"
|
||||
data-tooltip-title="<?php esc_attr_e("PHP ZipArchive Mode", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php
|
||||
esc_attr_e(
|
||||
'Single-Threaded mode attempts to create the entire archive in one request.
|
||||
Multi-Threaded mode allows the archive to be chunked over multiple requests.
|
||||
Multi-Threaded mode is typically slower but much more reliable especially for larger sites.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>"></i>
|
||||
</div>
|
||||
|
||||
<div id="dupli-ziparchive-mode-st">
|
||||
<input type="checkbox" id="ziparchive_validation" name="ziparchive_validation" class="margin-0"
|
||||
<?php checked($global->ziparchive_validation); ?>>
|
||||
<label for="ziparchive_validation">Enable file validation</label>
|
||||
</div>
|
||||
|
||||
<div id="dupli-ziparchive-mode-mt">
|
||||
<span><?php esc_html_e("Buffer Size", 'duplicator-pro'); ?></span>
|
||||
<input
|
||||
maxlength="4"
|
||||
class="inline-display width-small margin-0"
|
||||
data-parsley-required data-parsley-errors-container="#ziparchive_chunk_size_error_container"
|
||||
data-parsley-min="5" data-parsley-type="number"
|
||||
type="text" name="ziparchive_chunk_size_in_mb" id="ziparchive_chunk_size_in_mb"
|
||||
value="<?php echo (int) $global->ziparchive_chunk_size_in_mb; ?>">
|
||||
<?php esc_html_e('MB', 'duplicator-pro'); ?>
|
||||
<?php
|
||||
$toolTipContent = __(
|
||||
'Buffer size only applies to multi-threaded requests and indicates how large an archive will get before a close is registered.
|
||||
Higher values are faster but can be more unstable based on the hosts max_execution_time.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>
|
||||
<i style="margin-right:7px" class="fa-solid fa-question-circle fa-sm dark-gray-color"
|
||||
data-tooltip-title="<?php esc_attr_e("PHP ZipArchive Buffer", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php echo esc_attr($toolTipContent); ?>">
|
||||
</i>
|
||||
<div id="ziparchive_chunk_size_error_container" class="duplicator-error-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
*/
|
||||
|
||||
use Duplicator\Controllers\SettingsPageController;
|
||||
use Duplicator\Core\Controllers\ControllersManager;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
?>
|
||||
<form
|
||||
id="dup-settings-form" class="dup-settings-pack-basic"
|
||||
action="<?php echo esc_url(ControllersManager::getCurrentLink()); ?>"
|
||||
method="post" data-parsley-validate
|
||||
>
|
||||
<?php $tplData['actions'][SettingsPageController::ACTION_PACKAGE_BASIC_SAVE]->getActionNonceFileds(); ?>
|
||||
<div class="dup-settings-wrapper margin-bottom-1">
|
||||
<?php $tplMng->render('admin_pages/settings/backup/database_settings'); ?>
|
||||
<?php $tplMng->render('admin_pages/settings/backup/archive_settings'); ?>
|
||||
<?php $tplMng->render('admin_pages/settings/backup/processing_settings'); ?>
|
||||
<?php $tplMng->render('admin_pages/settings/backup/installer_settings'); ?>
|
||||
<?php $tplMng->render('admin_pages/settings/backup/advanced_settings'); ?>
|
||||
</div>
|
||||
<p class="submit dupli-save-submit">
|
||||
<input
|
||||
type="submit"
|
||||
name="submit"
|
||||
id="submit"
|
||||
class="button primary small"
|
||||
value="<?php esc_attr_e('Save Settings', 'duplicator-pro') ?>" style="display: inline-block;"
|
||||
>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
jQuery(document).ready(function ($)
|
||||
{
|
||||
|
||||
DupliJs.UI.SetDBEngineMode = function ()
|
||||
{
|
||||
var isMysqlDump = $('#package_mysqldump').is(':checked');
|
||||
var isPHPMode = $('#package_phpdump').is(':checked');
|
||||
var isPHPChunkMode = $('#package_phpchunkingdump').is(':checked');
|
||||
|
||||
$('#dbengine-details-1, #dbengine-details-2').hide();
|
||||
switch (true) {
|
||||
case isMysqlDump :
|
||||
$('#dbengine-details-1').show();
|
||||
break;
|
||||
case isPHPMode :
|
||||
case isPHPChunkMode :
|
||||
$('#dbengine-details-2').show();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DupliJs.UI.setZipArchiveMode = function ()
|
||||
{
|
||||
$('#dupli-ziparchive-mode-st, #dupli-ziparchive-mode-mt').hide();
|
||||
if ($('#ziparchive_mode').val() == 0) {
|
||||
$('#dupli-ziparchive-mode-mt').show();
|
||||
} else {
|
||||
$('#dupli-ziparchive-mode-st').show();
|
||||
}
|
||||
}
|
||||
|
||||
DupliJs.UI.SetArchiveOptionStates = function ()
|
||||
{
|
||||
var php70 = <?php echo (version_compare(PHP_VERSION, '7', '>=') ? 'true' : 'false'); ?>;
|
||||
var isShellZipSelected = $('#archive_build_mode1').is(':checked');
|
||||
var isZipArchiveSelected = $('#archive_build_mode2').is(':checked');
|
||||
var isDupArchiveSelected = $('#archive_build_mode3').is(':checked');
|
||||
|
||||
if (isShellZipSelected || isDupArchiveSelected) {
|
||||
$("[name='archive_compression']").prop('disabled', false);
|
||||
$("[name='ziparchive_mode']").prop('disabled', true);
|
||||
} else {
|
||||
$("[name='ziparchive_mode']").prop('disabled', false);
|
||||
if (php70) {
|
||||
$("[name='archive_compression']").prop('disabled', false);
|
||||
} else {
|
||||
$('#archive_compression_on').prop('checked', true);
|
||||
$("[name='archive_compression']").prop('disabled', true);
|
||||
}
|
||||
}
|
||||
|
||||
$('#engine-details-1, #engine-details-2, #engine-details-3').hide();
|
||||
switch (true) {
|
||||
case isShellZipSelected :
|
||||
$('#engine-details-1').show();
|
||||
break;
|
||||
case isZipArchiveSelected :
|
||||
$('#engine-details-2').show();
|
||||
break;
|
||||
case isDupArchiveSelected :
|
||||
$('#engine-details-3').show();
|
||||
break;
|
||||
}
|
||||
DupliJs.UI.setZipArchiveMode();
|
||||
}
|
||||
|
||||
//INIT
|
||||
DupliJs.UI.SetArchiveOptionStates();
|
||||
DupliJs.UI.SetDBEngineMode();
|
||||
|
||||
DupliJs.UI.cleanupModeRadioSwitched = function() {
|
||||
if ($('#cleanup_mode_Cleanup_Off').is(":checked")){
|
||||
$('#auto_cleanup_hours').attr('readonly','readonly');
|
||||
$('#cleanup_email').attr('readonly','readonly');
|
||||
} else if ($('#cleanup_mode_Email_Notice').is(":checked")) {
|
||||
$('#auto_cleanup_hours').attr('readonly','readonly');
|
||||
$("#cleanup_email").removeAttr('readonly');
|
||||
} else if ($('#cleanup_mode_Auto_Cleanup').is(":checked")) {
|
||||
$("#auto_cleanup_hours").removeAttr('readonly');
|
||||
$("#cleanup_email").removeAttr('readonly');
|
||||
}
|
||||
}
|
||||
|
||||
$('input[type=radio][name=cleanup_mode]').change(function () {
|
||||
DupliJs.UI.cleanupModeRadioSwitched();
|
||||
});
|
||||
// We must call this also once in the beginning, after UI is loaded
|
||||
DupliJs.UI.cleanupModeRadioSwitched();
|
||||
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,220 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
*/
|
||||
|
||||
use Duplicator\Models\GlobalEntity;
|
||||
use Duplicator\Controllers\SettingsPageController;
|
||||
use Duplicator\Core\Constants;
|
||||
use Duplicator\Libs\Shell\Shell;
|
||||
use Duplicator\Libs\WpUtils\WpDbUtils;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
$global = GlobalEntity::getInstance();
|
||||
$is_shellexec_on = Shell::test();
|
||||
$mysqlDumpPath = WpDbUtils::getMySqlDumpPath();
|
||||
$mysqlDumpFound = (bool) $mysqlDumpPath;
|
||||
?>
|
||||
|
||||
<h3 class="title">
|
||||
<?php esc_html_e("Database", 'duplicator-pro') ?>
|
||||
</h3>
|
||||
<hr size="1" />
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("SQL Mode", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<div class="margin-bottom-1">
|
||||
<div class="engine-radio <?php echo ($is_shellexec_on) ? '' : 'engine-radio-disabled'; ?> inline-display">
|
||||
<input
|
||||
type="radio"
|
||||
name="_package_dbmode"
|
||||
value="mysql"
|
||||
id="package_mysqldump"
|
||||
class="margin-0"
|
||||
<?php checked($global->package_mysqldump); ?> onclick="DupliJs.UI.SetDBEngineMode();">
|
||||
<label for="package_mysqldump"><?php esc_html_e("Mysqldump", 'duplicator-pro'); ?> </label>
|
||||
</div>
|
||||
|
||||
<div class="engine-radio inline-display">
|
||||
<input
|
||||
type="radio"
|
||||
name="_package_dbmode"
|
||||
id="package_phpdump"
|
||||
value="php"
|
||||
class="margin-0"
|
||||
<?php checked(!$global->package_mysqldump); ?> onclick="DupliJs.UI.SetDBEngineMode();">
|
||||
<label for="package_phpdump"><?php esc_html_e("PHP Code", 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SHELL EXEC -->
|
||||
<div class="engine-sub-opts" id="dbengine-details-1" style="display:none">
|
||||
<!-- MYSQLDUMP IN-ACTIVE -->
|
||||
<?php if (!$is_shellexec_on) :
|
||||
?>
|
||||
<div class="dup-feature-notfound">
|
||||
<?php
|
||||
esc_html_e(
|
||||
'In order to use Mysqldump, the PHP function popen/pclose must be enabled.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
echo ' ';
|
||||
esc_html_e('Please contact your host or server admin to enable this function.', 'duplicator-pro');
|
||||
echo ' ';
|
||||
printf(
|
||||
esc_html_x(
|
||||
'For a list of approved providers that support this function, %1$sclick here%2$s.',
|
||||
'%1$s and %2$s are the opening and closing tags of a link.',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<a href="' . esc_url(DUPLICATOR_DUPLICATOR_DOCS_URL . 'what-host-providers-are-recommended-for-duplicator/')
|
||||
. '" target="_blank">',
|
||||
'</a>'
|
||||
);
|
||||
echo ' ';
|
||||
esc_html_e('The "PHP Code" setting will be used until this issue is resolved by your hosting provider.', 'duplicator-pro');
|
||||
?>
|
||||
<p>
|
||||
<?php
|
||||
esc_html_e('Below is a list of possible functions to activate to solve the problem.', 'duplicator-pro');
|
||||
echo ' ';
|
||||
esc_html_e('If the problem persists, look at the log for a more thorough analysis.', 'duplicator-pro');
|
||||
?>
|
||||
</p>
|
||||
<br />
|
||||
<b><?php esc_html_e('Disabled Functions:', 'duplicator-pro'); ?></b>
|
||||
<code class="display-block margin-bottom-1">
|
||||
<?php
|
||||
foreach (['escapeshellarg', 'escapeshellcmd', 'extension_loaded', 'popen', 'pclose'] as $func) {
|
||||
if (Shell::hasDisabledFunctions($func)) {
|
||||
echo esc_html($func);
|
||||
echo '<br>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</code>
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'FAQ: %1$sHow to enable disabled PHP functions.%2$s',
|
||||
'%1$s and %2$s are the opening and closing tags of a link.',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<a href="' . esc_url(DUPLICATOR_DUPLICATOR_DOCS_URL . 'how-to-resolve-dependency-checks') . '" target="_blank">',
|
||||
'</a>'
|
||||
);
|
||||
?>
|
||||
</div>
|
||||
<!-- MYSQLDUMP ACTIVE -->
|
||||
<?php
|
||||
else :
|
||||
$tipContent = esc_attr__(
|
||||
'Add a custom path if the path to mysqldump is not properly detected.
|
||||
For all paths use a forward slash as the path seperator.
|
||||
On Linux systems use mysqldump for Windows systems use mysqldump.exe.
|
||||
If the path tried does not work please contact your hosting provider for details on the correct path.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>
|
||||
<span><?php esc_html_e("Current Path:", 'duplicator-pro'); ?></span>
|
||||
<?php
|
||||
SettingsPageController::getMySQLDumpMessage(
|
||||
$mysqlDumpFound,
|
||||
(!empty($mysqlDumpPath) ? $mysqlDumpPath : $global->package_mysqldump_path)
|
||||
); ?><br><br>
|
||||
<span><?php esc_html_e("Custom Path:", 'duplicator-pro'); ?></span>
|
||||
<input
|
||||
class="width-large inline-display"
|
||||
type="text"
|
||||
name="_package_mysqldump_path"
|
||||
id="_package_mysqldump_path"
|
||||
value="<?php echo esc_attr($global->package_mysqldump_path); ?>"
|
||||
placeholder="<?php esc_attr_e("/usr/bin/mypath/mysqldump", 'duplicator-pro'); ?>">
|
||||
<i class="fa-solid fa-question-circle fa-sm dark-gray-color"
|
||||
data-tooltip-title="<?php esc_attr_e("mysqldump", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php echo esc_attr($tipContent); ?>">
|
||||
</i><br>
|
||||
|
||||
<label><?php esc_html_e("Switch Options:", 'duplicator-pro'); ?></label>
|
||||
<div class="dup-group-option-wrapper">
|
||||
<?php
|
||||
$mysqldumpOptions = $global->getMysqldumpOptions();
|
||||
foreach ($mysqldumpOptions as $key => $option) {
|
||||
?>
|
||||
<div class="dup-group-option-item">
|
||||
<input
|
||||
type="checkbox"
|
||||
name="<?php echo esc_attr($option->getInputName()); ?>"
|
||||
id="<?php echo esc_attr($option->getInputName()); ?>"
|
||||
class="margin-0"
|
||||
<?php checked($option->getEnabled()); ?>>
|
||||
--<?php echo esc_html($option->getOptionName()); ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php
|
||||
endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- PHP OPTION -->
|
||||
<div class="engine-sub-opts" id="dbengine-details-2" style="display:none; line-height: 35px; margin-top:-5px">
|
||||
<span><?php esc_html_e("Process Mode", 'duplicator-pro'); ?></span>
|
||||
<select name="_phpdump_mode" class="width-medium inline-display margin-0">
|
||||
<option
|
||||
<?php selected($global->package_phpdump_mode, WpDbUtils::PHPDUMP_MODE_MULTI); ?>
|
||||
value="<?php echo (int) WpDbUtils::PHPDUMP_MODE_MULTI; ?>">
|
||||
<?php esc_html_e("Multi-Threaded", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
<option
|
||||
<?php selected($global->package_phpdump_mode, WpDbUtils::PHPDUMP_MODE_SINGLE); ?>
|
||||
value="<?php echo (int) WpDbUtils::PHPDUMP_MODE_SINGLE; ?>">
|
||||
<?php esc_html_e("Single-Threaded", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
</select>
|
||||
<i style="margin-right:7px;" class="fa-solid fa-question-circle fa-sm dark-gray-color"
|
||||
data-tooltip-title="<?php esc_attr_e("PHP Code Mode", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php
|
||||
esc_attr_e(
|
||||
'Single-Threaded mode attempts to create the entire database script in one request.
|
||||
Multi-Threaded mode allows the database script to be chunked over multiple requests.
|
||||
Multi-Threaded mode is typically slower but much more reliable especially for larger databases.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger" for="_package_mysqldump_qrylimit">
|
||||
<?php esc_html_e("Query Size", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<select name="_package_mysqldump_qrylimit" id="_package_mysqldump_qrylimit" class="width-small inline-display margin-0">
|
||||
<?php
|
||||
foreach (Constants::MYSQL_DUMP_CHUNK_SIZES as $value => $label) {
|
||||
echo '<option ' . selected($global->package_mysqldump_qrylimit, $value, false) . ' value="' . (int) $value . '">'
|
||||
. esc_html($label) . '</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<?php $tipContent = __(
|
||||
'A higher limit size will speed up the database build time, however it will use more memory.
|
||||
If your host has memory caps start off low.',
|
||||
'duplicator-pro'
|
||||
); ?>
|
||||
<i style="margin-right:7px" class="fa-solid fa-question-circle fa-sm dark-gray-color"
|
||||
data-tooltip-title="<?php esc_attr_e("MYSQL Query Limit Size", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php echo esc_attr($tipContent); ?>">
|
||||
</i>
|
||||
</div>
|
||||
@@ -0,0 +1,172 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
*/
|
||||
|
||||
use Duplicator\Models\GlobalEntity;
|
||||
use Duplicator\Package\Create\PackInstaller;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
$global = GlobalEntity::getInstance();
|
||||
$installerNameMode = $global->installer_name_mode;
|
||||
?>
|
||||
|
||||
<h3 class="title">
|
||||
<?php esc_html_e("Installer Settings", 'duplicator-pro'); ?>
|
||||
</h3>
|
||||
<hr size="1" />
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Name", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<b><?php esc_html_e("Default 'Save as' name:", 'duplicator-pro'); ?></b> <br />
|
||||
<label>
|
||||
<i class='fas fa-lock lock-info fa-fw'></i>
|
||||
<input
|
||||
type="radio"
|
||||
name="installer_name_mode"
|
||||
class="margin-0"
|
||||
value="<?php echo esc_attr(GlobalEntity::INSTALLER_NAME_MODE_WITH_HASH); ?>"
|
||||
<?php checked($installerNameMode === GlobalEntity::INSTALLER_NAME_MODE_WITH_HASH); ?>>
|
||||
[name]_[hash]_[date]_installer.php <i>(<?php esc_html_e("recommended", 'duplicator-pro'); ?>)</i>
|
||||
</label><br>
|
||||
<label>
|
||||
<i class='fas fa-lock-open lock-info fa-fw'></i>
|
||||
<input
|
||||
type="radio"
|
||||
name="installer_name_mode"
|
||||
class="margin-0"
|
||||
value="<?php echo esc_attr(GlobalEntity::INSTALLER_NAME_MODE_SIMPLE); ?>"
|
||||
<?php checked($installerNameMode === GlobalEntity::INSTALLER_NAME_MODE_SIMPLE); ?>>
|
||||
<?php echo esc_html(PackInstaller::DEFAULT_INSTALLER_FILE_NAME_WITHOUT_HASH); ?>
|
||||
</label>
|
||||
<p class="description">
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'To understand the importance and usage of the installer name, please %1$sread this section%2$s.',
|
||||
'1 and 2 are opening and closing anchor or link tags',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<a href="javascript:void(0)" onclick="jQuery(\'#dupli-inst-mode-details\').toggle()">',
|
||||
'</a>'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<div id="dupli-inst-mode-details">
|
||||
<p>
|
||||
<i>
|
||||
<?php esc_html_e(
|
||||
'Using the full hashed format provides a higher level of security by helping to prevent the discovery of the installer file.',
|
||||
'duplicator-pro'
|
||||
); ?>
|
||||
</i> <br />
|
||||
<b><?php esc_html_e('Hashed example', 'duplicator-pro'); ?>:</b> my-name_64fc6df76c17f2023225_19990101010101_installer.php
|
||||
</p>
|
||||
<p>
|
||||
<?php
|
||||
esc_html_e(
|
||||
'The Installer \'Name\' setting specifies the name of the installer used at download-time.
|
||||
It\'s recommended you choose the hashed name to better protect the installer file.
|
||||
Independent of the value of this setting, you can always change the name in the \'Save as\' file dialog at download-time.
|
||||
If you choose to use a custom name, use a filename that is known only to you. Installer filenames must end in \'.php\'.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<p>
|
||||
<?php
|
||||
esc_html_e(
|
||||
'It\'s important not to leave the installer files on the destination server longer than necessary.
|
||||
After installing the migrated or restored site, just logon as a WordPress administrator and
|
||||
follow the prompts to have the plugin remove the files.
|
||||
Alternatively, you can remove them manually.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<p>
|
||||
<i class="fas fa-info-circle"></i>
|
||||
<?php
|
||||
esc_html_e(
|
||||
'Tip: Each row on the Backups screen includes a copy button that copies the installer name to the clipboard.
|
||||
After clicking this button, paste the installer name into the URL you\'re using to install the destination site.
|
||||
This feature is handy when using the hashed installer name.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="title">
|
||||
<?php esc_html_e("Installer Cleanup", 'duplicator-pro') ?>
|
||||
</h3>
|
||||
<hr size="1" />
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Mode", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
type="radio"
|
||||
name="cleanup_mode"
|
||||
id="cleanup_mode_Cleanup_Off"
|
||||
class="margin-0"
|
||||
value="<?php echo (int) GlobalEntity::CLEANUP_MODE_OFF; ?>"
|
||||
<?php checked($global->cleanup_mode, GlobalEntity::CLEANUP_MODE_OFF); ?>>
|
||||
<label for="cleanup_mode_Cleanup_Off"><?php esc_html_e("Off", 'duplicator-pro'); ?></label>
|
||||
<input
|
||||
type="radio"
|
||||
name="cleanup_mode"
|
||||
id="cleanup_mode_Email_Notice"
|
||||
class="margin-0"
|
||||
value="<?php echo (int) GlobalEntity::CLEANUP_MODE_MAIL; ?>"
|
||||
<?php checked($global->cleanup_mode, GlobalEntity::CLEANUP_MODE_MAIL); ?>>
|
||||
<label for="cleanup_mode_Email_Notice"><?php esc_html_e("Email Notice", 'duplicator-pro'); ?></label>
|
||||
<input
|
||||
type="radio"
|
||||
name="cleanup_mode"
|
||||
id="cleanup_mode_Auto_Cleanup"
|
||||
class="margin-0"
|
||||
value="<?php echo (int) GlobalEntity::CLEANUP_MODE_AUTO; ?>"
|
||||
<?php checked($global->cleanup_mode, GlobalEntity::CLEANUP_MODE_AUTO); ?>>
|
||||
<label for="cleanup_mode_Auto_Cleanup"><?php esc_html_e("Auto Cleanup", 'duplicator-pro'); ?></label>
|
||||
<p class="description">
|
||||
<?php esc_html_e("Email Notice: An email will be sent daily until the installer files are removed.", 'duplicator-pro'); ?>
|
||||
</p>
|
||||
<p class="description">
|
||||
<?php esc_html_e("Auto Cleanup: Installer files will be cleaned up automatically based on setting below.", 'duplicator-pro'); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Auto Cleanup", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
data-parsley-required
|
||||
data-parsley-errors-container="#auto_cleanup_hours_error_container"
|
||||
data-parsley-min="1"
|
||||
data-parsley-type="number"
|
||||
class="inline-display width-small margin-0"
|
||||
type="text"
|
||||
name="auto_cleanup_hours" id="auto_cleanup_hours"
|
||||
value="<?php echo (int) $global->auto_cleanup_hours; ?>"
|
||||
size="7" />
|
||||
<?php esc_html_e('Hours', 'duplicator-pro'); ?>
|
||||
<div id="auto_cleanup_hours_error_container" class="duplicator-error-container"></div>
|
||||
<p class="description"> <?php esc_html_e('Auto cleanup will run every N hours based on value above.', 'duplicator-pro'); ?> </p>
|
||||
</div>
|
||||
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
*/
|
||||
|
||||
use Duplicator\Models\GlobalEntity;
|
||||
use Duplicator\Utils\Settings\ServerThrottle;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
$global = GlobalEntity::getInstance();
|
||||
?>
|
||||
|
||||
<h3 class="title">
|
||||
<?php esc_html_e("Processing", 'duplicator-pro') ?>
|
||||
</h3>
|
||||
<hr size="1" />
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Server Throttle", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
type="radio"
|
||||
name="server_load_reduction"
|
||||
id="server_load_reduction_off"
|
||||
value="<?php echo (int) ServerThrottle::NONE; ?>"
|
||||
class="margin-0"
|
||||
<?php checked($global->server_load_reduction, ServerThrottle::NONE); ?>>
|
||||
<label for="server_load_reduction_off">
|
||||
<?php esc_html_e("Off", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<input
|
||||
type="radio"
|
||||
name="server_load_reduction"
|
||||
id="server_load_reduction_low"
|
||||
value="<?php echo (int) ServerThrottle::A_BIT; ?>"
|
||||
class="margin-0"
|
||||
<?php checked($global->server_load_reduction, ServerThrottle::A_BIT); ?>>
|
||||
<label for="server_load_reduction_low">
|
||||
<?php esc_html_e("Low", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<input
|
||||
type="radio"
|
||||
name="server_load_reduction"
|
||||
id="server_load_reduction_medium"
|
||||
value="<?php echo (int) ServerThrottle::MORE; ?>"
|
||||
class="margin-0"
|
||||
<?php checked($global->server_load_reduction, ServerThrottle::MORE); ?>>
|
||||
<label for="server_load_reduction_medium">
|
||||
<?php esc_html_e("Medium", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<input
|
||||
type="radio"
|
||||
name="server_load_reduction"
|
||||
id="server_load_reduction_high"
|
||||
value="<?php echo (int) ServerThrottle::A_LOT ?>"
|
||||
class="margin-0"
|
||||
<?php checked($global->server_load_reduction, ServerThrottle::A_LOT); ?>>
|
||||
<label for="server_load_reduction_high">
|
||||
<?php esc_html_e("High", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<p class="description">
|
||||
<?php esc_html_e(
|
||||
"Throttle to prevent resource complaints on budget hosts. The higher the value the slower the backup.",
|
||||
'duplicator-pro'
|
||||
); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Max Build Time", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
data-parsley-required data-parsley-errors-container="#max_package_runtime_in_min_error_container"
|
||||
data-parsley-min="0"
|
||||
data-parsley-type="number"
|
||||
class="inline-display width-small margin-0"
|
||||
type="text"
|
||||
name="max_package_runtime_in_min"
|
||||
id="max_package_runtime_in_min"
|
||||
value="<?php echo (int) $global->max_package_runtime_in_min; ?>">
|
||||
<span> <?php esc_html_e('Minutes', 'duplicator-pro'); ?></span>
|
||||
<div id="max_package_runtime_in_min_error_container" class="duplicator-error-container"></div>
|
||||
<p class="description">
|
||||
<?php esc_html_e('Max build time until Backup is auto-cancelled. Set to 0 for no limit.', 'duplicator-pro'); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<label class="lbl-larger">
|
||||
<?php esc_html_e("Max Transfer Time", 'duplicator-pro'); ?>
|
||||
</label>
|
||||
<div class="margin-bottom-1">
|
||||
<input
|
||||
data-parsley-required data-parsley-errors-container="#max_package_transfer_time_in_min_error_container"
|
||||
data-parsley-min="1"
|
||||
data-parsley-type="number"
|
||||
class="inline-display width-small margin-0"
|
||||
type="text"
|
||||
name="max_package_transfer_time_in_min"
|
||||
id="max_package_transfer_time_in_min"
|
||||
value="<?php echo (int) $global->max_package_transfer_time_in_min; ?>">
|
||||
<span> <?php esc_html_e('Minutes', 'duplicator-pro'); ?></span>
|
||||
<div id="max_package_transfer_time_in_min_error_container" class="duplicator-error-container"></div>
|
||||
<p class="description">
|
||||
<?php esc_html_e('Max Backup transfer time in minutes until the transfer is auto-cancelled.', 'duplicator-pro'); ?>
|
||||
</p>
|
||||
</div>
|
||||
Reference in New Issue
Block a user