$set ) { if ( $path == $set['path'] ) { return $key; } } } /** * Register core icon set data in the internal sets array. * * @since 1.4.6 * @access private * @return void */ static private function register_core_sets() { $enabled_icons = FLBuilderModel::get_enabled_icons(); $core_sets = apply_filters( 'fl_builder_core_icon_sets', array( 'font-awesome' => array( 'name' => 'Font Awesome 4', 'prefix' => 'fa', ), 'font-awesome-5-solid' => array( 'name' => 'Font Awesome 5 Solid', 'prefix' => 'fas', ), 'font-awesome-5-regular' => array( 'name' => 'Font Awesome 5 Regular', 'prefix' => 'far', ), 'font-awesome-5-light' => array( 'name' => 'Font Awesome 5 Light (pro only)', 'prefix' => 'fal', ), 'font-awesome-5-brands' => array( 'name' => 'Font Awesome 5 Brands', 'prefix' => 'fab', ), 'foundation-icons' => array( 'name' => 'Foundation Icons', 'prefix' => '', ), 'dashicons' => array( 'name' => 'WordPress Dashicons', 'prefix' => 'dashicons dashicons-before', ), ) ); if ( ! apply_filters( 'fl_enable_fa5_pro', false ) ) { unset( $core_sets['font-awesome-5-light'] ); } // Add the core sets. foreach ( $core_sets as $set_key => $set_data ) { if ( is_admin() || in_array( $set_key, $enabled_icons ) ) { self::$sets[ $set_key ] = array( 'name' => $set_data['name'], 'prefix' => $set_data['prefix'], 'type' => 'core', ); } } // if there are no registered sets stop here. if ( ! is_array( self::$sets ) ) { return; } // Loop through core sets and add icons. foreach ( self::$sets as $set_key => $set_data ) { if ( 'core' == $set_data['type'] ) { $key = $set_key; if ( apply_filters( 'fl_enable_fa5_pro', false ) ) { switch ( $set_key ) { case 'font-awesome-5-light' : $key = 'font-awesome-5-light-pro'; break; case 'font-awesome-5-regular' : $key = 'font-awesome-5-regular-pro'; break; case 'font-awesome-5-solid' : $key = 'font-awesome-5-solid-pro'; break; } } $config_path = apply_filters( 'fl_builder_core_icon_set_config', FL_BUILDER_DIR . 'json/' . $key . '.json', $set_data ); $icons = json_decode( file_get_contents( $config_path ) ); self::$sets[ $set_key ]['icons'] = $icons; } } } /** * Register custom icon set data in the internal sets array. * * @since 1.4.6 * @access private * @return void */ static private function register_custom_sets() { // Get uploaded sets. $enabled_icons = FLBuilderModel::get_enabled_icons(); $upload_info = FLBuilderModel::get_cache_dir( 'icons' ); $folders = glob( $upload_info['path'] . '*' ); // Make sure we have an array. if ( ! is_array( $folders ) ) { return; } // Loop through uploaded sets. foreach ( $folders as $folder ) { // Make sure we have a directory. if ( ! fl_builder_filesystem()->is_dir( $folder ) ) { continue; } $folder = trailingslashit( $folder ); // This is an Icomoon font. if ( fl_builder_filesystem()->file_exists( $folder . 'selection.json' ) ) { $data = json_decode( fl_builder_filesystem()->file_get_contents( $folder . 'selection.json' ) ); $key = basename( $folder ); $url = str_ireplace( $upload_info['path'], $upload_info['url'], $folder ); if ( isset( $data->icons ) ) { if ( is_admin() || in_array( $key, $enabled_icons ) ) { self::$sets[ $key ] = array( 'name' => $data->metadata->name, 'prefix' => '', 'type' => 'icomoon', 'path' => $folder, 'url' => $url, 'stylesheet' => $url . 'style.css', 'icons' => array(), ); foreach ( $data->icons as $icon ) { $prefs = $data->preferences->fontPref; $postfix = isset( $prefs->postfix ) ? $prefs->postfix : ''; if ( isset( $prefs->selector ) && 'class' == $prefs->selector ) { // @codingStandardsIgnoreLine $selector = trim( str_replace( '.', ' ', $prefs->classSelector ) ) . ' '; } else { $selector = ''; } self::$sets[ $key ]['icons'][] = $selector . $prefs->prefix . $icon->properties->name . $postfix; } } } } elseif ( fl_builder_filesystem()->file_exists( $folder . 'config.json' ) ) { $data = json_decode( fl_builder_filesystem()->file_get_contents( $folder . 'config.json' ) ); $key = basename( $folder ); $name = empty( $data->name ) ? 'Fontello' : $data->name; $url = str_ireplace( $upload_info['path'], $upload_info['url'], $folder ); $style = empty( $data->name ) ? 'fontello' : $data->name; // Append the date to the name? if ( empty( $data->name ) ) { $time = str_replace( 'icon-', '', $key ); $date_format = get_option( 'date_format' ); $time_format = get_option( 'time_format' ); $date = date( $date_format . ' ' . $time_format ); $name .= ' (' . $date . ')'; } if ( isset( $data->glyphs ) ) { if ( is_admin() || in_array( $key, $enabled_icons ) ) { self::$sets[ $key ] = array( 'name' => $name, 'prefix' => '', 'type' => 'fontello', 'path' => $folder, 'url' => $url, 'stylesheet' => $url . 'css/' . $style . '.css', 'icons' => array(), ); foreach ( $data->glyphs as $icon ) { if ( $data->css_use_suffix ) { self::$sets[ $key ]['icons'][] = $icon->css . $data->css_prefix_text; } else { self::$sets[ $key ]['icons'][] = $data->css_prefix_text . $icon->css; } } } } } } } /** * Enqueue the stylesheets for all icon sets. * * @since 1.4.6 * @return void */ static public function enqueue_all_custom_icons_styles() { $sets = self::get_sets(); foreach ( (array) $sets as $key => $data ) { // Don't enqueue core icons. if ( 'core' == $data['type'] ) { continue; } // Enqueue the custom icon styles. self::enqueue_custom_styles_by_key( $key ); } } /** * Enqueue the stylesheet(s) for icons in a module. * * @since 1.4.6 * @param object $module The module to enqueue for. * @return void */ static public function enqueue_styles_for_module( $module ) { $fields = FLBuilderModel::get_settings_form_fields( $module->form ); foreach ( $fields as $name => $field ) { if ( isset( $field['form'] ) ) { $form = FLBuilderModel::$settings_forms[ $field['form'] ]; self::enqueue_styles_for_nested_module_form( $module, $form['tabs'], $name ); } elseif ( 'icon' == $field['type'] && isset( $module->settings->$name ) ) { self::enqueue_styles_for_icon( $module->settings->$name ); } } } /** * Enqueue the stylesheet(s) for icons in a nested form field. * * @since 1.4.6 * @access private * @param object $module The module to enqueue for. * @param array $form The nested form. * @param string $setting The nested form setting key. * @return void */ static private function enqueue_styles_for_nested_module_form( $module, $form, $setting ) { $fields = FLBuilderModel::get_settings_form_fields( $form ); foreach ( $fields as $name => $field ) { if ( 'icon' == $field['type'] && ! empty( $module->settings->$setting ) ) { foreach ( $module->settings->$setting as $key => $val ) { if ( isset( $val->$name ) ) { self::enqueue_styles_for_icon( $val->$name ); } elseif ( $name == $key && ! empty( $val ) ) { self::enqueue_styles_for_icon( $val ); } } } } } /** * Enqueue the stylesheet for an icon. * * @since 1.4.6 * @access private * @param string $icon The icon CSS classname. * @return void */ static private function enqueue_styles_for_icon( $icon ) { do_action( 'fl_builder_enqueue_styles_for_icon', $icon ); // Is this a core icon? if ( stristr( $icon, 'fa fa-' ) ) { wp_enqueue_style( 'font-awesome' ); } elseif ( stristr( $icon, 'far fa-' ) || stristr( $icon, 'fas fa-' ) || stristr( $icon, 'fab fa-' ) || stristr( $icon, 'fal fa-' ) ) { wp_enqueue_style( 'font-awesome-5' ); } elseif ( stristr( $icon, 'fi-' ) ) { wp_enqueue_style( 'foundation-icons' ); } elseif ( stristr( $icon, 'dashicon' ) ) { wp_enqueue_style( 'dashicons' ); } else { $sets = self::get_sets(); foreach ( (array) $sets as $key => $data ) { if ( in_array( $icon, $data['icons'] ) ) { self::enqueue_custom_styles_by_key( $key ); } } } } /** * Enqueue the stylesheet for an icon set by key. * * @since 1.4.6 * @access private * @param string $key The icon set key. * @return void */ static private function enqueue_custom_styles_by_key( $key ) { if ( apply_filters( 'fl_builder_enqueue_custom_styles_by_key', true, $key ) ) { $sets = self::get_sets(); if ( isset( $sets[ $key ] ) ) { $set = $sets[ $key ]; if ( 'icomoon' == $set['type'] ) { wp_enqueue_style( $key, $set['stylesheet'], array(), FL_BUILDER_VERSION ); } if ( 'fontello' == $set['type'] ) { wp_enqueue_style( $key, $set['stylesheet'], array(), FL_BUILDER_VERSION ); } } } } }