Your IP : 216.73.216.1
<?php
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'EbStyleHandlerParseCss' ) ) {
class EbStyleHandlerParseCss
{
private static $instance;
public static function init()
{
if ( null === self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
public function __construct()
{
}
/**
* Get Responsive Breakpoints
*/
public static function get_responsive_breakpoints( $size = 'mobile' )
{
$settings = get_option( 'eb_settings', [ ] );
$settingsData = [ ];
if ( array_key_exists( 'responsiveBreakpoints', $settings ) ) {
$settingsData = $settings[ 'responsiveBreakpoints' ];
if ( gettype( $settingsData ) === 'string' && strlen( $settingsData ) > 0 ) {
$settingsData = (array) json_decode( html_entity_decode( stripslashes( $settingsData ) ) );
}
} else {
$settings[ 'responsiveBreakpoints' ] = [
'tablet' => 1024,
'mobile' => 767
];
update_option( 'eb_settings', $settings );
$settingsData = $settings[ 'responsiveBreakpoints' ];
}
return $settingsData[ $size ];
}
/**
* Recursive function for parsing blocks
*/
public static function eb_block_style_recursive( $block, &$eb_blocks )
{
if ( count( $block ) > 0 ) {
foreach ( $block as $item ) {
$attributes = $item[ 'attrs' ];
$blockId = "";
if ( isset( $attributes[ 'blockId' ] ) && ! empty( $attributes[ 'blockId' ] ) ) {
$blockId = $attributes[ 'blockId' ];
}
$blockMeta = "";
if ( isset( $attributes[ 'blockMeta' ] ) && ! empty( $attributes[ 'blockMeta' ] ) ) {
$blockMeta = $attributes[ 'blockMeta' ];
}
$commonStyles = "";
if ( isset( $attributes[ 'commonStyles' ] ) && ! empty( $attributes[ 'commonStyles' ] ) ) {
$commonStyles = $attributes[ 'commonStyles' ];
}
$customCss = "";
if ( isset( $attributes[ 'customCss' ] ) && ! empty( $attributes[ 'customCss' ] ) ) {
$customCss = $attributes[ 'customCss' ];
}
if ( isset( $attributes[ 'ref' ] ) && ! empty( $attributes[ 'ref' ] ) && $item[ "blockName" ] === "core/block" ) {
$reusable_block = get_post( $attributes[ 'ref' ] );
$reusable_content = ! empty( $reusable_block ) ? parse_blocks( $reusable_block->post_content ) : [ ];
$reusable_blocks = [ ];
$eb_blocks[ "reusableBlocks" ][ $attributes[ 'ref' ] ] = self::eb_block_style_recursive( $reusable_content, $reusable_blocks );
} else {
if ( isset( $item[ "innerBlocks" ] ) && count( $item[ "innerBlocks" ] ) > 0 ) {
self::eb_block_style_recursive( $item[ 'innerBlocks' ], $eb_blocks );
if ( isset( $attributes[ 'blockMeta' ] ) && ! empty( $attributes[ 'blockMeta' ] ) ) {
$eb_blocks[ $blockId ] = [
'blockMeta' => $blockMeta,
'commonStyles' => $commonStyles,
'customCss' => $customCss
];
}
} else if ( isset( $attributes[ 'blockMeta' ] ) && ! empty( $attributes[ 'blockMeta' ] ) ) {
$eb_blocks[ $blockId ] = [
'blockMeta' => $blockMeta,
'commonStyles' => $commonStyles,
'customCss' => $customCss
];
}
}
}
}
return $eb_blocks;
}
/**
* Blockarray to Style Array Function
*/
public static function blocks_to_style_array( $blocks, $styles = [ ] )
{
if ( is_array( $blocks ) && count( $blocks ) > 0 ) {
foreach ( $blocks as $blockId => $block ) {
if ( 'reusableBlocks' === $blockId ) {
if ( is_array( $block ) && count( $block ) > 0 ) {
foreach ( $block as $reusableId => $reusableBlock ) {
self::blocks_to_style_array( $reusableBlock, $styles );
}
}
} else {
$styles[ $blockId ] = [
'desktop' => "",
'tab' => "",
'mobile' => "",
'customCss' => ""
];
if ( is_array( $block ) && count( $block ) > 0 ) {
foreach ( $block as $value ) {
if ( is_array( $value ) && count( $value ) > 0 ) {
if ( isset( $value[ "desktop" ] ) ) {
$styles[ $blockId ][ "desktop" ] .= $value[ "desktop" ];
}
if ( isset( $value[ "tab" ] ) ) {
$styles[ $blockId ][ "tab" ] .= $value[ "tab" ];
}
if ( isset( $value[ "mobile" ] ) ) {
$styles[ $blockId ][ "mobile" ] .= $value[ "mobile" ];
}
} else if ( isset( $block[ 'customCss' ] ) && is_string( $block[ 'customCss' ] ) && strlen( $block[ 'customCss' ] ) > 0 ) {
$styles[ $blockId ][ "customCss" ] .= $block[ 'customCss' ];
}
}
}
}
}
}
return $styles;
}
/**
* Enqueue frontend css for post if have one
* @param array
* @return string
* @since 1.0.2
*/
public static function build_css( $style_object )
{
$block_styles = $style_object;
$css = '';
foreach ( $block_styles as $block_style_key => $block_style ) {
if ( ! empty( $block_css = (array) $block_style ) ) {
$css .= sprintf(
'/* %1$s Starts */',
$block_style_key
);
foreach ( $block_css as $media => $style ) {
switch ( $media ) {
case "desktop":
$css .= preg_replace( '/\s+/', ' ', $style );
break;
case "tab":
$css .= ' @media(max-width: ' . self::get_responsive_breakpoints( 'tablet' ) . 'px){';
$css .= preg_replace( '/\s+/', ' ', $style );
$css .= '}';
break;
case "mobile":
$css .= ' @media(max-width: ' . self::get_responsive_breakpoints( 'mobile' ) . 'px){';
$css .= preg_replace( '/\s+/', ' ', $style );
$css .= '}';
break;
case "customCss":
$css .= preg_replace( '/\s+/', ' ', $style );
break;
}
}
$css .= sprintf(
'/* =%1$s= Ends */',
$block_style_key
);
}
}
return trim( $css );
}
/**
* Helper function to get string between 2 string
* @since 3.3.0
*/
public static function get_between_data( $string, $start, $end )
{
$pos_string = stripos( $string, $start );
$substr_data = substr( $string, $pos_string );
$string_two = substr( $substr_data, strlen( $start ) );
$second_pos = stripos( $string_two, $end );
$string_three = substr( $string_two, 0, $second_pos );
// remove whitespaces from result
$result_unit = trim( $string_three );
// return result_unit
return $result_unit;
}
/**
* Is Gutenberg Editor
*/
public static function eb_stylehandler_is_gutenberg_editor( $pagenow, $param )
{
if ( $pagenow == 'post-new.php' || $pagenow == 'post.php' || $pagenow == 'site-editor.php' ) {
return true;
}
if ( $pagenow == 'themes.php' && ! empty( $param ) && str_contains( $param, 'gutenberg-edit-site' ) ) {
return true;
}
return false;
}
}
EbStyleHandlerParseCss::init();
}