first commit
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
?>
|
||||
<div class="wrap">
|
||||
<h1>
|
||||
<?php esc_html_e("Install package error", 'duplicator-pro'); ?>
|
||||
</h1>
|
||||
<p>
|
||||
<?php esc_html_e("Error on package prepare, please go back and try again.", 'duplicator-pro'); ?>
|
||||
</p>
|
||||
</div>
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
use Duplicator\Controllers\ImportPageController;
|
||||
use Duplicator\Package\Import\PackageImporter;
|
||||
use Duplicator\Package\Recovery\RecoveryPackage;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
* @var PackageImporter $importObj
|
||||
*/
|
||||
$importObj = $tplData['importObj'];
|
||||
/** @var string $iframeSrc */
|
||||
$iframeSrc = $tplData['iframeSrc'];
|
||||
$importFailMessage = '';
|
||||
|
||||
if (!$importObj->isImportable($importFailMessage)) {
|
||||
?>
|
||||
<div class="wrap">
|
||||
<h1>
|
||||
<?php esc_html_e("Install package", 'duplicator-pro'); ?>
|
||||
</h1>
|
||||
<div class="dpro-pro-import-installer-content-wrapper" >
|
||||
<p class="orangered">
|
||||
<?php echo esc_html($importFailMessage); ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<?php } else { ?>
|
||||
<div id="dpro-pro-import-installer-wrapper" >
|
||||
<div id="dpro-pro-import-installer-top-bar" class="dup-pro-recovery-details-max-width-wrapper" >
|
||||
<a href="<?php echo esc_url(ImportPageController::getImportPageLink()); ?>" class="button" >
|
||||
<i class="fa fa-caret-left"></i> <?php esc_html_e("Back to Import", 'duplicator-pro'); ?>
|
||||
</a>
|
||||
<span class="link-style no-decoration recovery-copy-top-wrapper" >
|
||||
<?php if (($recoverPackage = RecoveryPackage::getRecoverPackage()) !== false) { ?>
|
||||
<span class="button"
|
||||
data-tooltip-placement="right"
|
||||
data-dup-copy-value="<?php echo esc_url($recoverPackage->getInstallLink()); ?>"
|
||||
data-dup-copy-title="<?php esc_attr_e("Copy Recovery URL to clipboard", 'duplicator-pro'); ?>"
|
||||
data-dup-copied-title="<?php esc_attr_e("Recovery URL copied to clipboard", 'duplicator-pro'); ?>" >
|
||||
<?php esc_html_e("Copy Recovery URL", 'duplicator-pro'); ?>
|
||||
</span>
|
||||
<?php } else { ?>
|
||||
<span class="button disabled">
|
||||
<i class="fas fa-exclamation-circle"></i> <?php esc_html_e("Recovery Point Not Set", 'duplicator-pro'); ?>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</span>
|
||||
</div>
|
||||
<div id="dup-pro-import-installer-modal" class="no-display"></div>
|
||||
<iframe id="dpro-pro-import-installer-iframe" src="<?php echo esc_url($iframeSrc); ?>" ></iframe>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
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
|
||||
*/
|
||||
|
||||
$importSettingsUrl = $ctrlMng->getMenuLink(
|
||||
ControllersManager::SETTINGS_SUBMENU_SLUG,
|
||||
SettingsPageController::L2_SLUG_IMPORT
|
||||
);
|
||||
|
||||
?>
|
||||
<div class="dup-pro-import-upload-message" >
|
||||
<p class="import-upload-reset-message-error">
|
||||
<i class="fa fa-exclamation-triangle"></i> <b><?php esc_html_e('UPLOAD FILE PROBLEM', 'duplicator-pro'); ?></b>
|
||||
</p>
|
||||
<p>
|
||||
<?php esc_html_e('Error message:', 'duplicator-pro'); ?>
|
||||
<b><span class="import-upload-error-message"><!-- here is set the message received from the server --></span></b>
|
||||
</p>
|
||||
<div><?php esc_html_e('Possible solutions:', 'duplicator-pro'); ?></div>
|
||||
<ul class="dup-pro-simple-style-list" >
|
||||
<li>
|
||||
<?php esc_html_e('If you are using Server to Server transfer function make sure the URL is a valid URL', 'duplicator-pro'); ?>
|
||||
</li>
|
||||
<li>
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'If you are using the upload function try to change the chunk size in %1$ssettings%2$s and try again',
|
||||
'%1$s and %2$s represents the opening and closing HTML tags for an anchor or link',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<a href="' . esc_url($importSettingsUrl) . '">',
|
||||
'</a>'
|
||||
);
|
||||
?>
|
||||
</li>
|
||||
<li>
|
||||
<?php
|
||||
printf(
|
||||
esc_html__('Upload the file via FTP/file manager to the "%s" folder and reload the page.', 'duplicator-pro'),
|
||||
esc_html(DUPLICATOR_PRO_PATH_IMPORTS)
|
||||
);
|
||||
?>
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
<b>
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'For more information see %1$s[this FAQ item]%2$s',
|
||||
'%1$s and %2$s represents the opening and closing HTML tags for an anchor or link',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<a href="' . esc_url(DUPLICATOR_PRO_DUPLICATOR_DOCS_URL . 'how-to-handle-import-install-upload-launch-issues') . '" target="_blank">',
|
||||
'</a>'
|
||||
);
|
||||
?>
|
||||
</b>
|
||||
</p>
|
||||
</div>
|
||||
@@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
use Duplicator\Installer\Package\PComponents;
|
||||
use Duplicator\Package\Create\BuildComponents;
|
||||
use Duplicator\Package\Import\PackageImporter;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
/* passed values */
|
||||
/** @var PackageImporter $importObj */
|
||||
$importObj = $tplData['importObj'];
|
||||
|
||||
if (!$importObj instanceof PackageImporter) {
|
||||
return;
|
||||
}
|
||||
?>
|
||||
<div class="dup-pro-import-package-detail-content">
|
||||
<?php
|
||||
$errorMsg = '';
|
||||
if (!$importObj->encryptCheck($errorMsg)) {
|
||||
?>
|
||||
<p class="maroon">
|
||||
<b><i class="fas fa-exclamation-triangle"></i> <?php echo $errorMsg; ?></b>
|
||||
</p>
|
||||
<?php
|
||||
} elseif (!$importObj->passwordCheck()) {
|
||||
?>
|
||||
<p class="maroon">
|
||||
<b><i class="fas fa-exclamation-triangle"></i> <?php esc_html_e('Valid password required', 'duplicator-pro'); ?></b>
|
||||
</p>
|
||||
<div class="dup-import-archive-password-request" >
|
||||
<input type="password" class="dup-import-archive-password" name="password" value="" >
|
||||
<button type="button" class="dup-import-set-archive-password button" >
|
||||
<?php esc_html_e('Submit', 'duplicator-pro'); ?>
|
||||
</button>
|
||||
</div>
|
||||
<?php
|
||||
} elseif (!$importObj->isImportable($importFailMessage)) {
|
||||
?>
|
||||
<p class="maroon">
|
||||
<b><i class="fas fa-exclamation-triangle"></i> <?php echo $importFailMessage; ?></b>
|
||||
</p>
|
||||
<?php
|
||||
} elseif ($importObj->haveImportWaring($importWarnMessage)) {
|
||||
?>
|
||||
<p class="gray">
|
||||
<b><i class="fas fa-exclamation-triangle"></i> <?php echo $importWarnMessage; ?></b>
|
||||
</p>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<p class="green">
|
||||
<b>
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<?php esc_html_e('This package is ready to install, click the continue button to proceed.', 'duplicator-pro'); ?>
|
||||
</b><br/>
|
||||
<b><?php esc_html_e('The information below is related to the package and the source site where the package was created.', 'duplicator-pro'); ?></b>
|
||||
</p>
|
||||
<?php
|
||||
}
|
||||
|
||||
if ($importObj->isValid()) {
|
||||
?>
|
||||
<ul>
|
||||
<li>
|
||||
<span class="label title"><?php esc_html_e('Site Details:', 'duplicator-pro'); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('URL', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html($importObj->getHomeUrl()); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Path', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html($importObj->getHomePath()); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label title"><?php esc_html_e('Versions:', 'duplicator-pro'); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Duplicator', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html($importObj->getDupVersion()); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('WordPress', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html($importObj->getWPVersion()); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('PHP', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html($importObj->getPhpVersion()); ?></span>
|
||||
</li>
|
||||
<?php if ($importObj->getPackageComponents() !== false) { ?>
|
||||
<li>
|
||||
<span class="label title"><?php esc_html_e('Package components:', 'duplicator-pro'); ?></span>
|
||||
</li>
|
||||
<?php
|
||||
$packComponents = $importObj->getPackageComponents();
|
||||
foreach (BuildComponents::COMPONENTS_DEFAULT as $component) {
|
||||
?>
|
||||
<li>
|
||||
<span class="label"><?php echo esc_html(BuildComponents::getLabel($component)); ?>:</span>
|
||||
<span class="value">
|
||||
<?php if (in_array($component, $packComponents)) { ?>
|
||||
<i class="fas fa-check-circle green"></i> <?php esc_html_e('included', 'duplicator-pro'); ?>
|
||||
<?php } else { ?>
|
||||
<i class="fas fa-times-circle maroon"></i> <?php esc_html_e('excluded', 'duplicator-pro'); ?>
|
||||
<?php } ?>
|
||||
</span>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<li>
|
||||
<span class="label title"><?php esc_html_e('Archive:', 'duplicator-pro'); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Created', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html($importObj->getCreated()); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Size', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html(DUP_PRO_U::byteSize($importObj->getSize())); ?></span>
|
||||
</li>
|
||||
<?php if (!$importObj->isLite()) { ?>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Folders', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html(number_format($importObj->getNumFolders())); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Files', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html(number_format($importObj->getNumFiles())); ?></span>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<li>
|
||||
<span class="label title"><?php esc_html_e('Database:', 'duplicator-pro'); ?></span>
|
||||
</li>
|
||||
<?php
|
||||
if (
|
||||
$importObj->getPackageComponents() === false ||
|
||||
in_array(PComponents::COMP_DB, $importObj->getPackageComponents())
|
||||
) {
|
||||
?>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Size', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html($importObj->getDbSize()); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Tables', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo $importObj->getNumTables(); ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Rows', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php echo esc_html(number_format($importObj->getNumRows())); ?></span>
|
||||
</li>
|
||||
<?php } else { ?>
|
||||
<li>
|
||||
<span class="label"><?php esc_html_e('Database', 'duplicator-pro'); ?>:</span>
|
||||
<span class="value"><?php esc_html_e('Not Included', 'duplicator-pro'); ?></span>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</div>
|
||||
@@ -0,0 +1,648 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
use Duplicator\Controllers\ImportPageController;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
$packageDeteleConfirm = new DUP_PRO_UI_Dialog();
|
||||
$packageDeteleConfirm->title = __('Delete Package?', 'duplicator-pro');
|
||||
$packageDeteleConfirm->wrapperClassButtons = 'dpro-dlg-import-detete-package-btns';
|
||||
$packageDeteleConfirm->progressOn = false;
|
||||
$packageDeteleConfirm->closeOnConfirm = true;
|
||||
$packageDeteleConfirm->message = __('Are you sure you want to delete the selected package?', 'duplicator-pro');
|
||||
$packageDeteleConfirm->jsCallback = 'DupPro.ImportManager.removePackage()';
|
||||
$packageDeteleConfirm->initConfirm();
|
||||
|
||||
$packageInvalidName = new DUP_PRO_UI_Messages(
|
||||
__(
|
||||
'<b>Invalid archive name:</b> The archive name must follow the Duplicator package name pattern
|
||||
e.g. PACKAGE_NAME_[HASH]_[YYYYMMDDHHSS]_archive.zip (or with a .daf extension).
|
||||
<br>Please make sure not to rename the archive after downloading it and try again!',
|
||||
'duplicator-pro'
|
||||
),
|
||||
DUP_PRO_UI_Messages::ERROR
|
||||
);
|
||||
$packageInvalidName->hide_on_init = true;
|
||||
$packageInvalidName->is_dismissible = true;
|
||||
$packageInvalidName->auto_hide_delay = 10000;
|
||||
$packageInvalidName->initMessage();
|
||||
|
||||
$packageAlreadyExists = new DUP_PRO_UI_Messages(
|
||||
__('Archive file name already exists! <br>Please remove it and try again!', 'duplicator-pro'),
|
||||
DUP_PRO_UI_Messages::ERROR
|
||||
);
|
||||
$packageAlreadyExists->hide_on_init = true;
|
||||
$packageAlreadyExists->is_dismissible = true;
|
||||
$packageAlreadyExists->auto_hide_delay = 5000;
|
||||
$packageAlreadyExists->initMessage();
|
||||
|
||||
$packageUploaded = new DUP_PRO_UI_Messages(__('Package uploaded', 'duplicator-pro'), DUP_PRO_UI_Messages::NOTICE);
|
||||
$packageUploaded->hide_on_init = true;
|
||||
$packageUploaded->is_dismissible = true;
|
||||
$packageUploaded->auto_hide_delay = 5000;
|
||||
$packageUploaded->initMessage();
|
||||
|
||||
$packageCancelUpload = new DUP_PRO_UI_Messages(__('Package upload cancelled', 'duplicator-pro'), DUP_PRO_UI_Messages::ERROR);
|
||||
$packageCancelUpload->hide_on_init = true;
|
||||
$packageCancelUpload->is_dismissible = true;
|
||||
$packageCancelUpload->auto_hide_delay = 5000;
|
||||
$packageCancelUpload->initMessage();
|
||||
|
||||
$packageRemoved = new DUP_PRO_UI_Messages(__('Package removed', 'duplicator-pro'), DUP_PRO_UI_Messages::NOTICE);
|
||||
$packageRemoved->hide_on_init = true;
|
||||
$packageRemoved->is_dismissible = true;
|
||||
$packageRemoved->auto_hide_delay = 5000;
|
||||
$packageRemoved->initMessage();
|
||||
|
||||
$importChunkSize = ImportPageController::getChunkSize();
|
||||
?><script>
|
||||
jQuery(document).ready(function ($) {
|
||||
var uploadFileMessageContent = <?php $tplMng->renderJson('admin_pages/import/import-message-upload-error'); ?>;
|
||||
|
||||
DupPro.ImportManager = {
|
||||
uploaderWrapper: $('#dup-pro-import-upload-tabs-wrapper'),
|
||||
uploaderDisabler: $('<div>'),
|
||||
uploader: $('#dup-pro-import-upload-file'),
|
||||
uploaderContent: $('#dup-pro-import-upload-file-content'),
|
||||
packageRowTemplate: $('#dup-pro-import-row-template'),
|
||||
packageRowNoFoundTemplate: $('#dup-pro-import-available-packages-templates .dup-pro-import-no-package-found'),
|
||||
packagesAviable: $('#dpro-pro-import-available-packages'),
|
||||
packagesList: $('#dpro-pro-import-available-packages .packages-list'),
|
||||
packageRowUploading: null,
|
||||
packageRowToDelete: null,
|
||||
autoLaunchAfterUpload: false,
|
||||
autoLaunchLink: false,
|
||||
confirmLaunchLink: false,
|
||||
startUpload: false,
|
||||
lastUploadsTimes: [],
|
||||
debug: true,
|
||||
init: function () {
|
||||
$('#dup-pro-import-instructions-toggle').click(function () {
|
||||
$('#dup-pro-import-instructions-content').toggle(300);
|
||||
})
|
||||
|
||||
DupPro.ImportManager.uploaderWrapper.css('position', 'relative');
|
||||
DupPro.ImportManager.uploaderDisabler = $('<div>').css({
|
||||
'position' : 'absolute',
|
||||
'top' : 0,
|
||||
'left' : 0,
|
||||
'width' : '100%',
|
||||
'height' : '100%',
|
||||
'z-index' : '10',
|
||||
'cursor' : 'not-allowed',
|
||||
'display' : 'none'
|
||||
});
|
||||
DupPro.ImportManager.uploaderDisabler.appendTo(DupPro.ImportManager.uploaderWrapper);
|
||||
|
||||
DupPro.ImportManager.uploader.upload({
|
||||
autoUpload: true,
|
||||
multiple: false,
|
||||
maxSize: <?php echo empty($importChunkSize) ? (int) wp_max_upload_size() : 10737418240; ?>, //100GB get value from upload_max_filesize
|
||||
maxConcurrent: 1,
|
||||
maxFiles: 1,
|
||||
postData: {
|
||||
action: 'duplicator_pro_import_upload',
|
||||
nonce: <?php echo json_encode(wp_create_nonce('duplicator_pro_import_upload')); ?>
|
||||
},
|
||||
chunkSize: <?php echo (int) $importChunkSize; ?>, // This is in kb
|
||||
action: <?php echo json_encode(get_admin_url(null, 'admin-ajax.php')); ?>,
|
||||
chunked: <?php echo empty($importChunkSize) ? 'false' : 'true'; ?>,
|
||||
label: DupPro.ImportManager.uploaderContent.parent().html(),
|
||||
leave: '<?php echo esc_js(__('You have uploads pending, are you sure you want to leave this page?', 'duplicator-pro')); ?>'
|
||||
})
|
||||
.on("start.upload", DupPro.ImportManager.onStart)
|
||||
.on("complete.upload", DupPro.ImportManager.onComplete)
|
||||
.on("filestart.upload", DupPro.ImportManager.onFileStart)
|
||||
.on("fileprogress.upload", DupPro.ImportManager.onFileProgress)
|
||||
.on("filecomplete.upload", DupPro.ImportManager.onFileComplete)
|
||||
.on("fileerror.upload", DupPro.ImportManager.onFileError)
|
||||
.on("fileerror.chunkerror", DupPro.ImportManager.onChunkError);
|
||||
|
||||
DupPro.ImportManager.uploaderContent.remove();
|
||||
DupPro.ImportManager.uploaderContent = $('#dup-pro-import-upload-file #dup-pro-import-upload-file-content');
|
||||
DupPro.ImportManager.initPageButtons();
|
||||
DupPro.ImportManager.checkMaxUploadedFiles();
|
||||
|
||||
DupPro.ImportManager.packagesList.on('click', '.dup-pro-import-action-remove', function (event) {
|
||||
event.stopPropagation();
|
||||
DupPro.ImportManager.packageRowToDelete = $(this).closest('.dup-pro-import-package');
|
||||
<?php $packageDeteleConfirm->showConfirm(); ?>
|
||||
return false;
|
||||
});
|
||||
|
||||
DupPro.ImportManager.packagesList.on('click', '.dup-pro-import-action-package-detail-toggle', function (event) {
|
||||
event.stopPropagation();
|
||||
let button = $(this);
|
||||
let details = button.closest('.dup-pro-import-package').find('.dup-pro-import-package-detail');
|
||||
if (details.hasClass('no-display')) {
|
||||
button.find('.fa').removeClass('fa-caret-down').addClass('fa-caret-up');
|
||||
details.removeClass('no-display');
|
||||
} else {
|
||||
button.find('.fa').removeClass('fa-caret-up').addClass('fa-caret-down');
|
||||
details.addClass('no-display');
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
DupPro.ImportManager.packagesList.on('click', '.dup-pro-import-action-cancel-upload', function (event) {
|
||||
event.stopPropagation();
|
||||
DupPro.ImportManager.abortUpload();
|
||||
<?php $packageCancelUpload->showMessage(); ?>
|
||||
return false;
|
||||
});
|
||||
|
||||
DupPro.ImportManager.packagesList.on('click', '.dup-pro-import-action-install', function (event) {
|
||||
event.stopPropagation();
|
||||
DupPro.ImportManager.confirmLaunchLink = $(this).data('install-url');
|
||||
$('#dup-pro-import-phase-one').addClass('no-display');
|
||||
$('#dup-pro-import-phase-two').removeClass('no-display');
|
||||
return false;
|
||||
});
|
||||
|
||||
DupPro.ImportManager.packagesList.on('click', '.dup-import-set-archive-password', function (event) {
|
||||
event.stopPropagation();
|
||||
DupPro.ImportManager.setArchivePassword($(this));
|
||||
return false;
|
||||
});
|
||||
|
||||
DupPro.ImportManager.initRemoteUpload();
|
||||
},
|
||||
initRemoteUpload: function () {
|
||||
$('#dup-pro-import-remote-upload').click(function () {
|
||||
let uploadUrl = $('#dup-pro-import-remote-url').val();
|
||||
let parsedUrl = null;
|
||||
|
||||
try {
|
||||
parsedUrl = new URL(uploadUrl);
|
||||
} catch (error) {
|
||||
DupPro.addAdminMessage("Invalid URL", 'error');
|
||||
}
|
||||
|
||||
let files = [
|
||||
{
|
||||
'name': parsedUrl.pathname.split('/').pop(),
|
||||
'size': -1
|
||||
}
|
||||
];
|
||||
if (DupPro.ImportManager.onStart(null, files) == false) {
|
||||
DupPro.ImportManager.onComplete(null);
|
||||
return false;
|
||||
}
|
||||
DupPro.ImportManager.onFileStart(null, files[0]);
|
||||
DupPro.ImportManager.remoteUploadCall(uploadUrl, null);
|
||||
});
|
||||
},
|
||||
remoteUploadCall: function (uploadUrl, restoreDownload) {
|
||||
Duplicator.Util.ajaxWrapper(
|
||||
{
|
||||
action: 'duplicator_pro_import_remote_download',
|
||||
url: uploadUrl,
|
||||
restoreDownload : (restoreDownload == null ? '' : JSON.stringify(restoreDownload)),
|
||||
nonce: '<?php echo esc_js(wp_create_nonce('duplicator_pro_remote_download')); ?>'
|
||||
},
|
||||
function (result, data, funcData, textStatus, jqXHR) {
|
||||
if (DupPro.ImportManager.packageRowUploading == null) {
|
||||
// if row don't exitst the upload is aboted
|
||||
DupPro.ImportManager.onComplete(null);
|
||||
return '';
|
||||
}
|
||||
|
||||
if (funcData.status == 'complete') {
|
||||
DupPro.ImportManager.onFileComplete(null, uploadUrl, result);
|
||||
DupPro.ImportManager.onComplete(null);
|
||||
} else {
|
||||
DupPro.ImportManager.updateProgress(funcData.remoteChunk.offset, funcData.remoteChunk.fullSize);
|
||||
DupPro.ImportManager.remoteUploadCall(uploadUrl, funcData.remoteChunk);
|
||||
}
|
||||
return '';
|
||||
},
|
||||
function (result, data, funcData, textStatus, jqXHR) {
|
||||
DupPro.ImportManager.uploadError(result.data.message);
|
||||
DupPro.ImportManager.onComplete(null);
|
||||
return '';
|
||||
}
|
||||
);
|
||||
},
|
||||
setArchivePassword: function (button) {
|
||||
let row = button.closest('.dup-pro-import-package');
|
||||
let archiveFile = row.data('path');
|
||||
let password = row.find('.dup-import-archive-password-request .dup-import-archive-password').val();
|
||||
|
||||
Duplicator.Util.ajaxWrapper(
|
||||
{
|
||||
action: 'duplicator_pro_import_set_archive_password',
|
||||
nonce: '<?php echo esc_js(wp_create_nonce('duplicator_pro_import_set_archive_password')); ?>',
|
||||
archive: archiveFile,
|
||||
password: password
|
||||
},
|
||||
function (result, data, funcData, textStatus, jqXHR) {
|
||||
DupPro.ImportManager.packageRowUploading = row;
|
||||
DupPro.ImportManager.onFileComplete(null, archiveFile, result, false);
|
||||
DupPro.ImportManager.onComplete(null);
|
||||
return '';
|
||||
},
|
||||
function (result, data, funcData, textStatus, jqXHR) {
|
||||
DupPro.addAdminMessage(data.message, 'error', {'hideDelay': 5000});
|
||||
return '';
|
||||
}
|
||||
);
|
||||
},
|
||||
initPageButtons: function () {
|
||||
$('.dup-pro-import-view-list').click(function (event) {
|
||||
event.stopPropagation();
|
||||
DupPro.ImportManager.updateViewMode('<?php echo esc_js(ImportPageController::VIEW_MODE_ADVANCED); ?>');
|
||||
});
|
||||
|
||||
$('.dup-pro-import-view-single').click(function (event) {
|
||||
event.stopPropagation();
|
||||
DupPro.ImportManager.updateViewMode('<?php echo esc_js(ImportPageController::VIEW_MODE_BASIC); ?>');
|
||||
});
|
||||
|
||||
$('.dup-pro-open-help-link').click(function (event) {
|
||||
$('#contextual-help-link').show();
|
||||
});
|
||||
|
||||
$('#dup-pro-import-launch-installer-confirm').click(function (event) {
|
||||
event.stopPropagation();
|
||||
DupPro.ImportManager.confirmLaunchInstaller();
|
||||
});
|
||||
|
||||
$('#dup-pro-import-launch-installer-cancel').click(function (event) {
|
||||
event.stopPropagation();
|
||||
DupPro.ImportManager.confirmLaunchLink = false;
|
||||
$('#dup-pro-import-phase-two').addClass('no-display');
|
||||
$('#dup-pro-import-phase-one').removeClass('no-display');
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.dup-pro-tabs-wrapper').each(function () {
|
||||
let tabWrapper = $(this);
|
||||
|
||||
tabWrapper.find('[data-tab-target]').click(function () {
|
||||
let targetId = $(this).data('tab-target');
|
||||
tabWrapper.find('[data-tab-target]').removeClass('active');
|
||||
tabWrapper.find('.tab-content').addClass('no-display');
|
||||
|
||||
$(this).addClass('active');
|
||||
tabWrapper.find('#' + targetId).removeClass('no-display');
|
||||
});
|
||||
});
|
||||
},
|
||||
confirmLaunchInstaller: function () {
|
||||
window.location.href = DupPro.ImportManager.confirmLaunchLink;
|
||||
return false;
|
||||
},
|
||||
onStart: function (e, files)
|
||||
{
|
||||
DupPro.ImportManager.uploaderDisabler.show();
|
||||
DupPro.ImportManager.startUpload = true;
|
||||
DupPro.ImportManager.uploader.upload("disable");
|
||||
DupPro.ImportManager.autoLaunchLink = false;
|
||||
|
||||
let isValidName = true;
|
||||
let alreadyExists = false;
|
||||
|
||||
$.each(files, function (index, value) {
|
||||
if (!DupPro.ImportManager.isValidFileName(value.name)) {
|
||||
isValidName = false;
|
||||
}
|
||||
|
||||
if (DupPro.ImportManager.isAlreadyExists(value.name)) {
|
||||
alreadyExists = true;
|
||||
}
|
||||
});
|
||||
|
||||
/*if (!isValidName) {
|
||||
<?php $packageInvalidName->showMessage(); ?>
|
||||
DupPro.ImportManager.abortUpload();
|
||||
return false;
|
||||
}*/
|
||||
|
||||
if (alreadyExists) {
|
||||
<?php $packageAlreadyExists->showMessage(); ?>
|
||||
DupPro.ImportManager.abortUpload();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
onComplete: function (e)
|
||||
{
|
||||
$('#dup-pro-import-remote-url').val('');
|
||||
|
||||
if (DupPro.ImportManager.autoLaunchAfterUpload && DupPro.ImportManager.autoLaunchLink) {
|
||||
document.location.href = DupPro.ImportManager.autoLaunchLink;
|
||||
}
|
||||
DupPro.ImportManager.checkMaxUploadedFiles();
|
||||
},
|
||||
onFileStart: function (e, file)
|
||||
{
|
||||
DupPro.ImportManager.resetUploadTimes();
|
||||
DupPro.ImportManager.packagesList.find('.dup-pro-import-no-package-found').remove();
|
||||
DupPro.ImportManager.packageRowUploading = DupPro.ImportManager.packageRowTemplate.clone().prependTo(DupPro.ImportManager.packagesList);
|
||||
|
||||
DupPro.ImportManager.packageRowUploading.removeAttr('id');
|
||||
DupPro.ImportManager.packageRowUploading.find('.name .text').text(file.name);
|
||||
DupPro.ImportManager.packageRowUploading.find('.size').text(Duplicator.Util.humanFileSize(file.size));
|
||||
DupPro.ImportManager.packageRowUploading.find('.created').html("<i><?php esc_html_e('loading...', 'duplicator-pro'); ?></i>");
|
||||
|
||||
let loader = DupPro.ImportManager.packageRowUploading.find('.funcs .dup-pro-loader').removeClass('no-display');
|
||||
loader.find('.dup-pro-meter > span').css('width', '0%');
|
||||
loader.find('.text').text('0%');
|
||||
},
|
||||
onFileProgress: function (e, file, percent, eventObj)
|
||||
{
|
||||
let position = 0;
|
||||
if ('currentChunk' in file) {
|
||||
position = file.currentChunk * file.chunkSize;
|
||||
} else {
|
||||
if (eventObj.lengthComputable) {
|
||||
position = eventObj.loaded || eventObj.position;
|
||||
} else {
|
||||
position = false;
|
||||
}
|
||||
}
|
||||
|
||||
DupPro.ImportManager.updateProgress(position, file.size);
|
||||
},
|
||||
onFileComplete: function (e, file, response, showMessage = true)
|
||||
{
|
||||
let result = null;
|
||||
if (typeof response === 'string' || response instanceof String) {
|
||||
result = JSON.parse(response);
|
||||
} else {
|
||||
result = response;
|
||||
}
|
||||
DupPro.ImportManager.resetUploadTimes();
|
||||
|
||||
if (result.success == false) {
|
||||
DupPro.ImportManager.uploadError(result.data.message);
|
||||
return;
|
||||
}
|
||||
|
||||
DupPro.ImportManager.packageRowUploading.data('path', result.data.funcData.archivePath);
|
||||
if (result.data.funcData.isImportable) {
|
||||
DupPro.ImportManager.packageRowUploading.addClass('is-importable');
|
||||
DupPro.ImportManager.packageRowUploading
|
||||
.find('.dup-pro-import-action-install')
|
||||
.prop('disabled', false)
|
||||
.data('install-url', result.data.funcData.installerPageLink);
|
||||
DupPro.ImportManager.autoLaunchLink = result.data.funcData.installerPageLink;
|
||||
} else {
|
||||
DupPro.ImportManager.autoLaunchLink = false;
|
||||
DupPro.ImportManager.packageRowUploading.find('.dup-pro-import-action-package-detail-toggle').trigger('click');
|
||||
}
|
||||
DupPro.ImportManager.packageRowUploading.find('.dup-pro-import-package-detail').html(result.data.funcData.htmlDetails);
|
||||
DupPro.ImportManager.packageRowUploading.find('.size').text(Duplicator.Util.humanFileSize(result.data.funcData.archiveSize));
|
||||
DupPro.ImportManager.packageRowUploading.find('.created').text(result.data.funcData.created);
|
||||
DupPro.ImportManager.packageRowUploading.find('.funcs .dup-pro-loader').addClass('no-display');
|
||||
DupPro.ImportManager.packageRowUploading.find('.funcs .actions').removeClass('no-display');
|
||||
DupPro.ImportManager.packageRowUploading = null;
|
||||
if (showMessage) {
|
||||
<?php $packageUploaded->showMessage(); ?>
|
||||
}
|
||||
},
|
||||
onFileError: function (e, file, error)
|
||||
{
|
||||
if (error === 'abort') {
|
||||
// no message for abort
|
||||
DupPro.ImportManager.uploadError(null);
|
||||
} else if (error === 'size') {
|
||||
DupPro.ImportManager.uploadError(<?php echo json_encode(__('The file size exceeds the maximum upload limit.', 'duplicator-pro')); ?>);
|
||||
} else {
|
||||
DupPro.ImportManager.uploadError(error);
|
||||
}
|
||||
},
|
||||
getTimeLeft: function (sizeToFinish) {
|
||||
if (DupPro.ImportManager.lastUploadsTimes.length < 2) {
|
||||
return false;
|
||||
}
|
||||
let pos1 = DupPro.ImportManager.lastUploadsTimes[0].pos;
|
||||
let time1 = DupPro.ImportManager.lastUploadsTimes[0].time;
|
||||
|
||||
let index = DupPro.ImportManager.lastUploadsTimes.length - 1
|
||||
let pos2 = DupPro.ImportManager.lastUploadsTimes[index].pos;
|
||||
let time2 = DupPro.ImportManager.lastUploadsTimes[index].time;
|
||||
|
||||
let deltaPos = pos2 - pos1;
|
||||
let deltaTime = time2 - time1;
|
||||
|
||||
return deltaTime / deltaPos * sizeToFinish;
|
||||
},
|
||||
millisecToTime: function (s) {
|
||||
if (s <= 0) {
|
||||
return 'loading...';
|
||||
}
|
||||
|
||||
var ms = s % 1000;
|
||||
s = (s - ms) / 1000;
|
||||
var secs = s % 60;
|
||||
s = (s - secs) / 60;
|
||||
var mins = s % 60;
|
||||
var hrs = (s - mins) / 60;
|
||||
|
||||
let result = '';
|
||||
if (hrs > 0) {
|
||||
result += ' ' + hrs + ' hr';
|
||||
}
|
||||
|
||||
if (mins > 0) {
|
||||
result += ' ' + (mins + 1) + ' min';
|
||||
return result;
|
||||
}
|
||||
|
||||
return secs + ' sec';
|
||||
},
|
||||
resetUploadTimes: function() {
|
||||
DupPro.ImportManager.lastUploadsTimes = [];
|
||||
},
|
||||
addUploadTime: function (postion) {
|
||||
if (DupPro.ImportManager.lastUploadsTimes.length > 20) {
|
||||
DupPro.ImportManager.lastUploadsTimes.shift();
|
||||
}
|
||||
|
||||
DupPro.ImportManager.lastUploadsTimes.push({
|
||||
'pos': postion,
|
||||
'time': Date.now()
|
||||
});
|
||||
},
|
||||
updateProgress: function (position, total) {
|
||||
let percent = 0;
|
||||
|
||||
if (position !== false) {
|
||||
DupPro.ImportManager.addUploadTime(position);
|
||||
percent = Math.round((position / total) * 100 * 10) / 10;
|
||||
percent = Number.isInteger(percent) ? percent + ".0" : percent;
|
||||
}
|
||||
|
||||
DupPro.ImportManager.packageRowUploading.find('.size').text(Duplicator.Util.humanFileSize(total));
|
||||
let timeLeft = DupPro.ImportManager.getTimeLeft(total - position);
|
||||
let loader = DupPro.ImportManager.packageRowUploading.find('.funcs .dup-pro-loader');
|
||||
loader.find('.dup-pro-meter > span').css("width", percent + "%");
|
||||
loader.find('.text').text(percent + "% - " + DupPro.ImportManager.millisecToTime(timeLeft));
|
||||
},
|
||||
updateContentMessage: function (icon, line1, line2) {
|
||||
DupPro.ImportManager.uploaderContent.find('.message').html('<i class="fas ' + icon + ' fa-sm"></i> ' + line1 + '<br>' + line2);
|
||||
},
|
||||
uploadError: function(message) {
|
||||
DupPro.ImportManager.removeRow(DupPro.ImportManager.packageRowUploading);
|
||||
DupPro.ImportManager.packageRowUploading = null;
|
||||
|
||||
if (message != null) {
|
||||
DupPro.addAdminMessage(uploadFileMessageContent, 'error', {
|
||||
'hideDelay': 60000,
|
||||
'updateCallback': function (msgNode) {
|
||||
msgNode.find('.import-upload-error-message').text(message);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
isAlreadyExists: function (name) {
|
||||
let alreadyExists = false;
|
||||
DupPro.ImportManager.packagesList.find('tbody .name .text').each(function () {
|
||||
if (name === $(this).text()) {
|
||||
alreadyExists = true;
|
||||
}
|
||||
});
|
||||
|
||||
return alreadyExists;
|
||||
},
|
||||
isValidFileName: function (name) {
|
||||
if (!name.match(<?php echo DUPLICATOR_PRO_ARCHIVE_REGEX_PATTERN; ?>)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
abortUpload: function () {
|
||||
try {
|
||||
DupPro.ImportManager.uploader.upload("abort");
|
||||
} catch (err) {
|
||||
// prevent abort error
|
||||
}
|
||||
DupPro.ImportManager.removeRow(DupPro.ImportManager.packageRowUploading);
|
||||
DupPro.ImportManager.packageRowUploading = null;
|
||||
},
|
||||
removePackage: function () {
|
||||
Duplicator.Util.ajaxWrapper(
|
||||
{
|
||||
action: 'duplicator_pro_import_package_delete',
|
||||
path: DupPro.ImportManager.packageRowToDelete.data('path'),
|
||||
nonce: '<?php echo esc_js(wp_create_nonce('duplicator_pro_import_package_delete')); ?>'
|
||||
},
|
||||
function (result, data, funcData, textStatus, jqXHR) {
|
||||
DupPro.ImportManager.removeRow(DupPro.ImportManager.packageRowToDelete);
|
||||
<?php $packageRemoved->showMessage(); ?>;
|
||||
return '';
|
||||
}
|
||||
);
|
||||
},
|
||||
removeRow: function (row) {
|
||||
if (!row) {
|
||||
return;
|
||||
}
|
||||
row.fadeOut(
|
||||
'fast',
|
||||
function () {
|
||||
row.remove();
|
||||
if (DupPro.ImportManager.packagesList.find('.dup-pro-import-package').length === 0) {
|
||||
DupPro.ImportManager.packageRowNoFoundTemplate.clone().appendTo(DupPro.ImportManager.packagesList);
|
||||
}
|
||||
DupPro.ImportManager.checkMaxUploadedFiles();
|
||||
}
|
||||
);
|
||||
},
|
||||
checkMaxUploadedFiles: function () {
|
||||
let limit = 0; // 0 no limit
|
||||
let numPackages = $('.packages-list .dup-pro-import-package').length;
|
||||
|
||||
if ($('#dpro-pro-import-available-packages').hasClass('view-single-item')) {
|
||||
limit = 1;
|
||||
}
|
||||
|
||||
if (limit > 0 && numPackages >= limit) {
|
||||
DupPro.ImportManager.uploaderDisabler.show();
|
||||
DupPro.ImportManager.uploader.upload("disable");
|
||||
} else {
|
||||
DupPro.ImportManager.uploaderDisabler.hide();
|
||||
DupPro.ImportManager.uploader.upload("enable");
|
||||
}
|
||||
},
|
||||
disableWrapper: function () {
|
||||
DupPro.ImportManager.uploaderWrapper
|
||||
},
|
||||
updateViewMode: function (viewMode) {
|
||||
Duplicator.Util.ajaxWrapper(
|
||||
{
|
||||
action: 'duplicator_pro_import_set_view_mode',
|
||||
nonce: '<?php echo esc_js(wp_create_nonce('duplicator_pro_import_set_view_mode')); ?>',
|
||||
view_mode: viewMode
|
||||
},
|
||||
function (result, data, funcData, textStatus, jqXHR) {
|
||||
switch (funcData) {
|
||||
case '<?php echo esc_js(ImportPageController::VIEW_MODE_ADVANCED); ?>':
|
||||
$('.dup-pro-import-view-single').removeClass('active');
|
||||
$('.dup-pro-import-view-list').addClass('active');
|
||||
$('#dup-pro-basic-mode-message').addClass('no-display');
|
||||
DupPro.ImportManager.packagesAviable.removeClass('view-single-item').addClass('view-list-item');
|
||||
break;
|
||||
case '<?php echo esc_js(ImportPageController::VIEW_MODE_BASIC); ?>':
|
||||
$('.dup-pro-import-view-list').removeClass('active');
|
||||
$('.dup-pro-import-view-single').addClass('active');
|
||||
$('#dup-pro-basic-mode-message').removeClass('no-display');
|
||||
DupPro.ImportManager.packagesAviable.removeClass('view-list-item').addClass('view-single-item');
|
||||
break;
|
||||
default:
|
||||
throw '<?php echo esc_js(__('Invalid view mode', 'duplicator-pro')); ?>';
|
||||
}
|
||||
DupPro.ImportManager.checkMaxUploadedFiles();
|
||||
return '';
|
||||
|
||||
},
|
||||
function (result, data, funcData, textStatus, jqXHR) {
|
||||
DupPro.addAdminMessage(data.message, 'error', {'hideDelay': 5000});
|
||||
return '';
|
||||
}
|
||||
);
|
||||
},
|
||||
console: function () {
|
||||
if (this.debug) {
|
||||
if (arguments.length > 1) {
|
||||
console.log(arguments[0], arguments[1]);
|
||||
} else {
|
||||
console.log(arguments[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// wait form stone init, it's not a great method but for now I haven't found a better one.
|
||||
window.setTimeout(DupPro.ImportManager.init, 500);
|
||||
|
||||
$('.dup-pro-import-box.closable').each(function () {
|
||||
let box = $(this);
|
||||
let title = $(this).find('.box-title');
|
||||
let content = $(this).find('.box-content');
|
||||
|
||||
title.click(function () {
|
||||
if (box.hasClass('opened')) {
|
||||
box.removeClass('opened').addClass('closed');
|
||||
} else {
|
||||
box.removeClass('closed').addClass('opened');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
use Duplicator\Controllers\RecoveryController;
|
||||
use Duplicator\Libs\Snap\SnapWP;
|
||||
use Duplicator\Package\Recovery\RecoveryPackage;
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
$postTypeCount = SnapWP::getPostTypesCount();
|
||||
if (
|
||||
($recoverPackage = RecoveryPackage::getRecoverPackage()) == false ||
|
||||
$recoverPackage->isOutToDate()
|
||||
) {
|
||||
$badgeClass = 'badge-warn';
|
||||
$badgeLabel = 'Notice';
|
||||
} else {
|
||||
$badgeClass = 'badge-pass';
|
||||
$badgeLabel = 'Good';
|
||||
}
|
||||
?>
|
||||
<div class="dup-pro-import-header" >
|
||||
<h2 class="title">
|
||||
<i class="fas fa-arrow-alt-circle-down"></i> <?php printf(esc_html__("Step %s of 2: Confirmation", 'duplicator-pro'), '<span class="red">2</span>'); ?>
|
||||
</h2>
|
||||
<hr />
|
||||
</div>
|
||||
<div class="dup-pro-recovery-details-max-width-wrapper" >
|
||||
<div class="dup-pro-import-box closable opened" >
|
||||
<div class="box-title" >
|
||||
<?php esc_html_e('Disaster Recovery', 'duplicator-pro'); ?>
|
||||
<div class="badge <?php echo esc_attr($badgeClass); ?> margin-right-1">
|
||||
<?php echo esc_html($badgeLabel); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-content">
|
||||
<div id="dup-pro-recovery-details-select-entry" class="dup-pro-recovery-info-set" >
|
||||
<?php
|
||||
RecoveryController::renderRecoveryWidged(array(
|
||||
'selector' => true,
|
||||
'subtitle' => '',
|
||||
'copyLink' => true,
|
||||
'copyButton' => true,
|
||||
'launch' => false,
|
||||
'download' => true,
|
||||
'info' => true,
|
||||
));
|
||||
?>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="dup-pro-recovery-not-required">
|
||||
<i class="far fa-arrow-alt-circle-right"></i>
|
||||
<?php
|
||||
esc_html_e(
|
||||
'The Recovery Point is not mandatory to perform an import.
|
||||
However, it can assist in restoring this site if there is a problem during install.
|
||||
If you have no need to recover this site then you can continue without creating the Recovery Point.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div><br/>
|
||||
|
||||
<div class="dup-pro-import-box closable opened" >
|
||||
<div class="box-title" >
|
||||
<?php esc_html_e('System Overview', 'duplicator-pro'); ?>
|
||||
</div>
|
||||
<div class="box-content">
|
||||
<div id="dup-pro-recovery-details-overview" >
|
||||
<div>
|
||||
<?php esc_html_e("This site currently contains", 'duplicator-pro'); ?>:
|
||||
</div>
|
||||
|
||||
<table class="margin-left-2" >
|
||||
<?php foreach ($postTypeCount as $label => $count) { ?>
|
||||
<tr>
|
||||
<td><?php echo esc_html($label); ?></td>
|
||||
<td class="text-right"><?php echo (int) $count; ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</table>
|
||||
<p>
|
||||
<?php esc_html_e("This process will:", 'duplicator-pro') ?>
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<i class="far fa-check-circle"></i>
|
||||
<?php esc_html_e("Launch the interactive installer wizard to install this new package.", 'duplicator-pro'); ?>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dup-pro-import-confirm-buttons">
|
||||
<input
|
||||
id="dup-pro-import-launch-installer-cancel"
|
||||
type="button" class="button button-large recovery-reset"
|
||||
value="<?php esc_attr_e('Cancel', 'duplicator-pro'); ?>"
|
||||
>
|
||||
<button
|
||||
id="dup-pro-import-launch-installer-confirm"
|
||||
type="button"
|
||||
class="button button-primary button-large"
|
||||
onclick="DupPro.ImportManager.confirmLaunchInstaller();"
|
||||
>
|
||||
<i class="fa fa-bolt fa-sm"></i> <?php esc_html_e('Launch Installer', 'duplicator-pro'); ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
use Duplicator\Controllers\ImportPageController;
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
switch ($tplData['viewMode']) {
|
||||
case ImportPageController::VIEW_MODE_ADVANCED:
|
||||
$viewModeClass = 'view-list-item';
|
||||
break;
|
||||
case ImportPageController::VIEW_MODE_BASIC:
|
||||
default:
|
||||
$viewModeClass = 'view-single-item';
|
||||
break;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<div class="dup-pro-tab-content-wrapper" >
|
||||
<div id="dup-pro-import-phase-one" >
|
||||
<?php $tplMng->render('admin_pages/import/step1/import-step1'); ?>
|
||||
</div>
|
||||
<div id="dup-pro-import-phase-two" class="no-display" >
|
||||
<?php $tplMng->render('admin_pages/import/import-step2'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
require_once DUPLICATOR____PATH . '/views/tools/recovery/widget/recovery-widget-scripts.php';
|
||||
|
||||
$tplMng->render('admin_pages/import/import-scripts');
|
||||
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
use Duplicator\Controllers\ImportPageController;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
if (DUP_PRO_Global_Entity::getInstance()->import_chunk_size == 0) {
|
||||
$footerChunkInfo = sprintf(__('<b>Chunk Size:</b> N/A | <b>Max Size:</b> %s', 'duplicator-pro'), size_format(wp_max_upload_size()));
|
||||
$toolTipContent = __('If you need to upload a larger file, go to [Settings > Import] and set Upload Chunk Size', 'duplicator-pro');
|
||||
} else {
|
||||
$footerChunkInfo = sprintf(
|
||||
__(
|
||||
'<b>Chunk Size:</b> %s | <b>Max Size:</b> No Limit',
|
||||
'duplicator-pro'
|
||||
),
|
||||
size_format(ImportPageController::getChunkSize() * 1024)
|
||||
);
|
||||
$toolTipContent = __(
|
||||
'The max file size limit is ignored when chunk size is enabled.
|
||||
Use a large chunk size with fast connections and a small size with slower connections.
|
||||
You can change the chunk size by going to [Settings > Import].',
|
||||
'duplicator-pro'
|
||||
);
|
||||
}
|
||||
|
||||
/** @var string */
|
||||
$openTab = $tplData['defSubtab'];
|
||||
|
||||
$hlpUpload = __(
|
||||
'Upload speeds can be affected by various server connections and setups.
|
||||
Additionally, chunk size can influence the upload speed [Settings > Import].
|
||||
If changing the chunk size is still slow, try uploading the archive manually with these steps:',
|
||||
'duplicator-pro'
|
||||
);
|
||||
|
||||
$hlpUpload .= '<ul>' .
|
||||
'<li>' . __('1. Cancel current upload', 'duplicator-pro') . '</li>' .
|
||||
'<li>' . __('2. Manually upload archive to:<br/> <i>/wp-content/backups-dup-pro/imports/</i>', 'duplicator-pro') . '</li>' .
|
||||
'<li>' . __('3. Refresh the Import screen', 'duplicator-pro') . '</li>' .
|
||||
'</ul>';
|
||||
?>
|
||||
<!-- ==============================
|
||||
DRAG/DROP AREA -->
|
||||
<div id="dup-pro-import-upload-tabs-wrapper" class="dup-pro-tabs-wrapper margin-bottom-2">
|
||||
<div id="dup-pro-import-mode-tab-header" class="clearfix margin-bottom-2" >
|
||||
<div
|
||||
id="dup-pro-import-mode-upload-tab"
|
||||
class="<?php echo ($openTab == ImportPageController::L2_TAB_UPLOAD ? 'active' : ''); ?>"
|
||||
data-tab-target="dup-pro-import-upload-file-tab"
|
||||
>
|
||||
<i class="far fa-file-archive"></i> <?php esc_html_e('Import File', 'duplicator-pro'); ?>
|
||||
</div>
|
||||
<div
|
||||
id="dup-pro-import-mode-remote-tab"
|
||||
class="<?php echo ($openTab == ImportPageController::L2_TAB_REMOTE_URL ? 'active' : ''); ?>"
|
||||
data-tab-target="dup-pro-import-remote-file-tab"
|
||||
>
|
||||
<i class="fas fa-link"></i> <?php esc_html_e('Import Link', 'duplicator-pro'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
id="dup-pro-import-upload-file-tab"
|
||||
class="tab-content <?php echo ($openTab == ImportPageController::L2_TAB_UPLOAD ? '' : 'no-display'); ?>"
|
||||
>
|
||||
<div id="dup-pro-import-upload-file" class="dup-pro-import-upload-box" ></div>
|
||||
<div class="no_display" >
|
||||
<div id="dup-pro-import-upload-file-content" class="center-xy" >
|
||||
<i class="fa fa-download fa-2x"></i>
|
||||
<span class="dup-drag-drop-message" >
|
||||
<?php esc_html_e("Drag & Drop Archive File Here", 'duplicator-pro'); ?>
|
||||
</span>
|
||||
<input
|
||||
id="dup-import-dd-btn"
|
||||
type="button"
|
||||
class="button button-large button-default dup-import-button"
|
||||
name="dpro-files"
|
||||
value="<?php esc_attr_e("Select File...", 'duplicator-pro'); ?>"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div id="dup-pro-import-upload-file-footer" >
|
||||
<i
|
||||
class="fas fa-question-circle fa-sm"
|
||||
data-tooltip-title="<?php esc_html_e("Upload Chunk Size", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php echo esc_attr($toolTipContent); ?>"
|
||||
></i> <?php echo $footerChunkInfo; ?> |
|
||||
<span
|
||||
class="pointer link-style"
|
||||
data-tooltip-title="<?php esc_html_e("Improve Upload Speed", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php echo esc_attr($hlpUpload); ?>"
|
||||
>
|
||||
<i><?php esc_html_e('Slow Upload', 'duplicator-pro'); ?></i> <i class="fas fa-question-circle fa-sm" ></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
id="dup-pro-import-remote-file-tab"
|
||||
class="tab-content <?php echo ($openTab == ImportPageController::L2_TAB_REMOTE_URL ? '' : 'no-display'); ?>"
|
||||
>
|
||||
<div class="dup-pro-import-upload-box">
|
||||
<div class="center-xy" >
|
||||
<i class="fa fa-download fa-2x"></i>
|
||||
<span class="dup-drag-drop-message" >
|
||||
<?php esc_html_e("Import From Link", 'duplicator-pro'); ?>
|
||||
</span>
|
||||
<input
|
||||
type="text"
|
||||
id="dup-pro-import-remote-url"
|
||||
placeholder="<?php esc_attr_e('Enter Full URL to Archive', 'duplicator-pro'); ?>" />
|
||||
<button id="dup-pro-import-remote-upload" type="button" class="button button-large button-default dup-import-button" >
|
||||
<?php esc_html_e("Upload", 'duplicator-pro'); ?>
|
||||
</button> <br/>
|
||||
<small>
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'For additional help visit the %1$sonline faq%2$s.',
|
||||
'%1$s and %2$s are <a> tags',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<a href="' . esc_url(DUPLICATOR_PRO_DUPLICATOR_DOCS_URL . 'how-to-handle-import-install-upload-launch-issues')
|
||||
. '" target="_blank">',
|
||||
'</a>'
|
||||
);
|
||||
?>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
* @var bool $blur
|
||||
*/
|
||||
|
||||
$blur = $tplData['blur'];
|
||||
|
||||
if ($tplData['adminMessageViewModeSwtich'] && !$blur) {
|
||||
$tplMng->render('admin_pages/import/step1/message-view-mode-switch');
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<div class="dup-pro-import-header" >
|
||||
<h2 class="title">
|
||||
<i class="fas fa-arrow-alt-circle-down"></i>
|
||||
<?php printf(esc_html__("Step %s of 2: Upload Archive", 'duplicator-pro'), '<span class="red">1</span>'); ?>
|
||||
</h2>
|
||||
<?php if (!$blur) { ?>
|
||||
<div class="options" >
|
||||
<?php $tplMng->render('admin_pages/import/step1/views-and-options'); ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div class="dup-import-header-content-wrapper <?php echo ($blur ? 'dup-mock-blur' : ''); ?>" >
|
||||
<?php $tplMng->render('admin_pages/import/step1/add-file-area'); ?>
|
||||
<?php $tplMng->render('admin_pages/import/step1/packages-list'); ?>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
?><div class="notice notice-success is-dismissible">
|
||||
<p>
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'The mode has %1$sswitched to advanced%2$s because more packages have been detected in the import folder.',
|
||||
'%1$s and %2$s are opening and closing bold tags (<b> and </b>)',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<b>',
|
||||
'</b>'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
?>
|
||||
<tr class="dup-pro-import-no-package-found">
|
||||
<td colspan="4" >
|
||||
<div class="dup-pro-import-no-package-found-msg">
|
||||
<b><?php esc_html_e("No archive files found!", 'duplicator-pro'); ?></b><br/><br/>
|
||||
<?php esc_html_e("Please upload a Duplicator archive.zip/daf in the area above.", 'duplicator-pro'); ?><br/>
|
||||
<?php esc_html_e("This will start the import process to overwrite the current site.", 'duplicator-pro'); ?>
|
||||
<br/><br/>
|
||||
<a href="javascript:void(0)" title="Get Help" onclick="jQuery('#contextual-help-link').trigger('click')">
|
||||
<?php esc_html_e('How does this work?', 'duplicator-pro'); ?>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
use Duplicator\Package\Import\PackageImporter;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
/** @var PackageImporter $importObj */
|
||||
$importObj = $tplData['importObj'];
|
||||
|
||||
if ($importObj instanceof PackageImporter) {
|
||||
$name = $importObj->getName();
|
||||
$size = $importObj->getSize();
|
||||
$created = $importObj->getCreated();
|
||||
$archivePath = $importObj->getFullPath();
|
||||
$htmlDetails = $importObj->getHtmlDetails(false);
|
||||
$installPakageUrl = $importObj->getInstallerPageLink();
|
||||
$isImportable = $importObj->isImportable();
|
||||
$funcsEnalbed = true;
|
||||
} else {
|
||||
$name = '';
|
||||
$size = '';
|
||||
$created = '';
|
||||
$archivePath = '';
|
||||
$htmlDetails = '';
|
||||
$installPakageUrl = '';
|
||||
$isImportable = false;
|
||||
$funcsEnalbed = false;
|
||||
}
|
||||
|
||||
$idHtml = strlen($tplData['idRow']) ? 'id="' . esc_attr($tplData['idRow']) . '" ' : '' ;
|
||||
$rowClasses = array('dup-pro-import-package');
|
||||
$installerActionClasses = array(
|
||||
'dup-pro-import-action-install',
|
||||
'button',
|
||||
'button-primary',
|
||||
);
|
||||
if ($isImportable) {
|
||||
$rowClasses[] = 'is-importable';
|
||||
} else {
|
||||
$installerActionClasses[] = 'disabled';
|
||||
}
|
||||
?>
|
||||
<tr <?php echo $idHtml; ?> class="<?php echo esc_attr(implode(' ', $rowClasses)) ?>" data-path="<?php echo esc_attr($archivePath); ?>" >
|
||||
<td class="name">
|
||||
<span class="text"><?php echo esc_html($name); ?></span>
|
||||
<div class="dup-pro-import-package-detail no-display" >
|
||||
<?php echo $htmlDetails; ?>
|
||||
</div>
|
||||
</td>
|
||||
<td class="size">
|
||||
<span title="<?php printf(esc_attr__('Total %d bytes', 'duplicator-pro'), esc_attr($size)); ?>" >
|
||||
<?php echo esc_html(DUP_PRO_U::byteSize($size)); ?>
|
||||
</span>
|
||||
</td>
|
||||
<td class="created">
|
||||
<?php echo esc_html($created); ?>
|
||||
</td>
|
||||
<td class="funcs">
|
||||
<div class="actions <?php echo $funcsEnalbed ? '' : 'no-display'; ?>" >
|
||||
<button type="button" class="button dup-pro-import-action-package-detail-toggle" >
|
||||
<i class="fa fa-caret-down"></i> <?php esc_html_e('Details', 'duplicator-pro'); ?>
|
||||
</button>
|
||||
<span class="separator" ></span>
|
||||
<button type="button" class="dup-pro-import-action-remove button button-secondary" >
|
||||
<i class="fa fa-ban"></i> <?php esc_html_e('Remove', 'duplicator-pro'); ?>
|
||||
</button>
|
||||
<span class="separator" ></span>
|
||||
<button type="button" class="dup-pro-import-action-install button button-primary"
|
||||
data-install-url="<?php echo esc_url($installPakageUrl); ?>"
|
||||
<?php echo $isImportable ? '' : 'disabled'; ?>>
|
||||
<i class="fa fa-bolt fa-sm"></i> <?php esc_html_e('Continue', 'duplicator-pro'); ?>
|
||||
</button>
|
||||
</div>
|
||||
<div class="invalid no-display" >
|
||||
Package invalid
|
||||
</div>
|
||||
<div class="dup-pro-loader no-display" >
|
||||
<div class="dup-pro-meter-wrapper" >
|
||||
<div class="dup-pro-meter blue">
|
||||
<span style="width: 0%"></span>
|
||||
</div>
|
||||
<span class="text">0%</span>
|
||||
</div>
|
||||
<a href="" class="dup-pro-import-action-cancel-upload button button-cancel" >
|
||||
<i class="fa fa-ban"></i> <?php esc_html_e('Cancel', 'duplicator-pro'); ?>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
use Duplicator\Controllers\ImportPageController;
|
||||
use Duplicator\Package\Import\PackageImporter;
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var \Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var \Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
*/
|
||||
|
||||
switch ($tplData['viewMode']) {
|
||||
case ImportPageController::VIEW_MODE_ADVANCED:
|
||||
$viewModeClass = 'view-list-item';
|
||||
break;
|
||||
case ImportPageController::VIEW_MODE_BASIC:
|
||||
default:
|
||||
$viewModeClass = 'view-single-item';
|
||||
break;
|
||||
}
|
||||
|
||||
?>
|
||||
<div id="dpro-pro-import-available-packages" class="<?php echo esc_attr($viewModeClass); ?>" >
|
||||
<table class="dup-import-avail-packs packages-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="name"><?php esc_html_e("Archives", 'duplicator-pro'); ?></th>
|
||||
<th class="size"><?php esc_html_e("Size", 'duplicator-pro'); ?></th>
|
||||
<th class="created"><?php esc_html_e("Created", 'duplicator-pro'); ?></th>
|
||||
<th class="funcs"><?php esc_html_e("Status", 'duplicator-pro'); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$importObjs = PackageImporter::getArchiveObjects();
|
||||
if (count($importObjs) === 0) {
|
||||
$tplMng->render('admin_pages/import/step1/package-row-no-found');
|
||||
} else {
|
||||
foreach ($importObjs as $importObj) {
|
||||
$tplMng->render(
|
||||
'admin_pages/import/step1/package-row',
|
||||
array(
|
||||
'importObj' => $importObj,
|
||||
'idRow' => '',
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="no_display" >
|
||||
<table id="dup-pro-import-available-packages-templates">
|
||||
<?php
|
||||
$tplMng->render(
|
||||
'admin_pages/import/step1/package-row',
|
||||
array(
|
||||
'importObj' => null,
|
||||
'idRow' => 'dup-pro-import-row-template',
|
||||
)
|
||||
);
|
||||
$tplMng->render('admin_pages/import/step1/package-row-no-found');
|
||||
?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
* @copyright (c) 2022, Snap Creek LLC
|
||||
*/
|
||||
|
||||
use Duplicator\Controllers\SettingsPageController;
|
||||
use Duplicator\Core\CapMng;
|
||||
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
|
||||
*/
|
||||
|
||||
$importSettingsUrl = $ctrlMng->getMenuLink(
|
||||
ControllersManager::SETTINGS_SUBMENU_SLUG,
|
||||
SettingsPageController::L2_SLUG_IMPORT
|
||||
);
|
||||
|
||||
?>
|
||||
<div id="dup-pro-import-vews-and-opt-wrapper" >
|
||||
<ul class="dup-pro-toggle-sub-menu">
|
||||
<li>
|
||||
<span class="dup-pro-toggle" >
|
||||
<span class="button" >
|
||||
<i class="fas fa-bars fa-lg"></i><span class="screen-reader-text">Options</span>
|
||||
</span>
|
||||
</span>
|
||||
<ul>
|
||||
<li class="title"><?php esc_html_e('VIEWS', 'duplicator-pro'); ?></li>
|
||||
<li>
|
||||
<span class="link-style no-decoration dup-pro-import-view-list <?php echo $tplData['viewMode'] == 'list' ? 'active' : ''; ?>">
|
||||
<?php _e('Advanced mode', 'duplicator-pro'); ?>
|
||||
<span class="description">View multiple packages</span>
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="link-style no-decoration dup-pro-import-view-single <?php echo $tplData['viewMode'] == 'single' ? 'active' : ''; ?>">
|
||||
Basic mode
|
||||
<span class="description"><?php esc_html_e('View last uploaded package', 'duplicator-pro'); ?></span>
|
||||
</span>
|
||||
</li>
|
||||
<li class="title separator"><?php esc_html_e('TOOLS', 'duplicator-pro'); ?></li>
|
||||
<?php if (CapMng::can(CapMng::CAP_SETTINGS, false)) { ?>
|
||||
<li>
|
||||
<a class="no-decoration" href="<?php echo esc_url($importSettingsUrl); ?>" target="_blank">
|
||||
<?php esc_html_e('Import Settings', 'duplicator-pro'); ?>
|
||||
</a>
|
||||
<i class="fas fa-external-link-alt fa-small" ></i>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<li>
|
||||
<span class="link-style no-decoration dup-pro-open-help-link">
|
||||
<?php esc_html_e('Quick Start', 'duplicator-pro'); ?>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
Reference in New Issue
Block a user