<?php
// No direct access, please
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

define( 'GENERATE_DE_LAYOUT_META_BOX', true );

if ( ! function_exists( 'generate_disable_elements' ) ) {
	/**
	 * Remove the default disable_elements
	 * @since 0.1
	 */
	function generate_disable_elements() {
		// Don't run the function unless we're on a page it applies to
		if ( ! is_singular() ) {
			return;
		}

		global $post;

		// Prevent PHP notices
		if ( isset( $post ) ) {
			$disable_header = get_post_meta( $post->ID, '_generate-disable-header', true );
			$disable_nav = get_post_meta( $post->ID, '_generate-disable-nav', true );
			$disable_secondary_nav = get_post_meta( $post->ID, '_generate-disable-secondary-nav', true );
			$disable_post_image = get_post_meta( $post->ID, '_generate-disable-post-image', true );
			$disable_headline = get_post_meta( $post->ID, '_generate-disable-headline', true );
			$disable_footer = get_post_meta( $post->ID, '_generate-disable-footer', true );
		}

		$return = '';

		if ( ! empty( $disable_header ) && false !== $disable_header ) {
			$return = '.site-header {display:none}';
		}

		if ( ! empty( $disable_nav ) && false !== $disable_nav ) {
			$return .= '#site-navigation,.navigation-clone, #mobile-header {display:none !important}';
		}

		if ( ! empty( $disable_secondary_nav ) && false !== $disable_secondary_nav ) {
			$return .= '#secondary-navigation {display:none}';
		}

		if ( ! empty( $disable_post_image ) && false !== $disable_post_image ) {
			$return .= '.generate-page-header, .page-header-image, .page-header-image-single {display:none}';
		}

		if ( ( ! empty( $disable_headline ) && false !== $disable_headline ) && ! is_single() ) {
			$return .= '.entry-header {display:none} .page-content, .entry-content, .entry-summary {margin-top:0}';
		}

		if ( ! empty( $disable_footer ) && false !== $disable_footer ) {
			$return .= '.site-footer {display:none}';
		}

		return $return;
	}
}

if ( ! function_exists('generate_de_scripts') ) {
	add_action( 'wp_enqueue_scripts', 'generate_de_scripts', 50 );
	/**
	 * Enqueue scripts and styles
	 */
	function generate_de_scripts() {
		wp_add_inline_style( 'generate-style', generate_disable_elements() );
	}
}

if ( ! function_exists('generate_add_de_meta_box') ) {
	add_action( 'add_meta_boxes', 'generate_add_de_meta_box', 50 );
	/**
	 * Generate the layout metabox.
	 *
	 * @since 0.1
	 */
	function generate_add_de_meta_box() {
		// Set user role - make filterable
		$allowed = apply_filters( 'generate_metabox_capability', 'edit_theme_options' );

		// If not an administrator, don't show the metabox
		if ( ! current_user_can( $allowed ) ) {
			return;
		}

		if ( defined( 'GENERATE_LAYOUT_META_BOX' ) ) {
			return;
		}

		$args = array( 'public' => true );
		$post_types = get_post_types( $args );
		foreach ($post_types as $type) {
			if ( 'attachment' !== $type ) {
				add_meta_box(
					'generate_de_meta_box',
					__( 'Disable Elements', 'gp-premium' ),
					'generate_show_de_meta_box',
					$type,
					'side',
					'default'
				);
			}
		}
	}
}

if ( ! function_exists('generate_show_de_meta_box') ) {
	/**
	 * Outputs the content of the metabox
	 */
	function generate_show_de_meta_box( $post ) {
	    wp_nonce_field( basename( __FILE__ ), 'generate_de_nonce' );
	    $stored_meta = get_post_meta( $post->ID );
		$stored_meta['_generate-disable-header'][0] = ( isset( $stored_meta['_generate-disable-header'][0] ) ) ? $stored_meta['_generate-disable-header'][0] : '';
		$stored_meta['_generate-disable-nav'][0] = ( isset( $stored_meta['_generate-disable-nav'][0] ) ) ? $stored_meta['_generate-disable-nav'][0] : '';
		$stored_meta['_generate-disable-secondary-nav'][0] = ( isset( $stored_meta['_generate-disable-secondary-nav'][0] ) ) ? $stored_meta['_generate-disable-secondary-nav'][0] : '';
		$stored_meta['_generate-disable-post-image'][0] = ( isset( $stored_meta['_generate-disable-post-image'][0] ) ) ? $stored_meta['_generate-disable-post-image'][0] : '';
		$stored_meta['_generate-disable-headline'][0] = ( isset( $stored_meta['_generate-disable-headline'][0] ) ) ? $stored_meta['_generate-disable-headline'][0] : '';
		$stored_meta['_generate-disable-footer'][0] = ( isset( $stored_meta['_generate-disable-footer'][0] ) ) ? $stored_meta['_generate-disable-footer'][0] : '';
		$stored_meta['_generate-disable-top-bar'][0] = ( isset( $stored_meta['_generate-disable-top-bar'][0] ) ) ? $stored_meta['_generate-disable-top-bar'][0] : '';
	    ?>

	    <p>
			<div class="generate_disable_elements">
				<?php if ( function_exists( 'generate_top_bar' ) ) : ?>
					<label for="meta-generate-disable-top-bar" style="display:block;margin-bottom:3px;" title="<?php _e( 'Top Bar', 'gp-premium' );?>">
						<input type="checkbox" name="_generate-disable-top-bar" id="meta-generate-disable-top-bar" value="true" <?php checked( $stored_meta['_generate-disable-top-bar'][0], 'true' ); ?>>
						<?php _e( 'Top Bar', 'gp-premium' );?>
					</label>
				<?php endif; ?>

				<label for="meta-generate-disable-header" style="display:block;margin-bottom:3px;" title="<?php _e( 'Header', 'gp-premium' );?>">
					<input type="checkbox" name="_generate-disable-header" id="meta-generate-disable-header" value="true" <?php checked( $stored_meta['_generate-disable-header'][0], 'true' ); ?>>
					<?php _e( 'Header', 'gp-premium' );?>
				</label>

				<label for="meta-generate-disable-nav" style="display:block;margin-bottom:3px;" title="<?php _e( 'Primary Navigation', 'gp-premium' );?>">
					<input type="checkbox" name="_generate-disable-nav" id="meta-generate-disable-nav" value="true" <?php checked( $stored_meta['_generate-disable-nav'][0], 'true' ); ?>>
					<?php _e( 'Primary Navigation', 'gp-premium' );?>
				</label>

				<?php if ( function_exists( 'generate_secondary_nav_setup' ) ) : ?>
					<label for="meta-generate-disable-secondary-nav" style="display:block;margin-bottom:3px;" title="<?php _e( 'Secondary Navigation', 'gp-premium' );?>">
						<input type="checkbox" name="_generate-disable-secondary-nav" id="meta-generate-disable-secondary-nav" value="true" <?php checked( $stored_meta['_generate-disable-secondary-nav'][0], 'true' ); ?>>
						<?php _e( 'Secondary Navigation', 'gp-premium' );?>
					</label>
				<?php endif; ?>

				<label for="meta-generate-disable-post-image" style="display:block;margin-bottom:3px;" title="<?php _e( 'Featured Image / Page Header', 'gp-premium' );?>">
					<input type="checkbox" name="_generate-disable-post-image" id="meta-generate-disable-post-image" value="true" <?php checked( $stored_meta['_generate-disable-post-image'][0], 'true' ); ?>>
					<?php _e( 'Featured Image / Page Header', 'gp-premium' );?>
				</label>

				<label for="meta-generate-disable-headline" style="display:block;margin-bottom:3px;" title="<?php _e( 'Content Title', 'gp-premium' );?>">
					<input type="checkbox" name="_generate-disable-headline" id="meta-generate-disable-headline" value="true" <?php checked( $stored_meta['_generate-disable-headline'][0], 'true' ); ?>>
					<?php _e( 'Content Title', 'gp-premium' );?>
				</label>

				<label for="meta-generate-disable-footer" style="display:block;margin-bottom:3px;" title="<?php _e( 'Footer', 'gp-premium' );?>">
					<input type="checkbox" name="_generate-disable-footer" id="meta-generate-disable-footer" value="true" <?php checked( $stored_meta['_generate-disable-footer'][0], 'true' ); ?>>
					<?php _e( 'Footer', 'gp-premium' );?>
				</label>
			</div>
		</p>

	    <?php
	}
}

if ( ! function_exists('generate_save_de_meta') ) {
	add_action( 'save_post', 'generate_save_de_meta' );
	/**
	 * Save our options
	 */
	function generate_save_de_meta( $post_id ) {

		if ( defined( 'GENERATE_LAYOUT_META_BOX' ) ) {
			return;
		}

		// Checks save status
	    $is_autosave = wp_is_post_autosave( $post_id );
	    $is_revision = wp_is_post_revision( $post_id );
	    $is_valid_nonce = ( isset( $_POST[ 'generate_de_nonce' ] ) && wp_verify_nonce( $_POST[ 'generate_de_nonce' ], basename( __FILE__ ) ) ) ? true : false;

	    // Exits script depending on save status
	    if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
	        return;
	    }

		// Check that the logged in user has permission to edit this post
		if ( ! current_user_can( 'edit_post', $post_id ) ) {
			return $post_id;
		}

		$options = array(
			'_generate-disable-top-bar',
			'_generate-disable-header',
			'_generate-disable-nav',
			'_generate-disable-secondary-nav',
			'_generate-disable-headline',
			'_generate-disable-footer',
			'_generate-disable-post-image'
		);

		foreach ( $options as $key ) {
			$value = filter_input( INPUT_POST, $key, FILTER_SANITIZE_STRING );

			if ( $value ) {
				update_post_meta( $post_id, $key, $value );
			} else {
				delete_post_meta( $post_id, $key );
			}
		}
	}
}

if ( ! function_exists( 'generate_disable_elements_setup' ) ) {
	add_action( 'wp', 'generate_disable_elements_setup', 50 );
	function generate_disable_elements_setup() {
		// Don't run the function unless we're on a page it applies to
		if ( ! is_singular() ) {
			return;
		}

		// Get the current post
		global $post;

		// Grab our values
		if ( isset( $post ) ) {
			$disable_top_bar = get_post_meta( $post->ID, '_generate-disable-top-bar', true );
			$disable_header = get_post_meta( $post->ID, '_generate-disable-header', true );
			$disable_nav = get_post_meta( $post->ID, '_generate-disable-nav', true );
			$disable_headline = get_post_meta( $post->ID, '_generate-disable-headline', true );
			$disable_footer = get_post_meta( $post->ID, '_generate-disable-footer', true );
		}

		// Remove the top bar
		if ( ! empty( $disable_top_bar ) && false !== $disable_top_bar && function_exists( 'generate_top_bar' ) ) {
			remove_action( 'generate_before_header','generate_top_bar', 5 );
		}

		// Remove the header
		if ( ! empty( $disable_header ) && false !== $disable_header && function_exists( 'generate_construct_header' ) ) {
			remove_action( 'generate_header','generate_construct_header' );
		}

		// Remove the navigation
		if ( ! empty( $disable_nav ) && false !== $disable_nav && function_exists( 'generate_get_navigation_location' ) ) {
			add_filter( 'generate_navigation_location','__return_false', 20 );
		}

		// Remove the title
		if ( ! empty( $disable_headline ) && false !== $disable_headline && function_exists( 'generate_show_title' ) ) {
			add_filter( 'generate_show_title','__return_false' );
		}

		// Remove the footer
		if ( ! empty( $disable_footer ) && false !== $disable_footer ) {
			if ( function_exists( 'generate_construct_footer_widgets' ) ) {
				remove_action( 'generate_footer','generate_construct_footer_widgets', 5 );
			}

			if ( function_exists( 'generate_construct_footer' ) ) {
				remove_action( 'generate_footer','generate_construct_footer' );
			}
		}
	}
}

add_action( 'generate_layout_disable_elements_section', 'generate_premium_disable_elements_options' );
/**
 * Add the meta box options to the Layout meta box in the new GP
 *
 * @since 1.4
 */
function generate_premium_disable_elements_options( $stored_meta ) {
	$stored_meta['_generate-disable-header'][0] = ( isset( $stored_meta['_generate-disable-header'][0] ) ) ? $stored_meta['_generate-disable-header'][0] : '';
	$stored_meta['_generate-disable-nav'][0] = ( isset( $stored_meta['_generate-disable-nav'][0] ) ) ? $stored_meta['_generate-disable-nav'][0] : '';
	$stored_meta['_generate-disable-secondary-nav'][0] = ( isset( $stored_meta['_generate-disable-secondary-nav'][0] ) ) ? $stored_meta['_generate-disable-secondary-nav'][0] : '';
	$stored_meta['_generate-disable-post-image'][0] = ( isset( $stored_meta['_generate-disable-post-image'][0] ) ) ? $stored_meta['_generate-disable-post-image'][0] : '';
	$stored_meta['_generate-disable-headline'][0] = ( isset( $stored_meta['_generate-disable-headline'][0] ) ) ? $stored_meta['_generate-disable-headline'][0] : '';
	$stored_meta['_generate-disable-footer'][0] = ( isset( $stored_meta['_generate-disable-footer'][0] ) ) ? $stored_meta['_generate-disable-footer'][0] : '';
	$stored_meta['_generate-disable-top-bar'][0] = ( isset( $stored_meta['_generate-disable-top-bar'][0] ) ) ? $stored_meta['_generate-disable-top-bar'][0] : '';
	?>
	<div class="generate_disable_elements">
		<?php if ( function_exists( 'generate_top_bar' ) ) : ?>
			<label for="meta-generate-disable-top-bar" style="display:block;margin-bottom:3px;" title="<?php _e( 'Top Bar', 'gp-premium' );?>">
				<input type="checkbox" name="_generate-disable-top-bar" id="meta-generate-disable-top-bar" value="true" <?php checked( $stored_meta['_generate-disable-top-bar'][0], 'true' ); ?>>
				<?php _e( 'Top Bar', 'gp-premium' );?>
			</label>
		<?php endif; ?>

		<label for="meta-generate-disable-header" style="display:block;margin-bottom:3px;" title="<?php _e( 'Header', 'gp-premium' );?>">
			<input type="checkbox" name="_generate-disable-header" id="meta-generate-disable-header" value="true" <?php checked( $stored_meta['_generate-disable-header'][0], 'true' ); ?>>
			<?php _e( 'Header', 'gp-premium' );?>
		</label>

		<label for="meta-generate-disable-nav" style="display:block;margin-bottom:3px;" title="<?php _e( 'Primary Navigation', 'gp-premium' );?>">
			<input type="checkbox" name="_generate-disable-nav" id="meta-generate-disable-nav" value="true" <?php checked( $stored_meta['_generate-disable-nav'][0], 'true' ); ?>>
			<?php _e( 'Primary Navigation', 'gp-premium' );?>
		</label>

		<?php if ( function_exists( 'generate_secondary_nav_setup' ) ) : ?>
			<label for="meta-generate-disable-secondary-nav" style="display:block;margin-bottom:3px;" title="<?php _e( 'Secondary Navigation', 'gp-premium' );?>">
				<input type="checkbox" name="_generate-disable-secondary-nav" id="meta-generate-disable-secondary-nav" value="true" <?php checked( $stored_meta['_generate-disable-secondary-nav'][0], 'true' ); ?>>
				<?php _e( 'Secondary Navigation', 'gp-premium' );?>
			</label>
		<?php endif; ?>

		<label for="meta-generate-disable-post-image" style="display:block;margin-bottom:3px;" title="<?php _e( 'Featured Image / Page Header', 'gp-premium' );?>">
			<input type="checkbox" name="_generate-disable-post-image" id="meta-generate-disable-post-image" value="true" <?php checked( $stored_meta['_generate-disable-post-image'][0], 'true' ); ?>>
			<?php _e( 'Featured Image / Page Header', 'gp-premium' );?>
		</label>

		<label for="meta-generate-disable-headline" style="display:block;margin-bottom:3px;" title="<?php _e( 'Content Title', 'gp-premium' );?>">
			<input type="checkbox" name="_generate-disable-headline" id="meta-generate-disable-headline" value="true" <?php checked( $stored_meta['_generate-disable-headline'][0], 'true' ); ?>>
			<?php _e( 'Content Title', 'gp-premium' );?>
		</label>

		<label for="meta-generate-disable-footer" style="display:block;margin-bottom:3px;" title="<?php _e( 'Footer', 'gp-premium' );?>">
			<input type="checkbox" name="_generate-disable-footer" id="meta-generate-disable-footer" value="true" <?php checked( $stored_meta['_generate-disable-footer'][0], 'true' ); ?>>
			<?php _e( 'Footer', 'gp-premium' );?>
		</label>
	</div>
	<?php
}

add_action( 'generate_layout_meta_box_save', 'generate_premium_save_disable_elements_meta' );
/**
 * Save the Disable Elements meta box values
 *
 * @since 1.4
 */
function generate_premium_save_disable_elements_meta( $post_id ) {
	$options = array(
		'_generate-disable-top-bar',
		'_generate-disable-header',
		'_generate-disable-nav',
		'_generate-disable-secondary-nav',
		'_generate-disable-headline',
		'_generate-disable-footer',
		'_generate-disable-post-image'
	);

	foreach ( $options as $key ) {
		$value = filter_input( INPUT_POST, $key, FILTER_SANITIZE_STRING );

		if ( $value ) {
			update_post_meta( $post_id, $key, $value );
		} else {
			delete_post_meta( $post_id, $key );
		}
	}
}
