version(); $membership = ( fa()->pro() ) ? '' : ',membership{free}'; $query = sprintf( '{search(version: "%s", query: "%s", first: 100) { id,label,styles%s }}', fa()->version(), $text, $membership ); $result = json_decode( fa()->query( $query ) ); if ( isset( $result->data ) && isset( $result->data->search ) ) { foreach ( (array) $result->data->search as $icon ) { if ( ! fa()->pro() ) { if ( empty( $icon->membership->free ) ) { continue; } else { $icon->styles = $icon->membership->free; } } foreach ( $icon->styles as $k => $style ) { if ( ! in_array( $style, $styles ) ) { unset( $icon->styles[ $k ] ); } } $icons[] = array( 'tag' => 'fa-' . $icon->id, 'label' => $icon->label, 'styles' => $icon->styles, ); } } if ( count( $icons ) > 0 ) { $output[] = array( 'name' => 'Font Awesome', 'slug' => 'font-awesome', 'data' => $icons, ); } unset( $icon_sets['font-awesome-5-solid'] ); unset( $icon_sets['font-awesome-5-regular'] ); unset( $icon_sets['font-awesome-5-brands'] ); unset( $icon_sets['font-awesome-5-light'] ); unset( $icon_sets['font-awesome-5-duotone'] ); unset( $icon_sets['font-awesome-5-thin'] ); } if ( ! in_array( 'font-awesome-kit', $enabled ) ) { unset( $icon_sets['font-awesome-kit'] ); } foreach ( $icon_sets as $set ) { $icons = array(); foreach ( $set['icons'] as $icon ) { if ( strstr( $icon, $text ) ) { $icons[] = array( 'tag' => $icon, 'label' => $icon, 'styles' => array( 'legacy' ), ); } } if ( ! empty( $icons ) ) { $output[] = array( 'name' => $set['name'], 'prefix' => $set['prefix'], 'slug' => '', 'data' => $icons, ); } } echo json_encode( $output ); exit; } /** * Register this plugin for official FA support. */ public static function register_plugin() { $args = apply_filters( 'fl_builder_font_awesome_register_args', array( 'name' => __( 'Beaver Builder', 'fl-builder' ), 'technology' => 'webfont', ) ); fa()->register( $args ); } /** * Basic check show warning on BB admin settings. */ public static function sanity_checks() { if ( self::is_installed() && 'svg' === fa()->technology() ) { FLBuilderAdminSettings::add_error( self::error_text() ); } } /** * Filter our main JS config set fontAwesome var */ public static function js_config( $config ) { $config['fontAwesome'] = self::is_installed() ? fa()->technology() : ''; return $config; } /** * Dequeue our FA scripts/styles if enqueued * @since 2.4 */ public static function fa_official_support() { /* When BB UI is open: If there is no custom kit, or its disabled load regular css. If there is a kit and its enabled: if it has icons we need to load the JS */ $kit_enabled = false; $enabled = FLBuilderModel::get_enabled_icons(); if ( in_array( 'font-awesome-kit', $enabled ) ) { $kit_enabled = true; } if ( self::is_installed() && ( wp_script_is( 'font-awesome-official', 'enqueued' ) || wp_style_is( 'font-awesome-official', 'enqueued' ) ) ) { wp_dequeue_style( 'font-awesome' ); wp_dequeue_style( 'font-awesome-5' ); wp_deregister_style( 'font-awesome' ); wp_deregister_style( 'font-awesome-5' ); } } public static function is_pro_enabled( $enabled ) { if ( ! function_exists( 'FortAwesome\fa' ) ) { return $enabled; } if ( self::is_installed() && fa()->pro() ) { return true; } return $enabled; } /** * Check if font awesome plugin is available. */ public static function is_installed() { return class_exists( 'FortAwesome\FontAwesome_Loader' ) && function_exists( 'FortAwesome\fa' ); } /** * Error text used in wp-admin and modal popup in buildef UI */ public static function error_text() { return __( 'You appear to have the font awesome plugin configured to use svg icons, this currently is incompatible with Beaver Builder. You must switch to a webfont set/kit.', 'fl-builder' ); } /** * Latest supported version. */ public static function latest_supported() { return '5.15.4'; } public static function get_kit_icons() { $icons = array(); $result = self::get_kit_data(); if ( ! $result ) { return array(); } $data = $result->data->me->kit->iconUploads; foreach ( $data as $icon ) { $icons[] = 'fa-' . $icon->name; } return $icons; } public static function get_kit_data() { if ( ! self::is_installed() ) { return false; } $token = fa()->options()['kitToken']; if ( ! $token ) { return false; } $result = get_transient( self::$cache_slug ); if ( false === $result ) { // It wasn't there, so regenerate the data and save the transient $query = sprintf( '{ me { kit(token:"%s") { name token iconUploads { name } } } }', $token ); $result = json_decode( fa()->query( $query ) ); set_transient( self::$cache_slug, $result ); } return $result; } static function get_fa_data() { if ( ! self::is_installed() ) { return false; } $kit = self::get_kit_data(); $data = array( 'pro' => array( 'name' => __( 'Pro Icons', 'fl-builder' ), 'value' => ( fa()->pro() ) ? __( 'Yes', 'fl-builder' ) : __( 'No', 'fl-builder' ), ), 'technology' => array( 'name' => __( 'Technology', 'fl-builder' ), 'value' => fa()->technology(), ), 'version' => array( 'name' => __( 'Version', 'fl-builder' ), 'value' => fa()->version(), ), 'version4' => array( 'name' => __( 'V4 Compatibility Mode', 'fl-builder' ), 'value' => ( fa()->v4_compatibility() ) ? __( 'Enabled', 'fl-builder' ) : __( 'Disabled', 'fl-builder' ), ), ); if ( ! $kit ) { $data['cdn'] = array( 'name' => __( 'Using CDN', 'fl-builder' ), 'value' => __( 'Yes', 'fl-builder' ), ); } else { $data['kit'] = array( 'name' => __( 'Using Kit', 'fl-builder' ), 'value' => $kit->data->me->kit->name, ); // translators: %s, number of icons $number = sprintf( _n( '%s custom icon', '%s custom icons', count( self::get_kit_icons() ), 'fl-builder' ), number_format_i18n( count( self::get_kit_icons() ) ) ); $data['kitcount'] = array( 'name' => __( 'Custom Icons', 'fl-builder' ), 'value' => sprintf( 'Kit contains %s', $number ), ); // check domain is valid $result = wp_remote_get( sprintf( 'https://kit.fontawesome.com/%s.js', $kit->data->me->kit->token ), array( 'headers' => array( 'referer' => home_url(), ), ) ); if ( is_array( $result ) && 403 === $result['response']['code'] ) { $data['kit403'] = array( 'name' => __( 'Issue Detected', 'fl-builder' ), /* translators: %s: kit name */ 'value' => sprintf( __( 'This domain appears to be blocked for kit %s', 'fl-builder' ), $kit->data->me->kit->name ), ); } } return $data; } static function clear_cache() { delete_transient( self::$cache_slug ); } } /** * Needs to be on wp_loaded as that is where FA plugin is started. */ add_action( 'wp_loaded', function() { FLBuilderFontAwesome::init(); }); add_action( 'update_option_font-awesome', array( 'FLBuilderFontAwesome', 'clear_cache' ) );