Edit file File name : class.plugin.upgrade.php Content :<?php /** * * @package Duplicator * @copyright (c) 2023, Snap Creek LLC */ use Duplicator\Controllers\WelcomeController; use Duplicator\Core\Upgrade\UpgradeFunctions; defined('ABSPATH') || defined('DUPXABSPATH') || exit; /** * Upgrade/Install logic of plugin resides here */ class DUP_LITE_Plugin_Upgrade { const DUP_VERSION_OPT_KEY = 'duplicator_version_plugin'; const PLUGIN_INSTALL_INFO_OPT_KEY = 'duplicator_install_info'; /** * version starting from which the welcome page is shown */ const DUP_WELCOME_PAGE_VERSION = '1.5.3'; /** * wp_options key containing info about when the plugin was activated */ const DUP_ACTIVATED_OPT_KEY = 'duplicator_activated'; /** * Called as part of WordPress register_activation_hook * * @return void */ public static function onActivationAction() { //NEW VS UPDATE if (($oldDupVersion = get_option(self::DUP_VERSION_OPT_KEY, false)) === false) { self::newInstallation(); } else { self::updateInstallation($oldDupVersion); } DUP_Settings::Save(); //Init Database & Backup Directories self::updateDatabase(); DUP_Util::initSnapshotDirectory(); do_action('duplicator_after_activation'); } /** * Update install info. * * @param string $oldVersion The last/previous installed version, is empty for new installs * * @return array{version:string,time:int,updateTime:int} */ protected static function setInstallInfo($oldVersion = '') { if (empty($oldVersion) || ($installInfo = get_option(self::PLUGIN_INSTALL_INFO_OPT_KEY, false)) === false) { // If is new installation or install info is not set generate new install info $installInfo = array( 'version' => DUPLICATOR_VERSION, 'time' => time(), 'updateTime' => time(), ); } else { $installInfo['updateTime'] = time(); } if (($oldInfos = get_option(self::DUP_ACTIVATED_OPT_KEY, false)) !== false) { // Migrate the previously used option to install info and remove old option if exists $installInfo['version'] = $oldVersion; $installInfo['time'] = $oldInfos['lite']; delete_option(self::DUP_ACTIVATED_OPT_KEY); } delete_option(self::PLUGIN_INSTALL_INFO_OPT_KEY); update_option(self::PLUGIN_INSTALL_INFO_OPT_KEY, $installInfo, false); return $installInfo; } /** * Get install info. * * @return array{version:string,time:int,updateTime:int} */ public static function getInstallInfo() { if (($installInfo = get_option(self::PLUGIN_INSTALL_INFO_OPT_KEY, false)) === false) { $installInfo = self::setInstallInfo(); } return $installInfo; } /** * Runs only on new installs * * @return void */ protected static function newInstallation() { UpgradeFunctions::performUpgrade(false, DUPLICATOR_VERSION); //WordPress Options Hooks update_option(self::DUP_VERSION_OPT_KEY, DUPLICATOR_VERSION); update_option(WelcomeController::REDIRECT_OPT_KEY, true); self::setInstallInfo(); } /** * Run only on update installs * * @param string $oldVersion The last/previous installed version * * @return void */ protected static function updateInstallation($oldVersion) { UpgradeFunctions::performUpgrade($oldVersion, DUPLICATOR_VERSION); //WordPress Options Hooks update_option(self::DUP_VERSION_OPT_KEY, DUPLICATOR_VERSION); self::setInstallInfo($oldVersion); } /** * Runs for both new and update installs and creates the database tables * * @return void */ protected static function updateDatabase() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $table_name = $wpdb->prefix . "duplicator_packages"; //PRIMARY KEY must have 2 spaces before for dbDelta to work //see: https://codex.wordpress.org/Creating_Tables_with_Plugins $sql = "CREATE TABLE `{$table_name}` ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(250) NOT NULL, hash VARCHAR(50) NOT NULL, status INT(11) NOT NULL, created DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', owner VARCHAR(60) NOT NULL, package LONGTEXT NOT NULL, PRIMARY KEY (id), KEY hash (hash)) {$charset_collate}"; $abs_path = duplicator_get_abs_path(); require_once($abs_path . '/wp-admin/includes/upgrade.php'); @dbDelta($sql); } } Save