<?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">
		<span class="monsterinsights-header-inner">
			<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>
		</span>
	</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();?>
	<div class="monsterinsights-tools-content-area">
	<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__( 'Use the filepicker above to select the settings export file from another site', '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>
	</div>
	<?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' );
