208 lines
4.5 KiB
PHP
208 lines
4.5 KiB
PHP
<?php
|
|
/**
|
|
* Module Use Detection class.
|
|
*
|
|
* @package Divi
|
|
* @subpackage Builder
|
|
* @since 4.10.0
|
|
*/
|
|
|
|
/**
|
|
* Handles Module Use Detection.
|
|
*
|
|
* @since 4.10.0
|
|
*/
|
|
class ET_Builder_Module_Use_Detection {
|
|
|
|
/**
|
|
* Module Slugs Used.
|
|
*
|
|
* @access protected
|
|
* @var array
|
|
*/
|
|
protected $_modules_used = [];
|
|
|
|
/**
|
|
* Module Attrs Used.
|
|
*
|
|
* @access protected
|
|
* @var array
|
|
*/
|
|
protected $_module_attrs_used = [];
|
|
|
|
/**
|
|
* Module Attr Values Used.
|
|
*
|
|
* @access protected
|
|
* @var array
|
|
*/
|
|
protected $_module_attr_values_used = [];
|
|
|
|
/**
|
|
* Valid Shortcode Slugs.
|
|
*
|
|
* @access protected
|
|
* @var array
|
|
*/
|
|
protected $_valid_slugs = [];
|
|
|
|
/**
|
|
* `ET_Builder_Module_Use_Detection` instance.
|
|
*
|
|
* @var ET_Builder_Module_Use_Detection
|
|
*/
|
|
private static $_instance;
|
|
|
|
/**
|
|
* Construct instance.
|
|
*/
|
|
public function __construct() {
|
|
add_filter( 'pre_do_shortcode_tag', [ $this, 'log_slug_used' ], 99, 3 );
|
|
add_action( 'wp_footer', [ $this, 'footer' ], 1000 );
|
|
|
|
add_action( 'et_builder_ready', array( $this, '_setup_valid_slugs' ), 100 );
|
|
}
|
|
|
|
/**
|
|
* Get instance.
|
|
*/
|
|
public static function instance() {
|
|
if ( ! self::$_instance ) {
|
|
self::$_instance = new static();
|
|
}
|
|
|
|
return self::$_instance;
|
|
}
|
|
|
|
/**
|
|
* Get valid slugs.
|
|
*/
|
|
public function _setup_valid_slugs() {
|
|
$this->_valid_slugs = ET_Builder_Element::get_all_module_slugs();
|
|
}
|
|
|
|
/**
|
|
* Log the Shortcode Tag/Slug.
|
|
*
|
|
* @since 4.10.0
|
|
* @access public
|
|
* @param mixed $override Whether to override do_shortcode return value or not.
|
|
* @param string $tag Shortcode tag.
|
|
* @param array $attrs Shortcode attrs.
|
|
* @return mixed
|
|
*/
|
|
public function log_slug_used( $override, $tag, $attrs ) {
|
|
$interested_attrs_and_values = apply_filters(
|
|
'et_builder_module_attrs_values_used',
|
|
[
|
|
'gutter_width',
|
|
'animation_style',
|
|
'sticky_position',
|
|
'specialty',
|
|
'use_custom_gutter',
|
|
'font_icon',
|
|
'button_icon',
|
|
'hover_icon',
|
|
'scroll_down_icon',
|
|
'social_network',
|
|
'show_in_lightbox',
|
|
'fullwidth',
|
|
'scroll_vertical_motion_enable',
|
|
'scroll_horizontal_motion_enable',
|
|
'scroll_fade_enable',
|
|
'scroll_scaling_enable',
|
|
'scroll_rotating_enable',
|
|
'scroll_blur_enable',
|
|
'show_content',
|
|
]
|
|
);
|
|
|
|
/**
|
|
* The "gallery" shortcode is not part of the Divi modules but is used for enqueuing MagnificPopup
|
|
* when Divi Gallery is enabled under Theme Options > Enable Divi Gallery, so we need to include
|
|
* it in late detection for edge cases such as shortcodes hardcoded into child themes.
|
|
*/
|
|
$additional_valid_slugs = apply_filters(
|
|
'et_builder_valid_module_slugs',
|
|
[
|
|
'gallery',
|
|
]
|
|
);
|
|
|
|
$valid_slugs = array_unique( array_merge( $this->_valid_slugs, $additional_valid_slugs ) );
|
|
|
|
// Log the shortcode tags used.
|
|
if ( in_array( $tag, $valid_slugs, true ) ) {
|
|
$this->_modules_used[] = $tag;
|
|
$this->_modules_used = array_unique( $this->_modules_used );
|
|
|
|
if ( ! is_null( $attrs ) && ! is_array( $attrs ) ) {
|
|
$attrs = (array) $attrs;
|
|
}
|
|
|
|
$found_interested_attr_and_values = array_intersect( array_keys( $attrs ), $interested_attrs_and_values );
|
|
foreach ( $found_interested_attr_and_values as $key => $attr_name ) {
|
|
if ( empty( $this->_module_attr_values_used[ $attr_name ] ) ) {
|
|
$this->_module_attr_values_used[ $attr_name ] = [];
|
|
}
|
|
|
|
$this->_module_attr_values_used[ $attr_name ][] = $attrs[ $attr_name ];
|
|
$this->_module_attr_values_used[ $attr_name ] = array_unique( $this->_module_attr_values_used[ $attr_name ] );
|
|
}
|
|
}
|
|
|
|
return $override;
|
|
}
|
|
|
|
/**
|
|
* Add footer actions.
|
|
*/
|
|
public function footer() {
|
|
/**
|
|
* Fires after wp_footer hook and contains unique array of
|
|
* slugs of the modules that were used on the page load.
|
|
*
|
|
* @param array $_used_modules Module slugs used on the page load.
|
|
*
|
|
* @since 4.10.0
|
|
*/
|
|
do_action( 'et_builder_modules_used', $this->_modules_used );
|
|
}
|
|
|
|
/**
|
|
* Get modules used.
|
|
*
|
|
* @return array List of module slugs used.
|
|
* @since 4.10.0
|
|
* @access public
|
|
*/
|
|
public function get_modules_used() {
|
|
return $this->_modules_used;
|
|
}
|
|
|
|
/**
|
|
* Get module attrs used.
|
|
*
|
|
* @return array List of interested module attrs used.
|
|
* @since 4.10.0
|
|
* @access public
|
|
*/
|
|
public function get_module_attrs_used() {
|
|
return $this->_module_attrs_used;
|
|
}
|
|
|
|
/**
|
|
* Get module attr values used.
|
|
*
|
|
* @return array List of interested module attrs and values used.
|
|
* @since 4.10.0
|
|
* @access public
|
|
*/
|
|
public function get_module_attr_values_used() {
|
|
return $this->_module_attr_values_used;
|
|
}
|
|
|
|
}
|
|
|
|
ET_Builder_Module_Use_Detection::instance();
|