38217-vm/wp-content/plugins/mainwp-child/class/class-mainwp-child-db-updater.php
2026-02-05 17:08:59 +03:00

144 lines
4.3 KiB
PHP

<?php
/**
* MainWP Database Updater
*
* MainWP MainWP Database Updater extension handler.
* Extension URL: https://mainwp.com/extension/databaseupdater/
*
* @package MainWP\Child
*/
namespace MainWP\Child;
/**
* Class MainWP_Child_DB_Updater
*
* MainWP Database Updater extension handler.
*/
class MainWP_Child_DB_Updater {
/**
* Public static variable to hold the single instance of the class.
*
* @var mixed Default null
*/
public static $instance = null;
/**
* Method instance()
*
* Create a public static instance.
*
* @return mixed Class instance.
*/
public static function instance() {
if ( null === static::$instance ) {
static::$instance = new self();
}
return static::$instance;
}
/**
* Constructor.
*
* Run any time class is called.
*
* @return void
*/
public function __construct() {
add_filter( 'mainwp_site_sync_others_data', array( $this, 'sync_others_data' ), 10, 2 );
MainWP_Child_DB_Updater_WC::instance();
MainWP_Child_DB_Updater_Elementor::instance();
}
/**
* Method sync_others_data()
*
* Sync data to & from the MainWP Dashboard.
*
* @param array $information Array containing the data to be sent to the Dashboard.
* @param array $data Array containing the data sent from the Dashboard; to be saved to the Child Site.
*
* @return array $information Array containing the data to be sent to the Dashboard.
*/
public function sync_others_data( $information, $data = array() ) {
if ( isset( $data['syncDBUpdater'] ) && $data['syncDBUpdater'] ) {
try {
$information['syncDBUpdaterResponse'] = array(
'plugin_db_upgrades' => $this->get_sync_data(),
);
} catch ( MainWP_Exception $e ) {
// ok!
}
}
return $information;
}
/**
* Method action()
*
* Fire off certain branding actions.
*
* @uses MainWP_Child_Branding::update_branding() Update custom branding settings.
* @uses \MainWP\Child\MainWP_Helper::write()
*/
public function action() {
$information = array();
MainWP_Child_DB_Updater_WC::instance()->requires_files();
try {
$mwp_action = MainWP_System::instance()->validate_params( 'mwp_action' );
if ( 'update_db' === $mwp_action ) {
$information = $this->update_db();
}
} catch ( MainWP_Exception $e ) {
$information['error'] = $e->getMessage();
}
MainWP_Helper::write( $information );
}
/**
* Get sync data.
*/
public function get_sync_data() {
return apply_filters( 'mainwp_child_db_updater_sync_data', array() );
}
/**
* Method update_db()
*
* Update DB.
*
* @return array Action result.
*/
public function update_db() {
$information = array();
// phpcs:disable WordPress.Security.NonceVerification
$plugins = isset( $_POST['list'] ) ? explode( ',', urldecode( wp_unslash( $_POST['list'] ) ) ) : array(); // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
// phpcs:enable
$upgrades = array();
foreach ( $plugins as $slug ) {
$success = false;
switch ( $slug ) {
case 'woocommerce/woocommerce.php':
$success = MainWP_Child_DB_Updater_WC::instance()->update_db();
break;
case 'elementor/elementor.php':
$success = MainWP_Child_DB_Updater_Elementor::instance()->update_db();
break;
case 'elementor-pro/elementor-pro.php':
$success = MainWP_Child_DB_Updater_Elementor::instance()->update_db( true );
break;
default:
break;
}
if ( $success ) {
$upgrades[ $slug ] = 1;
}
}
$information['upgrades'] = $upgrades;
$information['plugin_db_upgrades'] = $this->get_sync_data();
return $information;
}
}