Current File : /home/mdkeenpw/www/wp-content/plugins/trx_addons/components/api/kadence-blocks/kadence-blocks.php
<?php
/**
 * Plugin support: Kadence Blocks
 *
 * @package ThemeREX Addons
 * @since v2.28.1
 */

// Don't load directly
if ( ! defined( 'TRX_ADDONS_VERSION' ) ) {
	exit;
}

if ( ! function_exists( 'trx_addons_exists_kadence_blocks' ) ) {
	/**
	 * Check if the plugin 'Kadence Blocks' is installed and activated
	 *
	 * @return bool  True if a plugin is installed and activated
	 */
	function trx_addons_exists_kadence_blocks() {
		return function_exists( 'kadence_blocks_init' );
	}
}

if ( ! function_exists( 'trx_addons_is_built_with_kadence_blocks' ) ) {
	/**
	 * Check if the post is built with Kadence Blocks
	 *
	 * @param int $post_id  post ID
	 * 
	 * @return bool  true if the post is built with Kadence Blocks
	 */
	function trx_addons_is_built_with_kadence_blocks( $post_id ) {
		$rez = false;
		if ( trx_addons_exists_kadence_blocks() && ! empty( $post_id ) ) {
			$content = '';
			if ( $post_id == get_the_ID() ) {
				$content = get_the_content();
			} else {
				$post = get_post( $post_id );
				if ( ! empty( $post ) ) {
					$content = $post->post_content;
				}
			}
			$rez = strpos( $content, '<!-- wp:kadence/') !== false;
		}
		return $rez;
	}
}

if ( ! function_exists( 'trx_addons_kadence_blocks_need_load_styles' ) ) {
	add_action( 'wp_enqueue_scripts', 'trx_addons_kadence_blocks_need_load_styles', TRX_ADDONS_ENQUEUE_SCRIPTS_PRIORITY );
	/**
	 * Detect if the page is built with Kadence Blocks and set flag to load styles
	 * 
	 * @hooked 'wp_enqueue_scripts'
	 */
	function trx_addons_kadence_blocks_need_load_styles() {
		if ( trx_addons_exists_kadence_blocks() ) {
			global $TRX_ADDONS_STORAGE;
			$TRX_ADDONS_STORAGE['cur_page_built_with_kadence_blocks'] = trx_addons_is_singular() && trx_addons_is_built_with_kadence_blocks( get_the_ID() );
		}
	}
}


if ( ! function_exists( 'trx_addons_kadence_blocks_add_styles_to_layout' ) ) {
	add_action( 'trx_addons_filter_sc_layout_content_from_builder', 'trx_addons_kadence_blocks_add_styles_to_layout', 10, 3 );
	/**
	 * Add styles to the layout from the Kadence Blocks plugin
	 * 
	 * @hooked 'trx_addons_filter_sc_layout_content_from_builder'
	 */
	function trx_addons_kadence_blocks_add_styles_to_layout( $content, $post_id, $builder ) {
		static $styles_included = array();
		if ( in_array( $builder, array( 'gb', 'gutenberg' ) )
			&& trx_addons_exists_kadence_blocks()
			&& class_exists( 'Kadence_Blocks_CSS' )
			&& empty( $TRX_ADDONS_STORAGE['cur_page_built_with_kadence_blocks'] )
			&& empty( $styles_included[ $post_id ] )
			&& trx_addons_is_built_with_kadence_blocks( $post_id )
		) {
			$styles_included[ $post_id ] = true;
			$kadence = Kadence_Blocks_CSS::get_instance();
			$styles = '';
			// Collect main styles
			if ( ! empty( $kadence::$styles ) && is_array( $kadence::$styles ) ) {
				foreach ( $kadence::$styles as $value ) {
					$styles .= $value;
				}
				$kadence::$styles = array();
			}
			// Collect custom styles
			if ( ! empty( $kadence::$custom_styles ) && is_array( $kadence::$custom_styles ) ) {
				foreach ( $kadence::$custom_styles as $value ) {
					$styles .= $value;
				}
				$kadence::$custom_styles = array();
			}
			// Add all styles to the layout
			if ( ! empty( $styles ) ) {

				// Add styles to the layout content
				if ( apply_filters( 'trx_addons_filter_add_kadence_blocks_styles_to_layout', true, $post_id, $builder ) ) {
					$content .= '<style id="trx_addons_kadence_blocks_css_' . esc_attr( $post_id ) . '" type="text/css">' . $styles . '</style>';

				// Enqueue styles
				} else {
					$id = "trx_addons_kadence_blocks_css_{$post_id}";
					wp_register_style( $id, false );
					wp_enqueue_style( $id );
					wp_add_inline_style( $id, $styles );
				}
			}
		}
		return $content;
	}
}

if ( ! function_exists( 'trx_addons_kadence_blocks_disable_move_styles_before_theme_styles' ) ) {
	add_filter( 'trx_addons_filter_move_3rd_party_styles_before_theme_styles', 'trx_addons_kadence_blocks_disable_move_styles_before_theme_styles', 10, 2 );
	/**
	 * Disable to move styles from the Kadence Blocks plugin before the theme styles - they are should be moved to the end of the head
	 * 
	 * @hooked 'trx_addons_filter_move_3rd_party_styles_before_theme_styles'
	 * 
	 * @param bool $allow  true - move styles before the theme styles, false - move styles after the theme styles (to the end of the head)
	 * @param string $tag  the tag content: <link> or <style>...</style>
	 * 
	 * @return bool  true - move styles before the theme styles, false - move styles after the theme styles (to the end of the head)
	 */
	function trx_addons_kadence_blocks_disable_move_styles_before_theme_styles( $allow, $tag = '' ) {
		if ( trx_addons_exists_kadence_blocks() && ( strpos( $tag, 'kadence-blocks' ) !== false || strpos( $tag, 'kadence_blocks' ) !== false ) ) {
			$allow = false;
		}
		return $allow;
	}
}