oont-contents/plugins/astra-addon/classes/compatibility/class-astra-addon-gutenberg-compatibility.php
2025-02-08 15:10:23 +01:00

209 lines
6.1 KiB
PHP

<?php
/**
* Astra Addon Gutenberg Compatibility class
*
* @package Astra Addon
* @since 2.5.1
*/
/**
* Astra Addon Gutenberg Builder Compatibility class
*
* @since 2.5.1
*/
class Astra_Addon_Gutenberg_Compatibility extends Astra_Addon_Page_Builder_Compatibility {
/**
* Render Blocks content for post.
*
* @param int $post_id Post id.
*
* @since 2.5.1
*/
public function render_content( $post_id ) {
$output = '';
$current_post = get_post( $post_id, OBJECT );
if ( has_blocks( $current_post ) ) {
$blocks = parse_blocks( $current_post->post_content );
foreach ( $blocks as $block ) {
$output .= render_block( $block );
}
// Automatically embed URLs (like Vimeo) using WP_Embed.
if ( class_exists( 'WP_Embed' ) ) {
$wp_embed = new WP_Embed();
$output = $wp_embed->autoembed( $output );
}
} else {
$output = $current_post->post_content;
}
// Process nested shortcodes as it's for site builder and remove automatic <p> tags around them.
echo do_shortcode( do_shortcode( shortcode_unautop( $output ) ) );
}
/**
* Load Gutenberg Blocks styles & scripts.
*
* @param int $post_id Post id.
*
* @since 2.5.1
*/
public function enqueue_blocks_assets( $post_id ) {
wp_enqueue_style( 'wp-block-library' );
if ( defined( 'UAGB_VER' ) ) {
if ( version_compare( UAGB_VER, '1.23.0', '>=' ) && class_exists( 'UAGB_Post_Assets' ) ) {
if ( 'no' !== get_post_meta( $post_id, 'ast-advanced-hook-enabled', true ) ) {
$post_assets = new UAGB_Post_Assets( $post_id );
$post_assets->enqueue_scripts();
}
} else {
/**
* We can keep this compatibility for some releases and after few releases we need to remove it.
*
* @since 3.5.0
*/
if ( class_exists( 'UAGB_Helper' ) && class_exists( 'UAGB_Config' ) ) {
/**
* Load UAG styles and scripts assets.
*
* @since 2.5.1
*/
if ( version_compare( UAGB_VER, '1.14.11', '>=' ) ) {
$uag_post_meta = get_post_meta( $post_id, 'uag_style_timestamp-css', true );
} else {
$uag_post_meta = get_post_meta( $post_id, 'uagb_style_timestamp-css', true );
}
/**
* Set flag to load UAG assets.
*
* Resolving this to manage "UAG styles not load in some cases for Custom Layouts".
*
* @since 2.6.0
*/
$uag_is_active = false;
$current_post = get_post( $post_id, OBJECT );
$uagb_helper_instance = UAGB_Helper::get_instance();
if ( $uag_post_meta ) {
$uag_is_active = true;
} else {
$uag_helper_parse_func = array( $uagb_helper_instance, 'parse' );
$uag_helper_get_assets_func = array( $uagb_helper_instance, 'get_assets' );
if ( is_callable( $uag_helper_parse_func ) && is_callable( $uag_helper_get_assets_func ) ) {
$post_blocks = $uagb_helper_instance->parse( $current_post->post_content );
$post_uag_assets = $uagb_helper_instance->get_assets( $post_blocks );
if ( ! empty( $post_uag_assets['css'] ) ) {
$uag_is_active = true;
$active_gutenberg_blocks = parse_blocks( $current_post->post_content );
$used_uag_elements = $this->get_active_uag_blocks( $active_gutenberg_blocks );
if ( ! empty( $used_uag_elements ) ) {
add_action(
'wp_enqueue_scripts',
function() use ( $current_post, $used_uag_elements ) {
if ( has_blocks( $current_post ) ) {
$uag_blocks = UAGB_Config::get_block_attributes();
$uag_block_assets = UAGB_Config::get_block_assets();
foreach ( $used_uag_elements as $key => $curr_block_name ) {
$js_assets = ( isset( $uag_blocks[ $curr_block_name ]['js_assets'] ) ) ? $uag_blocks[ $curr_block_name ]['js_assets'] : array();
$css_assets = ( isset( $uag_blocks[ $curr_block_name ]['css_assets'] ) ) ? $uag_blocks[ $curr_block_name ]['css_assets'] : array();
// Script Assets.
foreach ( $js_assets as $asset_handle => $val ) {
wp_register_script(
$val, // Handle.
$uag_block_assets[ $val ]['src'],
$uag_block_assets[ $val ]['dep'],
UAGB_VER,
true
);
wp_enqueue_script( $val );
}
// Style Assets.
foreach ( $css_assets as $asset_handle => $val ) {
wp_register_style(
$val, // Handle.
$uag_block_assets[ $val ]['src'],
$uag_block_assets[ $val ]['dep'],
UAGB_VER
);
wp_enqueue_style( $val );
}
}
}
},
11
);
}
}
}
}
if ( $uag_is_active ) {
$uag_generated_stylesheet_func = array( $uagb_helper_instance, 'get_generated_stylesheet' );
/**
* As per UAG Team discussion they are going to keep this stylesheet for upcoming few updates, after their stable release UAGB_VER = v1.23.0. Later they are going to deprecate it.
*
* @since 3.5.0
*/
wp_enqueue_style(
'uagb-block-css', // UAG-Handle.
UAGB_URL . 'dist/blocks.style.css', // Block style CSS.
array(),
UAGB_VER
);
if ( is_callable( $uag_generated_stylesheet_func ) ) {
$uagb_helper_instance->get_generated_stylesheet( $current_post );
}
}
}
}
}
}
/**
* Get all UAG specific blocks from current Custom Layout.
*
* @param array $active_gutenberg_blocks has all gutenberg blocks used in this Custom Layout.
* @return array $uag_block_names having all UAG block names
* @since 2.6.0
*/
public function get_active_uag_blocks( array $active_gutenberg_blocks ) {
$uag_block_names = array();
foreach ( $active_gutenberg_blocks as $key => $curr_block_name ) {
if ( 'blockName' === $key && strpos( $curr_block_name, 'uagb/' ) !== false ) {
$uag_block_names[] = $curr_block_name;
}
if ( is_array( $curr_block_name ) ) {
$uag_block_names = array_merge( $uag_block_names, $this->get_active_uag_blocks( $curr_block_name ) );
}
}
return $uag_block_names;
}
}