2021-07-25 23:25:02 +00:00
< ? php
/**
* Rest API functions
*
* @ package GP Premium
*/
if ( ! defined ( 'ABSPATH' ) ) {
exit ;
}
/**
* Class GeneratePress_Site_Library_Rest
*/
class GeneratePress_Site_Library_Rest extends WP_REST_Controller {
/**
* Instance .
*
* @ access private
* @ var object Instance
*/
private static $instance ;
/**
* Namespace .
*
* @ var string
*/
protected $namespace = 'generatepress-site-library/v' ;
/**
* Version .
*
* @ var string
*/
protected $version = '1' ;
/**
* Initiator .
*
* @ return object initialized object of class .
*/
public static function get_instance () {
if ( ! isset ( self :: $instance ) ) {
self :: $instance = new self ();
}
return self :: $instance ;
}
/**
* GenerateBlocks_Rest constructor .
*/
public function __construct () {
add_action ( 'rest_api_init' , array ( $this , 'register_routes' ) );
add_action ( 'init' , array ( 'GeneratePress_Site_Library_Helper' , 'woocommerce_no_new_pages' ), 4 );
}
/**
* Register rest routes .
*/
public function register_routes () {
$namespace = $this -> namespace . $this -> version ;
// Get Templates.
register_rest_route (
$namespace ,
'/get_sites/' ,
array (
'methods' => WP_REST_Server :: EDITABLE ,
'callback' => array ( $this , 'get_sites' ),
'permission_callback' => array ( $this , 'update_settings_permission' ),
)
);
// Get Templates.
register_rest_route (
$namespace ,
'/get_site_data/' ,
array (
'methods' => WP_REST_Server :: EDITABLE ,
'callback' => array ( $this , 'get_site_data' ),
'permission_callback' => array ( $this , 'update_settings_permission' ),
)
);
// Get Templates.
register_rest_route (
$namespace ,
'/import_theme_options/' ,
array (
'methods' => WP_REST_Server :: EDITABLE ,
'callback' => array ( $this , 'import_options' ),
'permission_callback' => array ( $this , 'update_settings_permission' ),
)
);
// Get Templates.
register_rest_route (
$namespace ,
'/activate_plugins/' ,
array (
'methods' => WP_REST_Server :: EDITABLE ,
'callback' => array ( $this , 'activate_plugins' ),
'permission_callback' => array ( $this , 'update_settings_permission' ),
)
);
// Get Templates.
register_rest_route (
$namespace ,
'/import_content/' ,
array (
'methods' => WP_REST_Server :: EDITABLE ,
'callback' => array ( $this , 'import_content' ),
'permission_callback' => array ( $this , 'update_settings_permission' ),
)
);
// Get Templates.
register_rest_route (
$namespace ,
'/import_site_options/' ,
array (
'methods' => WP_REST_Server :: EDITABLE ,
'callback' => array ( $this , 'import_site_options' ),
'permission_callback' => array ( $this , 'update_settings_permission' ),
)
);
// Get Templates.
register_rest_route (
$namespace ,
'/import_widgets/' ,
array (
'methods' => WP_REST_Server :: EDITABLE ,
'callback' => array ( $this , 'import_widgets' ),
'permission_callback' => array ( $this , 'update_settings_permission' ),
)
);
// Get Templates.
register_rest_route (
$namespace ,
'/restore_theme_options/' ,
array (
'methods' => WP_REST_Server :: EDITABLE ,
'callback' => array ( $this , 'restore_theme_options' ),
'permission_callback' => array ( $this , 'update_settings_permission' ),
)
);
// Get Templates.
register_rest_route (
$namespace ,
'/restore_content/' ,
array (
'methods' => WP_REST_Server :: EDITABLE ,
'callback' => array ( $this , 'restore_content' ),
'permission_callback' => array ( $this , 'update_settings_permission' ),
)
);
}
/**
* Get edit options permissions .
*
* @ return bool
*/
public function update_settings_permission () {
return current_user_can ( 'manage_options' );
}
/**
* Export a group of assets .
*
* @ param WP_REST_Request $request request object .
*
* @ return mixed
*/
public function get_sites ( WP_REST_Request $request ) {
$force_refresh = $request -> get_param ( 'forceRefresh' );
$sites = get_option ( 'generatepress_sites' , array () );
$time_now = strtotime ( 'now' );
$sites_expire = get_option ( 'generatepress_sites_expiration' , sanitize_text_field ( $time_now ) );
if ( $force_refresh || empty ( $sites ) || $sites_expire < $time_now ) {
$sites = array ();
$data = wp_safe_remote_get ( 'https://gpsites.co/wp-json/wp/v2/sites?per_page=100' );
if ( is_wp_error ( $data ) ) {
2022-10-27 11:14:35 +00:00
update_option ( 'generatepress_sites' , 'no results' , false );
update_option ( 'generatepress_sites_expiration' , strtotime ( '+5 minutes' ), false );
2021-07-25 23:25:02 +00:00
return $this -> failed ( 'no results' );
}
$data = json_decode ( wp_remote_retrieve_body ( $data ), true );
if ( ! is_array ( $data ) ) {
2022-10-27 11:14:35 +00:00
update_option ( 'generatepress_sites' , 'no results' , false );
update_option ( 'generatepress_sites_expiration' , strtotime ( '+5 minutes' ), false );
2021-07-25 23:25:02 +00:00
return $this -> failed ( 'no results' );
}
foreach ( ( array ) $data as $site ) {
$sites [ $site [ 'name' ] ] = array (
2021-12-20 13:41:59 +00:00
'name' => $site [ 'name' ],
'directory' => $site [ 'directory' ],
'preview_url' => $site [ 'preview_url' ],
'author_name' => $site [ 'author_name' ],
'author_url' => $site [ 'author_url' ],
'description' => $site [ 'description' ],
'page_builder' => $site [ 'page_builder' ],
'category' => $site [ 'category' ],
'min_version' => $site [ 'min_version' ],
'min_theme_version' => $site [ 'min_theme_version' ],
'uploads_url' => $site [ 'uploads_url' ],
'plugins' => $site [ 'plugins' ],
'documentation' => $site [ 'documentation' ],
'image_width' => ! empty ( $site [ 'image_width' ] ) ? $site [ 'image_width' ] : 600 ,
'image_height' => ! empty ( $site [ 'image_height' ] ) ? $site [ 'image_height' ] : 600 ,
2021-07-25 23:25:02 +00:00
);
}
2022-10-27 11:14:35 +00:00
update_option ( 'generatepress_sites' , $sites , false );
update_option ( 'generatepress_sites_expiration' , strtotime ( '+1 day' ), false );
2021-07-25 23:25:02 +00:00
}
$sites = apply_filters ( 'generate_add_sites' , $sites );
return $this -> success ( $sites );
}
/**
* Export a group of assets .
*
* @ param WP_REST_Request $request request object .
*
* @ return mixed
*/
public function get_site_data ( WP_REST_Request $request ) {
$site_data = $request -> get_param ( 'siteData' );
if ( GeneratePress_Site_Library_Helper :: file_exists ( $site_data [ 'directory' ] . '/options.json' ) ) {
$settings = GeneratePress_Site_Library_Helper :: get_options ( $site_data [ 'directory' ] . '/options.json' );
$data [ 'options' ] = true ;
$data [ 'modules' ] = $settings [ 'modules' ];
$data [ 'plugins' ] = $settings [ 'plugins' ];
if ( is_array ( $data [ 'plugins' ] ) ) {
include_once ABSPATH . 'wp-admin/includes/plugin.php' ;
$plugin_data = array ();
foreach ( $data [ 'plugins' ] as $name => $slug ) {
$basename = strtok ( $slug , '/' );
$plugin_data [ $name ] = array (
'name' => $name ,
'slug' => $slug ,
'installed' => GeneratePress_Site_Library_Helper :: is_plugin_installed ( $slug ) ? true : false ,
'active' => is_plugin_active ( $slug ) ? true : false ,
'repo' => GeneratePress_Site_Library_Helper :: file_exists ( 'https://api.wordpress.org/plugins/info/1.0/' . $basename ) ? true : false ,
);
}
$data [ 'plugin_data' ] = $plugin_data ;
}
}
if ( GeneratePress_Site_Library_Helper :: file_exists ( $site_data [ 'directory' ] . '/content.xml' ) ) {
$data [ 'content' ] = true ;
} else {
$data [ 'content' ] = false ;
}
if ( GeneratePress_Site_Library_Helper :: file_exists ( $site_data [ 'directory' ] . '/widgets.wie' ) ) {
$data [ 'widgets' ] = true ;
} else {
$data [ 'widgets' ] = false ;
}
return $this -> success ( $data );
}
/**
* Export a group of assets .
*
* @ param WP_REST_Request $request request object .
*
* @ return mixed
*/
public function import_options ( WP_REST_Request $request ) {
$site_data = $request -> get_param ( 'siteData' );
if ( ! GeneratePress_Site_Library_Helper :: file_exists ( $site_data [ 'directory' ] . '/options.json' ) ) {
return $this -> failed ( 'No theme options exist.' );
}
// Delete existing backup.
delete_option ( '_generatepress_site_library_backup' );
// Backup options.
$backup_data = get_option ( '_generatepress_site_library_backup' , array () );
$theme_mods = GeneratePress_Site_Library_Helper :: get_theme_mods ();
$settings = GeneratePress_Site_Library_Helper :: get_theme_settings ();
$data = array (
'mods' => array (),
'options' => array (),
);
foreach ( $theme_mods as $theme_mod ) {
$data [ 'mods' ][ $theme_mod ] = get_theme_mod ( $theme_mod );
}
foreach ( $settings as $setting ) {
$data [ 'options' ][ $setting ] = get_option ( $setting );
}
$backup_data [ 'theme_options' ] = $data ;
$modules = GeneratePress_Site_Library_Helper :: premium_modules ();
$active_modules = array ();
foreach ( $modules as $name => $key ) {
if ( 'activated' === get_option ( $key ) ) {
$active_modules [ $name ] = $key ;
}
}
$backup_data [ 'modules' ] = $active_modules ;
$settings = GeneratePress_Site_Library_Helper :: get_options ( $site_data [ 'directory' ] . '/options.json' );
// Remove all existing theme 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 );
}
// Need to backup these items before we remove all theme mods.
$backup_data [ 'site_options' ][ 'nav_menu_locations' ] = get_theme_mod ( 'nav_menu_locations' );
$backup_data [ 'site_options' ][ 'custom_logo' ] = get_theme_mod ( 'custom_logo' );
// Remove existing theme mods.
remove_theme_mods ();
// Remove existing activated premium modules.
$premium_modules = GeneratePress_Site_Library_Helper :: premium_modules ();
foreach ( $premium_modules as $name => $key ) {
delete_option ( $key );
}
// Activate necessary modules.
foreach ( $settings [ 'modules' ] as $name => $key ) {
// Only allow valid premium modules.
if ( ! in_array ( $key , $premium_modules ) ) {
GeneratePress_Site_Library_Helper :: log ( 'Bad premium module key: ' . $key );
continue ;
}
update_option ( $key , 'activated' );
}
// Set theme mods.
foreach ( $settings [ 'mods' ] as $key => $val ) {
// Only allow valid theme mods.
if ( ! in_array ( $key , GeneratePress_Site_Library_Helper :: get_theme_mods () ) ) {
GeneratePress_Site_Library_Helper :: log ( 'Bad theme mod key: ' . $key );
continue ;
}
set_theme_mod ( $key , $val );
}
// Set theme options.
foreach ( $settings [ 'options' ] as $key => $val ) {
// Only allow valid options.
if ( ! in_array ( $key , GeneratePress_Site_Library_Helper :: get_theme_settings () ) ) {
GeneratePress_Site_Library_Helper :: log ( 'Bad theme setting key: ' . $key );
continue ;
}
if ( is_array ( $val ) || is_object ( $val ) ) {
foreach ( $val as $option_name => $option_value ) {
// Import any images.
if ( is_string ( $option_value ) && preg_match ( '/\.(jpg|jpeg|png|gif)/i' , $option_value ) ) {
$data = GeneratePress_Site_Library_Helper :: sideload_image ( $option_value );
if ( ! is_wp_error ( $data ) ) {
$val [ $option_name ] = $data -> url ;
}
}
// Set these options if we import content.
unset ( $val [ 'hide_title' ] );
unset ( $val [ 'hide_tagline' ] );
unset ( $val [ 'logo_width' ] );
}
}
update_option ( $key , $val );
}
// Re-add non-theme option related theme mods.
set_theme_mod ( 'nav_menu_locations' , $backup_data [ 'site_options' ][ 'nav_menu_locations' ] );
set_theme_mod ( 'custom_logo' , $backup_data [ 'site_options' ][ 'custom_logo' ] );
$existing_settings = get_option ( 'generate_settings' , array () );
if ( isset ( $backup_data [ 'theme_options' ][ 'options' ][ 'generate_settings' ][ 'hide_title' ] ) ) {
$existing_settings [ 'hide_title' ] = $backup_data [ 'theme_options' ][ 'options' ][ 'generate_settings' ][ 'hide_title' ];
}
if ( isset ( $backup_data [ 'theme_options' ][ 'options' ][ 'generate_settings' ][ 'hide_tagline' ] ) ) {
$existing_settings [ 'hide_tagline' ] = $backup_data [ 'theme_options' ][ 'options' ][ 'generate_settings' ][ 'hide_tagline' ];
}
if ( isset ( $backup_data [ 'theme_options' ][ 'options' ][ 'generate_settings' ][ 'logo_width' ] ) ) {
$existing_settings [ 'logo_width' ] = $backup_data [ 'theme_options' ][ 'options' ][ 'generate_settings' ][ 'logo_width' ];
}
update_option ( 'generate_settings' , $existing_settings );
// Remove dynamic CSS cache.
delete_option ( 'generate_dynamic_css_output' );
delete_option ( 'generate_dynamic_css_cached_version' );
$dynamic_css_data = get_option ( 'generatepress_dynamic_css_data' , array () );
if ( isset ( $dynamic_css_data [ 'updated_time' ] ) ) {
unset ( $dynamic_css_data [ 'updated_time' ] );
}
update_option ( 'generatepress_dynamic_css_data' , $dynamic_css_data );
// Custom CSS.
$css = $settings [ 'custom_css' ];
$css = '/* GeneratePress Site CSS */ ' . $css . ' /* End GeneratePress Site CSS */' ;
$current_css = wp_get_custom_css_post ();
if ( isset ( $current_css -> post_content ) ) {
$current_css -> post_content = preg_replace ( '#(/\\* GeneratePress Site CSS \\*/).*?(/\\* End GeneratePress Site CSS \\*/)#s' , '' , $current_css -> post_content );
$css = $current_css -> post_content . $css ;
}
wp_update_custom_css_post ( $css );
update_option ( '_generatepress_site_library_backup' , $backup_data );
return $this -> success ( __ ( 'Options imported' , 'gp-premium' ) );
}
/**
* Export a group of assets .
*
* @ param WP_REST_Request $request request object .
*
* @ return mixed
*/
public function activate_plugins ( WP_REST_Request $request ) {
$site_data = $request -> get_param ( 'siteData' );
$settings = GeneratePress_Site_Library_Helper :: get_options ( $site_data [ 'directory' ] . '/options.json' );
$plugins = $settings [ 'plugins' ];
// Backup plugins.
$backup_data = get_option ( '_generatepress_site_library_backup' , array () );
$backup_data [ 'plugins' ] = get_option ( 'active_plugins' , array () );
update_option ( '_generatepress_site_library_backup' , $backup_data );
if ( ! empty ( $plugins ) ) {
$pro_plugins = GeneratePress_Site_Library_Helper :: check_for_pro_plugins ();
include_once ABSPATH . 'wp-admin/includes/plugin.php' ;
foreach ( $plugins as $plugin ) {
// If the plugin has a pro version and it exists, activate it instead.
if ( array_key_exists ( $plugin , $pro_plugins ) ) {
if ( file_exists ( WP_PLUGIN_DIR . '/' . $pro_plugins [ $plugin ] ) ) {
$plugin = $pro_plugins [ $plugin ];
}
}
// Install BB lite if pro doesn't exist.
if ( 'bb-plugin/fl-builder.php' === $plugin && ! file_exists ( WP_PLUGIN_DIR . '/bb-plugin/fl-builder.php' ) ) {
$plugin = 'beaver-builder-lite-version/fl-builder.php' ;
}
if ( ! is_plugin_active ( $plugin ) ) {
activate_plugin ( $plugin , '' , false , true );
if ( 'woocommerce/woocommerce.php' === $plugin ) {
add_option ( 'generate_woocommerce_no_create_pages' , true );
}
}
}
return $this -> success ( __ ( 'Plugins activated' , 'gp-premium' ) );
}
}
/**
* Export a group of assets .
*
* @ param WP_REST_Request $request request object .
*
* @ return mixed
*/
public function import_content ( WP_REST_Request $request ) {
$site_data = $request -> get_param ( 'siteData' );
$site_slug = $request -> get_param ( 'siteSlug' );
$import_options = $request -> get_param ( 'importOptions' );
$import_content = $request -> get_param ( 'importContent' );
// Increase PHP max execution time.
set_time_limit ( apply_filters ( 'generate_sites_content_import_time_limit' , 300 ) );
$xml_path = $site_data [ 'directory' ] . '/content.xml' ;
$xml_file = GeneratePress_Site_Library_Helper :: download_file ( $xml_path );
$xml_path = $xml_file [ 'data' ][ 'file' ];
if ( ! $xml_path ) {
return $this -> failed ( 'No content found.' );
}
// Increase PHP max execution time.
set_time_limit ( apply_filters ( 'generate_sites_content_import_time_limit' , 300 ) );
// Disable import of authors.
add_filter ( 'wxr_importer.pre_process.user' , '__return_false' );
// Keep track of our progress.
add_action ( 'wxr_importer.processed.post' , array ( 'GeneratePress_Site_Library_Helper' , 'track_post' ) );
add_action ( 'wxr_importer.processed.term' , array ( 'GeneratePress_Site_Library_Helper' , 'track_term' ) );
// Disables generation of multiple image sizes (thumbnails) in the content import step.
if ( ! apply_filters ( 'generate_sites_regen_thumbnails' , true ) ) {
add_filter ( 'intermediate_image_sizes_advanced' , '__return_null' );
}
$backup_data = get_option ( '_generatepress_site_library_backup' , array () );
$backup_data [ 'content' ] = true ;
update_option ( '_generatepress_site_library_backup' , $backup_data );
GeneratePress_Site_Library_Helper :: import_xml ( $xml_path , $site_slug );
return $this -> success ( 'Content imported' );
}
/**
* Export a group of assets .
*
* @ param WP_REST_Request $request request object .
*
* @ return mixed
*/
public function import_site_options ( WP_REST_Request $request ) {
$site_data = $request -> get_param ( 'siteData' );
$site_slug = $request -> get_param ( 'siteSlug' );
$backup_data = get_option ( '_generatepress_site_library_backup' , array () );
$settings = GeneratePress_Site_Library_Helper :: get_options ( $site_data [ 'directory' ] . '/options.json' );
foreach ( $settings [ 'site_options' ] as $key => $val ) {
switch ( $key ) {
case 'page_for_posts' :
case 'page_on_front' :
$backup_data [ 'site_options' ][ $key ] = get_option ( $key );
GeneratePress_Site_Library_Helper :: set_reading_pages ( $key , $val , $site_slug );
break ;
case 'woocommerce_shop_page_id' :
case 'woocommerce_cart_page_id' :
case 'woocommerce_checkout_page_id' :
case 'woocommerce_myaccount_page_id' :
$backup_data [ 'site_options' ][ $key ] = get_option ( $key );
GeneratePress_Site_Library_Helper :: set_woocommerce_pages ( $key , $val , $site_slug );
break ;
case 'nav_menu_locations' :
if ( ! isset ( $backup_data [ 'site_options' ][ 'nav_menu_location' ] ) ) {
$backup_data [ 'site_options' ][ 'nav_menu_locations' ] = get_theme_mod ( 'nav_menu_locations' );
}
GeneratePress_Site_Library_Helper :: set_nav_menu_locations ( $val );
break ;
case 'element_locations' :
GeneratePress_Site_Library_Helper :: set_element_locations ( $val , $site_slug );
break ;
case 'element_exclusions' :
GeneratePress_Site_Library_Helper :: set_element_exclusions ( $val , $site_slug );
break ;
case 'custom_logo' :
if ( ! isset ( $backup_data [ 'site_options' ][ 'custom_logo' ] ) ) {
$backup_data [ 'site_options' ][ 'custom_logo' ] = get_theme_mod ( 'custom_logo' );
}
$data = GeneratePress_Site_Library_Helper :: sideload_image ( $val );
if ( ! is_wp_error ( $data ) && isset ( $data -> attachment_id ) ) {
set_theme_mod ( 'custom_logo' , $data -> attachment_id );
update_post_meta ( $data -> attachment_id , '_wp_attachment_is_custom_header' , get_option ( 'stylesheet' ) );
} else {
remove_theme_mod ( 'custom_logo' );
}
break ;
default :
if ( in_array ( $key , ( array ) GeneratePress_Site_Library_Helper :: disallowed_options () ) ) {
GeneratePress_Site_Library_Helper :: log ( 'Disallowed option: ' . $key );
} else {
$backup_data [ 'site_options' ][ $key ] = get_option ( $key );
delete_option ( $key );
update_option ( $key , $val );
}
break ;
}
}
// Set theme options.
$theme_settings = get_option ( 'generate_settings' , array () );
$update_theme_settings = false ;
foreach ( $settings [ 'options' ] as $key => $val ) {
if ( 'generate_settings' !== $key ) {
continue ;
}
if ( is_array ( $val ) || is_object ( $val ) ) {
foreach ( $val as $option_name => $option_value ) {
if ( 'hide_title' === $option_name ) {
$theme_settings [ 'hide_title' ] = $option_value ;
$update_theme_settings = true ;
}
if ( 'hide_tagline' === $option_name ) {
$theme_settings [ 'hide_tagline' ] = $option_value ;
$update_theme_settings = true ;
}
if ( 'logo_width' === $option_name ) {
$theme_settings [ 'logo_width' ] = $option_value ;
$update_theme_settings = true ;
}
}
}
}
if ( $update_theme_settings ) {
update_option ( 'generate_settings' , $theme_settings );
// Remove dynamic CSS cache.
delete_option ( 'generate_dynamic_css_output' );
delete_option ( 'generate_dynamic_css_cached_version' );
$dynamic_css_data = get_option ( 'generatepress_dynamic_css_data' , array () );
if ( isset ( $dynamic_css_data [ 'updated_time' ] ) ) {
unset ( $dynamic_css_data [ 'updated_time' ] );
}
update_option ( 'generatepress_dynamic_css_data' , $dynamic_css_data );
}
// Set our backed up options.
update_option ( '_generatepress_site_library_backup' , $backup_data );
// Update any custom menu link URLs.
GeneratePress_Site_Library_Helper :: update_menu_urls ( $site_data [ 'preview_url' ] );
// Clear page builder cache.
GeneratePress_Site_Library_Helper :: clear_page_builder_cache ();
return $this -> success ( 'Site options imported' );
}
/**
* Export a group of assets .
*
* @ param WP_REST_Request $request request object .
*
* @ return mixed
*/
public function import_widgets ( WP_REST_Request $request ) {
$site_data = $request -> get_param ( 'siteData' );
require_once GP_PREMIUM_DIR_PATH . 'site-library/classes/class-site-widget-importer.php' ;
$widgets_path = $site_data [ 'directory' ] . '/widgets.wie' ;
$wie_file = GeneratePress_Site_Library_Helper :: download_file ( $widgets_path );
$wie_path = $wie_file [ 'data' ][ 'file' ];
$data = implode ( '' , file ( $wie_path ) );
$data = json_decode ( $data );
GeneratePress_Site_Library_Helper :: clear_widgets ();
add_filter ( 'wie_widget_settings_array' , array ( 'GeneratePress_Site_Library_Helper' , 'fix_custom_menu_widget_ids' ) );
$widgets_importer = GeneratePress_Sites_Widget_Importer :: instance ();
$widgets_importer -> wie_import_data ( $data );
remove_filter ( 'wie_widget_settings_array' , array ( 'GeneratePress_Site_Library_Helper' , 'fix_custom_menu_widget_ids' ) );
return $this -> success ( 'Widgets imported' );
}
/**
* Restore our theme options .
*/
public function restore_theme_options () {
$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 );
}
}
if ( ! empty ( $backup_data [ 'modules' ] ) ) {
$modules = GeneratePress_Site_Library_Helper :: premium_modules ();
foreach ( $modules as $name => $key ) {
delete_option ( $key );
}
foreach ( ( array ) $backup_data [ 'modules' ] as $name => $key ) {
update_option ( $key , 'activated' );
}
}
if ( ! empty ( $backup_data [ 'theme_options' ][ 'mods' ] ) ) {
foreach ( $backup_data [ 'theme_options' ][ 'mods' ] as $key => $val ) {
// Only allow valid theme mods.
if ( ! in_array ( $key , GeneratePress_Site_Library_Helper :: get_theme_mods () ) ) {
GeneratePress_Site_Library_Helper :: log ( 'Bad theme mod key: ' . $key );
continue ;
}
set_theme_mod ( $key , $val );
}
}
if ( ! empty ( $backup_data [ 'theme_options' ][ 'options' ] ) ) {
foreach ( $backup_data [ 'theme_options' ][ 'options' ] as $key => $val ) {
// Only allow valid options.
if ( ! in_array ( $key , GeneratePress_Site_Library_Helper :: get_theme_settings () ) ) {
GeneratePress_Site_Library_Helper :: log ( 'Bad theme setting key: ' . $key );
continue ;
}
update_option ( $key , $val );
}
}
// Re-add non-theme option related theme mods.
if ( isset ( $backup_data [ 'site_options' ][ 'nav_menu_locations' ] ) ) {
set_theme_mod ( 'nav_menu_locations' , $backup_data [ 'site_options' ][ 'nav_menu_locations' ] );
}
if ( isset ( $backup_data [ 'site_options' ][ 'custom_logo' ] ) ) {
set_theme_mod ( 'custom_logo' , $backup_data [ 'site_options' ][ 'custom_logo' ] );
}
}
return $this -> success ( __ ( 'Theme options restored.' , 'gp-premium' ) );
}
/**
* Restore content .
*/
public function restore_content () {
$backup_data = get_option ( '_generatepress_site_library_backup' , array () );
// Plugins.
if ( ! empty ( $backup_data [ 'plugins' ] ) && ! empty ( $backup_data [ 'site_options' ] ) ) {
update_option ( 'active_plugins' , $backup_data [ 'plugins' ] );
}
// Content.
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 );
}
}
// Site options.
if ( ! empty ( $backup_data [ 'site_options' ] ) ) {
foreach ( $backup_data [ 'site_options' ] as $key => $val ) {
if ( in_array ( $key , ( array ) GeneratePress_Site_Library_Helper :: disallowed_options () ) ) {
GeneratePress_Site_Library_Helper :: log ( 'Disallowed option: ' . $key );
continue ;
}
if ( 'nav_menu_locations' === $key || 'custom_logo' === $key ) {
set_theme_mod ( $key , $val );
} else {
if ( ! $val && ! is_numeric ( $val ) ) {
delete_option ( $key );
} else {
update_option ( $key , $val );
}
}
}
}
// Widgets.
if ( ! empty ( $backup_data [ 'widgets' ] ) ) {
update_option ( 'sidebars_widgets' , $backup_data [ 'widgets' ] );
}
// 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 );
}
wp_update_custom_css_post ( $current_css -> post_content );
// Clean up.
delete_option ( 'generate_dynamic_css_output' );
delete_option ( 'generate_dynamic_css_cached_version' );
delete_option ( '_generatepress_site_library_backup' );
return $this -> success ( __ ( 'Content restored.' , 'gp-premium' ) );
}
/**
* Success rest .
*
* @ param mixed $response response data .
* @ return mixed
*/
public function success ( $response ) {
return new WP_REST_Response (
array (
'success' => true ,
'response' => $response ,
),
200
);
}
/**
* Failed rest .
*
* @ param mixed $response response data .
* @ return mixed
*/
public function failed ( $response ) {
return new WP_REST_Response (
array (
'success' => false ,
'response' => $response ,
),
200
);
}
/**
* Error rest .
*
* @ param mixed $code error code .
* @ param mixed $response response data .
* @ return mixed
*/
public function error ( $code , $response ) {
return new WP_REST_Response (
array (
'error' => true ,
'success' => false ,
'error_code' => $code ,
'response' => $response ,
),
401
);
}
}
GeneratePress_Site_Library_Rest :: get_instance ();