<?php
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Callback to output the MonsterInsights settings page.
*
* @since 6.0.0
* @access public
*
* @return void
*/
function monsterinsights_tools_page() {
/**
* Developer Alert:
*
* Per the README, this is considered an internal hook and should
* not be used by other developers. This hook's behavior may be modified
* or the hook may be removed at any time, without warning.
*/
do_action( 'monsterinsights_head' );
?>
<?php echo monsterinsights_ublock_notice(); ?>
<!-- Tabs -->
<h1 id="monsterinsights-tools-page-main-nav" class="monsterinsights-main-nav-container monsterinsights-nav-container" data-container="#monsterinsights-tools-pages">
<a class="monsterinsights-main-nav-item monsterinsights-nav-item monsterinsights-spacing-item" href="#"> </a>
<a class="monsterinsights-main-nav-item monsterinsights-nav-item monsterinsights-active" href="#monsterinsights-main-tab-settings" title="<?php echo esc_attr( __( 'Import/Export', 'google-analytics-for-wordpress' ) ); ?>">
<?php echo esc_html__( 'Import/Export', 'google-analytics-for-wordpress' ); ?>
</a>
<a class="monsterinsights-main-nav-item monsterinsights-nav-item" href="#monsterinsights-main-tab-url-builder" title="<?php echo esc_attr( __( 'Campaign URL Builder', 'google-analytics-for-wordpress' ) ); ?>">
<?php echo esc_html__( 'URL Builder', 'google-analytics-for-wordpress' ); ?>
</a>
</h1>
<!-- Tab Panels -->
<div id="monsterinsights-tools-pages" class="monsterinsights-main-nav-tabs monsterinsights-nav-tabs wrap" data-navigation="#monsterinsights-tools-page-main-nav">
<h1 class="monsterinsights-hideme"></h1><!-- so wp notices are below the nav bar -->
<div id="monsterinsights-main-tab-settings" class="monsterinsights-main-nav-tab monsterinsights-nav-tab monsterinsights-active">
<?php monsterinsights_tools_settings_tab(); ?>
</div>
<div id="monsterinsights-main-tab-url-builder" class="monsterinsights-main-nav-tab monsterinsights-nav-tab">
<?php monsterinsights_tools_url_builder_tab(); ?>
</div>
</div>
<?php
}
function monsterinsights_tools_url_builder_tab(){
do_action( 'monsterinsights_tools_url_builder_tab' );
}
function monsterinsights_tools_settings_tab() {
ob_start();?>
<h2><?php echo esc_html__( 'Setting Tools', 'google-analytics-for-wordpress' );?></h2>
<p><?php echo esc_html__( 'You can use the below tools to import settings from other MonsterInsights websites or export settings to import into another MonsterInsights install.', 'google-analytics-for-wordpress' ); ?> </p>
<br />
<table class="form-table">
<tbody>
<tr>
<th scope="row">
<label for="monsterinsights-import-settings">
<?php echo esc_html__( 'Import Settings', 'google-analytics-for-wordpress' );?>
</label>
</th>
<td>
<?php
if ( ! empty( $_REQUEST['action'] ) && ! empty( $_REQUEST['result'] ) && $_REQUEST['action'] === 'import' && $_REQUEST['result'] === 'success' ){
echo MonsterInsights()->notices->display_inline_notice( 'monsterinsights_standard_notice', '', __( 'Successfully imported settings!','google-analytics-for-wordpress'), 'success', false, array() );
}
?>
<form method="post" enctype="multipart/form-data">
<p>
<input type="file" name="import_file"/>
<input type="hidden" name="monsterinsights_action" value="monsterinsights_import_settings" />
</p>
<p class="description"><?php echo esc_html__( 'Paste the import field content from another MonsterInsights site in above.', 'google-analytics-for-wordpress' );?></p>
<p>
<?php wp_nonce_field( 'monsterinsights_import_settings', 'monsterinsights_import_settings' ); ?>
</p>
<p>
<?php submit_button( __( 'Import', 'google-analytics-for-wordpress' ), 'monsterinsights-action-button button button-action', 'submit', false ); ?>
</p>
</form>
</td>
</tr>
<tr>
<th scope="row">
<label for="monsterinsights-export-settings">
<?php echo esc_html__( 'Export Settings:', 'google-analytics-for-wordpress' );?>
</label>
</th>
<td>
<form method="post" enctype="multipart/form-data">
<p>
<input type="hidden" name="monsterinsights_action" value="monsterinsights_export_settings" />
</p>
<p>
<?php wp_nonce_field( 'monsterinsights_export_settings', 'monsterinsights_export_settings' ); ?>
</p>
<p>
<?php submit_button( __( 'Export', 'google-analytics-for-wordpress' ), 'monsterinsights-settings-export monsterinsights-action-button button button-action', 'submit', false ); ?>
</p>
</form>
</td>
</tr>
</tbody>
</table>
<?php
echo ob_get_clean();
}
/**
* MonsterInsights settings export.
*
* @since 6.0.0
* @access public
*
* @return void
*/
function monsterinsights_process_export_settings() {
if ( !isset( $_POST['monsterinsights_action'] ) || empty( $_POST['monsterinsights_action'] ) ) {
return;
}
if ( ! current_user_can( 'monsterinsights_save_settings' ) ) {
return;
}
if ( $_POST['monsterinsights_action'] !== 'monsterinsights_export_settings' ){
return;
}
if ( empty( $_POST['monsterinsights_export_settings'] ) || ! wp_verify_nonce( $_POST['monsterinsights_export_settings'], 'monsterinsights_export_settings' ) ) {
return;
}
$settings = monsterinsights_export_settings();
ignore_user_abort( true );
nocache_headers();
header( 'Content-Type: application/json; charset=utf-8' );
header( 'Content-Disposition: attachment; filename=monsterinsights-settings-export-' . date( 'm-d-Y' ) . '.json' );
header( "Expires: 0" );
echo $settings;
exit;
}
add_action( 'admin_init', 'monsterinsights_process_export_settings' );
function monsterinsights_import_settings() {
if ( !isset( $_POST['monsterinsights_action'] ) || empty( $_POST['monsterinsights_action'] ) ) {
return;
}
if ( ! current_user_can( 'monsterinsights_save_settings' ) ) {
return;
}
if ( $_POST['monsterinsights_action'] !== 'monsterinsights_import_settings' ){
return;
}
if ( !wp_verify_nonce( $_POST['monsterinsights_import_settings'], 'monsterinsights_import_settings' ) ) {
return;
}
$extension = explode( '.', $_FILES['import_file']['name'] );
$extension = end( $extension );
if ( $extension != 'json' ) {
wp_die( __( 'Please upload a valid .json file', 'google-analytics-for-wordpress' ) );
}
$import_file = $_FILES['import_file']['tmp_name'];
if ( empty( $import_file ) ) {
wp_die( __( 'Please upload a file to import', 'google-analytics-for-wordpress' ) );
}
$file = file_get_contents( $import_file );
if ( empty( $file ) ) {
wp_die( __( 'Please upload a real settings export file to import', 'google-analytics-for-wordpress' ) );
}
// Retrieve the settings from the file and convert the json object to an array.
$new_settings = json_decode( wp_json_encode( json_decode( $file ) ), true );
$settings = monsterinsights_get_options();
$exclude = array(
'analytics_profile',
'analytics_profile_code',
'analytics_profile_name',
'oauth_version',
'cron_last_run',
'monsterinsights_oauth_status',
);
foreach ( $exclude as $e ) {
if ( ! empty( $new_settings[ $e ] ) ) {
unset( $new_settings[ $e ] );
}
}
if ( ! is_super_admin() ) {
if ( ! empty( $new_settings[ 'custom_code' ] ) ) {
unset( $new_settings[ 'custom_code' ] );
}
}
foreach ( $exclude as $e ) {
if ( ! empty( $settings[ $e ] ) ) {
$new_settings = $settings[ $e ];
}
}
global $monsterinsights_settings;
$monsterinsights_settings = $new_settings;
update_option( monsterinsights_get_option_name(), $new_settings );
wp_safe_redirect( admin_url( 'admin.php?page=monsterinsights_tools&action=import&result=success#monsterinsights-main-tab-settings' ) ); exit;
}
add_action( 'admin_init', 'monsterinsights_import_settings' );