File ManagerCurrent Directory: wp-content/plugins/wp-migrate-db/class/Common/CompatibilityLinux appserver-0d5e4f1e-php-cc8da225320a42ba9b7d66cba40b1f03 6.6.123+ #1 SMP PREEMPT_DYNAMIC Wed Mar 11 09:04:28 UTC 2026 x86_64Edit File: CompatibilityManager.php <?php namespace DeliciousBrains\WPMDB\Common\Compatibility; use DeliciousBrains\WPMDB\Common\Filesystem\Filesystem; use DeliciousBrains\WPMDB\Common\Http\Helper; use DeliciousBrains\WPMDB\Common\Http\Http; use DeliciousBrains\WPMDB\Common\Http\WPMDBRestAPIServer; use DeliciousBrains\WPMDB\Common\MigrationState\MigrationStateManager; use DeliciousBrains\WPMDB\Common\Properties\Properties; use DeliciousBrains\WPMDB\Common\Settings\Settings; use DeliciousBrains\WPMDB\Common\UI\Notice; use DeliciousBrains\WPMDB\Common\UI\TemplateBase; use DeliciousBrains\WPMDB\Common\Util\Util; /** * Class CompatibilityManager * * Class to handle the copying and removing of the Compatibility Mode MU plugin for WP Migrate DB Pro * */ class CompatibilityManager { /** * @var string */ public $mu_plugin_source; /** * @var string */ public $mu_plugin_dest; /** * @var Filesystem */ public $filesystem; /** * @var */ public $settings; /** * @var string */ public $compatibility_plugin_version; /** * @var string */ public $mu_plugin_dir; /** * @var Properties */ public $props; /** * @var Properties */ public static $static_props; /** * @var Notice */ public $notices; /** * @var TemplateBase */ public $template; /** * @var Http */ public $http; /** * @var MigrationStateManager */ public $migration_state; /** * @var WPMDBRestAPIServer */ private $rest_API_server; /** * @var Helper */ private $http_helper; /** * @var Util */ private $util; public function __construct( Filesystem $filesystem, Settings $settings, Notice $notice, Http $http, Helper $http_helper, TemplateBase $template, MigrationStateManager $migration_state, Util $util, Properties $properties, WPMDBRestAPIServer $rest_API_server ) { $this->filesystem = $filesystem; $this->settings = $settings->get_settings(); $this->props = $properties; self::$static_props = $this->props; $this->template = $template; $this->notices = $notice; $this->http = $http; $this->migration_state = $migration_state; $this->util = $util; //Version of the compatibility plugin, to force an update of the MU plugin, increment this value $this->compatibility_plugin_version = '1.3'; $this->mu_plugin_dir = $this->props->mu_plugin_dir; $this->mu_plugin_source = $this->props->mu_plugin_source; $this->mu_plugin_dest = $this->props->mu_plugin_dest; $this->http_helper = $http_helper; } public function register() { // Checks the compatibility mode MU plugin version and updates if it's out of date. add_action( 'admin_init', array( $this, 'muplugin_version_check' ), 1 ); // Fired in the register_deactivation_hook() call in both the pro and non-pro plugins. add_action( 'wp_migrate_db_remove_compatibility_plugin', array( $this, 'remove_muplugin_on_deactivation' ) ); } public function addNotices(){ add_filter('wpmdb_notification_strings', array($this, 'template_muplugin_update_fail')); } /** * Triggered with the `admin_init` hook on the WP Migrate DB Pro dashboard page * * The 'compatibility_plugin_version' option key signifies that the latest compatibility plugin has been installed. If it's not present, copy the plugin, enabling it by default. * * Otherwise check the 'compatibility_plugin_version' option to see if the MU plugin needs updating. * * @return bool|string */ public function muplugin_version_check() { if ( isset( $_GET['page'] ) && in_array( $_GET['page'], array( 'wp-migrate-db-pro', 'wp-migrate-db' ) ) ) { if ( true === $this->is_muplugin_update_required() ) { return $this->copy_muplugin(); } } return false; } /** * Checks if the compatibility mu-plugin requires an update based on the 'compatibility_plugin_version' setting in * the database * * @param bool $wpmdb_settings * * @return bool */ public function is_muplugin_update_required( $wpmdb_settings = false ) { $update_required = false; if ( false === $wpmdb_settings ) { $wpmdb_settings = $this->settings; } if ( ! isset( $wpmdb_settings['compatibility_plugin_version'] ) ) { $update_required = true; } else if ( version_compare( $this->compatibility_plugin_version, $wpmdb_settings['compatibility_plugin_version'], '>' ) && $this->util->is_muplugin_installed() ) { $update_required = true; } return $update_required; } /** * Preemptively shows a warning warning on WPMDB pages if the mu-plugins folder isn't writable */ function template_muplugin_update_fail($notifications) { if ( $this->is_muplugin_update_required() && false === $this->util->is_muplugin_writable() ) { $notice_id = 'muplugin_failed_update_' . $this->compatibility_plugin_version; $notice_links = $this->notices->check_notice( $notice_id, 'SHOW_ONCE' ); if ( is_array( $notice_links ) ) { $notifications[$notice_id] = [ 'message' => $this->template->template_to_string('muplugin-failed-update-warning', 'common', $notice_links), 'link' => $notice_links, 'id' => $notice_id, ]; } } return $notifications; } /** * * Copies the compatibility plugin as well as updates the version number in the database * * @return bool|string */ public function copy_muplugin() { $wpmdb_settings = $this->settings; if ( ! $this->filesystem->mkdir( $this->mu_plugin_dir ) || ! $this->filesystem->copy( $this->mu_plugin_source, $this->mu_plugin_dest ) ) { return sprintf( __( 'The compatibility plugin could not be activated because your mu-plugin directory is currently not writable. Please update the permissions of the mu-plugins folder: %s', 'wp-migrate-db' ), $this->mu_plugin_dir ); } //Rename muplugin in header if ( ! $this->props->is_pro ) { $mu_contents = file_get_contents( $this->mu_plugin_dest ); $mu_contents = str_replace( 'Plugin Name: WP Migrate Compatibility', 'Plugin Name: WP Migrate DB Compatibility', $mu_contents ); file_put_contents( $this->mu_plugin_dest, $mu_contents ); } if ( $this->is_muplugin_update_required() ) { // Update version number in the database $wpmdb_settings['compatibility_plugin_version'] = $this->compatibility_plugin_version; // Remove blacklist_plugins key as it's no longer used. if ( isset( $wpmdb_settings['blacklist_plugins'] ) ) { unset( $wpmdb_settings['blacklist_plugins'] ); } update_site_option( 'wpmdb_settings', $wpmdb_settings ); } return true; } /** * * Removes the compatibility plugin * * @return bool|string */ public function remove_muplugin() { if ( $this->filesystem->file_exists( $this->mu_plugin_dest ) && ! $this->filesystem->unlink( $this->mu_plugin_dest ) ) { return sprintf( __( 'The compatibility plugin could not be deactivated because your mu-plugin directory is currently not writable. Please update the permissions of the mu-plugins folder: %s', 'wp-migrate-db' ), $this->mu_plugin_dir ); } return true; } /** * * Fired on the `wp_migrate_db_remove_compatibility_plugin` action. Removes the compatibility plugin on deactivation * * @return bool|string */ public function remove_muplugin_on_deactivation() { $plugin_removed = $this->remove_muplugin(); if ( true === $plugin_removed ) { $wpmdb_settings = $this->settings; unset( $wpmdb_settings['compatibility_plugin_version'] ); update_site_option( 'wpmdb_settings', $wpmdb_settings ); return true; } return $plugin_removed; } } Upload File Directory Listing NameTypeSizeActions.. (Parent Directory)DirCompatibility.phpFile9.51 KB Rename | Delete | EditCompatibilityManager.phpFile7.50 KB Rename | Delete | Edit