<?php

function wp_super_cache_wptouch_admin() {
	global $cache_wptouch, $wp_cache_config_file, $valid_nonce;

	$cache_wptouch = '' === $cache_wptouch ? '0' : $cache_wptouch;

	if ( isset( $_POST['cache_wptouch'] ) && $valid_nonce ) {
		if ( $cache_wptouch === (int) $_POST['cache_wptouch'] ) {
			$changed = false;
		} else {
			$changed = true;
		}
		$cache_wptouch = (int) $_POST['cache_wptouch'];
		wp_cache_replace_line( '^ *\$cache_wptouch', "\$cache_wptouch = '$cache_wptouch';", $wp_cache_config_file );
	}
	$id = 'wptouch-section';
	?>
		<fieldset id="<?php echo $id; ?>" class="options">
		<h4><?php _e( 'WPTouch', 'wp-super-cache' ); ?></h4>
		<form name="wp_manager" action="" method="post">
		<label><input type="radio" name="cache_wptouch" value="1" <?php if ( $cache_wptouch ) { echo 'checked="checked" '; } ?>/> <?php _e( 'Enabled', 'wp-super-cache' ); ?></label>
		<label><input type="radio" name="cache_wptouch" value="0" <?php if ( ! $cache_wptouch ) { echo 'checked="checked" '; } ?>/> <?php _e( 'Disabled', 'wp-super-cache' ); ?></label>
	<?php
	echo '<p>' . __( 'Provides support for <a href="https://wordpress.org/plugins/wptouch/">WPTouch</a> mobile theme and plugin.', 'wp-super-cache' ) . '</p>';
	if ( isset( $changed ) && $changed ) {
		if ( $cache_wptouch ) {
			$status = __( 'enabled', 'wp-super-cache' );
		} else {
			$status = __( 'disabled', 'wp-super-cache' );
		}
		echo '<p><strong>' . sprintf( __( 'WPTouch support is now %s', 'wp-super-cache' ), $status ) . '</strong></p>';
	}
	echo '<div class="submit"><input class="button-primary" ' . SUBMITDISABLED . 'type="submit" value="' . __( 'Update', 'wp-super-cache' ) . '" /></div>';
	wp_nonce_field( 'wp-cache' );
	?>
	</form>
	</fieldset>
	<?php
}
add_cacheaction( 'cache_admin_page', 'wp_super_cache_wptouch_admin' );

function wp_super_cache_wptouch_notice() {
	global $cache_enabled;
	if ( $cache_enabled ) {
		echo '<div class="error"><p><strong>' . __( 'WPTouch plugin detected! Please go to the Supercache plugins page and enable the WPTouch helper plugin.', 'wp-super-cache' ) . '</strong></p></div>';
	}
}
function wp_super_cache_wptouch_exists() {
	global $cache_wptouch;
	if ( '1' === $cache_wptouch ) {
		return false;
	}

	if ( is_admin() && function_exists( 'wptouch_get_plugin_dir_name' ) ) {
		add_action( 'admin_notices', 'wp_super_cache_wptouch_notice' );
	}
}

if ( isset( $_GET['page'] ) && 'wpsupercache' === $_GET['page'] ) {
	add_cacheaction( 'add_cacheaction', 'wp_super_cache_wptouch_exists' );
}

// disable mobile checking if.
function wp_super_cache_maybe_disable_wptouch( $t ) {
	global $cache_wptouch, $wptouch_exclude_ua;
	if ( '1' !== $cache_wptouch ) {
		return false;
	}

	if ( ( isset( $_COOKIE['wptouch_switch_toggle'] ) && 'normal' === $_COOKIE['wptouch_switch_toggle'] ) ||
		( isset( $_COOKIE['wptouch-pro-view'] ) && 'desktop' === $_COOKIE['wptouch-pro-view'] ) ) {
		return true;
	}

	$ua = explode( ',', $wptouch_exclude_ua );
	foreach ( $ua as $agent ) {
		if ( preg_match( "#$agent#i", $_SERVER['HTTP_HOST'] ) ) {
			return true; // disable mobile ua check if matches the exclude list in wptouch.
		}
	}

	return false;
}

add_cacheaction( 'disable_mobile_check', 'wp_super_cache_maybe_disable_wptouch' );

function wp_super_cache_wptouch_browsers( $browsers ) {
	global $wptouch_exclude_ua, $wp_cache_config_file;

	if ( false === function_exists( 'bnc_wptouch_get_exclude_user_agents' ) || false === function_exists( 'bnc_wptouch_get_user_agents' ) ) {
		return $browsers;
	}

	$browsers = implode( ',', bnc_wptouch_get_exclude_user_agents() ); // hack, support exclude agents too.
	if ( $browsers !== $wptouch_exclude_ua ) {
		wp_cache_replace_line( '^ *\$wptouch_exclude_ua', "\$wptouch_exclude_ua = '$browsers';", $wp_cache_config_file );
		$wptouch_exclude_ua = $browsers;
	}

	return bnc_wptouch_get_user_agents();
}

function wp_super_cache_wptouch_prefixes( $prefixes ) {
	return array(); // wptouch doesn't support UA prefixes.
}

function wp_super_cache_wptouch_cookie_check( $cache_key ) {
	if ( false === isset( $_COOKIE['wptouch_switch_toggle'] ) ) {
		return $cache_key;
	}
	if ( 'normal' === $_COOKIE['wptouch_switch_toggle'] || 'mobile' === $_COOKIE['wptouch_switch_toggle'] ) {
		return $_COOKIE['wptouch_switch_toggle'];
	}

	if ( isset( $_COOKIE['wptouch-pro-view'] ) ) {
		if ( 'desktop' === $_COOKIE['wptouch-pro-view'] ) {
			return 'normal';
		} else {
			return $_COOKIE['wptouch-pro-view'];
		}
	}

	return $cache_key;
}

if ( isset( $cache_wptouch ) && '1' === $cache_wptouch ) {
	add_cacheaction( 'wp_super_cache_mobile_browsers', 'wp_super_cache_wptouch_browsers' );
	add_cacheaction( 'wp_super_cache_mobile_prefixes', 'wp_super_cache_wptouch_prefixes' );
	add_cacheaction( 'wp_cache_check_mobile', 'wp_super_cache_wptouch_cookie_check' );
}

function wpsc_wptouch_list( $list ) {
	$list['wptouch'] = array(
		'key'   => 'wptouch',
		'url'   => 'https://wordpress.org/plugins/wptouch/',
		'title' => __( 'WPTouch', 'wp-super-cache' ),
		'desc'  => __( 'Provides support for WPTouch mobile theme and plugin.', 'wp-super-cache' ),
	);
	return $list;
}
add_cacheaction( 'wpsc_filter_list', 'wpsc_wptouch_list' );
