Current Path : /proc/self/cwd/sudancam.sd/wp-content/plugins/ibtana-visual-editor/classes/ |
Current File : //proc/self/cwd/sudancam.sd/wp-content/plugins/ibtana-visual-editor/classes/class-ive-helper.php |
<?php /** * IVE Helper. * * @package IVE */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } if ( ! class_exists( 'IVE_Helper' ) ) { /** * Class IVE_Helper. */ final class IVE_Helper { /** * Member Variable * * @since 0.0.1 * @var instance */ private static $instance; /** * Member Variable * * @since 0.0.1 * @var instance */ public static $block_list; /** * Page Blocks Variable * * @since 1.6.0 * @var instance */ public static $page_blocks; /** * Current Block List * * @since 1.13.4 * @var current_block_list */ public static $current_block_list = array(); /** * IVE Block Flag * * @since 1.13.4 * @var ive_flag */ public static $ive_flag = false; /** * IVE File Generation Flag * * @since 1.14.0 * @var file_generation */ public static $file_generation = 'disabled'; /** * IVE File Generation Fallback Flag for CSS * * @since 1.15.0 * @var file_generation */ public static $fallback_css = false; public static $custom_fallback_css = false; /** * IVE File Generation Fallback Flag for JS * * @since 1.15.0 * @var file_generation */ public static $fallback_js = false; public static $custom_fallback_js = false; /** * Enque Style Variable * * @since 1.14.0 * @var instance */ public static $css_file_handler = array(); public static $can_enqueue_custom_assets = false; /** * Stylesheet * * @since 1.13.4 * @var stylesheet */ public static $stylesheet; public static $custom_stylesheet; /** * Script * * @since 1.13.4 * @var script */ public static $script = ''; public static $custom_script = ''; /** * Google fonts to enqueue * * @var array */ public static $gfonts = array(); /** * Initiator * * @since 0.0.1 */ public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor */ public function __construct() { if ( ! defined( 'FS_CHMOD_FILE' ) ) { define( 'FS_CHMOD_FILE', ( fileperms( ABSPATH . 'index.php' ) & 0777 | 0644 ) ); } self::$block_list = IVE_Config::get_block_attributes(); self::$file_generation = self::allow_file_generation(); $this->ive_check_if_files_can_be_enqueued(); add_action( 'wp', array( $this, 'generate_assets' ), 99 ); add_action( 'wp_enqueue_scripts', array( $this, 'generate_asset_files' ), 1 ); add_action( 'wp_enqueue_scripts', array( $this, 'block_assets' ), 10 ); add_action( 'wp_head', array( $this, 'frontend_gfonts' ), 120 ); add_action( 'wp_head', array( $this, 'print_stylesheet' ), 80 ); add_action( 'wp_footer', array( $this, 'print_script' ), 1000 ); } public function ive_check_if_files_can_be_enqueued() { $iepa_key = get_option( str_replace( '-', '_', 'ibtana-ecommerce-product-addons' ) . '_license_key' ); $was_license_active_or_expired = false; $is_license_active = false; $is_license_suspended = false; if ( $iepa_key ) { if ( isset( $iepa_key['license_key'] ) && isset( $iepa_key['license_status'] ) ) { if ( ( $iepa_key['license_key'] != '' ) && ( isset( $iepa_key['is_expired'] ) && ( $iepa_key['is_expired'] == true ) ) ) { $was_license_active_or_expired = true; } if ( ( $iepa_key['license_key'] != '' ) && ( $iepa_key['license_status'] == true ) ) { $is_license_active = true; } if ( isset( $iepa_key['is_suspended'] ) && ( $iepa_key['is_suspended'] == true ) ) { $is_license_suspended = true; } } } if ( ( ( $was_license_active_or_expired == true ) || ( $is_license_active == true ) ) && ( $is_license_suspended == false ) ) { self::$can_enqueue_custom_assets = true; } } /** * This is the action where we create dynamic asset files. * CSS Path : uploads/ive-plugin/ive-style-{post_id}-{timestamp}.css * JS Path : uploads/ive-plugin/ive-script-{post_id}-{timestamp}.js * * @since 1.15.0 */ public function generate_asset_files() { global $content_width; // self::$stylesheet = str_replace( '#CONTENT_WIDTH#', $content_width . 'px', self::$stylesheet ); self::$stylesheet = str_replace( '#CONTENT_WIDTH#', $content_width . 'px', isset(self::$stylesheet) ? self::$stylesheet : '' ); if ( '' !== self::$script ) { self::$script = 'document.addEventListener("DOMContentLoaded", function(){ ' . self::$script . ' })'; } if ( 'enabled' === self::$file_generation ) { self::file_write( self::$stylesheet, 'css' ); self::file_write( self::$script, 'js' ); // Custom File Write if ( self::$can_enqueue_custom_assets == true ) { self::custom_file_write( self::$custom_stylesheet, 'custom_css' ); self::custom_file_write( self::$custom_script, 'custom_js' ); } } } public static function custom_file_write( $style_data, $type ) { $post_id = get_the_ID(); if ( ! $post_id ) { return false; } $var = ( 'custom_css' === $type ) ? 'custom_css' : 'custom_js'; $file_system = self::get_instance()->get_filesystem(); // Asset Info $uploads_dir = self::get_upload_dir(); $css_suffix = 'ive-custom-style'; $js_suffix = 'ive-custom-script'; $assets_info = array(); if ( 'custom_css' === $type ) { $assets_info['custom_css'] = $uploads_dir['path'] . $css_suffix . '.css'; $assets_info['custom_css_url'] = $uploads_dir['url'] . $css_suffix . '.css'; } elseif ( 'custom_js' === $type ) { $assets_info['custom_js'] = $uploads_dir['path'] . $js_suffix . '.js'; $assets_info['custom_js_url'] = $uploads_dir['url'] . $js_suffix . '.js'; } $relative_src_path = $assets_info[ $var ]; if ( '' === $style_data ) { /** * This is when the generated CSS is blank. * This means this page does not use IVE block. * In this scenario we need to delete the existing file. * This will ensure there are no extra files added for user. */ if ( file_exists( $relative_src_path ) ) { // Delete old file. wp_delete_file( $relative_src_path ); } return true; } /** * Need to create new assets. */ if ( ! $file_system->exists( $relative_src_path ) ) { $did_create = self::create_custom_file( $assets_info, $style_data, $type ); if ( $did_create ) { self::$css_file_handler = array_merge( self::$css_file_handler, $assets_info ); } return $did_create; } /** * File already exists. * Need to match the content. * If new content is present we update the current assets. */ if ( file_exists( $relative_src_path ) ) { $old_data = $file_system->get_contents( $relative_src_path ); if ( $old_data !== $style_data ) { // Delete old file. wp_delete_file( $relative_src_path ); // Create a new file. $did_create = self::create_custom_file( $assets_info, $style_data, $type ); if ( $did_create ) { self::$css_file_handler = array_merge( self::$css_file_handler, $assets_info ); } return $did_create; } } self::$css_file_handler = array_merge( self::$css_file_handler, $assets_info ); return true; } public static function create_custom_file( $assets_info, $style_data, $type ) { $file_system = self::get_instance()->get_filesystem(); // Create a new file. $result = $file_system->put_contents( $assets_info[ $type ], $style_data, FS_CHMOD_FILE ); return $result; } /** * Check if IVE upload folder has write permissions or not. * * @since 1.14.9 * @return bool true or false. */ public static function has_read_write_permissions() { $upload_dir = self::get_upload_dir(); $file_created = self::get_instance()->get_filesystem()->put_contents( $upload_dir['path'] . 'index.html', '' ); if ( ! $file_created ) { return false; } return true; } /** * Returns an array of paths for the upload directory * of the current site. * * @since 1.14.0 * @return array */ public static function get_upload_dir() { $wp_info = wp_upload_dir( null, false ); // SSL workaround. if ( self::is_ssl() ) { $wp_info['baseurl'] = str_ireplace( 'http://', 'https://', $wp_info['baseurl'] ); } $dir_name = basename( IVE_DIR ); if ( 'ibtana-visual-editor' === $dir_name ) { $dir_name = 'ive-plugin'; } // Build the paths. $dir_info = array( 'path' => trailingslashit( trailingslashit( $wp_info['basedir'] ) . $dir_name ), 'url' => trailingslashit( trailingslashit( $wp_info['baseurl'] ) . $dir_name ), ); // Create the upload dir if it doesn't exist. if ( ! file_exists( $dir_info['path'] ) ) { // Create the directory. $wp_filesystem = self::get_instance()->get_filesystem(); $wp_filesystem->mkdir( $dir_info['path'] ); // Add an index file for security. $wp_filesystem->put_contents( $dir_info['path'] . 'index.html', '', FS_CHMOD_FILE ); } return apply_filters( 'ive_get_upload_dir', $dir_info ); } /** * Checks to see if the site has SSL enabled or not. * * @since 1.14.0 * @return bool */ public static function is_ssl() { if ( is_ssl() || ( 0 === stripos( get_option( 'siteurl' ), 'https://' ) ) || ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) { return true; } return false; } /** * Get an instance of WP_Filesystem_Direct. * * @since 1.14.4 * @return object A WP_Filesystem_Direct instance. */ public function get_filesystem() { global $wp_filesystem; require_once ABSPATH . '/wp-admin/includes/file.php'; WP_Filesystem(); return $wp_filesystem; } /** * Allow File Geranation flag. * * @since 1.14.0 */ public static function allow_file_generation() { return get_option( '_ive_allow_file_generation', 'disabled' ); } /** * Returns an array of paths for the CSS assets * of the current post. * * @param var $data Gets the CSS for the current Page. * @param var $type Gets the CSS type. * @param var $timestamp Timestamp. * @since 1.14.0 * @return array */ public static function get_asset_info( $data, $type, $timestamp ) { $post_id = get_the_ID(); $uploads_dir = self::get_upload_dir(); $css_suffix = 'ive-style'; $js_suffix = 'ive-script'; $info = array(); if ( 'css' === $type ) { $info['css'] = $uploads_dir['path'] . $css_suffix . '-' . $post_id . '-' . $timestamp . '.css'; $info['css_url'] = $uploads_dir['url'] . $css_suffix . '-' . $post_id . '-' . $timestamp . '.css'; } elseif ( 'js' === $type ) { $info['js'] = $uploads_dir['path'] . $js_suffix . '-' . $post_id . '-' . $timestamp . '.js'; $info['js_url'] = $uploads_dir['url'] . $js_suffix . '-' . $post_id . '-' . $timestamp . '.js'; } return $info; } /** * Creates a new file for Dynamic CSS. * * @param array $assets_info File path and other information. * @param string $style_data The data that needs to be copied into the created file. * @param string $timestamp Current timestamp. * @param string $type Type of file - CSS. * @since 1.15.0 * @return boolean true/false */ public static function create_file( $assets_info, $style_data, $timestamp, $type ) { $post_id = get_the_ID(); if ( ! $post_id ) { return false; } $file_system = self::get_instance()->get_filesystem(); // Create a new file. $result = $file_system->put_contents( $assets_info[ $type ], $style_data, FS_CHMOD_FILE ); if ( $result ) { // Update meta with current timestamp. update_post_meta( $post_id, 'ive_style_timestamp-' . $type, $timestamp ); } return $result; } /** * Creates css files. * * @param var $style_data Gets the CSS for the current Page. * @param var $type Gets the CSS type. * @since 1.14.0 */ public static function file_write( $style_data, $type ) { $post_id = get_the_ID(); if ( ! $post_id ) { return false; } $post_timestamp = get_post_meta( $post_id, 'ive_style_timestamp-' . $type, true ); $var = ( 'css' === $type ) ? 'css' : 'js'; $date = new DateTime(); $new_timestamp = $date->getTimestamp(); $file_system = self::get_instance()->get_filesystem(); // Get timestamp - Already saved OR new one. $post_timestamp = ( '' === $post_timestamp || false === $post_timestamp ) ? '' : $post_timestamp; $assets_info = self::get_asset_info( $style_data, $type, $post_timestamp ); $new_assets_info = self::get_asset_info( $style_data, $type, $new_timestamp ); $relative_src_path = $assets_info[ $var ]; if ( '' === $style_data ) { /** * This is when the generated CSS is blank. * This means this page does not use IVE block. * In this scenario we need to delete the existing file. * This will ensure there are no extra files added for user. */ if ( file_exists( $relative_src_path ) ) { // Delete old file. wp_delete_file( $relative_src_path ); } return true; } /** * Timestamp present but file does not exists. * This is the case where somehow the files are delete or not created in first place. * Here we attempt to create them again. */ if ( ! $file_system->exists( $relative_src_path ) && '' !== $post_timestamp ) { $did_create = self::create_file( $assets_info, $style_data, $post_timestamp, $type ); if ( $did_create ) { self::$css_file_handler = array_merge( self::$css_file_handler, $assets_info ); } return $did_create; } /** * Need to create new assets. * No such assets present for this current page. */ if ( '' === $post_timestamp ) { // Create a new file. $did_create = self::create_file( $new_assets_info, $style_data, $new_timestamp, $type ); if ( $did_create ) { self::$css_file_handler = array_merge( self::$css_file_handler, $new_assets_info ); } return $did_create; } /** * File already exists. * Need to match the content. * If new content is present we update the current assets. */ if ( file_exists( $relative_src_path ) ) { $old_data = $file_system->get_contents( $relative_src_path ); if ( $old_data !== $style_data ) { // Delete old file. wp_delete_file( $relative_src_path ); // Create a new file. $did_create = self::create_file( $new_assets_info, $style_data, $new_timestamp, $type ); if ( $did_create ) { self::$css_file_handler = array_merge( self::$css_file_handler, $new_assets_info ); } return $did_create; } } self::$css_file_handler = array_merge( self::$css_file_handler, $assets_info ); return true; } /** * Generates stylesheet and appends in head tag. * * @since 0.0.1 */ public function generate_assets() { $this_post = array(); if ( class_exists( 'WooCommerce' ) ) { if ( is_cart() ) { $id = get_option( 'woocommerce_cart_page_id' ); $this_post = get_post( $id ); } elseif ( is_account_page() ) { $id = get_option( 'woocommerce_myaccount_page_id' ); $this_post = get_post( $id ); } elseif ( is_checkout() ) { $id = get_option( 'woocommerce_checkout_page_id' ); $this_post = get_post( $id ); } elseif ( is_checkout_pay_page() ) { $id = get_option( 'woocommerce_pay_page_id' ); $this_post = get_post( $id ); } elseif ( is_shop() ) { $id = get_option( 'woocommerce_shop_page_id' ); $this_post = get_post( $id ); } if ( is_object( $this_post ) ) { $this->get_generated_stylesheet( $this_post ); } } if ( is_single() || is_page() || is_404() ) { global $post; $this_post = $post; if ( ! is_object( $this_post ) ) { return; } /** * Filters the post to build stylesheet for. * * @param \WP_Post $this_post The global post. */ $this_post = apply_filters( 'ive_post_for_stylesheet', $this_post ); $this->get_generated_stylesheet( $this_post ); } elseif ( is_archive() || is_home() || is_search() ) { global $wp_query; $cached_wp_query = $wp_query; foreach ( $cached_wp_query as $post ) { // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited $this->get_generated_stylesheet( $post ); } } } /** * Generates stylesheet in loop. * * @param object $this_post Current Post Object. * @since 1.7.0 */ public function get_generated_stylesheet( $this_post ) { if ( ! is_object( $this_post ) ) { return; } if ( ! isset( $this_post->ID ) ) { return; } if ( has_blocks( $this_post->ID ) && isset( $this_post->post_content ) ) { $blocks = $this->parse( $this_post->post_content ); self::$page_blocks = $blocks; if ( ! is_array( $blocks ) || empty( $blocks ) ) { return; } $assets = $this->get_assets( $blocks ); self::$stylesheet .= $assets['css']; self::$script .= $assets['js']; } // Custom CSS and JS logic if ( self::$can_enqueue_custom_assets == true ) { $ive_save_general_settings = get_option( 'ive_general_settings' ); if ( isset( $ive_save_general_settings['ive_custom_css'] ) && ( $ive_save_general_settings['ive_custom_css'] != '' ) ) { self::$custom_stylesheet = $ive_save_general_settings['ive_custom_css']; } if ( isset( $ive_save_general_settings['ive_custom_js'] ) && ( $ive_save_general_settings['ive_custom_js'] != '' ) ) { self::$custom_script = $ive_save_general_settings['ive_custom_js']; } } } /** * Parse Guten Block. * * @param string $content the content string. * @since 1.1.0 */ public function parse( $content ) { global $wp_version; return ( version_compare( $wp_version, '5', '>=' ) ) ? parse_blocks( $content ) : gutenberg_parse_blocks( $content ); } /** * Enqueue Gutenberg block assets for both frontend + backend. * * @since 1.13.4 */ public function block_assets() { $block_list_for_assets = self::$current_block_list; $blocks = IVE_Config::get_block_attributes(); foreach ( $block_list_for_assets as $key => $curr_block_name ) { $js_assets = ( isset( $blocks[ $curr_block_name ]['js_assets'] ) ) ? $blocks[ $curr_block_name ]['js_assets'] : array(); $css_assets = ( isset( $blocks[ $curr_block_name ]['css_assets'] ) ) ? $blocks[ $curr_block_name ]['css_assets'] : array(); foreach ( $js_assets as $asset_handle => $val ) { // Scripts. if ( 'ive-faq-js' === $val ) { if ( self::$ive_faq_layout ) { wp_enqueue_script( 'ive-faq-js' ); } } else { wp_enqueue_script( $val ); } } foreach ( $css_assets as $asset_handle => $val ) { // Styles. wp_enqueue_style( $val ); } } if ( 'enabled' === self::$file_generation ) { $file_handler = self::$css_file_handler; if ( isset( $file_handler['css_url'] ) ) { wp_enqueue_style( 'ive-style', $file_handler['css_url'], array(), IVE_VER, 'all' ); } else { self::$fallback_css = true; } if ( isset( $file_handler['js_url'] ) ) { wp_enqueue_script( 'ive-script', $file_handler['js_url'], array(), IVE_VER, true ); } else { self::$fallback_js = true; } } // custom css and js asset files enqueue if ( self::$can_enqueue_custom_assets == true ) { if ( 'enabled' === self::$file_generation ) { $file_handler = self::$css_file_handler; if ( isset( $file_handler['custom_css_url'] ) ) { wp_enqueue_style( 'ive-custom-style', $file_handler['custom_css_url'], array(), IVE_VER, 'all' ); } else { self::$custom_fallback_css = true; } if ( isset( $file_handler['custom_js_url'] ) ) { wp_enqueue_script( 'ive-custom-script', $file_handler['custom_js_url'], array(), IVE_VER, true ); } else { self::$custom_fallback_js = true; } } } } /** * Print the Script in footer. */ public function print_script() { if ( 'enabled' != self::$file_generation || self::$fallback_js ) { if ( !is_null( self::$script ) || ( '' != self::$script ) ) { echo '<script type="text/javascript" id="ive-script-frontend">' . stripslashes( str_replace( '\n', '', html_entity_decode( esc_js( self::$script ) ) ) ) . '</script>'; } } if ( 'enabled' != self::$file_generation || self::$custom_fallback_js ) { // print custom script if ( self::$can_enqueue_custom_assets == true ) { if ( !is_null( self::$custom_script ) || ( '' != self::$custom_script ) ) { echo '<script type="text/javascript" id="ive-custom-script-frontend">' . stripslashes( str_replace( '\n', '', html_entity_decode( esc_js( self::$custom_script ) ) ) ) . '</script>'; } } } } public function get_assets( $blocks ) { $desktop = ''; $desktop_media = ''; $tablet = ''; $mobile = ''; $desk_styling_css = ''; $tab_styling_css = ''; $mob_styling_css = ''; $js = ''; foreach ( $blocks as $i => $block ) { if ( is_array( $block ) ) { if ( '' === $block['blockName'] ) { continue; } if ( 'core/block' === $block['blockName'] ) { $id = ( isset( $block['attrs']['ref'] ) ) ? $block['attrs']['ref'] : 0; if ( $id ) { $content = get_post_field( 'post_content', $id ); $reusable_blocks = $this->parse( $content ); $assets = $this->get_assets( $reusable_blocks ); self::$stylesheet .= $assets['css']; self::$script .= $assets['js']; } } else { $block_assets = $this->get_block_css_and_js( $block ); // Get CSS for the Block. $css = $block_assets['css']; if ( isset( $css['desktop'] ) ) { $desktop .= $css['desktop']; $desktop_media .= $css['desktop_media']; $tablet .= $css['tablet']; $mobile .= $css['mobile']; } if ( isset( $block_assets['js'] ) ) { $js .= $block_assets['js']; } } } } if ( ! empty( $tablet ) ) { $tab_styling_css .= '@media only screen and (max-width: ' . IVE_TABLET_BREAKPOINT . 'px) {'; $tab_styling_css .= $tablet; $tab_styling_css .= '}'; } if ( ! empty( $mobile ) ) { $mob_styling_css .= '@media only screen and (max-width: ' . IVE_MOBILE_BREAKPOINT . 'px) {'; $mob_styling_css .= $mobile; $mob_styling_css .= '}'; } if ( ! empty( $desktop_media ) ) { $desk_styling_css .= '@media only screen and (min-width: ' . IVE_DESKTOP_STARTPOINT . 'px) {'; $desk_styling_css .= $desktop_media; $desk_styling_css .= '}'; } return array( 'css' => $desktop . $desk_styling_css . $tab_styling_css . $mob_styling_css, 'js' => $js, ); } /** * Print the Stylesheet in header. */ public function print_stylesheet() { if ( 'enabled' != self::$file_generation || self::$fallback_css ) { if ( !is_null( self::$stylesheet ) || ( '' != self::$stylesheet ) ) { ob_start(); ?> <style id="ive-style-frontend"><?php echo html_entity_decode( esc_html( self::$stylesheet ) ); ?></style> <?php ob_end_flush(); } } if ( 'enabled' != self::$file_generation || self::$custom_fallback_css ) { // Print Custom Stylesheet if ( self::$can_enqueue_custom_assets == true ) { if ( !is_null( self::$custom_stylesheet ) || ( '' != self::$custom_stylesheet ) ) { ob_start(); ?> <style id="ive-custom-style-frontend"><?php echo html_entity_decode( esc_html( self::$custom_stylesheet ) ); ?></style> <?php ob_end_flush(); } } } } /** * Generates CSS recurrsively. * * @param object $block The block object. * @since 0.0.1 */ public function get_block_css_and_js( $block ) { $block = (array) $block; $name = $block['blockName']; $css = array(); $js = ''; $block_id = ''; if ( ! isset( $name ) ) { return array( 'css' => array() ); } if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) { $blockattr = $block['attrs']; if ( isset( $blockattr['uniqueID'] ) ) { $block_id = $blockattr['uniqueID']; } } self::$current_block_list[] = $name; if ( class_exists( 'WooCommerce' ) ) { if ( is_product() && ( strpos( $name, 'iepa/' ) !== false || strpos( $name, 'ive/' ) !== false ) ) { $style_woocommerce = 'ibtana-woocommerce-templates-frontend-style'; if( ( ! wp_style_is( $style_woocommerce, 'queue' ) ) && ( ! wp_style_is( $style_woocommerce, 'done' ) ) ) { wp_enqueue_style( 'ibtana-woocommerce-templates-frontend-style', 'https://vwthemesdemo.com/ibtana_json/woocommerce_templates/css/iepa-frontend.css' ); } $is_iepa_active = false; $ibtana_ecommerce_product_addons_license_key = get_option( 'ibtana_ecommerce_product_addons_license_key' ); if ( $ibtana_ecommerce_product_addons_license_key ) { if ( isset( $ibtana_ecommerce_product_addons_license_key['license_key'] ) ) { if ( ( $ibtana_ecommerce_product_addons_license_key['license_key'] != '' ) ) { $is_iepa_active = true; } } } // Premium CSS for iepa frontend $style_woocommerce_premium_frontend = 'ibtana-woocommerce-premium-templates-frontend-style'; if( ( ! wp_style_is( $style_woocommerce_premium_frontend, 'queue' ) ) && ( ! wp_style_is( $style_woocommerce_premium_frontend, 'done' ) ) && $is_iepa_active ) { wp_enqueue_style( $style_woocommerce_premium_frontend, 'https://vwthemesdemo.com/ibtana_json/woocommerce_templates/css/premium/iepa-frontend.css' ); } } } if ( strpos( $name, 'ive/' ) !== false ) { $style_premium = 'ibtana-premium-templates-frontend-style'; if( ( ! wp_style_is( $style_premium, 'queue' ) ) && ( ! wp_style_is( $style_premium, 'done' ) ) ) { wp_enqueue_style( 'ibtana-premium-templates-frontend-style', 'https://vwthemesdemo.com/ibtana_json/premium_theme/css/ive-frontend-style.css' ); } $style_free = 'ibtana-free-templates-frontend-style'; if( ( ! wp_style_is( $style_free, 'queue' ) ) && ( ! wp_style_is( $style_free, 'done' ) ) ) { wp_enqueue_style( 'ibtana-free-templates-frontend-style', 'https://vwthemesdemo.com/ibtana_json/free_theme/css/ive-frontend-style.css' ); } self::$ive_flag = true; } switch ( $name ) { case 'ive/ibtana-visual-editorbtn': $css += IVE_Block_Helper::get_button_css( $blockattr, $block_id ); IVE_Block_JS::get_button_gfonts( $blockattr ); break; case 'ive/page-title': $css += IVE_Block_Helper::get_page_title_css( $blockattr, $block_id ); break; case 'ive/google-map': $css += IVE_Block_Helper::get_google_map_css( $blockattr, $block_id ); break; case 'ive/gallery': $css += IVE_Block_Helper::get_image_gallery_css( $blockattr, $block_id ); break; case 'ive/icon': $css += IVE_Block_Helper::get_icon_css( $blockattr, $block_id ); $js .= IVE_Block_JS::get_social_share_js( $blockattr, $block_id ); break; case 'ive/separator': $css += IVE_Block_Helper::get_separator_css( $blockattr, $block_id ); break; case 'ive/progress-bar': $css += IVE_Block_Helper::get_progress_bar_css( $blockattr, $block_id ); IVE_Block_JS::get_progress_bar_gfonts( $blockattr ); break; case 'ive/ibtana-visual-editorheading': $css += IVE_Block_Helper::get_advanced_text_css( $blockattr, $block_id ); IVE_Block_JS::get_advanced_text_gfonts( $blockattr ); break; case 'ive/carousel': $css += IVE_Block_Helper::get_multiblock_slider_css( $blockattr, $block_id ); break; case 'ive/slide': $css += IVE_Block_Helper::get_slider_css( $blockattr, $block_id ); break; case 'ive/carouselimage': $css += IVE_Block_Helper::get_multiblock_slider_image_css( $blockattr, $block_id ); break; case 'ive/tabs': $css += IVE_Block_Helper::get_tabs_css( $blockattr, $block_id ); IVE_Block_JS::get_tabs_gfonts( $blockattr ); break; case 'ive/accordion': $css += IVE_Block_Helper::get_accordion_css( $blockattr, $block_id ); IVE_Block_JS::get_accordion_title_gfonts( $blockattr ); break; case 'ive/pane': $css += IVE_Block_Helper::get_accordion_pane_css( $blockattr, $block_id ); break; case 'ive/form': $css += IVE_Block_Helper::get_form_css( $blockattr, $block_id ); break; case 'ive/form-field-checkbox': $css += IVE_Block_Helper::get_form_checkbox_css( $blockattr, $block_id ); break; case 'ive/form-field-date': $css += IVE_Block_Helper::get_form_date_css( $blockattr, $block_id ); break; case 'ive/form-field-email': $css += IVE_Block_Helper::get_form_email_css( $blockattr, $block_id ); break; case 'ive/form-field-name': $css += IVE_Block_Helper::get_form_name_css( $blockattr, $block_id ); break; case 'ive/form-field-number': $css += IVE_Block_Helper::get_form_number_css( $blockattr, $block_id ); break; case 'ive/form-field-phone': $css += IVE_Block_Helper::get_form_phone_css( $blockattr, $block_id ); break; case 'ive/form-field-radio': $css += IVE_Block_Helper::get_form_radio_css( $blockattr, $block_id ); break; case 'ive/form-field-select': $css += IVE_Block_Helper::get_form_select_css( $blockattr, $block_id ); break; case 'ive/form-field-text': $css += IVE_Block_Helper::get_form_text_css( $blockattr, $block_id ); break; case 'ive/form-field-textarea': $css += IVE_Block_Helper::get_form_textarea_css( $blockattr, $block_id ); break; case 'ive/form-field-url': $css += IVE_Block_Helper::get_form_url_css( $blockattr, $block_id ); break; case 'ive/button-single': $css += IVE_Block_Helper::get_form_button_css( $blockattr, $block_id ); IVE_Block_JS::get_form_button_gfont( $blockattr ); break; case 'ive/ive-productscarousel': $css += IVE_Block_Helper::get_productscarousel_css( $blockattr, $block_id ); $js .= IVE_Block_JS::get_productscarousel_js( $blockattr, $block_id ); IVE_Block_JS::get_productscarousel_gfonts( $blockattr ); break; default: // Nothing to do here. break; } if ( isset( $block['innerBlocks'] ) ) { foreach ( $block['innerBlocks'] as $j => $inner_block ) { if ( 'core/block' === $inner_block['blockName'] ) { $id = ( isset( $inner_block['attrs']['ref'] ) ) ? $inner_block['attrs']['ref'] : 0; if ( $id ) { $content = get_post_field( 'post_content', $id ); $reusable_blocks = $this->parse( $content ); $assets = $this->get_assets( $reusable_blocks ); self::$stylesheet .= $assets['css']; self::$script .= $assets['js']; } } else { // Get CSS for the Block. $inner_assets = $this->get_block_css_and_js( $inner_block ); $inner_block_css = $inner_assets['css']; $css_desktop = ( isset( $css['desktop'] ) ? $css['desktop'] : '' ); $css_desktop_media = ( isset( $css['desktop_media'] ) ? $css['desktop_media'] : '' ); $css_tablet = ( isset( $css['tablet'] ) ? $css['tablet'] : '' ); $css_mobile = ( isset( $css['mobile'] ) ? $css['mobile'] : '' ); if ( isset( $inner_block_css['desktop'] ) ) { $css['desktop'] = $css_desktop . $inner_block_css['desktop']; $css['desktop_media'] = $css_desktop_media . $inner_block_css['desktop_media']; $css['tablet'] = $css_tablet . $inner_block_css['tablet']; $css['mobile'] = $css_mobile . $inner_block_css['mobile']; } $js .= $inner_assets['js']; } } } self::$current_block_list = array_unique( self::$current_block_list ); return array( 'css' => $css, 'js' => $js, ); } /** * Parse CSS into correct CSS syntax. * * @param array $combined_selectors The combined selector array. * @param string $id The selector ID. * @since 1.15.0 */ public static function generate_all_css( $combined_selectors, $id ) { return array( 'desktop' => self::generate_css( $combined_selectors['desktop'], $id ), 'desktop_media' => self::generate_css( $combined_selectors['desktop_media'], $id ), 'tablet' => self::generate_css( $combined_selectors['tablet'], $id ), 'mobile' => self::generate_css( $combined_selectors['mobile'], $id ), ); } /** * Get CSS value * * Syntax: * * get_css_value( VALUE, UNIT ); * * E.g. * * get_css_value( VALUE, 'em' ); * * @param string $value CSS value. * @param string $unit CSS unit. * @since 1.13.4 */ public static function get_css_value( $value = '', $unit = '' ) { if ( '' == $value ) { // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison return $value; } $css_val = ''; if ( ! empty( $value ) ) { $css_val = esc_attr( $value ) . $unit; } return $css_val; } /** * Parse CSS into correct CSS syntax. * * @param array $selectors The block selectors. * @param string $id The selector ID. * @since 0.0.1 */ public static function generate_css( $selectors, $id ) { $styling_css = ''; if ( empty( $selectors ) ) { return ''; } foreach ( $selectors as $key => $value ) { $css = ''; foreach ( $value as $j => $val ) { if ( 'font-family' === $j && 'Default' === $val ) { continue; } if ( ! empty( $val ) || 0 === $val ) { if ( 'font-family' === $j ) { $css .= $j . ': "' . $val . '";'; } else { $css .= $j . ': ' . $val . ';'; } } } if ( ! empty( $css ) ) { $styling_css .= $id; $styling_css .= $key . '{'; $styling_css .= $css . '}'; } } return $styling_css; } /** * Adds Google fonts all blocks. * * @param array $load_google_font the blocks attr. * @param array $font_family the blocks attr. * @param array $font_weight the blocks attr. * @param array $font_subset the blocks attr. */ public static function blocks_google_font( $load_google_font, $font_family, $font_weight, $font_subset ) { if ( true === $load_google_font ) { if ( ! array_key_exists( $font_family, self::$gfonts ) ) { $add_font = array( 'fontfamily' => $font_family, 'fontvariants' => ( isset( $font_weight ) && ! empty( $font_weight ) ? array( $font_weight ) : array() ), 'fontsubsets' => ( isset( $font_subset ) && ! empty( $font_subset ) ? array( $font_subset ) : array() ), ); self::$gfonts[ $font_family ] = $add_font; } else { if ( isset( $font_weight ) && ! empty( $font_weight ) && ! in_array( $font_weight, self::$gfonts[ $font_family ]['fontvariants'], true ) ) { array_push( self::$gfonts[ $font_family ]['fontvariants'], $font_weight ); } if ( isset( $font_subset ) && ! empty( $font_subset ) && ! in_array( $font_subset, self::$gfonts[ $font_family ]['fontsubsets'], true ) ) { array_push( self::$gfonts[ $font_family ]['fontsubsets'], $font_subset ); } } } } /** * Load the front end Google Fonts. */ public function frontend_gfonts() { if ( empty( self::$gfonts ) ) { return; } $show_google_fonts = apply_filters( 'ive_blocks_show_google_fonts', true ); if ( ! $show_google_fonts ) { return; } $link = ''; $subsets = array(); foreach ( self::$gfonts as $key => $gfont_values ) { if ( ! empty( $link ) ) { $link .= '%7C'; // Append a new font to the string. } $link .= $gfont_values['fontfamily']; if ( ! empty( $gfont_values['fontvariants'] ) ) { $link .= ':'; $link .= implode( ',', $gfont_values['fontvariants'] ); } if ( ! empty( $gfont_values['fontsubsets'] ) ) { foreach ( $gfont_values['fontsubsets'] as $subset ) { if ( ! in_array( $subset, $subsets, true ) ) { array_push( $subsets, $subset ); } } } } if ( ! empty( $subsets ) ) { $link .= '&subset=' . implode( ',', $subsets ); } if ( isset( $link ) && ! empty( $link ) ) { wp_enqueue_style( 'ive-enqueue-google-fonts', '//fonts.googleapis.com/css?family=' . esc_attr( str_replace( '|', '%7C', $link ) ), array(), IVE_VER, 'all' ); } } } /** * Prepare if class 'IVE_Helper' exist. * Kicking this off by calling 'get_instance()' method */ IVE_Helper::get_instance(); }