wenpai.org/wp-content/plugins/bbp-style-pack/includes/settings_import.php
2024-06-21 23:57:39 +08:00

176 lines
7.7 KiB
PHP

<?php
// Exit if accessed directly
defined( 'ABSPATH' ) || exit;
function bsp_style_settings_import() {
echo '<div class="wrap">';
echo '<h2>' . __( 'Import BBP Style Pack Settings', 'bbp-style-pack' ) . '</h2>';
echo '<h2>' . __( 'Warning - the uploaded file will overwrite your current Style Pack settings', 'bbp-style-pack' ) . '</h2>';
if ( empty( $_GET['step'] ) ) {
$_GET['step'] = 0;
}
switch ( absint( filter_var( $_GET['step'], FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH ) ) ) {
case 0:
echo '<div class="narrow">';
echo '<p>'.__( 'If you have exported settings to a file using the \'Export plugin settings\' tab, you can import that file here.', 'bbp-style-pack' ).'</p>';
echo '<p>'.__( 'Choose a JSON (.json) file to upload, then click Upload file and import.', 'bbp-style-pack' ).'</p>';
wp_import_upload_form( 'admin.php?import=bsp-import&amp;step=1' );
echo '</div>';
break;
case 1:
if ( bsp_handle_upload() ) {
//pre_import();
} else {
echo '<p><a href="' . esc_url( admin_url( '/options-general.php?page=bbp-style-pack' ) ) . '">' . __( 'Return to BBP Style Pack settings', 'bbp-style-pack' ) . '</a></p>';
}
break;
case 2:
//check_admin_referer( 'import-wordpress-options' );
//$file_id = absint( filter_var( $_POST['import_id'], FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH ) );
//if ( false !== ( $import_data = get_transient( bsp_transient_key($file_id) ) ) ) {
bsp_import();
//}
break;
}
echo '</div>';
}
function bsp_handle_upload() {
$file = wp_import_handle_upload();
if ( isset( $file['error'] ) ) {
return bsp_error_message(
__( 'Sorry, there has been an error.', 'bbp-style-pack' ),
esc_html( $file['error'] )
);
}
if ( ! isset( $file['file'], $file['id'] ) ) {
return bsp_error_message(
__( 'Sorry, there has been an error.', 'bbp-style-pack' ),
__( 'The file did not upload properly. Please try again.', 'bbp-style-pack' )
);
}
$file_id = intval( $file['id'] );
if ( ! file_exists( $file['file'] ) ) {
wp_import_cleanup( $file_id );
return bsp_error_message(
__( 'Sorry, there has been an error.', 'bbp-style-pack' ),
sprintf(
/* translators: %s is variable for path to a file */
__( 'The export file could not be found at <code>%s</code>. It is likely that this was caused by a permissions problem.', 'bbp-style-pack' ),
esc_html( $file['file'] )
)
);
}
if ( ! is_file( $file['file'] ) ) {
wp_import_cleanup( $file_id );
return bsp_error_message(
__( 'Sorry, there has been an error.', 'bbp-style-pack' ),
__( 'The path is not a file, please try again.', 'bbp-style-pack' )
);
}
$file_contents = file_get_contents( $file['file'] );
$import_data = json_decode( $file_contents, true );
$transient_key = 'options-import-%d';
set_transient( $transient_key, $import_data, DAY_IN_SECONDS );
wp_import_cleanup( $file_id );
//return bsp_run_data_check($import_data);
bsp_import( $import_data ) ;
}
function bsp_error_message( $message, $details = '' ) {
echo '<div class="error"><p><strong>' . $message . '</strong>';
if ( ! empty( $details ) ) {
echo '<br />' . $details;
}
echo '</p></div>';
return false;
}
function bsp_run_data_check( $import_data ) {
$min_version = 1 ;
if ( empty( $import_data['version'] ) ) {
return bsp_error_message( __( 'Sorry, there has been an error. This file may not contain data or is corrupt.', 'bbp-style-pack' ) );
}
if ( $import_data['version'] < $min_version ) {
return bsp_error_message( sprintf(
/* translators: %s is variable for plugin version */
__( 'This JSON file (version %s) is not supported by this version of the importer. Please update the plugin on the source, or download an older version of the plugin to this installation.', 'bbp-style-pack' ),
intval( $import_data['version'] )
) );
}
if ( empty( $import_data['options'] ) ) {
return bsp_error_message( __( 'Sorry, there has been an error. This file appears valid, but does not seem to have any options.', 'bbp-style-pack' ) );
}
return true;
}
function bsp_transient_key($file_id='') {
$transient_key = 'options-import-%d';
return sprintf( $transient_key, $file_id );
}
function bsp_import( $import_data ) {
if ( bsp_run_data_check( $import_data ) ) {
$generate = array();
foreach ( bsp_defined_option_groups() as $option_name => $option_tab ) {
if ( isset( $import_data['options'][ $option_name ] ) ) {
$option_value = maybe_unserialize( $import_data['options'][ $option_name ] );
update_option( $option_name, $option_value );
if ( $option_name === 'bsp_style_settings_quote' ) {
$generate[] = 'quote';
}
elseif ( $option_name === 'bsp_style_settings_t' ) {
$generate[] = 'delete';
$generate[] = 'style';
}
else {
$generate[] = 'style';
}
}
}
// generate the necessary files based on the option group(s) imported
if ( in_array( 'style', $generate ) ) generate_style_css();
if ( in_array( 'delete', $generate ) ) generate_delete_js();
if ( in_array( 'quote', $generate ) ) generate_quote_style_css();
if ( in_array( 'style', $generate ) || in_array( 'delete', $generate ) || in_array( 'quote', $generate ) ) bsp_clear_cache();
echo '<p>' . __( 'All done !', 'bbp-style-pack' ).'</p>';
}
}
add_action( 'admin_init', 'bsp_register_importer' );
/**
* Register our importer.
*
* @return void
*/
function bsp_register_importer() {
if ( function_exists( 'register_importer' ) ) {
register_importer( 'bsp-import', __( 'BBP Style Pack settings', 'bbp-style-pack' ), __( 'Import BBP Style Pack settings from a JSON file', 'bbp-style-pack' ), 'bsp_style_settings_import' ) ;
}
}