2020-04-07 13:03:04 +00:00
< ? php
2020-08-13 14:53:39 +00:00
/**
* This file handles the site restore functionality .
*
* @ package GP Premium
*/
if ( ! defined ( 'ABSPATH' ) ) {
exit ; // No direct access, please.
}
2020-04-07 13:03:04 +00:00
2020-08-13 14:53:39 +00:00
/**
* Restore previous site .
*/
2020-04-07 13:03:04 +00:00
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 ) ) {
2020-08-13 14:53:39 +00:00
self :: $instance = new self ();
2020-04-07 13:03:04 +00:00
}
return self :: $instance ;
}
2020-08-13 14:53:39 +00:00
/**
* Get it going .
*/
2020-04-07 13:03:04 +00:00
public function __construct () {
2020-08-13 14:53:39 +00:00
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' ) );
2020-04-07 13:03:04 +00:00
}
2020-08-13 14:53:39 +00:00
/**
* Restore theme options .
*/
2020-04-07 13:03:04 +00:00
public function theme_options () {
check_ajax_referer ( 'generate_sites_nonce' , 'nonce' );
if ( ! current_user_can ( 'manage_options' ) ) {
2020-05-04 15:57:08 +00:00
wp_send_json_error ( __ ( 'You are not allowed to perform this action' , 'gp-premium' ) );
return ; // Just in case.
2020-04-07 13:03:04 +00:00
}
$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 ();
}
2020-08-13 14:53:39 +00:00
/**
* Restore site options .
*/
2020-04-07 13:03:04 +00:00
public function site_options () {
check_ajax_referer ( 'generate_sites_nonce' , 'nonce' );
if ( ! current_user_can ( 'manage_options' ) ) {
2020-05-04 15:57:08 +00:00
wp_send_json_error ( __ ( 'You are not allowed to perform this action' , 'gp-premium' ) );
return ; // Just in case.
2020-04-07 13:03:04 +00:00
}
$backup_data = get_option ( '_generatepress_site_library_backup' , array () );
if ( ! empty ( $backup_data ) ) {
foreach ( $backup_data [ 'site_options' ] as $key => $val ) {
2020-08-13 14:53:39 +00:00
if ( in_array ( $key , ( array ) generatepress_sites_disallowed_options () ) ) {
2020-04-07 13:03:04 +00:00
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 ();
}
2020-08-13 14:53:39 +00:00
/**
* Restore content .
*/
2020-04-07 13:03:04 +00:00
public function content () {
check_ajax_referer ( 'generate_sites_nonce' , 'nonce' );
if ( ! current_user_can ( 'manage_options' ) ) {
2020-05-04 15:57:08 +00:00
wp_send_json_error ( __ ( 'You are not allowed to perform this action' , 'gp-premium' ) );
return ; // Just in case.
2020-04-07 13:03:04 +00:00
}
$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 ();
}
2020-08-13 14:53:39 +00:00
/**
* Restore plugins .
*/
2020-04-07 13:03:04 +00:00
public function plugins () {
check_ajax_referer ( 'generate_sites_nonce' , 'nonce' );
if ( ! current_user_can ( 'manage_options' ) ) {
2020-05-04 15:57:08 +00:00
wp_send_json_error ( __ ( 'You are not allowed to perform this action' , 'gp-premium' ) );
return ; // Just in case.
2020-04-07 13:03:04 +00:00
}
$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 ();
}
2020-08-13 14:53:39 +00:00
/**
* Restore widgets .
*/
2020-04-07 13:03:04 +00:00
public function widgets () {
check_ajax_referer ( 'generate_sites_nonce' , 'nonce' );
if ( ! current_user_can ( 'manage_options' ) ) {
2020-05-04 15:57:08 +00:00
wp_send_json_error ( __ ( 'You are not allowed to perform this action' , 'gp-premium' ) );
return ; // Just in case.
2020-04-07 13:03:04 +00:00
}
$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 ();
}
2020-08-13 14:53:39 +00:00
/**
* Restore CSS .
*/
2020-04-07 13:03:04 +00:00
public function css () {
check_ajax_referer ( 'generate_sites_nonce' , 'nonce' );
if ( ! current_user_can ( 'manage_options' ) ) {
2020-05-04 15:57:08 +00:00
wp_send_json_error ( __ ( 'You are not allowed to perform this action' , 'gp-premium' ) );
return ; // Just in case.
2020-04-07 13:03:04 +00:00
}
$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 ();
}
2020-08-13 14:53:39 +00:00
/**
* General cleanup .
*/
2020-04-07 13:03:04 +00:00
public function clean_up () {
check_ajax_referer ( 'generate_sites_nonce' , 'nonce' );
if ( ! current_user_can ( 'manage_options' ) ) {
2020-05-04 15:57:08 +00:00
wp_send_json_error ( __ ( 'You are not allowed to perform this action' , 'gp-premium' ) );
return ; // Just in case.
2020-04-07 13:03:04 +00:00
}
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 ();
}
}
2020-05-04 15:57:08 +00:00
GeneratePress_Sites_Restore :: get_instance ();