289 lines
7.5 KiB
PHP
289 lines
7.5 KiB
PHP
<?php
|
|
/**
|
|
* This file handles the site restore functionality.
|
|
*
|
|
* @package GP Premium
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // No direct access, please.
|
|
}
|
|
|
|
/**
|
|
* Restore previous site.
|
|
*/
|
|
class GeneratePress_Sites_Restore {
|
|
/**
|
|
* Instance.
|
|
*
|
|
* @access private
|
|
* @var object Instance
|
|
* @since 1.9
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* Initiator.
|
|
*
|
|
* @since 1.9
|
|
* @return object initialized object of class.
|
|
*/
|
|
public static function get_instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Get it going.
|
|
*/
|
|
public function __construct() {
|
|
add_action( 'wp_ajax_generate_restore_theme_options', array( $this, 'theme_options' ) );
|
|
add_action( 'wp_ajax_generate_restore_site_options', array( $this, 'site_options' ) );
|
|
add_action( 'wp_ajax_generate_restore_content', array( $this, 'content' ) );
|
|
add_action( 'wp_ajax_generate_restore_plugins', array( $this, 'plugins' ) );
|
|
add_action( 'wp_ajax_generate_restore_widgets', array( $this, 'widgets' ) );
|
|
add_action( 'wp_ajax_generate_restore_css', array( $this, 'css' ) );
|
|
add_action( 'wp_ajax_generate_restore_site_clean_up', array( $this, 'clean_up' ) );
|
|
}
|
|
|
|
/**
|
|
* Restore theme options.
|
|
*/
|
|
public function theme_options() {
|
|
check_ajax_referer( 'generate_sites_nonce', 'nonce' );
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
wp_send_json_error( __( 'You are not allowed to perform this action', 'gp-premium' ) );
|
|
return; // Just in case.
|
|
}
|
|
|
|
$backup_data = get_option( '_generatepress_site_library_backup', array() );
|
|
|
|
if ( ! empty( $backup_data ) ) {
|
|
|
|
if ( ! empty( $backup_data['theme_options']['mods'] ) ) {
|
|
remove_theme_mods();
|
|
}
|
|
|
|
if ( ! empty( $backup_data['theme_options']['options'] ) ) {
|
|
$option_keys = array(
|
|
'generate_settings',
|
|
'generate_background_settings',
|
|
'generate_blog_settings',
|
|
'generate_hooks',
|
|
'generate_page_header_settings',
|
|
'generate_secondary_nav_settings',
|
|
'generate_spacing_settings',
|
|
'generate_menu_plus_settings',
|
|
'generate_woocommerce_settings',
|
|
);
|
|
|
|
foreach ( $option_keys as $key ) {
|
|
delete_option( $key );
|
|
}
|
|
}
|
|
|
|
$modules = generatepress_get_site_premium_modules();
|
|
|
|
foreach ( $modules as $name => $key ) {
|
|
delete_option( $key );
|
|
}
|
|
|
|
if ( ! empty( $backup_data['modules'] ) ) {
|
|
foreach ( (array) $backup_data['modules'] as $name => $key ) {
|
|
update_option( $key, 'activated' );
|
|
}
|
|
}
|
|
|
|
// Theme options.
|
|
foreach ( $backup_data['theme_options']['mods'] as $key => $val ) {
|
|
// Only allow valid theme mods.
|
|
if ( ! in_array( $key, GeneratePress_Sites_Helper::get_theme_mods() ) ) {
|
|
GeneratePress_Sites_Helper::log( 'Bad theme mod key: ' . $key );
|
|
continue;
|
|
}
|
|
|
|
set_theme_mod( $key, $val );
|
|
}
|
|
|
|
foreach ( $backup_data['theme_options']['options'] as $key => $val ) {
|
|
// Only allow valid options.
|
|
if ( ! in_array( $key, GeneratePress_Sites_Helper::get_theme_settings() ) ) {
|
|
GeneratePress_Sites_Helper::log( 'Bad theme setting key: ' . $key );
|
|
continue;
|
|
}
|
|
|
|
update_option( $key, $val );
|
|
}
|
|
}
|
|
|
|
wp_send_json( __( 'Theme options restored.', 'gp-premium' ) );
|
|
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* Restore site options.
|
|
*/
|
|
public function site_options() {
|
|
check_ajax_referer( 'generate_sites_nonce', 'nonce' );
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
wp_send_json_error( __( 'You are not allowed to perform this action', 'gp-premium' ) );
|
|
return; // Just in case.
|
|
}
|
|
|
|
$backup_data = get_option( '_generatepress_site_library_backup', array() );
|
|
|
|
if ( ! empty( $backup_data ) ) {
|
|
foreach ( $backup_data['site_options'] as $key => $val ) {
|
|
if ( in_array( $key, (array) generatepress_sites_disallowed_options() ) ) {
|
|
GeneratePress_Sites_Helper::log( 'Disallowed option: ' . $key );
|
|
continue;
|
|
}
|
|
|
|
if ( 'nav_menu_locations' === $key || 'custom_logo' === $key ) {
|
|
set_theme_mod( $key, $val );
|
|
} else {
|
|
update_option( $key, $val );
|
|
}
|
|
}
|
|
}
|
|
|
|
wp_send_json( __( 'Site options restored.', 'gp-premium' ) );
|
|
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* Restore content.
|
|
*/
|
|
public function content() {
|
|
check_ajax_referer( 'generate_sites_nonce', 'nonce' );
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
wp_send_json_error( __( 'You are not allowed to perform this action', 'gp-premium' ) );
|
|
return; // Just in case.
|
|
}
|
|
|
|
$backup_data = get_option( '_generatepress_site_library_backup', array() );
|
|
|
|
if ( ! empty( $backup_data ) ) {
|
|
global $wpdb;
|
|
$post_ids = $wpdb->get_col( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_generatepress_sites_imported_post'" );
|
|
$term_ids = $wpdb->get_col( "SELECT term_id FROM {$wpdb->termmeta} WHERE meta_key='_generatepress_sites_imported_term'" );
|
|
|
|
foreach ( $post_ids as $id ) {
|
|
wp_delete_post( $id, true );
|
|
}
|
|
}
|
|
|
|
wp_send_json( __( 'Content restored.', 'gp-premium' ) );
|
|
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* Restore plugins.
|
|
*/
|
|
public function plugins() {
|
|
check_ajax_referer( 'generate_sites_nonce', 'nonce' );
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
wp_send_json_error( __( 'You are not allowed to perform this action', 'gp-premium' ) );
|
|
return; // Just in case.
|
|
}
|
|
|
|
$backup_data = get_option( '_generatepress_site_library_backup', array() );
|
|
|
|
if ( ! empty( $backup_data['plugins'] ) && ! empty( $backup_data['site_options'] ) ) {
|
|
update_option( 'active_plugins', $backup_data['plugins'] );
|
|
}
|
|
|
|
wp_send_json( __( 'Plugins restored.', 'gp-premium' ) );
|
|
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* Restore widgets.
|
|
*/
|
|
public function widgets() {
|
|
check_ajax_referer( 'generate_sites_nonce', 'nonce' );
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
wp_send_json_error( __( 'You are not allowed to perform this action', 'gp-premium' ) );
|
|
return; // Just in case.
|
|
}
|
|
|
|
$backup_data = get_option( '_generatepress_site_library_backup', array() );
|
|
|
|
if ( ! empty( $backup_data['widgets'] ) ) {
|
|
update_option( 'sidebars_widgets', $backup_data['widgets'] );
|
|
}
|
|
|
|
wp_send_json( __( 'Widgets restored.', 'gp-premium' ) );
|
|
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* Restore CSS.
|
|
*/
|
|
public function css() {
|
|
check_ajax_referer( 'generate_sites_nonce', 'nonce' );
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
wp_send_json_error( __( 'You are not allowed to perform this action', 'gp-premium' ) );
|
|
return; // Just in case.
|
|
}
|
|
|
|
$backup_data = get_option( '_generatepress_site_library_backup', array() );
|
|
|
|
if ( ! empty( $backup_data ) ) {
|
|
$css = '';
|
|
$current_css = wp_get_custom_css_post();
|
|
|
|
if ( isset( $current_css->post_content ) ) {
|
|
// Remove existing library CSS.
|
|
$current_css->post_content = preg_replace( '#(/\\* GeneratePress Site CSS \\*/).*?(/\\* End GeneratePress Site CSS \\*/)#s', '', $current_css->post_content );
|
|
}
|
|
|
|
if ( ! empty( $backup_data['css'] ) ) {
|
|
$current_css->post_content .= $backup_data['css'];
|
|
}
|
|
|
|
wp_update_custom_css_post( $current_css->post_content );
|
|
}
|
|
|
|
wp_send_json( __( 'CSS restored.', 'gp-premium' ) );
|
|
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* General cleanup.
|
|
*/
|
|
public function clean_up() {
|
|
check_ajax_referer( 'generate_sites_nonce', 'nonce' );
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
wp_send_json_error( __( 'You are not allowed to perform this action', 'gp-premium' ) );
|
|
return; // Just in case.
|
|
}
|
|
|
|
delete_option( 'generate_dynamic_css_output' );
|
|
delete_option( 'generate_dynamic_css_cached_version' );
|
|
delete_option( '_generatepress_site_library_backup' );
|
|
|
|
wp_send_json( __( 'Completed clean-up.', 'gp-premium' ) );
|
|
|
|
die();
|
|
}
|
|
}
|
|
|
|
GeneratePress_Sites_Restore::get_instance();
|