first commit

This commit is contained in:
Roman Pyrih
2026-04-03 10:22:35 +02:00
commit 5de35e358d
8424 changed files with 2907254 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
$recoveryLink = PrmMng::getInstance()->getValue(PrmMng::PARAM_RECOVERY_LINK);
?>
<div id="ajaxerr-area" class="no-display">
<p>
<b>ERROR:</b> <div class="message"></div>
<i>Please try again an issue has occurred.</i>
</p>
<div>Please see the <?php DUPX_View_Funcs::installerLogLink(); ?> file for more details.</div>
<div id="ajaxerr-data" class="margin-top-1">
<div class="html-content" ></div>
<pre class="pre-content"></pre>
<iframe class="iframe-content"></iframe>
</div>
<p>
<b>Additional Resources:</b><br/>
&raquo; <a target='_blank' href="<?php echo DUPX_Constants::FAQ_URL; ?>how-to-read-fix-various-http-status-codes" >
Check the documentation</a> for general information about each status code<br>
&raquo; <a target='_blank' href='<?php echo DUPX_Constants::FAQ_URL; ?>'>Help Resources</a><br/>
&raquo; <a target='_blank' href='https://duplicator.com/knowledge-base-article-categories/troubleshooting'>Technical FAQ</a>
</p>
<p class="text-center">
<input id="ajax-error-try-again" type="button" class="default-btn" value="&laquo; Try Again" />
<?php if (!empty($recoveryLink)) { ?>
<a href="<?php echo DUPX_U::esc_url($recoveryLink); ?>" class="default-btn" target="_parent">
<i class="fas fa-house-fire"></i> Restore Backup
</a>
<?php } ?>
</p>
<p class="text-center">
<i style='font-size:11px'>See online help for more details at <a href='https://duplicator.com/my-account/support/' target='_blank'>
duplicator.com
</a></i>
</p>
</div>

View File

@@ -0,0 +1,24 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $paramView
*/
if (!isset($paramView)) {
$paramView = '';
}
$archiveConfig = DUPX_ArchiveConfig::getInstance();
?>
<span class="dup-help-header-link">
<?php DUPX_View_Funcs::helpLink($paramView, 'Help'); ?>
</span>

View File

@@ -0,0 +1,14 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
$archiveConfig = DUPX_ArchiveConfig::getInstance();
?>
<span class="dup-log-header-link">
<?php DUPX_View_Funcs::installerLogLink(); ?>
</span>

View File

@@ -0,0 +1,17 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
$archiveConfig = DUPX_ArchiveConfig::getInstance();
?>
<span class="dup-version-header-link">
<a href="javascript:void(0)" onclick="DUPX.openServerDetails()">version:<?php echo $archiveConfig->version_dup; ?></a>&nbsp;
<?php DUPX_View_Funcs::helpLockLink(); ?>
</span>
<?php
dupxTplRender('pages-parts/head/server-details');

View File

@@ -0,0 +1,47 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $currentAction
*/
?>
<div
class="dynamic-sub-note dynamic-sub-note-<?php echo DUP_PRO_Extraction::ACTION_DO_NOTHING .
($currentAction == DUP_PRO_Extraction::ACTION_DO_NOTHING ? '' : ' no-display'); ?>"
>
Note: <b>Files are extracted over existing files.</b>
After install, the destination folder will contain a combination of the old site files and the files extracted from the archive.<br>
This option is the most conservative option for those who want to make sure they do not want to lose data.
</div>
<div
class="dynamic-sub-note dynamic-sub-note-<?php echo DUP_PRO_Extraction::ACTION_REMOVE_ALL_FILES .
($currentAction == DUP_PRO_Extraction::ACTION_REMOVE_ALL_FILES ? '' : ' no-display'); ?>"
>
Note: Before extracting the package files, <b>all files and folders in the installation folder will be removed</b>
except for folders that contain WordPress installations or Duplicator backup folders<br>
This option is recommended for those who want to delete all files related to old installations or external applications.
</div>
<div
class="dynamic-sub-note dynamic-sub-note-<?php echo DUP_PRO_Extraction::ACTION_REMOVE_UPLOADS .
($currentAction == DUP_PRO_Extraction::ACTION_REMOVE_UPLOADS ? '' : ' no-display'); ?>"
>
Note: Before extracting the package files, <b>all current media files will be removed</b> (wp-content/uploads)<br>
This option is for those who want to avoid having old site media mixed with new but have other files/folders
in the home path that they don't want to delete.
</div>
<div
class="dynamic-sub-note dynamic-sub-note-<?php echo DUP_PRO_Extraction::ACTION_REMOVE_WP_FILES .
($currentAction == DUP_PRO_Extraction::ACTION_REMOVE_WP_FILES ? '' : ' no-display'); ?>"
>
Note: Before extracting the package files, <b>all current WordPress core and content files and folders will be removed</b> (wp-include, wp-content ... )<br>
This option is for those who want to avoid having old site media mixed with new but have other files/folders
in the home path that they don't want to delete.
</div>

View File

@@ -0,0 +1,13 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<span class="s2-warning-db-donothing requires-no-db">
<i class="fa fa-exclamation-triangle"></i> With this option selected the database will not be installed.
This is useful if you want to just extract the archive and not perform any actions on the database.
</span>

View File

@@ -0,0 +1,20 @@
<?php
/**
*
* @package templates/default
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<span class="s2-warning-emptydb">
Warning: The selected 'Action' above will remove <u>all data</u> from this database!
</span>
<span class="s2-warning-renamedb">
Notice: The selected 'Action' will rename <u>all existing tables</u> from the database name above with a prefix <?php echo $GLOBALS['DB_RENAME_PREFIX']; ?>
The prefix is only applied to existing tables and not the new tables that will be installed.
</span>
<span class="s2-warning-manualdb">
Notice: The 'Skip Database Extraction' action will prevent the SQL script in the archive from running. The database above should already be
pre-populated with data which will be updated in the next step. No data in the database will be modified until after Step 3 runs.
</span>

View File

@@ -0,0 +1,40 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $currentSkipMode
*/
?>
<div
class="dynamic-sub-note dynamic-sub-note-<?php echo DUP_PRO_Extraction::FILTER_NONE .
($currentSkipMode == DUP_PRO_Extraction::FILTER_NONE ? '' : ' no-display'); ?>"
>
All Files in the archive are going to be extracted.
</div>
<div
class="dynamic-sub-note dynamic-sub-note-<?php echo DUP_PRO_Extraction::FILTER_SKIP_WP_CORE .
($currentSkipMode == DUP_PRO_Extraction::FILTER_SKIP_WP_CORE ? '' : ' no-display'); ?>"
>
When this option is chosen the WordPress core files, if any, are not modified. They are not deleted and/or extracted.
</div>
<div
class="dynamic-sub-note dynamic-sub-note-<?php echo DUP_PRO_Extraction::FILTER_SKIP_CORE_PLUG_THEMES .
($currentSkipMode == DUP_PRO_Extraction::FILTER_SKIP_CORE_PLUG_THEMES ? '' : ' no-display'); ?>"
>
When this option is chosen the WordPress core files, if any, are not modified. They are not deleted and/or extracted. </br>
Also, if a plugin (theme) exists on BOTH the host and and the archive, the contents of the host plugin (theme) are going to be kept.
</div>
<div
class="dynamic-sub-note dynamic-sub-note-<?php echo DUP_PRO_Extraction::FILTER_ONLY_MEDIA_PLUG_THEMES .
($currentSkipMode == DUP_PRO_Extraction::FILTER_ONLY_MEDIA_PLUG_THEMES ? '' : ' no-display'); ?>"
>
When this option is chosen only the "uploads" folder and plugins (themes) that don't exist on the host are going to be extracted.
</div>

View File

@@ -0,0 +1,17 @@
<?php
/**
*
* @package Duplicator/Installer
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<p>
<b>Import:</b> Adds all users from the source site to the target site. Does not remove or alter existing target users.
</p>
<p>
<b>Ignore:</b> Don't import users from the source site.
All content on the source site will be assigned to the <u>content author</u> selected user.
</p>

View File

@@ -0,0 +1,21 @@
<?php
/**
*
* @package Duplicator/Installer
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<p>
<b>Overwrite:</b> Overwrites users is the classic mode, users from the source site will be installed and those from the target site will be discarded.
</p>
<p>
<b>Keep:</b> Keeps all users of the target site by discarding users of the source site.
All content on the source site will be assigned to the <u>content author</u> selected user.
</p>
<p>
<b>Merge:</b> Merges users from the target site with users from the source site.
The target site users will be unchanged and the source site users will be added by remapping ids and logins if duplicated.
</p>

View File

@@ -0,0 +1,27 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var ?bool $display
*/
$display = (isset($display) ? $display : false);
?><div id="progress-area" class="<?php echo $display ? '' : 'no-display'; ?>">
<div style="width:500px; margin:auto">
<div class="progress-text"><i class="fas fa-circle-notch fa-spin"></i> <span id="progress-title"></span> <span id="progress-pct"></span></div>
<div id="secondary-progress-text"></div>
<div id="progress-notice"></div>
<div id="progress-bar"></div>
<h3>Please Wait...</h3><br/><br/>
<div id="progress-bottom-text"></div>
</div>
</div>

View File

@@ -0,0 +1,37 @@
<?php
/**
*
* @package Duplicator/Installer
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $numAdded
* @var int $numChanged/**
* @var string $csvUrl
*/
?>
<p>
<b><?php echo $numAdded; ?></b> users have been added<br>
<b><?php echo $numChanged; ?></b> users were already present and therefore have been modified
</p>
<?php if ($numAdded == 0 && $numChanged == 0) { ?>
<p>
No users have been imported and/or modified, all users from the source site are in the target site.
</p>
<?php } elseif ($csvUrl) { ?>
A CSV report has been generated with the list of all the users added/modified and the mapping of the modifications<br>
<a href="<?php echo DUPX_U::esc_url($csvUrl); ?>" download="import_users.csv">
Download import CSV report
</a><br>
<i>Note: This report does not contain users who were already at the target site.</i>
<?php } else { ?>
<p>
Csv report rile can't be generated
</p>
<?php } ?>

View File

@@ -0,0 +1,13 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<p>
<b>Restore backup mode is enabled</b> so most options are disabled.<br>
If you want to activate these options to change the migration website you need to restart the installer and deactivate the <b>Restore backup mode</b> option
</p>

View File

@@ -0,0 +1,25 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
$archiveConfig = DUPX_ArchiveConfig::getInstance();
?>
<table cellspacing="0" class="header-wizard">
<tr>
<td style="width:100%;">
<div class="dupx-branding-header">
<?php if (isset($archiveConfig->brand['logo']) && !empty($archiveConfig->brand['logo'])) : ?>
Help
<?php else : ?>
<i class="fa fa-bolt fa-sm"></i> Duplicator Pro help
<?php endif; ?>
</div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,48 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Hooks\HooksMng;
/**
* Variables
*
* @var string $paramView
*/
$archiveConfig = DUPX_ArchiveConfig::getInstance();
?>
<table cellspacing="0" class="header-wizard">
<tr>
<td style="width:100%;">
<div class="dupx-branding-header">
<?php
if (isset($archiveConfig->brand['logo']) && !empty($archiveConfig->brand['logo'])) {
echo $archiveConfig->brand['logo'];
} else {
?>
<i class="fa fa-bolt fa-sm"></i> <?php echo HooksMng::getInstance()->applyFilters('dupx_main_header', 'Duplicator PRO'); ?>
<?php
}
?>
</div>
</td>
<td class="wiz-dupx-version">
<?php dupxTplRender('parts/header-links/version-link'); ?>
<div style="padding: 6px 0">
<?php if ($paramView !== 'help') { ?>
<?php dupxTplRender('parts/header-links/log-link'); ?>
<span>&nbsp;|&nbsp;</span>
<?php dupxTplRender('parts/header-links/help-link', [ 'paramView' => $paramView ]); ?>
<?php } else { ?>
&nbsp;
<?php } ?>
</div>
</td>
</tr>
</table>

View File

@@ -0,0 +1,24 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<div id="page-top-messages">
<?php
/* * ************************* */
/* * * NOTICE MANAGER TESTS ** */
//DUPX_NOTICE_MANAGER::testNextStepFullMessageData();
//DUPX_NOTICE_MANAGER::testNextStepMessaesLevels();
//DUPX_NOTICE_MANAGER::testFinalReporMessaesLevels();
//DUPX_NOTICE_MANAGER::testFinalReportFullMessages();
/* * ************************* */
DUPX_NOTICE_MANAGER::getInstance()->nextStepLog();
// display and remove next step notices
DUPX_NOTICE_MANAGER::getInstance()->displayStepMessages();
?>
</div>

View File

@@ -0,0 +1,60 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $cpnlUser
* @var string $cpnlHost
* @var string $cpnlPass
*/
?>
<div class="sub-title">STATUS</div>
<p>
<?php if ($isOk) { ?>
<i class='green'>
The user <b>[<?php echo htmlentities($cpnlUser); ?>]</b> successfully connected to Cpanel server on host
<b>[<?php echo htmlentities($cpnlHost); ?>]</b>.
</i>
<?php } else { ?>
<i class='red'>
Unable to connect the user <b>[<?php echo htmlentities($cpnlUser); ?>]</b> to the host <b>[<?php echo htmlentities($cpnlHost); ?>]</b>.<br>
Please contact your hosting provider or server administrator.
</i>
<?php } ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
This test checks if it is possible to make a connection to Cpanel via API. It validates on the user name, password and host values.
The check does not take intothe user permissions. A Cpanel user must exist.
</p>
<table>
<tr>
<td>Host:</td>
<td><b><?php echo htmlentities($cpnlHost); ?></b></td>
</tr>
<tr>
<td>User:</td>
<td><b><?php echo htmlentities($cpnlUser); ?></b></td>
</tr>
<tr>
<td>Password:</td>
<td><b><?php echo htmlentities($cpnlPass); ?></b></td>
</tr>
</table><br/>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>Check that the 'Cpanel Host' name settings are correct via your hosts documentation.</li>
<li>Triple check the 'User' and 'Password' values are correct.</li>
</ul>

View File

@@ -0,0 +1,58 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $dbuser
* @var string $dbpass
* @var string $errorMessage
*/
?>
<div class="sub-title">STATUS</div>
<p>
<?php if ($isOk) { ?>
<i class='green'>
Successfully created database user <b>[<?php echo htmlentities($dbuser); ?>]</b> with cPanel API.
</i>
<?php } else { ?>
<i class='red'>
Error creating database user <b>[<?php echo htmlentities($dbuser); ?>]</b> with cPanel API.
</i>
<?php } ?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks that the cPanl API is allowed to create a database user. This option is only visible when cPanel is selected.
</p>
<table>
<tr>
<td>User:</td>
<td><b><?php echo htmlentities($dbuser); ?></b></td>
</tr>
<tr>
<td>Password:</td>
<td><b><?php echo htmlentities($dbpass); ?></b></td>
</tr>
</table><br/>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>Contact your host to make sure they support the cPanel API.</li>
<li>Check with your host to make sure the user name provided meets the cPanel requirements.</li>
</ul>

View File

@@ -0,0 +1,49 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
use Duplicator\Installer\Core\InstState;
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $message
* @var int $affectedTableCount
* @var string[] $affectedTables
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<?php if (!$isOk) : ?>
<p class="red">
The chosen Database Action will result in the modification of <b><?php echo $affectedTableCount; ?></b>
table(s).
</p>
<?php else : ?>
<p class="green">
<?php if (InstState::isRestoreBackup()) : ?>
Restore backup replace tables with the backup tables.
<?php else : ?>
The chosen Database Action does not affect any tables in the selected database.
<?php endif; ?>
</p>
<?php endif; ?>
<div class="sub-title">DETAILS</div>
<p><?php echo $message; ?></p>
<div class="s1-validate-flagged-tbl-list">
<ul>
<?php foreach ($affectedTables as $table) : ?>
<li><?php echo htmlentities($table); ?></li>
<?php endforeach; ?>
</ul>
</div>

View File

@@ -0,0 +1,49 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $lowerCaseTableNames
* @var array<string[]> $duplicateTableNames
* @var string[] $reduntantTableNames
*/
?>
<div class="sub-title">STATUS</div>
<p class="red">
The following tables have the same name but different casing. Underlined tables are going to be excluded from the database extraction.
</p>
<ul>
<?php foreach ($duplicateTableNames as $tableName => $tableNames) { ?>
<li>
<?php
foreach ($tableNames as $index => $name) {
if (in_array($name, $reduntantTableNames)) { ?>
<u class="red"><b><?php echo $name; ?></b></u>
<?php
} else {
echo $name;
}
if ($index < (count($tableNames) - 1)) {
echo ', ';
}
}
?>
</li>
<?php } ?>
</ul>
<div class="sub-title">DETAILS</div>
<p>
The database setting <b>lower_case_table_names</b> is set to <b>[<?php echo $lowerCaseTableNames; ?>]</b> which doesn't allow case sensitive table names.
This will cause issues trying to create tables with the same case insensitive table name. To change the filtered tables switch to "Advanced" and
mode and choose the tables to extract in Step 2.
</p>

View File

@@ -0,0 +1,68 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var int $lowerCaseTableNames
* @var string $errorMessage
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) { ?>
No table casing issues detected. This servers variable setting for lower_case_table_names is [<?php echo $lowerCaseTableNames; ?>]
<?php } else { ?>
An upper case table name was found in the database SQL script and the server variable lower_case_table_names is set to
<b>[<?php echo $lowerCaseTableNames; ?>]</b>.
When both of these conditions are met it can lead to issues with creating tables with upper case characters.<br/>
<b>Options</b>:<br/>
- On this server have the host company set the lower_case_table_names value to 1 or 2 in the my.cnf file.<br/>
- On the build server set the lower_case_table_names value to 2 restart server and build package.<br/>
- Optionally continue the install with data creation issues on upper case tables names.<br/>
<?php } ?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks if any tables have upper case characters as part of the name.
On some systems creating tables with upper case can cause issues if the server
setting for <a href="https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html" target="_help">
lower_case_table_names
</a> is set to zero and upper case
table names exist.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
In the my.cnf (my.ini) file set the
<a href="https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lower_case_table_names" target="_help">
lower_case_table_names
</a>
to 1 or 2 and restart the server.
</li>
<li>
<i class="fa fa-external-link"></i>
<a href='http://www.inmotionhosting.com/support/website/general-server-setup/edit-mysql-my-cnf' target='_help'>
How to edit MySQL config files my.cnf (linux) or my.ini (windows) files
</a>
</li>
</ul>

View File

@@ -0,0 +1,75 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var bool $isCpanel
* @var bool $alreadyExists
* @var string $dbname
* @var string $errorMessage
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) { ?>
Successfully removed database <b>[<?php echo htmlentities($dbname); ?>]</b>
<?php
} else {
if ($alreadyExists) {
?>
The database <b>[<?php echo htmlentities($dbname); ?>]</b> was successfully created.
However removing the database was not successful <?php echo $isCpanel ? 'via Cpanel API' : ''; ?> with the following response:<br/>
To continue refresh the page, change the setup action and continue with the install
<?php
}
}
?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks if the database can be removed by the database user <?php echo $isCpanel ? 'using Cpanel API' : ''; ?>.
The test will attempt drop the database name provided as part of the overall test.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
Check the database user privileges:
<ul class='vids'>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=FfX-B-h3vo0" target="_video">Add database user in phpMyAdmin</a>
</li>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=peLby12mi0Q" target="_video">Add database user in cPanel older versions</a>
</li>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=CHwxXGPnw48" target="_video">Add database user in cPanel newer versions</a>
</li>
</ul>
</li>
<li>
<a href="<?php echo DUPX_U::esc_attr(DUPX_Constants::FAQ_URL); ?>how-to-fix-database-connection-issues/" target="_help"
title="I'm running into issues with the Database what can I do?">
[Additional FAQ Help]
</a>
</li>
</ul>

View File

@@ -0,0 +1,93 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $dbuser
* @var string $dbhost
* @var string $dbpass
* @var string $mysqlConnErr
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) { ?>
The user <b>[<?php echo htmlentities($dbuser); ?>]</b> successfully connected to the database server on host
<b>[<?php echo htmlentities($dbhost); ?>]</b>.
<?php } else { ?>
Unable to connect the user <b>[<?php echo htmlentities($dbuser); ?>]</b> to the host
<b>[<?php echo htmlentities($dbhost); ?>]</b>.<br>
<?php if ($mysqlConnErr) { ?>
The server error response was: <i><?php echo htmlentities($mysqlConnErr); ?></i>'
<?php } else { ?>
Please contact your hosting provider or server administrator.
<?php } ?>
<?php } ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
This test checks that the database user is allowed to connect to the database server.
It validates on the user name, password and host values.
The check does not take into account the database name or the user permissions. A database user must first exist and have access to the host
database server before any additional checks can be made.
</p>
<table>
<tr>
<td>Host:</td>
<td><b><?php echo htmlentities($dbhost); ?></b></td>
</tr>
<tr>
<td>User:</td>
<td><b><?php echo htmlentities($dbuser); ?></b></td>
</tr>
<tr>
<td>Password:</td>
<td><b><?php echo htmlentities($dbpass); ?></b></td>
</tr>
</table><br/>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>Check that the 'Host' name settings are correct via your hosts documentation.</li>
<li>On some servers, the default name 'localhost' will not work. Be sure to contact your hosting provider.</li>
<li>Triple check the 'User' and 'Password' values are correct.</li>
<li>
Check to make sure the 'User' has been added as a valid database user
<ul class='vids'>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=FfX-B-h3vo0" target="_video">Add database user in phpMyAdmin</a>
</li>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=peLby12mi0Q" target="_video">Add database user in cPanel older versions</a>
</li>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=CHwxXGPnw48" target="_video">Add database user in cPanel newer versions</a>
</li>
</ul>
</li>
<li>
If using the 'Basic' option then try using the <a href="javascript:void(0)" onclick="DUPX.togglePanels('cpanel')">'cPanel'</a> option.
</li>
<li>
<a href="<?php echo DUPX_U::esc_attr(DUPX_Constants::FAQ_URL); ?>how-to-fix-database-connection-issues/" target="_help"
title="I'm running into issues with the Database what can I do?">
[Additional FAQ Help]
</a>
</li>
</ul>

View File

@@ -0,0 +1,81 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var bool $isCpanel
* @var string $dbname
* @var string $errorMessage
* @var bool $alreadyExists
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) { ?>
Successfully created database <b>[<?php echo htmlentities($dbname); ?>]</b>
<?php
} else {
if ($alreadyExists) {
?>
DATABASE CREATION FAILURE: A database named <b>[<?php echo htmlentities($dbname); ?>]</b> already exists.<br/><br/>
Please continue with the following options:<br/>
- Choose a different database name or remove this one.<br/>
- Change the action drop-down to an option like "Connect and Remove All Data".<br/>
<?php } else { ?>
Error creating database <b>[<?php echo htmlentities($dbname); ?>]</b>.
<?php
}
}
?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks if the database can be created by the database user <?php echo $isCpanel ? 'using Cpanel API' : ''; ?>.
The test will attempt to create and drop the database name provided as part of the overall test.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
Check the database user privileges:
<ul class='vids'>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=FfX-B-h3vo0" target="_video">Add database user in phpMyAdmin</a>
</li>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=peLby12mi0Q" target="_video">Add database user in cPanel older versions</a>
</li>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=CHwxXGPnw48" target="_video">Add database user in cPanel newer versions</a>
</li>
</ul>
</li>
<?php if (!$isCpanel) { ?>
<li>Try using the <a href="javascript:void(0)" onclick="DUPX.togglePanels('cpanel')">'cPanel'</a> option.</li>
<?php } ?>
<li>
<a href="<?php echo DUPX_U::esc_attr(DUPX_Constants::FAQ_URL); ?>how-to-fix-database-connection-issues/" target="_help"
title="I'm running into issues with the Database what can I do?">
[Additional FAQ Help]
</a>
</li>
</ul>

View File

@@ -0,0 +1,39 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var bool $dbExcluded
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($dbExcluded) { ?>
The database was excluded from the package during build.
<?php } ?>
<?php if ($isOk) { ?>
The installer is going to perform all database actions.
<?php } else { ?>
The installer is going to skip any actions it would usually perform on the database, and act as a smart file extractor.
<?php } ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
This test checks whether the "Extract Only Files" database action was selected or the database as excluded from the package during build and adjusts
the installer parameters accordingly. When the database is excluded, there is no need for Database credentials.
</p>

View File

@@ -0,0 +1,50 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $errorMessage
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) { ?>
The installer has not detected GTID mode.
<?php } else { ?>
GTID mode is enabled on your database server, which can potentially cause problems during the database installation step.<br/>
<?php } ?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks whether GTID mode is enabled on the database server. When GTID mode is enabled you might get
"Statement violates GTID consistency" errors. For more information checkout the links in the "Troubleshoot"
section.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li><i class="far fa-file-code"></i> <a href='https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html' target='_help'>What is GTID?</a></li>
<li>
<i class="far fa-file-code"></i>
<a href= "https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-disable-gtids.html" target="_blank">How to disable GTID mode?</a>
</li>
</ul>

View File

@@ -0,0 +1,32 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $host
* @var string $fixedHost
*/
?>
<p>
<b>Database host:</b>
<?php
if ($isOk) {
?><i class='green'>
<b>[<?php echo htmlentities($host); ?>]</b> is valid.
</i><?php
} else {
?><i class='red'>
<b>[<?php echo htmlentities($host); ?>]</b> is not a valid. Try using <b>[<?php echo htmlentities($fixedHost); ?>]</b> instead.
</i>
<?php
}
?>
</p>

View File

@@ -0,0 +1,44 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $dbname
* @var int $numTables
* @var string $errorMessage
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) { ?>
This test passes. A WordPress database looks to be setup.
<?php } else { ?>
The database [<?php echo htmlentities($dbname); ?>] has <?php echo $numTables; ?> tables. This does not look to be a valid WordPress database.
The base WordPress install has 12 tables. Please validate that this database is indeed pre-populated with a valid WordPress database.
The "Skip Database Extraction" mode requires that you have a valid WordPress database already installed.
<?php } ?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks if the database looks to represents a base WordPress install. Since this option is advanced it is left upto the user to
have the correct database tables installed.
</p>

View File

@@ -0,0 +1,44 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string[] $uniquePrefixes
*/
?>
<div class="sub-title">STATUS</div>
<?php if ($isOk) : ?>
<p class="green">
The selected database action does not affect other WordPress installations.
</p>
<?php else : ?>
<p class="red">
The selected database action affects <b><?php echo count($uniquePrefixes); ?></b> WordPress installations.
</p>
<?php endif; ?>
<div class="sub-title">DETAILS</div>
<p>
This test makes sure that the selected database action affects at most one WordPress installation. Please make sure that the
chosen database action will not cause unwanted consequences for tables of other sites residing on the same database. In case
you want to avoid removing the tables of the second WordPress installation we recommend switching the Database action to
"Overwrite Existing Tables".
</p>
<?php if (count($uniquePrefixes) > 0) : ?>
<p>WordPress tables with the following table prefixes will be affected by the chosen database action:</p>
<ul>
<?php foreach ($uniquePrefixes as $prefix) : ?>
<li><b><?php echo DUPX_U::esc_html($prefix); ?></b></li>
<?php endforeach; ?>
</ul>
<?php endif;

View File

@@ -0,0 +1,57 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $errorMessage
* @var string[] $tooLongNewTableNames
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) { ?>
There are no table names whose length exceeds limit of 64 characters after adding prefix.
<?php } else { ?>
Some table names exceed limit of 64 characters after adding prefix.
<?php } ?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks if there are any tablenames that would be too long after adding prefix to them.
MySQL accepts length of table names with maximum of 64 characters
(see <a href="https://dev.mysql.com/doc/refman/8.0/en/identifier-length.html" target="_blank">length limits</a>).
With a too long prefix, tables can exceed this limit.
</p>
<?php if (!$isOk) { ?>
<b>List of database tables that are too long after adding prefix</b><br/>
<div class="s1-validate-flagged-tbl-list">
<ul>
<?php foreach ($tooLongNewTableNames as $table) : ?>
<li><?php echo htmlentities($table); ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php } ?>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>Choose a shorter prefix in Options -> Database Settings -> Table Prefix.</li>
</ul>

View File

@@ -0,0 +1,39 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $pass
*/
?>
<div class="sub-title">STATUS</div>
<?php if ($pass) : ?>
<p class="green">
Successfully read database variables.
</p>
<?php else : ?>
<p class="maroon">
Error reading database variables.
</p>
<?php endif; ?>
<div class="sub-title">DETAILS</div>
<p>
Query executed: <i>SHOW VARIABLES like 'version'</i><br/><br/>
The "<a href="https://dev.mysql.com/doc/refman/5.7/en/show-variables.html" target="_blank">SHOW VARIABLES</a>" query statement is required to obtain
necessary information about the database and safely execute the installation process. There is not a single setting that will make this query work
for all hosting providers. Please contact your hosting provider or server admin with
<a href="https://dev.mysql.com/doc/refman/5.7/en/show-variables.html" target="_blank">this link</a> and ask for them to provide support for the
"SHOW VARIABLES" when called from PHP. <br/><br/>
Additional FAQ resources for this issue can be found here:<br/>
<a href="<?php echo DUPX_Constants::FAQ_URL; ?>digital-ocean-digitalocean-com" target="_blank">
Digital Ocean -- digitalocean.com
</a>
</p>

View File

@@ -0,0 +1,139 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult DUPX_Validation_abstract_item::[LV_FAIL|LV_HARD_WARNING|...]
* @var string[] $invalidCharsets
* @var string[] $invalidCollations
* @var string[] $charsetsList
* @var string[] $collationsList
* @var string $usedCharset
* @var string $usedCollate
* @var string $errorMessage
*/
$statusClass = $testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING ? 'green' : 'red';
$dupDatabase = basename(DUPX_Package::getSqlFilePath());
$dupDatabaseDupFolder = basename(DUPX_INIT) . '/' . $dupDatabase;
$invalidCheckboxTitle = '';
$subTitle = '';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php
switch ($testResult) {
case DUPX_Validation_abstract_item::LV_FAIL:
?>
It is impossible to verify the list of charsets in the database.
<?php
break;
case DUPX_Validation_abstract_item::LV_HARD_WARNING:
if (!empty($invalidCharsets) && !empty($invalidCollations)) {
$invalidCheckboxTitle = '"Legacy Character set" and "Legacy Collation"';
$subTitle = 'character set and collation';
} elseif (!empty($invalidCharsets)) {
$invalidCheckboxTitle = '"Legacy Character set"';
$subTitle = 'character set';
} elseif (!empty($invalidCollations)) {
$invalidCheckboxTitle = '"Legacy Collation"';
$subTitle = 'collation';
}
?>
<?php echo htmlentities($subTitle); ?> isn't supported on current database.
<?php echo htmlentities($invalidCheckboxTitle); ?> will be replaced with default values.<br>
<?php
break;
default:
?>
Character set and Collate test passed! This database supports the required table character sets and collations.
<?php
break;
}
?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks to make sure this database can support the character set and collations found in the
<b><?php echo htmlentities($dupDatabaseDupFolder); ?></b> script.
</p>
<table class="validation-charset-list margin-bottom-1">
<tbody>
<tr>
<td colspan="2" >
<b>Character set list</b>
</td>
</tr>
<?php foreach ($charsetsList as $charset) { ?>
<tr>
<td>
<?php echo $charset; ?>
</td>
<td>
<?php $testLv = in_array($charset, $invalidCharsets) ? DUPX_Validation_abstract_item::LV_FAIL : DUPX_Validation_abstract_item::LV_PASS; ?>
<span class="status-badge <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($testLv); ?>">
</td>
</tr>
<?php } ?>
<tr>
<td colspan="2" >
<b>Collations list</b></b>
</td>
</tr>
<?php foreach ($collationsList as $collate) { ?>
<tr>
<td><?php echo $collate; ?></td>
<td>
<?php $testLv = in_array($collate, $invalidCollations) ? DUPX_Validation_abstract_item::LV_FAIL : DUPX_Validation_abstract_item::LV_PASS; ?>
<span class="status-badge <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($testLv); ?>">
</td>
</tr>
<?php } ?>
<tbody>
</table>
<?php if ($testResult == DUPX_Validation_abstract_item::LV_HARD_WARNING) { ?>
<p>
The database where the package was created has a <b><?php echo htmlentities($subTitle); ?></b> that is not supported on this server.
This issue happens when a site is moved from an newer version of MySQL to a older version of MySQL.
The recommended fix is to update MySQL on this server to support the character set that is failing below.
<b>If this is not an option for your host, then you can continue the installation. Invalid values will be replaced with the default values.</b>
For more details about this issue and other details regarding this issue see the FAQ link below.
</p>
<?php } ?>
<p>
<i>Default charset and setting in current installation</i><br>
<i>DB_CHARSET = <b><?php echo $usedCharset; ?></b></i><br>
<i>DB_COLLATE = <b><?php echo $usedCollate; ?></b></i>
<p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
<i class="far fa-file-code"></i>
<a href='<?php echo DUPX_U::esc_attr(DUPX_Constants::FAQ_URL); ?>how-to-fix-database-write-issues/' target='_help'>
What is Compatibility mode & 'Unknown Collation' errors?
</a>
</li>
<li>
In case the default charset/collates are not the desired ones you can <b>change the setting</b> in the <b>advanced installation mode</b>.
</li>
</ul>

View File

@@ -0,0 +1,58 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult DUPX_Validation_abstract_item::[LV_FAIL|LV_HARD_WARNING|...]
* @var bool $charsetOk
* @var bool $collateOk
* @var string $sourceCharset
* @var string $sourceCollate
* @var string $usedCharset
* @var string $usedCollate
* @var string $errorMessage
*/
$statusClass = ($testResult === DUPX_Validation_abstract_item::LV_FAIL || !$charsetOk || !$collateOk) ? 'red' : 'green';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($testResult === DUPX_Validation_abstract_item::LV_FAIL) { ?>
It is not possible to read the list of available charsets in the database.<br>
Message: <?php echo $errorMessage; ?>
<?php } elseif (!$charsetOk) { ?>
This server's database does not support the source site's character set [<b><?php echo $sourceCharset; ?></b>],
so the installer is going to use default character [<b><?php echo $usedCharset; ?></b>].
<?php } elseif (!$collateOk) { ?>
This server's database does not support the source site's collate [<b><?php echo $sourceCollate; ?></b>],
so the installer is going to use default collate of current charset [<b><?php echo $usedCollate; ?></b>].
<?php } else { ?>
The current server supports the source site's charset [<b><?php echo $sourceCharset; ?></b>]
and Collate [<b><?php echo empty($sourceCollate) ? 'default' : $sourceCollate; ?></b>]
(set in the wp-config file).<br>
<?php } ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
<i>Settings used in the current installation</i><br>
<i>DB_CHARSET = <b><?php echo $usedCharset; ?></b></i><br>
<i>DB_COLLATE = <b><?php echo $usedCollate; ?></b></i>
<p>
<p>
DB_CHARSET and DB_COLLATE are set in wp-config.php
(see: <a href="https://wordpress.org/support/article/editing-wp-config-php/#database-character-set" target="_blank">Editing wp-config.php</a> ).<br>
When the charset or collate of the source site is not supported in the database of the target site, the default is automatically set.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>In case the default charset/collates are not the desired ones you can <b>change the setting</b> in the <b>advanced installation mode</b>.</li>
</ul>

View File

@@ -0,0 +1,90 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult DUPX_Validation_abstract_item::[LV_FAIL|LV_HARD_WARNING|...]
* @var string[] $invalidEngines
* @var string $defaultEngine
* @var string $errorMessage
* @var bool $engineListRead
*/
$statusClass = $testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING ? 'green' : 'red';
$dupDatabase = basename(DUPX_Package::getSqlFilePath());
$dupDatabaseDupFolder = basename(DUPX_INIT) . '/' . $dupDatabase;
$invalidCheckboxTitle = '';
$subTitle = '';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php
switch ($testResult) {
case DUPX_Validation_abstract_item::LV_HARD_WARNING:
if ($engineListRead) {
?>
The following MySQL engines Engine(s) were found to not be supported by the current database:
<?php
echo "[" . implode(",", $invalidEngines) . "]";
?>
<br>
and are going to be replaced by the default MySQL Engines
<?php
echo "[" . $defaultEngine . "]";
} else {
?>
Impossible to verify list of supported engines
<?php
}
break;
default:
?>
Database engine for MySQL compatibility passed! This database supports the required MySQL engine types.
<?php
break;
}
?>
</p>
<?php if (strlen($errorMessage)) : ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php endif; ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks to make sure this database can support the MySQL engines found in the
<b><?php echo htmlentities($dupDatabaseDupFolder); ?></b> script.
</p>
<?php if ($testResult == DUPX_Validation_abstract_item::LV_HARD_WARNING && $engineListRead) : ?>
<p>
The following MySQL Engine(s) were found to not be supported by the current database:
</p>
<ul>
<?php foreach ($invalidEngines as $engine) : ?>
<li><b><?php echo DUPX_U::esc_html($engine); ?></b></li>
<?php endforeach; ?>
</ul>
and are going to be replaced by the default MySQL Engine <b>[<?php echo DUPX_U::esc_html($defaultEngine); ?>]</b>.
<?php endif; ?>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
In case some of the MySQL engines of the source site are not supported, not verified and replacing them with the default engine
is not desired, please try getting in touch with your hosting provider and asking them to enable the engine.
</li>
</ul>

View File

@@ -0,0 +1,50 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var array<string, object> $triggers
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) {
?>
The source database did not contain any triggers.
<?php
} else {
?>
The source database contained <b><?php echo count($triggers); ?> TRIGGERS</b> which will have to be manually imported.
<?php
} ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
TRIGGERS are not being imported along side the rest of the database, because their presence might cause unintended
behavior. You can copy the CREATE queries by clicking the button below and manually add triggers via PHPMyAdmin, if necessary.
</p>
<div class="copy-to-clipboard-block">
<button type="button" <?php echo $isOk ? 'disabled' : '' ?> class="default-btn">Copy Queries to Clipboard</button>
<textarea <?php echo $isOk ? 'disabled' : '' ?> readonly="readonly"><?php
if ($isOk) {
echo 'No triggers found.';
} else {
foreach ($triggers as $name => $info) {
echo $info->create . "\n\n";
}
}
?>
</textarea>
</div>

View File

@@ -0,0 +1,53 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $dbuser
* @var string $errorMessage
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) { ?>
Successfully removed database user <b>[<?php echo htmlentities($dbuser); ?>]</b> with cPanel API.
<?php } else { ?>
The database user <b>[<?php echo htmlentities($dbuser); ?>]</b> was successfully created.
However removing the user was not successful via the cPanel API with the following response:<br/>
To continue refresh the page, uncheck the 'Create New Database User' checkbox and select the user from the drop-down.
<?php } ?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks that the cPanl API is allowed to remove database user crated before.
</p>
<table>
<tr>
<td>User:</td>
<td><b><?php echo htmlentities($dbuser); ?></b></td>
</tr>
</table><br/>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>Contact your host to make sure they support the cPanel API.</li>
<li>Check with your host to make sure the user name provided meets the cPanel requirements.</li>
</ul>

View File

@@ -0,0 +1,145 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult
* @var string $dbuser
* @var string $dbname
* @var array<string, int> $perms
* @var string[] $errorMessages
*/
$statusClass = $testResult == DUPX_Validation_test_db_user_perms::LV_PASS ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php
switch ($testResult) {
case DUPX_Validation_test_db_user_perms::LV_PASS:
?>
The user <b>[<?php echo htmlentities($dbuser); ?>]</b> has the correct privileges on the database <b>[<?php echo htmlentities($dbname); ?>]</b>.
<?php
break;
case DUPX_Validation_test_db_user_perms::LV_FAIL:
?>
The user <b>[<?php echo htmlentities($dbuser); ?>]</b> is missing privileges on the database <b>[<?php echo htmlentities($dbname); ?>]</b>
<?php
break;
case DUPX_Validation_test_db_user_perms::LV_HARD_WARNING:
?>
The user <b>[<?php echo htmlentities($dbuser); ?>]</b> is missing privileges on the database <b>[<?php echo htmlentities($dbname); ?>]</b><br>
You can continue with the installation but some features may not be restored correctly.
<?php
break;
}
?>
</p>
<?php if (!empty($errorMessages)) { ?>
<p>
Error detail: <br>
<?php foreach ($errorMessages as $errorMessage) { ?>
<span class="maroon" ><?php echo htmlentities($errorMessage); ?></span><br>
<?php } ?>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks the privileges of the current database user. In order to successfully use Duplicator Pro all of the privileges should pass.
In the event the checks below fail, contact your hosting provider to make sure the database user has the correct permissions listed below.
<br/><br/>
<i>
Note: In some cases "Create Views, Procedures, Functions and Triggers" will not pass, but continuing with the install will still work.
It is however recommended that a green pass on all permissions is set when possible. Please work with your hosting provider to get all
values to pass.
</i>
</p><br/>
<div class="sub-title">TABLE PRIVILEGES ON [<?php echo htmlentities($dbname); ?>]</div>
<table class="s1-validate-sub-status">
<tr>
<td>Create</td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['create']); ?>"></span></td>
</tr>
<tr>
<td>Select</td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['select']); ?>"></span></td>
</tr>
<tr>
<td>Insert</td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['insert']); ?>"></span> </td>
</tr>
<tr>
<td>Update</td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['update']); ?>"></span></td>
</tr>
<tr>
<td>Delete</td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['delete']); ?>"></span></td>
</tr>
<tr>
<td>Drop</td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['drop']); ?>"></span></td>
</tr>
<?php if ($perms['view'] < DUPX_Validation_abstract_item::LV_SKIP) : ?>
<tr>
<td>Create Views</td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['view']); ?>"></span></td>
</tr>
<?php endif; ?>
<?php if ($perms['proc'] < DUPX_Validation_abstract_item::LV_SKIP) : ?>
<tr>
<td>Procedures <small>(Create &amp; Alter)</small> </td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['proc']); ?>"></span></td>
</tr>
<?php endif; ?>
<?php if ($perms['func'] < DUPX_Validation_abstract_item::LV_SKIP) : ?>
<tr>
<td>Functions <small>(Create &amp; Alter)</small> </td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['func']); ?>"></span></td>
</tr>
<?php endif; ?>
<?php if ($perms['trigger'] < DUPX_Validation_abstract_item::LV_SKIP) : ?>
<tr>
<td>Trigger</td>
<td><span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($perms['trigger']); ?>"></span></td>
</tr>
<?php endif; ?>
</table><br/>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>Validate that the database user is correct per your hosts documentation</li>
<li>
Check to make sure the 'User' has been granted the correct privileges
<ul class='vids'>
<li>
<i class="fa fa-video-camera"></i>
<a href='https://www.youtube.com/watch?v=UU9WCC_-8aI' target='_video'>How to grant user privileges in cPanel</a>
</li>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=FfX-B-h3vo0" target="_video">How to grant user privileges in phpMyAdmin</a>
</li>
</ul>
</li>
<li>
<a href="<?php echo DUPX_U::esc_attr(DUPX_Constants::FAQ_URL); ?>how-to-fix-database-connection-issues/" target="_help"
title="I'm running into issues with the Database what can I do?">
[Additional FAQ Help]
</a>
</li>
</ul>

View File

@@ -0,0 +1,51 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var array<string, int> $userResources
*/
?>
<div class="sub-title">STATUS</div>
<?php if ($isOk) : ?>
<p class="green">
No restrictions on the current DB user's resources were detected.
</p>
<?php else : ?>
<p class="maroon">
Restrictions on the current DB user's resources were detected.
</p>
<?php endif; ?>
<div class="sub-title">DETAILS</div>
<p>
Some server's put in place restrictions on the resources available to a user, which <i>may</i> cause errors during
the installation process since a significant number of connections are made and queries are run.
</p>
<?php if (is_array($userResources) && count($userResources) > 0) : ?>
<div class="sub-title">USER RESOURCES</div>
<ul>
<?php foreach ($userResources as $resourceName => $limit) : ?>
<li class="<?php echo $limit > 0 ? 'red' : 'green';?>">
<b><?php echo $resourceName; ?>:</b> <?php echo $limit > 0 ? $limit : 'unlimited'; ?>
</li>
<?php endforeach; ?>
</ul>
<div class="sub-title">TROUBLESHOOT</div>
<p>
We suggest asking your hosting provider to undo the restrictions in case they are present or if you have root access to the mysql server
you can use the methods described in the <a href="https://dev.mysql.com/doc/refman/5.7/en/user-resources.html" target="_blank">official documentation</a>
to remove the restrictions.
</p>
<?php endif; ?>

View File

@@ -0,0 +1,62 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $hostDBVersion
* @var string $sourceDBVersion
* @var string $dbsOfSameType
* @var string $hostDBEngine
* @var string $sourceDBEngine
*/
?>
<div class="sub-title">STATUS</div>
<p>
<?php if (!$dbsOfSameType) { ?>
<i class='red'>
The current database engine is <b>[<?php echo htmlentities($hostDBEngine . ' ' . $hostDBVersion); ?>]</b> while the host database engine was
<b>[<?php echo htmlentities($sourceDBEngine . ' ' . $sourceDBVersion); ?>]</b>.
</i>
<?php } else { ?>
<i class='red'>
The current database version is <b>[<?php echo htmlentities($hostDBVersion); ?>]</b> which is below the source database version of
<b>[<?php echo htmlentities($sourceDBVersion); ?>]</b>.
</i>
<?php } ?>
In some cases this might cause problems with the migration.
</p>
<div class="sub-title">DETAILS</div>
<p>
<?php if (!$dbsOfSameType) { ?>
Some versions of different database engines are not compatible with each other, which might cause problems with the database import.
We suggest continuing the install as usual.
In case there are problems with the database install please consult the links in the
troubleshoot section to find out which features are not compatible.
<?php } else { ?>
The source site used a newer version of <?php echo htmlentities($hostDBEngine); ?>,
which may result in problems during the installation if there were changes
made which are not backward-compatible. We suggest continuing with the install as usual.
In case of problems with the database try contacting your hosting provider and asking for a database version upgrade.
<?php } ?>
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li><a href="https://www.percona.com/software/mysql-database/percona-server" target="_blank">Percona official website</a></li>
<li><a href="https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-compatibility/" target="_blank">MariaDB vs MySQL compatibility chart</a></li>
<li>
<a href="<?php echo DUPX_U::esc_attr(DUPX_Constants::FAQ_URL); ?>how-to-fix-database-connection-issues/" target="_help"
title="I'm running into issues with the Database what can I do?">
[Additional FAQ Help]
</a>
</li>
</ul>

View File

@@ -0,0 +1,50 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $hostDBVersion
*/
?>
<div class="sub-title">STATUS</div>
<p>
<?php if ($isOk) { ?>
<i class='green'>
This test passes with a current database version of <b>[<?php echo htmlentities($hostDBVersion); ?>]</b>
</i>
<?php } else { ?>
<i class='red'>
The current database version is <b>[<?php echo htmlentities($hostDBVersion); ?>]</b> which is below the required version of 5.0.0.
Please work with your server admin or hosting provider to update the database server.
</i>
<?php } ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
The minimum supported database server is MySQL Server 5.0 or the
<a href="https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-compatibility/" target="_blank">MariaDB equivalent</a>.
Versions prior to MySQL 5.0 are over 10 years old and will not be compatible with Duplicator Pro.
If your host is using a legacy version, please ask them
to upgrade the MySQL database engine to a more recent version.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>Contact your host and have them upgrade your MySQL server.</li>
<li>
<a href="<?php echo DUPX_U::esc_attr(DUPX_Constants::FAQ_URL); ?>how-to-fix-database-connection-issues/" target="_help"
title="I'm running into issues with the Database what can I do?">
[Additional FAQ Help]
</a>
</li>
</ul>

View File

@@ -0,0 +1,94 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $dbuser
* @var string $dbname
* @var string[] $databases
* @var string $errorMessage
*/
$statusClass = $isOk ? 'green' : 'red';
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($isOk) { ?>
The database user <b>[<?php echo htmlentities($dbuser); ?>]</b> has visible access to see the database named
<b>[<?php echo htmlentities($dbname); ?>]</b>
<?php } else { ?>
The user <b>[<?php echo htmlentities($dbuser); ?>]</b> is unable to see the database named
<b>[<?php echo htmlentities($dbname); ?>]</b>.<br>
Be sure the database name already exists.
If you want to create a new database choose the action 'Create New Database'.<br>
<?php } ?>
</p>
<?php if (!empty($errorMessage)) { ?>
<p>
Error detail: <span class="maroon" ><?php echo htmlentities($errorMessage); ?></span>
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<p>
This test checks if the database user is allowed to connect or view the database.
This test will not be ran if the 'Create New Database' action is selected.
</p>
<?php if (!$isOk) { ?>
<b>Databases visible to user [<?php echo htmlentities($dbuser); ?>]</b><br/>
<ul class="db-list">
<?php
if (count($databases)) {
foreach ($databases as $database) {
?>
<li>
<?php echo htmlentities($database); ?>
</li>
<?php
}
} else {
?>
<li>
<i>No databases are viewable</i>
</li>
<?php } ?>
</ul>
<?php } ?>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>Check the database user privileges.</li>
<li>
Check to make sure the 'User' has been added as a valid database user
<ul class='vids'>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=FfX-B-h3vo0" target="_video">Add database user in phpMyAdmin</a>
</li>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=peLby12mi0Q" target="_video">Add database user in cPanel older versions</a>
</li>
<li>
<i class="fa fa-video-camera"></i>
<a href="https://www.youtube.com/watch?v=CHwxXGPnw48" target="_video">Add database user in cPanel newer versions</a>
</li>
</ul>
</li>
<li>
<a href="<?php echo DUPX_U::esc_attr(DUPX_Constants::FAQ_URL); ?>how-to-fix-database-connection-issues/" target="_help"
title="I'm running into issues with the Database what can I do?">
[Additional FAQ Help]
</a>
</li>
</ul>

View File

@@ -0,0 +1,61 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult DUPX_Validation_abstract_item::[LV_FAIL|LV_HARD_WARNING|...]
* @var string[] $pathsList
*/
$statusClass = ($testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING ? 'green' : 'red' );
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if (count($pathsList) === 0) { ?>
No addon site detected.
<?php } else { ?>
Detected addon sites, see the details section for the list of sites.<br>
<?php if ($testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING) { ?>
Normal installation generally does not interfere with these sites.
<?php } else { ?>
These sites are not deleted even if you have selected an action that removes the files before extracting them.
If there are other folders outside the home path that are necessary for the addon site to work, it will be removed
so pay attention in the event there are addon custom installations.
<?php
}
}
?>
</p>
<div class="sub-title">DETAILS</div>
<p>
An addon site is a WordPress installation in a subfolder of the current home path.
</p>
<?php if (count($pathsList) > 0) { ?>
<p>
<i>Addons Site Paths</i>
</p>
<ul>
<?php foreach ($pathsList as $path) { ?>
<li>
<b><?php echo $path; ?></b>
</li>
<?php
}
?>
</ul>
<?php } ?>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
The installer doesn't modify addon sites so their presence doesn't cause problems
but if you want to be sure you don't lose data it might be useful to make a backup of the addon site.
</li>
</ul>

View File

@@ -0,0 +1,46 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult
*/
switch ($testResult) {
case DUPX_Validation_test_archive_check::LV_PASS:
?>
<span class="dupx-pass">Archive file successfully detected.</span>
<?php
break;
case DUPX_Validation_test_archive_check::LV_SOFT_WARNING:
?>
<span class="dupx-fail" style="font-style:italic">
The archive file named above must be the <u>exact</u> name of the archive file placed in the root path (character for character).
But you can proceed with choosing Manual Archive Extraction.
</span>
<?php
break;
case DUPX_Validation_test_archive_check::LV_FAIL:
?>
<span class="dupx-fail" style="font-style:italic">
The archive file named above must be the <u>exact</u> name of the archive file placed in the root path (character for character).
When downloading the package files make sure both files are from the same package line. <br/><br/>
If the contents of the archive were manually transferred to this location without the archive file then simply create a temp file named with
the exact name shown above and place the file in the same directory as the installer.php file. The temp file will not need to contain any data.
Afterward, refresh this page and continue with the install process.
</span>
<?php
break;
default:
?>
Invalid test result value <?php
echo $testResult;
}

View File

@@ -0,0 +1,71 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult
* @var array{wpconfig: bool, htaccess: bool, other: bool} $configsCheck
*/
$statusClass = ($testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING ? 'green' : 'red' );
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING) { ?>
All configuration files are editable.
<?php } else { ?>
One or more configuration files cannot be edited, the list is in the details section
<?php } ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
This test verifies that the configuration files are editable.
Otherwise it is possible to continue with the installation but some settings will be disabled and
it will not be possible to modify the configuration file without write permissions.
</p>
<table class="margin-bottom-1">
<tbody>
<tr>
<td>
<b>wp-config.php</b>
</td>
<td>
<?php $testLv = $configsCheck['wpconfig'] ? DUPX_Validation_abstract_item::LV_PASS : DUPX_Validation_abstract_item::LV_FAIL; ?>
<span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($testLv); ?>"></span>
</td>
</tr>
<tr>
<td>
<b>.htaccess</b>
</td>
<td>
<?php $testLv = $configsCheck['htaccess'] ? DUPX_Validation_abstract_item::LV_PASS : DUPX_Validation_abstract_item::LV_FAIL; ?>
<span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($testLv); ?>"></span>
</td>
</tr>
<tr>
<td>
<b>Other configs</b><br>
[ web.config, php.ini, .user.ini ]
</td>
<td valign="top">
<?php $testLv = $configsCheck['other'] ? DUPX_Validation_abstract_item::LV_PASS : DUPX_Validation_abstract_item::LV_FAIL; ?>
<span class="status-badge right <?php echo DUPX_Validation_abstract_item::resultLevelToBadgeClass($testLv); ?>"></span>
</td>
</tr>
<tbody>
</table>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>If possible, via FTP or file manager, manually change the permissions of the conditioner files.</li>
<li>In case the home path does not have write or run permissions, add them manually.</li>
</ul>

View File

@@ -0,0 +1,30 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
$paramsManager = PrmMng::getInstance();
?><b>Deployment Path:</b> <i><?php echo DUPX_U::esc_html($paramsManager->getValue(PrmMng::PARAM_PATH_NEW)); ?></i>
<br/><br/>
The installer has detected that a WordPress site does not exist at the deployment path above.
This installer is currently in 'Database Only' mode because that is how the archive was created.
If core WordPress site files do not exist at the path above then they will need to be placed there in order for a WordPress site
to properly work. To continue choose one of these options:
<ol>
<li>Place this installer and archive at a path where core WordPress files already exist to hide this message. </li>
<li>Create a new package that includes both the database and the core WordPress files.</li>
<li>Ignore this message and install only the database (for advanced users only).</li>
</ol>
<small>
Note: This test simply looks for the directories <?php echo implode(', ', DUPX_Server::$wpCoreDirsList); ?> and a wp-config.php file.
If they are not found in the deployment path above then this notice is shown.
</small>

View File

@@ -0,0 +1,37 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var int $freeSpace
* @var int $requiredSpace
*/
?>
<div class="sub-title">STATUS</div>
<p>
<?php if ($isOk) : ?>
<span class="green">You have sufficient disk space on your machine to extract the archive.</span>
<?php else : ?>
<span class="maroon">You dont have sufficient disk space on your machine to extract the archive.</span>
<?php endif; ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
Duplicator needs at least enough disk space to be able to host the package file and the extracted files.<br>
The available free disk space is <b><?php echo $freeSpace; ?></b>, the required disk space should at least be <b><?php echo $requiredSpace; ?></b>.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>Ask your host to increase your disk space.</li>
<li>Back-up and remove all unnecessary files you have in the install directory to free up space.</li>
</ul>

View File

@@ -0,0 +1,43 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult validation rest result enum
* @var string[] $failMessages fail message
*/
$statusClass = ($testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING ? 'green' : 'maroon' );
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING) { ?>
The package has all the elements to be imported.
<?php } else { ?>
You are importing a <b>partial package</b>.<br>
A package with filtered elements could cause a malfunction of the current site.
<?php } ?>
</p>
<?php if (count($failMessages) > 0) { ?>
<div class="sub-title">DETAILS</div>
<ul>
<?php foreach ($failMessages as $failMessage) { ?>
<li><?php echo $failMessage; ?></li>
<?php } ?>
</ul>
<?php } ?>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
The package can be installed, only the files in the package will be overwritten, make sure they are compatible with the current website.
</li>
</ul>

View File

@@ -0,0 +1,43 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult int // DUPX_Validation_abstract_item::[LV_FAIL|LV_HARD_WARNING|...]
* @var string $importerVer
*/
$statusClass = ($testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING ? 'green' : 'red' );
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $statusClass; ?>">
<?php if ($testResult > DUPX_Validation_abstract_item::LV_SOFT_WARNING) { ?>
The version of Duplicator importer is compatible with the current package.
<?php } else { ?>
Version of Duplicator importer is old compared to version of current package.
<?php } ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
Importer version: <b><?php echo $importerVer; ?></b><br>
Package version: <b><?php echo DUPX_VERSION; ?></b>
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
The version of Duplicator in the importer site must be equal to or greater than the version with which the package was created.<br>
<b>Please update Duplicator to the latest version and restart the installation.</b>
</li>
<li>
In case it is not possible to update the plugin, it is possible to perform a classic installation by starting the installer directly
</li>
</ul>

View File

@@ -0,0 +1,25 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $managedHosting
* @var string $failMessage
* @var bool $isOk
*/
?><p>
Managed hosting <b><?php echo DUPX_U::esc_html($managedHosting); ?></b> detected. <br>
<?php if ($isOk) {
?><i class='green'>This managed hosting is supported. </i><?php
} else {
?><i class='red'><?php echo DUPX_U::esc_html($failMessage); ?></i><?php
}
?>
</p>

View File

@@ -0,0 +1,29 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
*/
?>
<p>
<?php
if ($isOk) {
?><span class="green">
The prefix of the existing WordPress configuration table is equal of the prefix of the table of the source site where the package was created.
</span><?php
} else {
?><span class="maroon">
The prefix of the existing WordPress configuration table does not match the prefix of the table of the source site where the package was created,
so the prefix will be changed to the managed hosting prefix.
</span><?php
}
?>
</p>

View File

@@ -0,0 +1,26 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
$paramsManager = PrmMng::getInstance();
?><p>
<b>Deployment Path:</b> <i><?php echo DUPX_U::esc_html($paramsManager->getValue(PrmMng::PARAM_PATH_NEW)); ?></i>
</p>
<p>
The installer has detected that the archive file has been extracted to the deployment path above. The installer is going
to skip the extraction process by default. If you want to re-extract the archive file, switch to "Advanced" mode, and
under "Options" > "Extraction Mode" choose the preferred extraction mode.
</p>
<small>
Note: This test looks for a file named <i>dup-manual-extract__[HASH]</i> in the <?php echo DUPX_U::esc_html(DUPX_INIT); ?> directory.
If the file exists then this notice is shown.
The <i>dup-manual-extract__[HASH]</i> file is created with every archive and removed once the install is complete. For more details on this process see the
<a href="<?php echo DUPX_Constants::FAQ_URL; ?>how-to-handle-various-install-scenarios" target="_blank">manual extraction FAQ</a>.
</small>

View File

@@ -0,0 +1,48 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $memoryLimit
* @var string $minMemoryLimit
* @var bool $isOk
*/
?>
<p>
<div class="sub-title">STATUS</div>
<p>
<?php if ($isOk) : ?>
<i class='green'>
The memory_limit has a value of <b>[<?php echo $memoryLimit; ?>]</b> which is higher or equal to the suggested minimum of
<b>[<?php echo $minMemoryLimit; ?>]</b>.
</i>
<?php else : ?>
<i class='red'>
The memory_limit has a value of <b>[<?php echo $memoryLimit; ?>]</b>
which is lower than the suggested minimum of <b>[<?php echo $minMemoryLimit; ?>]</b>.
</i>
<?php endif; ?>
</p>
<div class="sub-title">DETAILS</div>
<p>
</p>
The 'memory_limit' configuration in php.ini sets how much memory a script can use during its runtime.
When this value is lower than the suggested minimum of
<?php echo $minMemoryLimit; ?> the installer might run into issues.
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
Try Increasing the memory_limit.&nbsp;
<a href="<?php echo DUPX_Constants::FAQ_URL; ?>how-to-manage-server-resources-cpu-memory-disk" target="_blank">[Additional FAQ Help]</a>
</li>
</ul>

View File

@@ -0,0 +1,46 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
*/
?>
<div class="sub-title">STATUS</div>
<?php if ($isOk) : ?>
<p class="green">
You are not trying to install a subdomain multisite into a subdirectory.
</p>
<?php else : ?>
<p class="maroon">
You are trying to install subdomain multisite into a subdirectory which is not supported by WordPress.
</p>
<?php endif; ?>
<div class="sub-title">DETAILS</div>
<p>
Installing a subdomain multisite into a subdirectory (e.g. http://example.com/subdirectory) is not supported by WordPress.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<p>
If you still want to install the multisite in a subdirectory proceed with the installation as usual
and after finishing it manually edit the wp-config.php and database to turn your subdomain installation into a
subdirectory installation.
</p>
<ul>
<li>
<a href="https://www.plesk.com/blog/guides/change-wordpress-multisite-structure/">
Changing WP Multisite Structure From Subdomains To Subdirectories And Vice Versa
</a>
</li>
</ul>

View File

@@ -0,0 +1,13 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?><p>
Support for the PHP <a href='http://us2.php.net/manual/en/mysqli.installation.php' target='_blank'>mysqli extension</a> is required.
Please contact your hosting provider or server administrator to enable the mysqli extension. <i>The detection for this call uses
the function_exists('mysqli_connect') call.</i>
</p>

View File

@@ -0,0 +1,47 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $openBaseDirEnabled
* @var string[] $pathsOutsideOpenBaseDir
* @var bool $isOk
*/
?>
<p>
<b>Open BaseDir:</b>
<?php
if (!$openBaseDirEnabled) {
?><i class='green'>Disabled</i><?php
} elseif (empty($pathsOutsideOpenBaseDir)) {
?><i class='green'>Enabled</i><?php
} else {
?><i class='red'>Enabled</i><?php
}
?>
</p>
<?php if (!$openBaseDirEnabled) : ?>
The open_basedir configuration is disabled.
<?php elseif (empty($pathsOutsideOpenBaseDir)) : ?>
All required archive paths were found in the open_basedir path list.
<?php else : ?>
If <a href="http://php.net/manual/en/ini.core.php#ini.open-basedir" target="_blank">open_basedir</a> is enabled and you're
having issues getting your site to install properly please work with your host and follow these steps to prevent issues:
<ol style="margin:7px; line-height:19px">
<li>Disable the open_basedir setting in the php.ini file</li>
<li>If the host will not disable, then add the paths below to the open_basedir setting in the php.ini<br/>
<?php foreach ($pathsOutsideOpenBaseDir as $path) : ?>
<i class="maroon">"<?php echo DUPX_U::esc_html($path); ?>"</i><br>
<?php endforeach;?>
</li>
<li>Save the settings and restart the web server</li>
</ol>
<?php endif; ?>

View File

@@ -0,0 +1,35 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
$paramsManager = PrmMng::getInstance();
?><b>Deployment Path:</b> <i><?php echo DUPX_U::esc_html($paramsManager->getValue(PrmMng::PARAM_PATH_NEW)); ?></i>
<br/><br/>
Duplicator is in "Overwrite Install" mode because it has detected an existing WordPress site at the deployment path above. This mode allows for the installer
to be dropped directly into an existing WordPress site and overwrite its contents. Any content inside of the archive file
will <u>overwrite</u> the contents from the deployment path. To continue choose one of these options:
<ol>
<li>Ignore this notice and continue with the install if you want to overwrite this sites files.</li>
<li>Move this installer and archive to another empty directory path to keep this sites files.</li>
</ol>
<small style="color:maroon">
<b>Notice:</b> Existing content such as plugin/themes/images will still show-up after the install is complete if they did not already exist in
the archive file. For example if you have an SEO plugin in the current site but that same SEO plugin <u>does not exist</u> in the archive file
then that plugin will display as a disabled plugin after the install is completed. The same concept with themes and images applies. This will
not impact the sites operation, and the behavior is expected.
</small>
<br/><br/>
<small style="color:#025d02">
<b>Recommendation:</b> It is recommended you only overwrite WordPress sites that have a minimal setup (plugins/themes). Typically a fresh install or a
cPanel 'one click' install is the best baseline to work from when using this mode but is not required.
</small>

View File

@@ -0,0 +1,20 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $packageDays
* @var int $maxPackageDays
*/
?><p>
This package is <?php echo $packageDays; ?> day(s) old.
Packages older than <?php echo $maxPackageDays; ?> days might be considered stale. It is recommended to build a new
package unless your aware of the content and its data. This is message is simply a recommendation.
</p>

View File

@@ -0,0 +1,54 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var array<string, array{failLevel: int, pass: bool}> $extensionTests
*/
?>
<div class="sub-title">DETAILS</div>
<p>
PHP extensions are compiled libraries which enable specific functions to be used in your PHP code.
This test checks if some of the most widely used extensions are
installed on your server. Extensions with an asterisk (<i class='red'>*</i>) are required for the installer to work.
</p>
<ul class="tbl-list">
<?php foreach ($extensionTests as $extensionName => $extensionTest) : ?>
<li>
<b>
<?php echo $extensionName; ?>
<?php if ($extensionTest["failLevel"] < DUPX_Validation_abstract_item::LV_GOOD) : ?>
<i class='red'>*</i>
<?php endif; ?>:
</b>
<?php if ($extensionTest["pass"]) :?>
<i class='green'>Enabled</i>
<?php else : ?>
<i class='red'>Disabled</i>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<div class="sub-title">TROUBLESHOOT</div>
<p>
In case this test failed you have to install the required extension on your server or ask your hosting provider to
install it for you.
</p>
<ul>
<li>
<a href="https://www.webhostinghub.com/help/learn/website/how-tos/installing-php-extensions-pear">Installing PHP Extensions through the Cpanel</a>
</li>
<li>
<a href="https://linuxize.com/post/how-to-install-php-on-ubuntu-18-04/#installing-php-extensions">Installing PHP extensions on Linux</a>
</li>
</ul>

View File

@@ -0,0 +1,95 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
use Duplicator\Libs\Snap\FunctionalityCheck;
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult
* @var FunctionalityCheck[] $functionalities
*/
?>
<div class="sub-title">STATUS</div>
<?php
switch ($testResult) {
case DUPX_Validation_abstract_item::LV_PASS:
?>
<p class="green">
All classes and functions listed below, both essential and non-essential, are enabled on your system.
</p>
<?php
break;
case DUPX_Validation_abstract_item::LV_HARD_WARNING:
?>
<p class="maroon">
All required functions and classes are enabled on your system, but some of them that are non-essential are
disabled or not present on your server.
</p>
<?php
break;
case DUPX_Validation_abstract_item::LV_FAIL:
?>
<p class="maroon">
Some of required functions or classes are disabled or not present on your server.
</p>
<?php
break;
}
?>
<div class="sub-title">DETAILS</div>
<p>
List of functions and classes that should be enabled on your system:
</p>
<div class="s1-validate-flagged-tbl-list margin-bottom-1">
<table cellspacing="0" class="validation-results">
<thead>
<tr>
<td width="1">Functionality</td>
<td width="1">Required</td>
<td width="1">Result</td>
<td>Quick troubleshoot</td>
</tr>
</thead>
<tbody>
<?php foreach ($functionalities as $func) : ?>
<tr>
<td>
<?php echo ($func->getType() == FunctionalityCheck::TYPE_CLASS ? 'Class' : 'Function'); ?>
<a href="<?php echo $func->link; ?>" target="_blank">
<?php echo $func->getItemKey(); ?>
</a>
</td>
<td>
<?php echo ($func->isRequired() ? 'Yes' : 'No'); ?>
</td>
<td>
<span class="status-badge right <?php echo ($func->check() ? 'pass' : 'fail'); ?>"></span>
</td>
<td style="white-space: normal;">
<?php
echo $func->troubleshoot;
?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
Contact your hosting provider and ask them to enable required functions and classes.
You can also read specifics related to each function in the
<a href="<?php echo DUPX_Constants::FAQ_URL; ?>how-to-fix-call-to-undefined-function-errors"
target="_blank">FAQ section</a>.
</li>
</ul>

View File

@@ -0,0 +1,49 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $fromPhp
* @var string $toPhp
* @var bool $isOk
*/
?>
<div class="sub-title">STATUS</div>
<p class="<?php echo $isOk ? 'green' : 'red'; ?>" >
<b style=''>You are migrating site from PHP <?php echo $fromPhp; ?> to PHP <?php echo $toPhp; ?></b>
</p>
<div class="sub-title">DETAILS</div>
<p>
If the PHP version of your website is different than the PHP version of your package it <i>may</i> cause problems with the
functioning of your website.
</p>
<?php if (intval($toPhp) === 8) : ?>
<p>
In case you are migrating your website from an older version of PHP to
<a href="https://www.php.net/releases/8.0/en.php" target="blank">PHP 8.x</a> there is a relatively high probability
that some plugins or themes will not be compatible and may cause the overall website to not work.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
We suggest proceeding in the "Advanced" mode and at Step 3 of the installation process under the "Plugins" tab
uncheck all plugins. In this way all plugins will be deactivated after the migration and you can then activate them
one-by-one to make sure everything works properly and be able to isolate offending plugins.
</li>
<li>
In case you are still experiencing issues after applying the fix above, the most likely cause of that is that
the active theme is not compatible with the new version of PHP. In this case too, it is suggested to
<a href="https://mediatemple.net/community/products/grid/360022440131/how-to-deactivate-a-wordpress-theme-for-troubleshooting"
target="_blank">deactivate the theme</a> to debug the issue.
</li>
</ul>
<?php endif; ?>

View File

@@ -0,0 +1,63 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult
* @var string|false $importPage
* @var string|false $recoveryPage
* @var bool $recoveryIsOutToDate
* @var int $recoveryPackageLife
*/
switch ($testResult) {
case DUPX_Validation_test_recovery::LV_GOOD:
?>
<b>Recovery URL:</b> <i class="green"> is valid. </i>
<?php
break;
case DUPX_Validation_test_recovery::LV_SOFT_WARNING:
?>
The Recovery Point is set but was created <b class="maroon" ><?php echo $recoveryPackageLife; ?> hours ago.</b>
<p>
In case of an error and subsequent restore all changes created after the restore point will be lost.
</p>
<?php
break;
case DUPX_Validation_test_recovery::LV_HARD_WARNING:
default:
?><b class="maroon">
<i class="fas fa-exclamation-triangle"></i> The Recovery Point is not set!
</b>
<p>You can continue but in the event you run into an install issue/error you will not be able to restore the current site. In some cases
this might be desirable. For example:
</p>
<ul>
<li>This is a completely blank WordPress site and getting it back is simple.</li>
<li>Losing access to this site is no big deal and you know how to restore things on your own.</li>
</ul>
</i>
<?php
break;
}
?>
<div class="sub-title">DETAILS</div>
<p>
Package age: <?php echo $recoveryPackageLife; ?> hours
</p>
<p>
<b>You can
<?php if (!$importPage) { ?>
go back
<?php } else { ?>
<a href="<?php echo DUPX_U::esc_attr($importPage) ?>" target="_parent" >go back</a>
<?php } ?>
and set a new Recovery Point.</b>
</p>

View File

@@ -0,0 +1,37 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var bool $isOk
* @var string $meessage
*/
?>
<p class="maroon">
The installer will not perform replacements on database PATHs but only on URLs.
</p>
<div class="sub-title">DETAILS</div>
<?php if (!empty($message)) : ?>
<p>
<?php echo $message; ?>
</p>
<?php endif; ?>
<p>
Usually the database does not contain significant references to paths, so you can continue with the installation,
but some plugins may write absolute paths in the database and there may be some malfunctions.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<p>
If you experience any issues after the install you will have to manually replace paths in the database using phpMyAdmin or similar tools.
</p>

View File

@@ -0,0 +1,65 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $errorMessage
* @var string $restUrl
* @var bool $isOk
*/
?>
<div class="sub-title">STATUS</div>
<?php if ($isOk) : ?>
<p class="green" >
<b>Successfully did a test REST API call to the WordPress backend.</b>
</p>
<?php else : ?>
<p class="red" >
<b>REST API call failed with the following message:</b> <?php echo $errorMessage; ?>
</p>
<?php endif; ?>
<div class="sub-title">DETAILS</div>
<p>
This test makes sure the
<a href="https://developer.wordpress.org/rest-api/" target="_blank">WordPress REST API</a>
works properly, which is necessary to create new subsites.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<p>
Some of the possible reasons why the WordPress REST API test might fail are the following:
</p>
<ul>
<li>
<b>The rest API is disabled on WordPress.</b>
To test whether the REST API works properly please visit the <a href="<?php echo DUPX_U::esc_attr($restUrl) ?>" target="_blank">following address</a>
and make sure you get a valid JSON output.
In case you don't get a JSON output, please make sure that you have permalinks enabled. Under "Settings" > "Permalinks" the
setting should not be set to "Plain".
</li>
<li>
<b>SSL certificates are expired or invalid.</b>
If this is the case please get in touch with your hosting provider to get everything working and up-to-date.
</li>
<li>
<b>Basic Auth Authentication is enabled.</b>
If you have basic auth enabled, please go to "Duplicator Pro" > "Settings" > "Packages" > "Advanced Settings" and
set the "Basic Auth" option to enabled and enter the username and password. After saving the settings restart the import process.
</li>
<li>
For more information on the topic please check out the
<a href="https://developer.wordpress.org/rest-api/frequently-asked-questions/" target="_blank">
<b>REST API FAQ</b>
</a>.
</li>
</ul>

View File

@@ -0,0 +1,37 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $fromPhp
* @var string $toPhp
* @var bool $isOk
*/
?>
<div class="sub-title">STATUS</div>
<p class="red" >
<b>You are installing on a SiteGround server.</b>
</p>
<div class="sub-title">DETAILS</div>
<p>
To overcome errors while extracting ZipArchive on SiteGround Server throttling has been automatically enabled.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
In case you still get errors during the extraction please try switching the "Extraction Mode" to
"Shell Exec Zip" in Advanced mode under the "Options" section.
</li>
<li>
If the above doesn't work either, please consider creating a new package on the source using the DAF archive format.
</li>
</ul>

View File

@@ -0,0 +1,43 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $archiveSize
* @var string $maxSize
* @var bool $maxTimeZero
* @var int $maxTimeIni
* @var bool $isOk
*/
?><p>
<b>Archive Size:</b> <?php echo $archiveSize; ?> <small>(detection limit is set at <?php echo $maxSize; ?>)</small><br/>
<b>PHP max_execution_time:</b> <?php echo $maxTimeIni; ?> <small>(zero means not limit)</small><br/>
<b>PHP set_time_limit:</b> <?php
if ($maxTimeZero) {
?><i class='green'>Success</i><?php
} else {
?><i class='red'>Failed</i><?php
}
?>
</p>
<p>
The PHP <a href="http://php.net/manual/en/info.configuration.php#ini.max-execution-time" target="_blank">max_execution_time</a>
setting is used to determine how long a PHP process is allowed to run.
If the setting is too small and the archive file size is too large then PHP may not have enough
time to finish running before the process is killed causing a timeout.
</p>
<p>
Duplicator Pro attempts to turn off the timeout by using the
<a href="http://php.net/manual/en/function.set-time-limit.php" target="_blank">set_time_limit</a> setting.
If this notice shows as a warning then it is still safe to continue with the install.
However, if a timeout occurs then you will need to consider working with the max_execution_time setting or extracting the
archive file using the 'Manual Archive Extraction' method. &nbsp;
<a href="<?php echo DUPX_Constants::FAQ_URL; ?>how-to-handle-server-timeout-issues" target="_blank">[Additional FAQ Help]</a>
</p>

View File

@@ -0,0 +1,37 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $wordFencePath
*/
?>
<div class="sub-title">STATUS</div>
<p class="maroon"> A Wordfence firewall instance was detected at <b><?php echo DUPX_U::esc_html($wordFencePath); ?></b>. </p>
<div class="sub-title">DETAILS</div>
<p>
The Wordfence Web Application Firewall is a PHP based, application level firewall that filters out malicious
requests to your site. Sometimes Wordfence returns false positives on requests done during the installation process,
because of which it might fail.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<p>
We recommend turning off the Wordfence firewall of the WordPress instance located at "<?php echo DUPX_U::esc_html($wordFencePath); ?>"
during the installation process and reactivate it after the migration is completed. To deactivate the firewall follow these steps:
</p>
<ol>
<li>Go to WordPress Admin Dashboard Wordfence Firewall and click on the "Manage WAF".</li>
<li>Choose Web Application Firewall Status to the "Disabled" option.</li>
<li>Click on the "SAVE CHANGES" button and save the changed settings.</li>
<li>Wait for the changes to take place</li>
</ol>

View File

@@ -0,0 +1,11 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<div class="sub-title">STATUS</div>
<p class="green"> Having Wordfence in a parent site can interfere with the install, however no such condition was detected. </p>

View File

@@ -0,0 +1,46 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var int $testResult Enum result test
* @var string $configPath Old wp config path
*/
?>
<div class="sub-title">STATUS</div>
<?php if ($testResult == DUPX_Validation_abstract_item::LV_PASS) { ?>
<p class="green">
Old <b>wp-config</b> is valid.
</p>
<?php } else { ?>
<p class="maroon">
There seem to be an issue with parsing your old <b>wp-config</b> file. A new one will be created.
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<div class="margin-bottom-1" >
<?php DUPX_U_Html::getLightBoxFileContent('Old wp-config.php', 'OLD WP-CONFIG.PHP', $configPath); ?>
</div>
<p>
The installer can only modify a standard wp-config.php that contains the database access constants and is correctly formed.
It cannot modify custom wp-config.php that, for example, includes other files in which database connection information is written.
In this case, the installation can continue normally by generating a new wp-config.php from wp-config-sample.php,
and the original wp-config.php will be lost.
</p>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
Check if you have not made any adjustments to your wp-config and removed the database constants.
</li>
<li>
Check with your hosting provider if they handle the wp-config differently form the standard WordPress wp-config.
</li>
</ul>

View File

@@ -0,0 +1,134 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Libs\Shell\Shell;
/**
* Variables
*
* @var int $testResult DUPX_Validation_abstract_item::[LV_FAIL|LV_HARD_WARNING|...]
* @var string[] $faildDirPerms
* @var array<int, array{pass: bool, message: string, dir: string}> $phpPerms
*/
?>
<div class="sub-title">STATUS</div>
<?php if ($testResult < DUPX_Validation_abstract_item::LV_GOOD) { ?>
<p class="red">
Some folders do not have write permission, see details for more information.
</p>
<?php } else { ?>
<p class="green">
Write permissions granted for WordPress core directories.
</p>
<?php } ?>
<div class="sub-title">DETAILS</div>
<table>
<tr>
<td>
Deployment Path:
</td>
<td>
<b><?php echo DUPX_U::esc_html(PrmMng::getInstance()->getValue(PrmMng::PARAM_PATH_NEW)); ?></b>
</td>
</tr>
<tr>
<td>
Check folders permission:
</td>
<td>
<?php
if (count($faildDirPerms) == 0) {
?><i class='green'>All existing folders have write permissions</i><?php
} else {
?><i class='red'>Some folders do not have write permissions</i><?php
}
?>
</td>
</tr>
<?php foreach ($phpPerms as $phpTest) { ?>
<tr>
<td>
PHP files extraction on <b><?php echo basename($phpTest['dir']); ?></b>:
</td>
<td>
<?php if ($phpTest['pass']) { ?>
<span class="green">Pass</span>
<?php } else { ?>
<span class="red"><?php echo $phpTest['message']; ?></span>
<?php } ?>
</tr>
<?php } ?>
<tr>
<td>
Suhosin Extension:
</td>
<td>
<?php
if (!Shell::isSuhosinEnabled()) {
?><i class='green'>Disabled</i><?php
} else {
?><i class='red'>Enabled</i><?php
}
?>
</td>
</tr>
<tr>
<td>
PHP Safe Mode:
</td>
<td>
<?php
if (!DUPX_Server::phpSafeModeOn()) {
?><i class='green'>Disabled</i><?php
} else {
?><i class='red'>Enabled</i><?php
}
?>
</td>
</tr>
</table>
<?php if (count($faildDirPerms) > 0) { ?>
<p>
<b>Overwrite fails for these folders (change permissions or remove then restart):</b>
</p>
<div class="validation-iswritable-failes-objects">
<pre><?php
foreach ($faildDirPerms as $failedPath) {
echo '- ' . DUPX_U::esc_html($failedPath) . "\n";
}
?></pre>
</div>
<?php } ?>
<div class="sub-title">TROUBLESHOOT</div>
<ul>
<li>
If there are problems with permissions (not writable files or folders) try to change the permissions to 755 for folders or 644 for files.
<a href="https://en.wikipedia.org/wiki/File-system_permissions" target="_blank">
Here you can find general information about File-system permissions.
</a>
</li>
<li>
Generally if the folders have write permissions but it is not possible to extract the PHP files,
the cause could be an external security service like "Imunify 360".
If this is the case <a href="<?php echo DUPX_Constants::FAQ_URL; ?>how-to-fix-installer-archive-extraction-issues" target="_blank">
deactivate the checks
</a>
temporarily, and run the installation again.
</li>
<li>
Check
<a href="<?php echo DUPX_Constants::FAQ_URL; ?>how-to-fix-installer-archive-extraction-issues" target="_blank">
our online documentation
</a>
</li>
</ul>

View File

@@ -0,0 +1,25 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<div id="validate-area-header" class="hdr-sub1 toggle-hdr open" data-type="toggle" data-target="#validate-area">
<a id="validate-area-link">
<i class="fa fa-plus-square"></i>Validation
</a>
<span id="validate-global-badge-status" class="status-badge right wait" ></span>
</div>
<div id="validate-area" class="hdr-sub1-area show-warnings no-display" >
<div id="validation-result" >
<?php dupxTplRender('parts/validation/validate-noresult'); ?>
</div>
<div class='info'>
<i class="fas fa-exclamation-circle fa-sm"></i> The system validation checks help to make sure the system is ready for install. <br/>
During installation the website will be in maintenance mode and not accessible for users.
</div>
<?php dupxTplRender('pages-parts/step1/actions/hwarn-accept'); ?>
</div>

View File

@@ -0,0 +1,12 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
?>
<div id="validate-no-result" class="text-center" >
<p><b><i class="far fa-check-circle"></i> Not validated yet, please click validate button.</b></p>
</div>

View File

@@ -0,0 +1,34 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var string $category
* @var string $title
*/
$vManager = DUPX_Validation_manager::getInstance();
$tests = $vManager->getTestsCategory($category);
?>
<div class="category-wrapper" >
<div class="header" >
<div class="category-title" >
<?php echo DUPX_U::esc_html($title); ?>
<span class="status-badge right <?php echo $vManager->getCagegoryBadge($category); ?>"></span>
</div>
</div>
<div class="category-content" >
<?php
foreach ($tests as $test) {
dupxTplRender('parts/validation/validation-test', array('test' => $test));
}
?>
</div>
</div>

View File

@@ -0,0 +1,39 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
use Duplicator\Installer\Core\Params\PrmMng;
/**
* Variables
*
* @var DUPX_Validation_manager $validationManager
*/
?>
<div class="clearfix" >
<?php PrmMng::getInstance()->getHtmlFormParam(PrmMng::PARAM_VALIDATION_SHOW_ALL); ?>
</div>
<?php
dupxTplRender('parts/validation/validation-category', array(
'title' => 'General',
'category' => DUPX_Validation_manager::CAT_GENERAL,
));
dupxTplRender('parts/validation/validation-category', array(
'title' => 'File System',
'category' => DUPX_Validation_manager::CAT_FILESYSTEM,
));
dupxTplRender('parts/validation/validation-category', array(
'title' => 'PHP config',
'category' => DUPX_Validation_manager::CAT_PHP,
));
dupxTplRender('parts/validation/validation-category', array(
'title' => 'Database',
'category' => DUPX_Validation_manager::CAT_DATABASE,
));
DUPX_U_Html::js();

View File

@@ -0,0 +1,34 @@
<?php
/**
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
use Duplicator\Installer\Core\Params\PrmMng;
defined('ABSPATH') || defined('DUPXABSPATH') || exit;
/**
* Variables
*
* @var DUPX_Validation_abstract_item $test
*/
if (!$test->display()) {
return;
}
$validationLevel = PrmMng::getInstance()->getValue(PrmMng::PARAM_VALIDATION_LEVEL);
$open = ($test->test() <= DUPX_Validation_abstract_item::LV_HARD_WARNING && $test->test() <= $validationLevel);
$icon = $open ? 'fa-caret-down' : 'fa-caret-right';
?>
<div class="test-wrapper <?php echo $test->getUniqueSelector(); ?> <?php echo $test->getBadgeClass(); ?>" >
<div class="test-title" >
<i class="fa <?php echo $icon; ?>"></i> <?php echo DUPX_U::esc_html($test->getTitle()); ?>
<span class="status-badge right <?php echo $test->getBadgeClass(); ?>"></span>
</div>
<div class="test-content <?php echo $open ? '' : 'no-display'; ?>" >
<?php echo $test->getContent(); ?>
</div>
</div>