Files
dostavka_vodi/wp-content/plugins/ultimate-addons-for-gutenberg/classes/class-uagb-block-module.php
User A0264400 a766acdc90 first commit
2026-04-01 23:20:16 +03:00

333 lines
8.0 KiB
PHP

<?php
/**
* UAGB Block Module.
*
* @since 2.0.0
*
* @package uagb
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'UAGB_Block_Module' ) ) {
/**
* Class doc
*/
class UAGB_Block_Module {
/**
* Member Variable
*
* @var instance
*/
private static $instance;
/**
* Block Attributes
*
* @var block_attributes
*/
public static $block_attributes = null;
/**
* Block Assets
*
* @var array<mixed> block_assets
*/
public static $block_assets = null;
/**
* Initiator
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
public function __construct() {
add_filter( 'uag_register_block_static_dependencies', array( __CLASS__, 'uag_register_block_static_dependencies' ) );
}
/**
* Add Blocks Static Assets.
*
* @since 2.0.0
*
* @param array $block_assets Block Assets.
* @return array
*/
public static function uag_register_block_static_dependencies( $block_assets ) {
$blocks = self::get_blocks_info();
foreach ( $blocks as $block ) {
if ( ! isset( $block['static_dependencies'] ) ) {
continue;
}
foreach ( $block['static_dependencies'] as $key => $static_dependencies ) {
if ( ! isset( $static_dependencies['src'] ) ) {
continue;
}
$block_assets[ $key ] = $static_dependencies;
}
}
return $block_assets;
}
/**
* Get frontend CSS.
*
* @since 2.0.0
*
* @param string $slug Block slug.
* @param array $attr Block attributes.
* @param string $id Block id.
* @param bool $is_gbs Is Global Block Style.
* @return array
*/
public static function get_frontend_css( $slug, $attr, $id, $is_gbs = false ) {
return self::get_frontend_assets( $slug, $attr, esc_attr( $id ), 'css', $is_gbs );
}
/**
* Get frontend JS.
*
* @since 2.0.0
*
* @param string $slug Block slug.
* @param array $attr Block attributes.
* @param string $id Block id.
* @return array
*/
public static function get_frontend_js( $slug, $attr, $id ) {
return self::get_frontend_assets( $slug, $attr, esc_attr( $id ), 'js' );
}
/**
* Filter GBS Placeholder Attributes.
*
* @param array $attributes Block attributes.
* @since 2.9.0
* @return array $attributes Block attributes by removing 0.001020304.
*/
public static function gbs_filter_placeholder_attributes( $attributes ) {
if ( ! empty( $attributes ) && is_array( $attributes ) ) {
foreach ( $attributes as $key => $attribute ) {
// Replace 0.001020304 with empty string.
if ( 0.001020304 === $attribute ) {
$attributes[ $key ] = '';
}
}
return $attributes;
}
return array();
}
/**
* Get frontend Assets.
*
* @since 2.0.0
*
* @param string $slug Block slug.
* @param array $attr Block attributes.
* @param string $id Block id.
* @param string $type Asset Type.
* @param bool $is_gbs Is Global Block Style.
* @return array
*/
public static function get_frontend_assets( $slug, $attr, $id, $type = 'css', $is_gbs = false ) {
$attr = self::gbs_filter_placeholder_attributes( $attr ); // Filter out GBS Placeholders if any added.
$assets = array();
if ( 'js' === $type ) {
$assets = '';
}
$blocks_info = self::get_blocks_info();
if ( ! isset( $blocks_info[ 'uagb/' . $slug ] ) || ! isset( $blocks_info[ 'uagb/' . $slug ]['dynamic_assets'] ) ) {
return $assets;
}
$blocks = array(
$slug => $blocks_info[ 'uagb/' . $slug ]['dynamic_assets'],
);
if ( isset( $blocks[ $slug ] ) ) {
$main_dir = UAGB_DIR;
if ( isset( $blocks[ $slug ]['plugin-dir'] ) ) {
$main_dir = $blocks[ $slug ]['plugin-dir'];
}
$block_dir = $main_dir . 'includes/blocks/' . $blocks[ $slug ]['dir'];
$assets_file = realpath( $block_dir . '/frontend.' . $type . '.php' );
if ( is_string( $assets_file ) && file_exists( $assets_file ) ) {
// Set default attributes.
$attr_file = realpath( $block_dir . '/attributes.php' );
if ( is_string( $attr_file ) && file_exists( $attr_file ) ) {
$default_attr = include $attr_file;
$attr = self::get_fallback_values( $default_attr, $attr );
if ( ! empty( $attr['globalBlockStyleId'] ) && $is_gbs ) {
$gbs_class = UAGB_Helper::get_gbs_selector( $attr['globalBlockStyleId'] );
}
}
// Get Assets.
$assets = include $assets_file;
}
}
return $assets;
}
/**
* Get Widget List.
*
* @since 2.0.0
*
* @return array The Widget List.
*/
public static function get_blocks_info() {
return uagb_block()->get_blocks();
}
/**
* Get Block Assets.
*
* @since 1.13.4
*
* @return array The Asset List.
*/
public static function get_block_dependencies() {
$blocks = UAGB_Admin_Helper::get_block_options();
if ( null === self::$block_assets && defined( 'UAGB_URL' ) ) {
self::$block_assets = array(
// Lib.
'uagb-imagesloaded' => array(
'src' => UAGB_URL . 'assets/js/imagesloaded.min.js',
'dep' => array( 'jquery' ),
'type' => 'js',
),
'uagb-slick-js' => array(
'src' => UAGB_URL . 'assets/js/slick.min.js',
'dep' => array( 'jquery' ),
'type' => 'js',
),
'uagb-slick-css' => array(
'src' => UAGB_URL . 'assets/css/slick.min.css',
'dep' => array(),
'type' => 'css',
),
'uagb-masonry' => array(
'src' => UAGB_URL . 'assets/js/isotope.min.js',
'dep' => array( 'jquery' ),
'type' => 'js',
),
'uagb-cookie-lib' => array(
'src' => UAGB_URL . 'assets/js/js_cookie.min.js',
'dep' => array( 'jquery' ),
'skipEditor' => true,
'type' => 'js',
),
'uagb-bodymovin-js' => array(
'src' => UAGB_URL . 'assets/js/uagb-bodymovin.min.js',
'dep' => array(),
'skipEditor' => true,
'type' => 'js',
),
'uagb-countUp-js' => array(
'src' => UAGB_URL . 'assets/js/countUp.min.js',
'dep' => array(),
'type' => 'js',
),
'uagb-swiper-js' => array(
'src' => UAGB_URL . 'assets/js/swiper-bundle.min.js',
'dep' => array(),
'skipEditor' => true,
'type' => 'js',
),
'uagb-swiper-css' => array(
'src' => UAGB_URL . 'assets/css/swiper-bundle.min.css',
'dep' => array(),
'type' => 'css',
),
'uagb-aos-js' => array(
'src' => UAGB_URL . 'assets/js/aos.min.js',
'dep' => array(),
'type' => 'js',
),
'uagb-aos-css' => array(
'src' => UAGB_URL . 'assets/css/aos.min.css',
'dep' => array(),
'type' => 'css',
),
'uagb-block-positioning-js' => array(
'src' => UAGB_URL . 'assets/js/spectra-block-positioning.min.js',
'dep' => array(),
'type' => 'js',
),
'uagb-block-positioning-css' => array(
'src' => UAGB_URL . 'assets/css/spectra-block-positioning.min.css',
'dep' => array(),
'type' => 'css',
),
);
}
return apply_filters( 'uag_register_block_static_dependencies', self::$block_assets );
}
/**
* Returns attributes array with default value wherever required.
*
* @param array $default_attr default attribute value array from attributes.php.
* @param array $attr saved attributes data from database.
* @return array
* @since 2.3.2
*/
public static function get_fallback_values( $default_attr, $attr ) {
foreach ( $default_attr as $key => $value ) {
// sets default value if key is not available in database.
if ( ! isset( $attr[ $key ] ) ) {
$attr[ $key ] = $value;
}
}
return $attr;
}
}
}
/**
* Prepare if class 'UAGB_Block_Module' exist.
* Kicking this off by calling 'get_instance()' method
*/
UAGB_Block_Module::get_instance();