OwlCyberSecurity - MANAGER
Edit File: class-widgets-loader.php
<?php /** * Widgets loader for Header Footer Elementor. * * @package HFE * @author HFE * @copyright Copyright (c) 2018, HFE * @link http://brainstormforce.com/ * @since HFE 1.2.0 */ namespace HFE\WidgetsManager; use Elementor\Plugin; use Elementor\Utils; defined( 'ABSPATH' ) or exit; /** * Set up Widgets Loader class */ class Widgets_Loader { /** * Instance of Widgets_Loader. * * @since 1.2.0 * @var null */ private static $_instance = null; /** * Get instance of Widgets_Loader * * @since 1.2.0 * @return Widgets_Loader */ public static function instance() { if ( ! isset( self::$_instance ) ) { self::$_instance = new self(); } return self::$_instance; } /** * Setup actions and filters. * * @since 1.2.0 */ private function __construct() { // Register category. add_action( 'elementor/elements/categories_registered', [ $this, 'register_widget_category' ] ); // Register widgets. add_action( 'elementor/widgets/register', [ $this, 'register_widgets' ] ); // Add svg support. add_filter( 'upload_mimes', [ $this, 'hfe_svg_mime_types' ] ); // PHPCS:Ignore WordPressVIPMinimum.Hooks.RestrictedHooks.upload_mimes // Refresh the cart fragments. if ( class_exists( 'woocommerce' ) ) { add_filter( 'woocommerce_add_to_cart_fragments', [ $this, 'wc_refresh_mini_cart_count' ] ); } } /** * Returns Script array. * * @return array() * @since 1.3.0 */ public static function get_widget_script() { $js_files = [ 'hfe-frontend-js' => [ 'path' => 'inc/js/frontend.js', 'dep' => [ 'jquery' ], 'in_footer' => true, ], ]; return $js_files; } /** * Returns Script array. * * @return array() * @since 1.3.0 */ public static function get_widget_list() { $widget_list = [ 'retina', 'copyright', 'copyright-shortcode', 'navigation-menu', 'menu-walker', 'site-title', 'page-title', 'site-tagline', 'site-logo', 'cart', 'search-button', ]; return $widget_list; } /** * Include Widgets files * * Load widgets files * * @since 1.2.0 * @access public */ public function include_widgets_files() { $js_files = $this->get_widget_script(); $widget_list = $this->get_widget_list(); if ( ! empty( $widget_list ) ) { foreach ( $widget_list as $handle => $data ) { require_once HFE_DIR . '/inc/widgets-manager/widgets/class-' . $data . '.php'; } } if ( ! empty( $js_files ) ) { foreach ( $js_files as $handle => $data ) { wp_register_script( $handle, HFE_URL . $data['path'], $data['dep'], HFE_VER, $data['in_footer'] ); } } $tag_validation = [ 'article', 'aside', 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'main', 'nav', 'p', 'section', 'span' ]; wp_localize_script( 'elementor-editor', 'HfeWidgetsData', [ 'allowed_tags' => $tag_validation, ] ); // Emqueue the widgets style. wp_enqueue_style( 'hfe-widgets-style', HFE_URL . 'inc/widgets-css/frontend.css', [], HFE_VER ); } /** * Provide the SVG support for Retina Logo widget. * * @param array $mimes which return mime type. * * @since 1.2.0 * @return $mimes. */ public function hfe_svg_mime_types( $mimes ) { // New allowed mime types. $mimes['svg'] = 'image/svg+xml'; return $mimes; } /** * Register Category * * @since 1.2.0 * @param object $this_cat class. */ public function register_widget_category( $this_cat ) { $category = __( 'Elementor Header & Footer Builder', 'header-footer-elementor' ); $this_cat->add_category( 'hfe-widgets', [ 'title' => $category, 'icon' => 'eicon-font', ] ); return $this_cat; } /** * Register Widgets * * Register new Elementor widgets. * * @since 1.2.0 * @access public */ public function register_widgets() { // Its is now safe to include Widgets files. $this->include_widgets_files(); // Register Widgets. Plugin::instance()->widgets_manager->register( new Widgets\Retina() ); Plugin::instance()->widgets_manager->register( new Widgets\Copyright() ); Plugin::instance()->widgets_manager->register( new Widgets\Navigation_Menu() ); Plugin::instance()->widgets_manager->register( new Widgets\Page_Title() ); Plugin::instance()->widgets_manager->register( new Widgets\Site_Title() ); Plugin::instance()->widgets_manager->register( new Widgets\Site_Tagline() ); Plugin::instance()->widgets_manager->register( new Widgets\Site_Logo() ); Plugin::instance()->widgets_manager->register( new Widgets\Search_Button() ); if ( class_exists( 'woocommerce' ) ) { Plugin::instance()->widgets_manager->register( new Widgets\Cart() ); } } /** * Cart Fragments. * * Refresh the cart fragments. * * @since 1.5.0 * @param array $fragments Array of fragments. * @access public */ public function wc_refresh_mini_cart_count( $fragments ) { $has_cart = is_a( WC()->cart, 'WC_Cart' ); if ( ! $has_cart ) { return $fragments; } $cart_badge_count = ( null !== WC()->cart ) ? WC()->cart->get_cart_contents_count() : ''; if ( null !== WC()->cart ) { $fragments['span.hfe-cart-count'] = '<span class="hfe-cart-count">' . WC()->cart->get_cart_contents_count() . '</span>'; $fragments['span.elementor-button-text.hfe-subtotal'] = '<span class="elementor-button-text hfe-subtotal">' . WC()->cart->get_cart_subtotal() . '</span>'; } $fragments['span.elementor-button-icon[data-counter]'] = '<span class="elementor-button-icon" data-counter="' . $cart_badge_count . '"><i class="eicon" aria-hidden="true"></i><span class="elementor-screen-only">' . __( 'Cart', 'header-footer-elementor' ) . '</span></span>'; return $fragments; } /** * Validate an HTML tag against a safe allowed list. * * @since 1.5.8 * @param string $tag specifies the HTML Tag. * @access public */ public static function validate_html_tag( $tag ) { // Check if Elementor method exists, else we will run custom validation code. if ( method_exists( 'Elementor\Utils', 'validate_html_tag' ) ) { return Utils::validate_html_tag( $tag ); } else { $allowed_tags = [ 'article', 'aside', 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'main', 'nav', 'p', 'section', 'span' ]; return in_array( strtolower( $tag ), $allowed_tags ) ? $tag : 'div'; } } } /** * Initiate the class. */ Widgets_Loader::instance();