Files
old-experiments/backend/wordpress/wp-content/plugins/woocommerce-jetpack/includes/admin/class-wcj-settings-manager.php
2018-06-29 14:40:28 +02:00

167 lines
5.2 KiB
PHP
Executable File

<?php
/**
* Booster for WooCommerce - Settings Manager - Import / Export / Reset Booster's settings
*
* @version 3.4.0
* @since 2.9.0
* @author Algoritmika Ltd.
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
if ( ! class_exists( 'WCJ_Settings_Manager' ) ) :
class WCJ_Settings_Manager {
/**
* Constructor.
*
* @version 2.9.0
* @since 2.9.0
* @todo add options to import/export selected modules only
*/
function __construct() {
add_action( 'wp_loaded', array( $this, 'manage_options' ), PHP_INT_MAX );
}
/**
* manage_options.
*
* @version 3.4.0
* @since 2.5.2
*/
function manage_options() {
if ( is_admin() ) {
if ( ! function_exists( 'current_user_can' ) || ! current_user_can( 'manage_options' ) ) {
return;
}
if ( isset( $_POST['booster_import_settings'] ) ) {
$this->manage_options_import();
}
if ( isset( $_POST['booster_export_settings'] ) ) {
$this->manage_options_export();
}
if ( isset( $_POST['booster_reset_settings'] ) ) {
$this->manage_options_reset();
}
if ( isset( $_POST['booster_reset_settings_meta'] ) ) {
$this->manage_options_reset_meta();
}
}
}
/**
* manage_options_import.
*
* @version 3.2.4
* @since 2.5.2
*/
function manage_options_import() {
global $wcj_notice;
if( ! isset( $_FILES['booster_import_settings_file']['tmp_name'] ) || '' == $_FILES['booster_import_settings_file']['tmp_name'] ) {
$wcj_notice .= __( 'Please upload a file to import!', 'woocommerce-jetpack' );
$import_settings = array();
unset( $_POST['booster_import_settings'] );
} else {
$import_counter = 0;
$import_settings = file_get_contents( $_FILES['booster_import_settings_file']['tmp_name'] );
$import_settings = explode( PHP_EOL, preg_replace( '~(*BSR_ANYCRLF)\R~', PHP_EOL, $import_settings ) );
if ( ! is_array( $import_settings ) || 2 !== count( $import_settings ) ) {
$wcj_notice .= __( 'Wrong file format!', 'woocommerce-jetpack' );
} else {
$import_header = $import_settings[0];
$required_header = 'Booster for WooCommerce';
if ( $required_header !== substr( $import_header, 0, strlen( $required_header ) ) ) {
$wcj_notice .= __( 'Wrong file format!', 'woocommerce-jetpack' );
} else {
$import_settings = json_decode( $import_settings[1], true );
foreach ( $import_settings as $import_key => $import_setting ) {
if ( strlen( $import_key ) > 4 && 'wcj_' === substr( $import_key, 0, 4 ) ) {
update_option( $import_key, $import_setting );
$import_counter++;
}
}
$wcj_notice .= sprintf( __( '%d options successfully imported.', 'woocommerce-jetpack' ), $import_counter );
}
}
}
}
/**
* manage_options_export.
*
* @version 3.3.0
* @since 2.5.2
*/
function manage_options_export() {
$export_settings = array();
$export_counter = array();
foreach ( WCJ()->modules as $module ) {
$values = $module->get_settings();
foreach ( $values as $value ) {
if ( isset( $value['default'] ) && isset( $value['id'] ) ) {
if ( isset ( $_POST['booster_export_settings'] ) ) {
$export_settings[ $value['id'] ] = get_option( $value['id'], $value['default'] );
if ( ! isset( $export_counter[ $module->short_desc ] ) ) {
$export_counter[ $module->short_desc ] = 0;
}
$export_counter[ $module->short_desc ]++;
}
}
}
}
$export_settings = json_encode( $export_settings );
$export_settings = 'Booster for WooCommerce v' . get_option( WCJ_VERSION_OPTION, 'NA' ) . PHP_EOL . $export_settings;
header( "Content-Type: application/octet-stream" );
header( "Content-Disposition: attachment; filename=booster_settings.txt" );
header( "Content-Type: application/octet-stream" );
header( "Content-Type: application/download" );
header( "Content-Description: File Transfer" );
header( "Content-Length: " . strlen( $export_settings ) );
echo $export_settings;
die();
}
/**
* manage_options_reset_meta.
*
* @version 3.4.0
* @since 3.4.0
* @todo order items meta
* @todo `... LIKE 'wcj_%'`
*/
function manage_options_reset_meta() {
global $wpdb, $wcj_notice;
$delete_counter_meta = 0;
$plugin_meta = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE meta_key LIKE '_wcj_%'" );
foreach( $plugin_meta as $meta ) {
delete_post_meta( $meta->post_id, $meta->meta_key );
$delete_counter_meta++;
}
$wcj_notice .= sprintf( __( '%d meta successfully deleted.', 'woocommerce-jetpack' ), $delete_counter_meta );
}
/**
* manage_options_reset.
*
* @version 3.4.0
* @since 2.5.2
*/
function manage_options_reset() {
global $wpdb, $wcj_notice;
$delete_counter_options = 0;
$plugin_options = $wpdb->get_results( "SELECT option_name FROM $wpdb->options WHERE option_name LIKE 'wcj_%'" );
foreach( $plugin_options as $option ) {
delete_option( $option->option_name );
delete_site_option( $option->option_name );
$delete_counter_options++;
}
$wcj_notice .= sprintf( __( '%d options successfully deleted.', 'woocommerce-jetpack' ), $delete_counter_options );
}
}
endif;
return new WCJ_Settings_Manager();