1982 lines
74 KiB
PHP
1982 lines
74 KiB
PHP
<?php
|
|
/**
|
|
* Needed functionality for the performance wizard.
|
|
*
|
|
* @author ThemeFusion
|
|
* @copyright (c) Copyright by ThemeFusion
|
|
* @link https://avada.com
|
|
* @package Avada
|
|
* @subpackage Core
|
|
* @since 7.4
|
|
*
|
|
* @phpcs:disable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
|
|
*/
|
|
|
|
/**
|
|
* Performance wizard handling.
|
|
*
|
|
* @since 7.4
|
|
*/
|
|
class AWB_Performance_Wizard {
|
|
|
|
/**
|
|
* The one, true instance of this object.
|
|
*
|
|
* @static
|
|
* @access private
|
|
* @since 7.4
|
|
* @var object
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* The array of parsed posts.
|
|
*
|
|
* @access protected
|
|
* @var array
|
|
*/
|
|
protected $posts = [];
|
|
|
|
/**
|
|
* Map between what is matched in content and other icon data.
|
|
*
|
|
* @access protected
|
|
* @var array
|
|
*/
|
|
protected $icon_map = [];
|
|
|
|
/**
|
|
* Icon subsets.
|
|
*
|
|
* @access protected
|
|
* @var array
|
|
*/
|
|
protected $icon_subsets = [
|
|
'fab' => 'brands',
|
|
'far' => 'regular',
|
|
'fas' => 'solid',
|
|
'fal' => 'light',
|
|
];
|
|
|
|
/**
|
|
* Creates or returns an instance of this class.
|
|
*
|
|
* @static
|
|
* @access public
|
|
* @since 7.4
|
|
*/
|
|
public static function get_instance() {
|
|
|
|
// If an instance hasn't been created and set to $instance create an instance and set it to $instance.
|
|
if ( null === self::$instance ) {
|
|
self::$instance = new AWB_Performance_Wizard();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* The class constructor
|
|
*
|
|
* @access public
|
|
*/
|
|
public function __construct() {
|
|
// Scan ajax.
|
|
add_action( 'wp_ajax_awb_performance_scan', [ $this, 'ajax_scan' ] );
|
|
|
|
// Save ajax.
|
|
add_action( 'wp_ajax_awb_performance_save', [ $this, 'ajax_save' ] );
|
|
|
|
// Save ajax.
|
|
add_action( 'wp_ajax_awb_performance_cache', [ $this, 'ajax_cache' ] );
|
|
|
|
// Trigger icon download.
|
|
add_action( 'init', [ $this, 'download_icon' ] );
|
|
|
|
if ( ! fusion_doing_ajax() ) {
|
|
add_action( 'admin_enqueue_scripts', [ $this, 'add_scripts' ] );
|
|
}
|
|
|
|
if ( ( isset( $_GET['page'] ) && 'avada-performance' === sanitize_text_field( wp_unslash( $_GET['page'] ) ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
add_filter( 'awb_po_get_value', [ $this, 'global_value' ], 10, 2 );
|
|
add_filter( 'awb_po_get_option_name', [ $this, 'global_name' ], 10, 2 );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return global value instead of usual page option.
|
|
*
|
|
* @access public
|
|
* @param string $value The value.
|
|
* @param int $id The ID.
|
|
* @return string
|
|
*/
|
|
public function global_value( $value, $id ) {
|
|
$settings = awb_get_fusion_settings();
|
|
return $settings->get( $id );
|
|
}
|
|
|
|
/**
|
|
* Override root so IDs are correct.
|
|
*
|
|
* @access public
|
|
* @param string $name The name.
|
|
* @param int $id The ID.
|
|
* @return string
|
|
*/
|
|
public function global_name( $name, $id ) {
|
|
return str_replace( '[]', '', ltrim( $id, '_' ) );
|
|
}
|
|
|
|
/**
|
|
* Enequeue required scripts.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function add_scripts() {
|
|
$version = Avada::get_theme_version();
|
|
wp_enqueue_style( 'awb_performance_css', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/css/awb-wizard.css', [], $version );
|
|
|
|
AWB_Global_Typography()->enqueue();
|
|
|
|
wp_enqueue_script( 'awb_performance_js', trailingslashit( Avada::$template_dir_url ) . 'assets/admin/js/awb-wizard.js', [ 'jquery' ], $version, true );
|
|
|
|
wp_localize_script( 'awb_performance_js', 'fusionBuilderText', fusion_app_textdomain_strings() );
|
|
|
|
$api_key = apply_filters( 'awb_lighthouse_api_key', false );
|
|
|
|
wp_localize_script(
|
|
'awb_performance_js',
|
|
'awbPerformance',
|
|
[
|
|
'homeURL' => get_home_url(),
|
|
'lighthouse' => ! empty( $_GET['lighthouse'] ) || false !== $api_key, // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
'apiKey' => $api_key,
|
|
'saveChange' => __( 'Do you want to proceed without saving changes?', 'Avada' ),
|
|
'loadingHome' => __( 'Loading the homepage to generate assets.', 'Avada' ),
|
|
'performLighthouse' => __( 'Running a lighthouse test to find new performance scores.', 'Avada' ),
|
|
'errorLoadingPage' => __( 'Automated asset generation failed. Visit your homepage in the browser.', 'Avada' ),
|
|
'errorClearingCache' => __( 'There was a problem when clearing the cache. Please clear it from the Global Options.', 'Avada' ),
|
|
'wizardComplete' => __( 'Cache and assets have been cleared successfully!', 'Avada' ),
|
|
'scanError' => __( 'Something went wrong while scanning the content, please check PHP error log and try again.', 'Avada' ),
|
|
]
|
|
);
|
|
|
|
// Select field assets.
|
|
wp_dequeue_script( 'tribe-events-select2' );
|
|
|
|
wp_enqueue_style(
|
|
'select2-css',
|
|
Avada::$template_dir_url . '/assets/admin/css/select2.css',
|
|
[],
|
|
$version,
|
|
'all'
|
|
);
|
|
wp_enqueue_script(
|
|
'selectwoo-js',
|
|
Avada::$template_dir_url . '/assets/admin/js/selectWoo.full.min.js',
|
|
[ 'jquery' ],
|
|
$version,
|
|
false
|
|
);
|
|
|
|
// Range field assets.
|
|
wp_enqueue_style(
|
|
'avadaredux-nouislider-css',
|
|
FUSION_LIBRARY_URL . '/inc/redux/framework/FusionReduxCore/inc/fields/slider/vendor/nouislider/fusionredux.jquery.nouislider.css',
|
|
[],
|
|
$version,
|
|
'all'
|
|
);
|
|
|
|
wp_enqueue_script(
|
|
'avadaredux-nouislider-js',
|
|
Avada::$template_dir_url . '/assets/admin/js/jquery.nouislider.min.js',
|
|
[ 'jquery' ],
|
|
$version,
|
|
true
|
|
);
|
|
wp_enqueue_script(
|
|
'wnumb-js',
|
|
Avada::$template_dir_url . '/assets/admin/js/wNumb.js',
|
|
[ 'jquery' ],
|
|
$version,
|
|
true
|
|
);
|
|
|
|
// Color fields.
|
|
if ( function_exists( 'AWB_Global_Colors' ) ) {
|
|
AWB_Global_Colors()->enqueue();
|
|
}
|
|
|
|
// Option type JS.
|
|
wp_enqueue_script(
|
|
'avada-fusion-options',
|
|
Avada::$template_dir_url . '/assets/admin/js/avada-fusion-options.js',
|
|
[ 'jquery', 'jquery-ui-sortable' ],
|
|
$version,
|
|
false
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Check if nonce is valid.
|
|
*
|
|
* @access public
|
|
*/
|
|
public function check_nonce() {
|
|
check_admin_referer( 'awb_performance_nonce', 'awb_performance_nonce' );
|
|
}
|
|
|
|
/**
|
|
* Handles resetting caches.
|
|
*
|
|
* @access public
|
|
* @since 7.4
|
|
* @return void
|
|
*/
|
|
public function ajax_cache() {
|
|
|
|
$this->check_nonce();
|
|
|
|
if ( is_multisite() && is_main_site() ) {
|
|
$sites = get_sites();
|
|
foreach ( $sites as $site ) {
|
|
switch_to_blog( $site->blog_id );
|
|
fusion_reset_all_caches();
|
|
restore_current_blog();
|
|
}
|
|
return;
|
|
}
|
|
fusion_reset_all_caches();
|
|
}
|
|
|
|
/**
|
|
* Save global option changes.
|
|
*
|
|
* @access public
|
|
*/
|
|
public function ajax_save() {
|
|
$this->check_nonce();
|
|
|
|
$save_data = isset( $_POST['save_data'] ) ? wp_unslash( $_POST['save_data'] ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
|
|
|
if ( ! $save_data || ! is_array( $save_data ) ) {
|
|
wp_send_json_error( __( 'No data to save.', 'Avada' ) );
|
|
}
|
|
|
|
// Handle element saving, separate location.
|
|
if ( isset( $_POST['step'] ) && 'elements' === $_POST['step'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
$builder_options = get_option( 'fusion_builder_settings', [] );
|
|
|
|
if ( ! $builder_options ) {
|
|
$builder_options = [];
|
|
}
|
|
|
|
$builder_options['fusion_elements'] = $save_data;
|
|
update_option( 'fusion_builder_settings', $builder_options );
|
|
wp_send_json_success();
|
|
}
|
|
|
|
// Handle global option saving.
|
|
$options = get_option( Avada::get_option_name(), [] );
|
|
foreach ( $save_data as $save_id => $save_value ) {
|
|
|
|
// Check for typography options.
|
|
if ( is_array( $save_value ) && ( isset( $save_value['font-variant'] ) || isset( $save_value['font-family'] ) ) ) {
|
|
if ( isset( $save_value['font-variant'] ) ) {
|
|
if ( false !== strpos( $save_value['font-variant'], 'italic' ) ) {
|
|
$options[ $save_id ]['font-weight'] = wp_unslash( str_replace( 'italic', '', $save_value['font-variant'] ) );
|
|
$options[ $save_id ]['font-style'] = 'italic';
|
|
} else {
|
|
$options[ $save_id ]['font-weight'] = wp_unslash( $save_value['font-variant'] );
|
|
$options[ $save_id ]['font-style'] = '';
|
|
}
|
|
}
|
|
if ( isset( $save_value['font-family'] ) ) {
|
|
$options[ $save_id ]['font-family'] = wp_unslash( $save_value['font-family'] );
|
|
}
|
|
continue;
|
|
}
|
|
|
|
// Not a font variant, save as normal.
|
|
$options[ $save_id ] = wp_unslash( $save_value );
|
|
}
|
|
|
|
$updated = update_option( Avada::get_option_name(), $options );
|
|
|
|
if ( ! $updated ) {
|
|
wp_send_json_success( __( 'No changes to update.', 'Avada' ) );
|
|
}
|
|
|
|
wp_send_json_success();
|
|
}
|
|
|
|
/**
|
|
* Perform scan and return results.
|
|
*
|
|
* @access public
|
|
*/
|
|
public function ajax_scan() {
|
|
|
|
$this->check_nonce();
|
|
|
|
$scan_type = isset( $_GET['scan_type'] ) ? wp_unslash( $_GET['scan_type'] ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
|
|
|
if ( ! $scan_type ) {
|
|
wp_send_json_error( new WP_Error( 404, __( 'No valid action found.', 'Avada' ) ) );
|
|
}
|
|
|
|
switch ( $scan_type ) {
|
|
case 'features':
|
|
$this->feature_scan();
|
|
break;
|
|
case 'icons':
|
|
$this->icon_scan();
|
|
break;
|
|
case 'elements':
|
|
$this->element_scan();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Download Font Awesome icon.
|
|
*
|
|
* @access public
|
|
*/
|
|
public function download_icon() {
|
|
if ( ! isset( $_GET['action'] ) || 'awb_trigger_icon_download' !== $_GET['action'] ) { // phpcs:ignore WordPress.Security
|
|
return;
|
|
}
|
|
|
|
$this->check_nonce();
|
|
|
|
$icon_subset = isset( $_GET['icon_subset'] ) ? sanitize_text_field( wp_unslash( $_GET['icon_subset'] ) ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
$icon_name = isset( $_GET['icon_name'] ) ? sanitize_text_field( wp_unslash( $_GET['icon_name'] ) ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
|
|
$download_url = isset( $_GET['download_url'] ) ? strtok( sanitize_text_field( wp_unslash( $_GET['download_url'] ) ), '?' ) : false; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
|
|
$download_url = 'https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/svgs/' . $icon_subset . '/' . $icon_name . '.svg';
|
|
|
|
$response = wp_remote_get( $download_url );
|
|
|
|
if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
|
|
// TODO: add error message.
|
|
wp_die();
|
|
}
|
|
|
|
header( 'Content-Description: File Transfer' );
|
|
header( 'Content-type: image/svg+xml' );
|
|
header( 'Content-Disposition: attachment; filename="' . $icon_name . '-' . $icon_subset . '.svg"' );
|
|
header( 'Content-Transfer-Encoding: binary' );
|
|
header( 'Expires: 0' );
|
|
header( 'Cache-Control: must-revalidate' );
|
|
header( 'Pragma: public' );
|
|
|
|
echo wp_remote_retrieve_body( $response ); // phpcs:ignore WordPress.Security.EscapeOutput
|
|
wp_die();
|
|
}
|
|
|
|
/**
|
|
* Scan for unused features which can be disabled.
|
|
*
|
|
* @access public
|
|
*/
|
|
public function feature_scan() {
|
|
$recommendations = [];
|
|
$maps = $this->scan_for_google_map();
|
|
$youtube = $this->scan_for_videos( 'youtube' );
|
|
$vimeo = $this->scan_for_videos( 'vimeo' );
|
|
$mega_menu = $this->scan_for_megamenu();
|
|
|
|
// TODO: make somewhat dynamic. status_widget_areas.
|
|
$recommendations['status_widget_areas'] = [
|
|
'value' => 'off',
|
|
'message' => __( 'Recommend setting to off unless you use legacy widget areas or widgets.', 'Avada' ),
|
|
'dynamic' => false,
|
|
];
|
|
|
|
if ( ! $mega_menu ) {
|
|
$recommendations['disable_megamenu'] = [
|
|
'value' => '0',
|
|
'message' => __( 'You are not using the legacy mega menu. This option can be disabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['disable_megamenu'] = [
|
|
'value' => '1',
|
|
'message' => __( 'You are using the legacy mega menu. Should be enabled, but consider switching to built mega menu.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
if ( ! $youtube ) {
|
|
$recommendations['status_yt'] = [
|
|
'value' => '0',
|
|
'message' => __( 'You are not using any Youtube element. This option can be disabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['status_yt'] = [
|
|
'value' => '1',
|
|
'message' => __( 'You are using Youtube element. Should be enabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
if ( ! $vimeo ) {
|
|
$recommendations['status_vimeo'] = [
|
|
'value' => '0',
|
|
'message' => __( 'You are not using any Vimeo element. This option can be disabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['status_vimeo'] = [
|
|
'value' => '1',
|
|
'message' => __( 'You are using Vimeo element. Should be enabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
if ( ! $maps ) {
|
|
$recommendations['status_gmap'] = [
|
|
'value' => '0',
|
|
'message' => __( 'You are not using any Google Map element or template. This option can be disabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['status_gmap'] = [
|
|
'value' => '1',
|
|
'message' => __( 'You are using Google Map element or template. Should be enabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
// TODO: make somewhat dynamic. button_presets.
|
|
$recommendations['button_presets'] = [
|
|
'value' => '0',
|
|
'message' => __( 'Recommend disabling unless you are using the button color presets in many areas.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
|
|
// TODO: make somewhat dynamic. load_block_styles.
|
|
$recommendations['load_block_styles'] = [
|
|
'value' => 'off',
|
|
'message' => __( 'Recommend setting to off unless you use the Gutenberg editor.', 'Avada' ),
|
|
'dynamic' => false,
|
|
];
|
|
|
|
// TODO: make somewhat dynamic. emojis_disabled.
|
|
$recommendations['emojis_disabled'] = [
|
|
'value' => 'disabled',
|
|
'message' => __( 'Recommend setting to disabled unless you specifically want them for comments.', 'Avada' ),
|
|
'dynamic' => false,
|
|
];
|
|
|
|
// avada_rev_styles.
|
|
if ( ! class_exists( 'RevSliderFront' ) ) {
|
|
$recommendations['avada_rev_styles'] = [
|
|
'value' => '0',
|
|
'message' => __( 'The Slider Revolution plugin is not active, styles can be disabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['avada_rev_styles'] = [
|
|
'value' => '1',
|
|
'message' => __( 'The Slider Revolution plugin is currently active, only disable if you don\'t want the extra Avada styling.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
// status_eslider.
|
|
$elastic_sliders = new WP_Query( [ 'post_type' => 'themefusion_elastic' ] );
|
|
if ( ! $elastic_sliders->have_posts() ) {
|
|
$recommendations['status_eslider'] = [
|
|
'value' => '0',
|
|
'message' => __( 'No elastic sliders found, should be disabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['status_eslider'] = [
|
|
'value' => '1',
|
|
'message' => __( 'Elastic sliders found, only disable if you are not using them.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
// status_fusion_slider.
|
|
$avada_sliders = new WP_Query( [ 'post_type' => 'slide' ] );
|
|
if ( ! $avada_sliders->have_posts() ) {
|
|
$recommendations['status_fusion_slider'] = [
|
|
'value' => '0',
|
|
'message' => __( 'No Avada sliders found, should be disabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['status_fusion_slider'] = [
|
|
'value' => '1',
|
|
'message' => __( 'Avada sliders found, only disable if you are not using them.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
// status_fusion_forms.
|
|
$avada_forms = new WP_Query( [ 'post_type' => 'fusion_form' ] );
|
|
if ( ! $avada_forms->have_posts() ) {
|
|
$recommendations['status_fusion_forms'] = [
|
|
'value' => '0',
|
|
'message' => __( 'No Avada forms found, can be disabled. Alternatively if you haven\'t tried them yet, give them a go.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['status_fusion_forms'] = [
|
|
'value' => '1',
|
|
'message' => __( 'Avada forms found, only disable if you are not using them.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
// status_awb_Off_Canvas.
|
|
$avada_off_canvas = new WP_Query( [ 'post_type' => 'awb_off_canvas' ] );
|
|
if ( ! $avada_off_canvas->have_posts() ) {
|
|
$recommendations['status_awb_Off_Canvas'] = [
|
|
'value' => '0',
|
|
'message' => __( 'No Avada off canvas found, can be disabled. Alternatively if you haven\'t tried them yet, give them a go.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['status_awb_Off_Canvas'] = [
|
|
'value' => '1',
|
|
'message' => __( 'Avada off canvas found, only disable if you are not using them.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
// status_fusion_portfolio.
|
|
$avada_portfolios = new WP_Query( [ 'post_type' => 'avada_portfolio' ] );
|
|
if ( ! $avada_portfolios->have_posts() ) {
|
|
$recommendations['status_fusion_portfolio'] = [
|
|
'value' => '0',
|
|
'message' => __( 'No portfolio posts found, can be disabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['status_fusion_portfolio'] = [
|
|
'value' => '1',
|
|
'message' => __( 'Portfolio posts found, only disable if you are not using them.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
// status_fusion_faqs.
|
|
$avada_faqs = new WP_Query( [ 'post_type' => 'avada_faq' ] );
|
|
if ( ! $avada_faqs->have_posts() ) {
|
|
$recommendations['status_fusion_faqs'] = [
|
|
'value' => '0',
|
|
'message' => __( 'No FAQ posts found, can be disabled.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
} else {
|
|
$recommendations['status_fusion_faqs'] = [
|
|
'value' => '1',
|
|
'message' => __( 'FAQ posts found, only disable if you are not using them.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
}
|
|
|
|
wp_send_json_success( $recommendations );
|
|
}
|
|
|
|
/**
|
|
* AJAX callback method, used to get used icons table.
|
|
*
|
|
* @access public
|
|
*/
|
|
public function icon_scan() {
|
|
|
|
$found_icons = $this->scan_for_icons();
|
|
$full_icons = [];
|
|
|
|
$fa_4_class = ' class="awb-fa-legacy-icon"';
|
|
|
|
ob_start();
|
|
foreach ( $found_icons as $found_icon ) : ?>
|
|
<tr>
|
|
<td>
|
|
<?php
|
|
$edit_link = '';
|
|
$edit_title = '';
|
|
|
|
if ( isset( $found_icon['data']['post_type'] ) ) {
|
|
|
|
$edit_title = $found_icon['data']['post_title'];
|
|
|
|
if ( 'nav_menu_item' !== $found_icon['data']['post_type'] ) {
|
|
$edit_link = admin_url( 'post.php?post=' . $found_icon['data']['post_id'] . '&action=edit' );
|
|
} elseif ( 'nav_menu_item' === $found_icon['data']['post_type'] ) {
|
|
$nav_terms = wp_get_object_terms( $found_icon['data']['post_id'], 'nav_menu' );
|
|
|
|
if ( ! is_wp_error( $nav_terms ) && isset( $nav_terms[0] ) ) {
|
|
$edit_link = admin_url( 'nav-menus.php?action=edit&menu=' . $nav_terms[0]->term_id );
|
|
}
|
|
|
|
// Check if menu item points to a page and didnt have post title saved.
|
|
if ( '' === $edit_title && '' !== get_post_meta( $found_icon['data']['post_id'], '_menu_item_object_id', true ) ) {
|
|
|
|
if ( 'post_type' === get_post_meta( $found_icon['data']['post_id'], '_menu_item_type', true ) ) {
|
|
$edit_title = get_the_title( get_post_meta( $found_icon['data']['post_id'], '_menu_item_object_id', true ) );
|
|
}
|
|
|
|
if ( 'taxonomy' === get_post_meta( $found_icon['data']['post_id'], '_menu_item_type', true ) ) {
|
|
$term = get_term( get_post_meta( $found_icon['data']['post_id'], '_menu_item_object_id', true ), get_post_meta( $found_icon['data']['post_id'], '_menu_item_object', true ) );
|
|
|
|
if ( ! is_wp_error( $term ) ) {
|
|
$edit_title = $term->name;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} elseif ( isset( $found_icon['widget'] ) ) {
|
|
$edit_title = $found_icon['widget']['widget_type'] . ' - ' . $found_icon['widget']['widget_area'];
|
|
$edit_link = admin_url( 'widgets.php' );
|
|
}
|
|
?>
|
|
|
|
<a href="<?php echo esc_url_raw( $edit_link ); ?>" target="_blank">
|
|
<?php echo esc_html( $edit_title ); ?>
|
|
</a>
|
|
</td>
|
|
<td>
|
|
<?php
|
|
if ( isset( $found_icon['post_content']['icons']['matches'] ) ) {
|
|
$full_icons = array_merge( $full_icons, $found_icon['post_content']['icons']['matches'] );
|
|
foreach ( array_unique( $found_icon['post_content']['icons']['matches'] ) as $key => $icon ) {
|
|
$css_class = '';
|
|
if ( isset( $this->icon_map[ $icon ] ) && true === $this->icon_map[ $icon ]['is_fa4_icon'] ) {
|
|
$css_class = $fa_4_class;
|
|
}
|
|
|
|
echo '<span' . $css_class . '>' . esc_html( $icon ) . '</span>'; // phpcs:ignore WordPress.Security.EscapeOutput
|
|
}
|
|
} elseif ( isset( $found_icon['widget']['icons']['matches'] ) ) {
|
|
$full_icons = array_merge( $full_icons, $found_icon['widget']['icons']['matches'] );
|
|
foreach ( array_unique( $found_icon['widget']['icons']['matches'] ) as $key => $icon ) {
|
|
$css_class = '';
|
|
if ( isset( $this->icon_map[ $icon ] ) && true === $this->icon_map[ $icon ]['is_fa4_icon'] ) {
|
|
$css_class = $fa_4_class;
|
|
}
|
|
echo '<span' . $css_class . '>' . esc_html( $icon ) . '</span>'; // phpcs:ignore WordPress.Security.EscapeOutput
|
|
}
|
|
}
|
|
?>
|
|
</td>
|
|
<td>
|
|
<?php
|
|
if ( isset( $found_icon['post_meta']['icons']['matches'] ) ) {
|
|
$full_icons = array_merge( $full_icons, $found_icon['post_meta']['icons']['matches'] );
|
|
foreach ( array_unique( $found_icon['post_meta']['icons']['matches'] ) as $key => $icon ) {
|
|
$css_class = '';
|
|
if ( isset( $this->icon_map[ $icon ] ) && true === $this->icon_map[ $icon ]['is_fa4_icon'] ) {
|
|
$css_class = $fa_4_class;
|
|
}
|
|
echo '<span' . $css_class . '>' . esc_html( $icon ) . '</span>'; // phpcs:ignore WordPress.Security.EscapeOutput
|
|
}
|
|
}
|
|
?>
|
|
</td>
|
|
<td></td>
|
|
</tr>
|
|
<?php
|
|
endforeach;
|
|
|
|
$full_icon_markup = '';
|
|
foreach ( array_unique( $full_icons ) as $icon ) {
|
|
$data_download = '';
|
|
if ( isset( $this->icon_map[ $icon ] ) ) {
|
|
$icon_link_subset = isset( $this->icon_subsets[ $this->icon_map[ $icon ]['fa5_subset'] ] ) ? $this->icon_subsets[ $this->icon_map[ $icon ]['fa5_subset'] ] : 'solid';
|
|
$icon_name = $this->icon_map[ $icon ]['fa5_name'];
|
|
$icon_download_link = esc_url_raw( admin_url( 'admin-ajax.php?action=awb_trigger_icon_download&icon_subset=' . $icon_link_subset . '&icon_name=' . $icon_name . '&awb_performance_nonce=' . wp_create_nonce( 'awb_performance_nonce' ) ) );
|
|
|
|
$data_download = ' href="' . $icon_download_link . '" target="_blank"';
|
|
}
|
|
|
|
$full_icon_markup .= '<a' . $data_download . ' class="awb-download-icon-link">' . esc_html( $icon ) . '</a>';
|
|
}
|
|
if ( '' !== $full_icon_markup ) {
|
|
echo '<tr class="full-list"><td><strong>' . __( 'Full List', 'Avada' ) . '<strong></td><td colspan="3">' . $full_icon_markup . '</td></tr>'; // phpcs:ignore WordPress.Security.EscapeOutput
|
|
}
|
|
|
|
$return_data = [
|
|
'markup' => ob_get_clean(),
|
|
'recommendations' => [],
|
|
];
|
|
|
|
$used_subsets = [];
|
|
foreach ( [ 'fab', 'far', 'fas', 'fal' ] as $subset ) {
|
|
if ( false !== strpos( $full_icon_markup, ' ' . $subset ) || false !== strpos( $full_icon_markup, $subset . ' ' ) ) {
|
|
$used_subsets[] = $subset;
|
|
}
|
|
}
|
|
|
|
$labels = [
|
|
'fab' => esc_html__( 'Brands', 'Avada' ),
|
|
'far' => esc_html__( 'Regular', 'Avada' ),
|
|
'fas' => esc_html__( 'Solid', 'Avada' ),
|
|
'fal' => esc_html__( 'Light', 'Avada' ),
|
|
];
|
|
|
|
$icon_message = __( 'No Font Awesome icons found being used. Recommend disabling all.', 'Avada' );
|
|
if ( ! empty( $used_subsets ) ) {
|
|
foreach ( $used_subsets as $used_subset ) {
|
|
$used_subset_labels[] = $labels[ $used_subset ];
|
|
}
|
|
/* translators: Used subset labels. */
|
|
$icon_message = sprintf( __( 'Content has been scanned for icons, recommend selecting %s.', 'Avada' ), implode( ', ', $used_subset_labels ) );
|
|
}
|
|
|
|
$return_data['recommendations']['status_fontawesome'] = [
|
|
'value' => $used_subsets,
|
|
'message' => $icon_message,
|
|
'dynamic' => true,
|
|
];
|
|
|
|
// TODO: scan for old icons.
|
|
$return_data['recommendations']['fontawesome_v4_compatibility'] = [
|
|
'value' => '0',
|
|
'message' => __( 'Recommended to disable this and update any old icon references by editing the pages/menus.', 'Avada' ),
|
|
'dynamic' => true,
|
|
];
|
|
|
|
wp_send_json_success( $return_data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
}
|
|
|
|
/**
|
|
* Check all elements on content.
|
|
*
|
|
* @access public
|
|
* @since 7.4
|
|
* @return void
|
|
*/
|
|
public function element_scan() {
|
|
global $all_fusion_builder_elements;
|
|
|
|
$elements = [];
|
|
|
|
// No elements found, return empty.
|
|
if ( empty( $all_fusion_builder_elements ) ) {
|
|
wp_send_json_success( $elements );
|
|
die();
|
|
}
|
|
|
|
$content = $this->get_content();
|
|
|
|
foreach ( $all_fusion_builder_elements as $module ) {
|
|
if ( empty( $module['hide_from_builder'] ) ) {
|
|
if ( false === strpos( $content, $module['shortcode'] ) ) {
|
|
$elements[ $module['shortcode'] ] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add some more checks here at some point.
|
|
unset( $elements['fusion_alert'] );
|
|
unset( $elements['fusion_tooltip'] );
|
|
unset( $elements['fusion_separator'] );
|
|
|
|
$dependencies = [
|
|
'fusion_post_cards' => [
|
|
'fusion_tb_post_card_archives',
|
|
],
|
|
'fusion_woo_product_grid' => [
|
|
'fusion_tb_woo_archives',
|
|
],
|
|
'fusion_blog' => [
|
|
'fusion_tb_archives',
|
|
],
|
|
'fusion_button' => [
|
|
'fusion_tagline',
|
|
'fusion_form_submit',
|
|
],
|
|
'fusion_accordion' => [
|
|
'fusion_faq',
|
|
],
|
|
'fusion_popover' => [
|
|
'fusion_image_hotspots',
|
|
],
|
|
'fusion_images' => [
|
|
'fusion_tb_woo_related',
|
|
'fusion_tb_related',
|
|
],
|
|
];
|
|
|
|
foreach ( $dependencies as $needed => $needs ) {
|
|
|
|
// If a needed element is being set to be disabled, check if that is safe.
|
|
if ( isset( $elements[ $needed ] ) ) {
|
|
foreach ( $needs as $need ) {
|
|
|
|
// If the element is not disabled, then dont disable the needed one.
|
|
if ( ! isset( $elements[ $need ] ) ) {
|
|
unset( $elements[ $needed ] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
wp_send_json_success( $elements );
|
|
}
|
|
|
|
/**
|
|
* Scans content for Google Map usage.
|
|
*
|
|
* @access public
|
|
* @since 7.4
|
|
* @return boolean
|
|
*/
|
|
public function scan_for_google_map() {
|
|
$maps_count = 0;
|
|
|
|
// Scan XML content (posts).
|
|
$this->parse_xml();
|
|
|
|
foreach ( $this->posts as $post ) {
|
|
|
|
if ( 'publish' !== $post['data']['post_status'] && 'draft' !== $post['data']['post_status'] ) {
|
|
continue;
|
|
}
|
|
|
|
// Get only stuff we actually use.
|
|
$post_data = [
|
|
'post_id' => isset( $post['data']['post_id'] ) ? $post['data']['post_id'] : '',
|
|
'post_type' => isset( $post['data']['post_type'] ) ? $post['data']['post_type'] : '',
|
|
];
|
|
|
|
if ( isset( $post['data']['post_content'] ) && '' !== $post['data']['post_content'] && false !== strpos( $post['data']['post_content'], 'fusion_map' ) ) {
|
|
|
|
$maps_count++;
|
|
|
|
// No need to check further.
|
|
break;
|
|
}
|
|
|
|
if ( isset( $post['data']['post_type'] ) && isset( $post['data']['post_id'] ) && 'page' === $post['data']['post_type'] && 0 === $maps_count ) {
|
|
|
|
$meta = get_post_meta( $post['data']['post_id'], '_wp_page_template', true );
|
|
|
|
if ( 'contact.php' === $meta ) {
|
|
$maps_count++;
|
|
|
|
// No need to check further.
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Scan widgets if not found so far.
|
|
if ( 0 === $maps_count ) {
|
|
|
|
$all_widgets = wp_get_sidebars_widgets();
|
|
$widgets = [];
|
|
|
|
foreach ( $all_widgets as $widget_area => $widget_array ) {
|
|
foreach ( $widget_array as $widget_key ) {
|
|
$widget = [];
|
|
$widget['type'] = trim( substr( $widget_key, 0, strrpos( $widget_key, '-' ) ) );
|
|
$widget['type-index'] = trim( substr( $widget_key, strrpos( $widget_key, '-' ) + 1 ) );
|
|
$widget['value'] = get_option( 'widget_' . $widget['type'] );
|
|
$widget['value'] = $widget['value'][ $widget['type-index'] ];
|
|
$widgets[] = $widget;
|
|
|
|
if ( false !== strpos( maybe_serialize( $widget['value'] ), 'fusion_map' ) ) {
|
|
$maps_count++;
|
|
|
|
// No need to check further.
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0 < $maps_count ? true : false;
|
|
}
|
|
|
|
/**
|
|
* Scan content for Youtube usage.
|
|
*
|
|
* @access public
|
|
* @since 7.4
|
|
* @param string $type The video type.
|
|
* @return boolean
|
|
*/
|
|
public function scan_for_videos( $type ) {
|
|
$regex_pattern_container = get_shortcode_regex( [ 'fusion_builder_container' ] );
|
|
$count = 0;
|
|
|
|
// Scan XML content (posts).
|
|
$this->parse_xml();
|
|
|
|
foreach ( $this->posts as $post ) {
|
|
|
|
if ( 'publish' !== $post['data']['post_status'] && 'draft' !== $post['data']['post_status'] ) {
|
|
continue;
|
|
}
|
|
|
|
// Get only stuff we actually use.
|
|
$post_data = [
|
|
'post_id' => isset( $post['data']['post_id'] ) ? $post['data']['post_id'] : '',
|
|
'post_type' => isset( $post['data']['post_type'] ) ? $post['data']['post_type'] : '',
|
|
];
|
|
|
|
if ( ( isset( $post['data']['post_content'] ) && '' !== $post['data']['post_content'] ) || 'slide' === $post['data']['post_type'] ) {
|
|
|
|
preg_match_all( "/$regex_pattern_container/s", $post['data']['post_content'], $matches );
|
|
|
|
if ( isset( $matches[3] ) && ! empty( $matches[3] ) ) {
|
|
foreach ( $matches[3] as $match ) {
|
|
$atts = shortcode_parse_atts( $match );
|
|
if ( ! empty( $atts['video_url'] ) ) {
|
|
$video = fusion_builder_get_video_provider( $atts['video_url'] );
|
|
if ( $type === $video['type'] ) {
|
|
$count++;
|
|
|
|
// No need to check further.
|
|
break 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( 0 === $count ) {
|
|
if ( false !== strpos( $post['data']['post_content'], 'fusion_' . $type ) ) {
|
|
$count++;
|
|
// No need to check further.
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Scan Fusion Slides.
|
|
if ( 0 === $count && 'slide' === $post_data['post_type'] ) {
|
|
$metadata = wp_parse_args( fusion_data()->post_meta( $post_data['post_id'] )->get_all_meta() );
|
|
if ( $type === $metadata['type'] && '' !== $metadata[ $type . '_id' ] ) {
|
|
$count++;
|
|
// No need to check further.
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Scan widgets if not found so far.
|
|
if ( 0 === $count ) {
|
|
$all_widgets = wp_get_sidebars_widgets();
|
|
$widgets = [];
|
|
|
|
foreach ( $all_widgets as $widget_area => $widget_array ) {
|
|
foreach ( $widget_array as $widget_key ) {
|
|
$widget = [];
|
|
$widget['type'] = trim( substr( $widget_key, 0, strrpos( $widget_key, '-' ) ) );
|
|
$widget['type-index'] = trim( substr( $widget_key, strrpos( $widget_key, '-' ) + 1 ) );
|
|
$widget['value'] = get_option( 'widget_' . $widget['type'] );
|
|
$widget['value'] = $widget['value'][ $widget['type-index'] ];
|
|
$widgets[] = $widget;
|
|
|
|
preg_match_all( "/$regex_pattern_container/s", maybe_serialize( $widget['value'] ), $matches );
|
|
|
|
if ( isset( $matches[3] ) && ! empty( $matches[3] ) ) {
|
|
foreach ( $matches[3] as $match ) {
|
|
$atts = shortcode_parse_atts( $match );
|
|
if ( ! empty( $atts['video_url'] ) ) {
|
|
$video = fusion_builder_get_video_provider( $atts['video_url'] );
|
|
if ( $type === $video['type'] ) {
|
|
$count++;
|
|
|
|
// No need to check further.
|
|
break 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( 0 === $count ) {
|
|
|
|
if ( false !== strpos( maybe_serialize( $widget['value'] ), 'fusion_' . $type ) ) {
|
|
$count++;
|
|
// No need to check further.
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0 < $count ? true : false;
|
|
}
|
|
|
|
/**
|
|
* Scan content for mega menu usage.
|
|
*
|
|
* @access public
|
|
* @since 7.4
|
|
* @return boolean
|
|
*/
|
|
public function scan_for_megamenu() {
|
|
$mega_menu_count = 0;
|
|
|
|
// Scan XML content (posts).
|
|
$this->parse_xml();
|
|
|
|
foreach ( $this->posts as $post ) {
|
|
|
|
if ( 'publish' !== $post['data']['post_status'] && 'draft' !== $post['data']['post_status'] ) {
|
|
continue;
|
|
}
|
|
|
|
// Menu items have empty post_content.
|
|
if ( 'nav_menu_item' === $post['data']['post_type'] && isset( $post['meta'] ) && is_array( $post['meta'] ) ) {
|
|
|
|
foreach ( $post['meta'] as $meta ) {
|
|
|
|
if ( '_menu_item_fusion_megamenu' === $meta['key'] ) {
|
|
$values = maybe_unserialize( $meta['value'] );
|
|
|
|
if ( 'enabled' === $values['status'] ) {
|
|
$mega_menu_count++;
|
|
break 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0 < $mega_menu_count ? true : false;
|
|
|
|
}
|
|
|
|
/**
|
|
* Method used to scan site content (posts for now) for used FA icons.
|
|
*/
|
|
public function scan_for_icons() {
|
|
|
|
// Search for icons in following formats: "fa-gem fas", "far fa-gem".
|
|
// Or (missing icon subset): "fa-gem".
|
|
$regex_pattern = '/(fa[srbl]?)?\s?(fa-.[^\s"\']*)\s?(fa[srbl]?)?/';
|
|
$found_icons = [];
|
|
|
|
// Scan XML content (posts).
|
|
$this->parse_xml();
|
|
|
|
foreach ( $this->posts as $post ) {
|
|
|
|
if ( 'publish' !== $post['data']['post_status'] && 'draft' !== $post['data']['post_status'] ) {
|
|
continue;
|
|
}
|
|
|
|
// Get only stuff we actually use.
|
|
$post_data = [
|
|
'post_id' => isset( $post['data']['post_id'] ) ? $post['data']['post_id'] : '',
|
|
'post_title' => isset( $post['data']['post_title'] ) ? $post['data']['post_title'] : '',
|
|
'post_type' => isset( $post['data']['post_type'] ) ? $post['data']['post_type'] : '',
|
|
];
|
|
|
|
if ( isset( $post['data']['post_content'] ) && '' !== $post['data']['post_content'] ) {
|
|
|
|
preg_match_all( $regex_pattern, $post['data']['post_content'], $matches );
|
|
|
|
/**
|
|
* $matches[0] - full match
|
|
* $matches[1] - subset, if it was before the icon code
|
|
* $matches[2] - icon code
|
|
* $matches[3] - subset, if it was after the icon code
|
|
*/
|
|
|
|
if ( isset( $matches[0] ) && ! empty( $matches[0] ) ) {
|
|
|
|
$this->update_icon_map_array( $matches );
|
|
|
|
$found_icons[] = [
|
|
'post_content' => [
|
|
'icons' => [
|
|
'matches' => $matches[0],
|
|
'icon_code' => $matches[2],
|
|
],
|
|
],
|
|
'data' => $post_data,
|
|
];
|
|
}
|
|
}
|
|
|
|
// Menu items have empty post_content.
|
|
if ( 'nav_menu_item' === $post['data']['post_type'] && isset( $post['meta'] ) && is_array( $post['meta'] ) ) {
|
|
|
|
foreach ( $post['meta'] as $meta ) {
|
|
|
|
if ( '_menu_item_fusion_megamenu' === $meta['key'] ) {
|
|
|
|
preg_match_all( $regex_pattern, $meta['value'], $matches );
|
|
|
|
if ( isset( $matches[0] ) && ! empty( $matches[0] ) ) {
|
|
|
|
$this->update_icon_map_array( $matches );
|
|
|
|
$found_icons[] = [
|
|
'post_meta' => [
|
|
'meta_key' => $meta['key'], // phpcs:ignore WordPress.DB.SlowDBQuery
|
|
'icons' => [
|
|
'matches' => $matches[0],
|
|
'icon_code' => $matches[1],
|
|
],
|
|
],
|
|
'data' => $post_data,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Scan widgets.
|
|
$all_widgets = wp_get_sidebars_widgets();
|
|
$widgets = [];
|
|
|
|
foreach ( $all_widgets as $widget_area => $widget_array ) {
|
|
foreach ( $widget_array as $widget_key ) {
|
|
$widget = [];
|
|
$widget['type'] = trim( substr( $widget_key, 0, strrpos( $widget_key, '-' ) ) );
|
|
$widget['type-index'] = trim( substr( $widget_key, strrpos( $widget_key, '-' ) + 1 ) );
|
|
$widget['value'] = get_option( 'widget_' . $widget['type'] );
|
|
$widget['value'] = $widget['value'][ $widget['type-index'] ];
|
|
$widgets[] = $widget;
|
|
|
|
preg_match_all( $regex_pattern, maybe_serialize( $widget['value'] ), $matches );
|
|
|
|
if ( isset( $matches[0] ) && ! empty( $matches[0] ) ) {
|
|
|
|
$this->update_icon_map_array( $matches );
|
|
|
|
$found_icons[] = [
|
|
'widget' => [
|
|
'widget_type' => $widget['type'],
|
|
'widget_area' => $widget_area,
|
|
'icons' => [
|
|
'matches' => $matches[0],
|
|
'icon_code' => $matches[1],
|
|
],
|
|
],
|
|
'data' => $widget,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $found_icons;
|
|
}
|
|
|
|
/**
|
|
* Update icon map array.
|
|
*
|
|
* @access public
|
|
* @param array $matches The matches array.
|
|
* @return void
|
|
*/
|
|
protected function update_icon_map_array( $matches ) {
|
|
|
|
$shims = $this->get_icon_shims();
|
|
|
|
if ( isset( $matches[0] ) && is_array( $matches[0] ) ) {
|
|
$count = count( $matches[1] );
|
|
for ( $i = 0; $i < $count; $i++ ) {
|
|
|
|
// Skip if we have already processed this icon (match).
|
|
if ( isset( $this->icon_map[ $matches[0][ $i ] ] ) ) {
|
|
continue;
|
|
}
|
|
|
|
$icon_code = $matches[2][ $i ];
|
|
$icon_subset = '';
|
|
$is_fa4_icon = false;
|
|
|
|
// Set icon subsets.
|
|
if ( isset( $matches[1][ $i ] ) && ! empty( $matches[1][ $i ] ) ) {
|
|
$icon_subset = $matches[1][ $i ];
|
|
} elseif ( isset( $matches[3][ $i ] ) && ! empty( $matches[3][ $i ] ) ) {
|
|
$icon_subset = $matches[3][ $i ];
|
|
}
|
|
|
|
// It might be, we need to check if icon name or subset was changed.
|
|
if ( isset( $shims[ $icon_code ] ) && ( '' === $icon_subset || 'fa' === $icon_subset ) ) {
|
|
|
|
// Icon name changed.
|
|
if ( null !== $shims[ $icon_code ][2] && 'fa-' . $shims[ $icon_code ][2] !== $icon_code ) {
|
|
$is_fa4_icon = true;
|
|
}
|
|
|
|
// Icon subset changed.
|
|
if ( null !== $shims[ $icon_code ][1] && $icon_subset !== $shims[ $icon_code ][1] ) {
|
|
$is_fa4_icon = true;
|
|
}
|
|
}
|
|
|
|
// Set defaulf subset if it is still empty.
|
|
if ( '' === $icon_subset ) {
|
|
$icon_subset = 'fas';
|
|
}
|
|
|
|
// Finally update map array.
|
|
if ( true === $is_fa4_icon ) {
|
|
$this->icon_map[ $matches[0][ $i ] ] = [
|
|
'is_fa4_icon' => $is_fa4_icon,
|
|
'fa5_name' => isset( $shims[ $icon_code ][2] ) ? $shims[ $icon_code ][2] : null,
|
|
'fa5_subset' => isset( $shims[ $icon_code ][1] ) ? $shims[ $icon_code ][1] : 'fas',
|
|
];
|
|
} else {
|
|
$this->icon_map[ $matches[0][ $i ] ] = [
|
|
'is_fa4_icon' => $is_fa4_icon,
|
|
'fa5_name' => substr( $icon_code, 3 ),
|
|
'fa5_subset' => $icon_subset,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get site XML contents.
|
|
*/
|
|
public function get_content() {
|
|
if ( ! function_exists( 'export_wp' ) ) {
|
|
include ABSPATH . '/wp-admin/includes/export.php';
|
|
}
|
|
|
|
// Mark non builder post types as not exportable.
|
|
global $wp_post_types;
|
|
if ( ! empty( $wp_post_types ) && class_exists( 'FusionBuilder' ) ) {
|
|
foreach ( $wp_post_types as $key => $post_type ) {
|
|
if ( ! in_array( $key, FusionBuilder::allowed_post_types(), true ) ) {
|
|
$wp_post_types[ $key ]->can_export = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Skip things we don't need.
|
|
add_filter( 'wxr_export_skip_commentmeta', '__return_true' );
|
|
add_filter( 'wxr_export_skip_termmeta', '__return_true' );
|
|
|
|
ob_start();
|
|
export_wp();
|
|
|
|
// Prevent starting file download.
|
|
header_remove( 'Content-Description' );
|
|
header_remove( 'Content-Disposition' );
|
|
header_remove( 'Content-Type' );
|
|
|
|
return ob_get_clean();
|
|
}
|
|
|
|
/**
|
|
* Parsing site's XML content.
|
|
*/
|
|
public function parse_xml() {
|
|
|
|
// Early exit if already parsed.
|
|
if ( is_array( $this->posts ) && 0 < count( $this->posts ) ) {
|
|
return;
|
|
}
|
|
|
|
$xml_string = $this->get_content();
|
|
|
|
$reader = new XMLReader();
|
|
$reader->xml( $xml_string );
|
|
|
|
while ( $reader->read() ) {
|
|
|
|
if ( XMLReader::ELEMENT !== $reader->nodeType ) {
|
|
continue;
|
|
}
|
|
|
|
switch ( $reader->name ) {
|
|
case 'item':
|
|
$node = $reader->expand();
|
|
|
|
$parsed = $this->parse_post_node( $node );
|
|
if ( is_wp_error( $parsed ) ) {
|
|
// Skip the rest of this post.
|
|
$reader->next();
|
|
break;
|
|
}
|
|
|
|
$this->posts[] = $parsed;
|
|
|
|
// Handled everything in this node, move on to the next.
|
|
$reader->next();
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Parse a post node into post data.
|
|
*
|
|
* @param DOMElement $node Parent node of post data (typically `item`).
|
|
* @return array|WP_Error Post data array on success, error otherwise.
|
|
*/
|
|
protected function parse_post_node( $node ) {
|
|
$data = [];
|
|
$meta = [];
|
|
$comments = [];
|
|
$terms = [];
|
|
|
|
foreach ( $node->childNodes as $child ) {
|
|
// We only care about child elements.
|
|
if ( XML_ELEMENT_NODE !== $child->nodeType ) {
|
|
continue;
|
|
}
|
|
|
|
switch ( $child->tagName ) {
|
|
case 'wp:post_type':
|
|
$data['post_type'] = $child->textContent;
|
|
break;
|
|
|
|
case 'title':
|
|
$data['post_title'] = $child->textContent;
|
|
break;
|
|
|
|
case 'guid':
|
|
$data['guid'] = $child->textContent;
|
|
break;
|
|
|
|
case 'dc:creator':
|
|
$data['post_author'] = $child->textContent;
|
|
break;
|
|
|
|
case 'content:encoded':
|
|
$data['post_content'] = $child->textContent;
|
|
break;
|
|
|
|
case 'excerpt:encoded':
|
|
$data['post_excerpt'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:post_id':
|
|
$data['post_id'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:post_date':
|
|
$data['post_date'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:post_date_gmt':
|
|
$data['post_date_gmt'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:comment_status':
|
|
$data['comment_status'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:ping_status':
|
|
$data['ping_status'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:post_name':
|
|
$data['post_name'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:status':
|
|
$data['post_status'] = $child->textContent;
|
|
|
|
if ( 'auto-draft' === $data['post_status'] ) {
|
|
// Bail now.
|
|
return new WP_Error(
|
|
'wxr_importer.post.cannot_import_draft',
|
|
__( 'Cannot import auto-draft posts', 'Avada' ),
|
|
$data
|
|
);
|
|
}
|
|
break;
|
|
|
|
case 'wp:post_parent':
|
|
$data['post_parent'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:menu_order':
|
|
$data['menu_order'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:post_password':
|
|
$data['post_password'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:is_sticky':
|
|
$data['is_sticky'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:attachment_url':
|
|
$data['attachment_url'] = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:postmeta':
|
|
$meta_item = $this->parse_meta_node( $child );
|
|
if ( ! empty( $meta_item ) ) {
|
|
$meta[] = $meta_item;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
return compact( 'data', 'meta' );
|
|
}
|
|
|
|
/**
|
|
* Parse a meta node into meta data.
|
|
*
|
|
* @param DOMElement $node Parent node of meta data (typically `wp:postmeta` or `wp:commentmeta`).
|
|
* @return array|null Meta data array on success, or null on error.
|
|
*/
|
|
protected function parse_meta_node( $node ) {
|
|
|
|
foreach ( $node->childNodes as $child ) {
|
|
// We only care about child elements.
|
|
if ( XML_ELEMENT_NODE !== $child->nodeType ) {
|
|
continue;
|
|
}
|
|
|
|
switch ( $child->tagName ) {
|
|
case 'wp:meta_key':
|
|
$key = $child->textContent;
|
|
break;
|
|
|
|
case 'wp:meta_value':
|
|
$value = $child->textContent;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( empty( $key ) || empty( $value ) ) {
|
|
return null;
|
|
}
|
|
|
|
return compact( 'key', 'value' );
|
|
}
|
|
|
|
/**
|
|
* Render header specifically for wizard.
|
|
*
|
|
* @param string $screen_classes Classes for page.
|
|
* @return void
|
|
*/
|
|
public function render_header( $screen_classes ) {
|
|
?>
|
|
<div class="<?php echo esc_html( $screen_classes ); ?>">
|
|
<header class="avada-db-header-main">
|
|
<div class="avada-db-header-main-container">
|
|
<a class="avada-db-logo" href="<?php echo esc_url( admin_url( 'admin.php?page=avada' ) ); ?>" aria-label="<?php esc_attr_e( 'Link to Avada dashboard', 'Avada' ); ?>">
|
|
<i class="avada-db-logo-icon fusiona-avada-logo"></i>
|
|
<div class="heading"><?php esc_html_e( 'Performance Wizard', 'Avada' ); ?></div>
|
|
</a>
|
|
<div class="wizard-hero-header">
|
|
<a class="button button-primary" target="_blank" href="https://developers.google.com/speed/pagespeed/insights/?url=<?php echo rawurlencode( trailingslashit( get_home_url() ) ); ?>"><?php esc_html_e( 'Run PageSpeed Insights', 'Avada' ); ?></a>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
<header class="avada-db-header-sticky avada-db-card awb-wizard-steps">
|
|
<ol>
|
|
<li class="awb-wizard-link active" data-id="1"><span class="awb-wizard-link-text"><?php esc_html_e( 'Start', 'Avada' ); ?></span></li>
|
|
<li class="awb-wizard-link" data-id="2"><span class="awb-wizard-link-text"><?php esc_html_e( 'Features', 'Avada' ); ?></span></li>
|
|
<li class="awb-wizard-link" data-id="3"><span class="awb-wizard-link-text"><?php esc_html_e( 'Icons', 'Avada' ); ?></span></li>
|
|
<li class="awb-wizard-link" data-id="4"><span class="awb-wizard-link-text"><?php esc_html_e( 'Fonts', 'Avada' ); ?></span></li>
|
|
<li class="awb-wizard-link" data-id="5"><span class="awb-wizard-link-text"><?php esc_html_e( 'Elements', 'Avada' ); ?></span></li>
|
|
<li class="awb-wizard-link" data-id="6"><span class="awb-wizard-link-text"><?php esc_html_e( 'Optimization', 'Avada' ); ?></span></li>
|
|
<li class="awb-wizard-link" data-id="7"><span class="awb-wizard-link-text"><?php esc_html_e( 'Finish', 'Avada' ); ?></span></li>
|
|
</ol>
|
|
</header>
|
|
|
|
<div class="avada-db-demos-notices"><h1></h1> <?php do_action( 'avada_dashboard_notices' ); ?></div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Get FA 4 icon shims.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_icon_shims() {
|
|
|
|
return [
|
|
'fa-glass' => [ 'glass', null, 'glass-martini' ],
|
|
'fa-meetup' => [ 'meetup', 'fab', null ],
|
|
'fa-star-o' => [ 'star-o', 'far', 'star' ],
|
|
'fa-remove' => [ 'remove', null, 'times' ],
|
|
'fa-close' => [ 'close', null, 'times' ],
|
|
'fa-gear' => [ 'gear', null, 'cog' ],
|
|
'fa-trash-o' => [ 'trash-o', 'far', 'trash-alt' ],
|
|
'fa-file-o' => [ 'file-o', 'far', 'file' ],
|
|
'fa-clock-o' => [ 'clock-o', 'far', 'clock' ],
|
|
'fa-arrow-circle-o-down' => [ 'arrow-circle-o-down', 'far', 'arrow-alt-circle-down' ],
|
|
'fa-arrow-circle-o-up' => [ 'arrow-circle-o-up', 'far', 'arrow-alt-circle-up' ],
|
|
'fa-play-circle-o' => [ 'play-circle-o', 'far', 'play-circle' ],
|
|
'fa-repeat' => [ 'repeat', null, 'redo' ],
|
|
'fa-rotate-right' => [ 'rotate-right', null, 'redo' ],
|
|
'fa-refresh' => [ 'refresh', null, 'sync' ],
|
|
'fa-list-alt' => [ 'list-alt', 'far', null ],
|
|
'fa-dedent' => [ 'dedent', null, 'outdent' ],
|
|
'fa-video-camera' => [ 'video-camera', null, 'video' ],
|
|
'fa-picture-o' => [ 'picture-o', 'far', 'image' ],
|
|
'fa-photo' => [ 'photo', 'far', 'image' ],
|
|
'fa-image' => [ 'image', 'far', 'image' ],
|
|
'fa-pencil' => [ 'pencil', null, 'pencil-alt' ],
|
|
'fa-map-marker' => [ 'map-marker', null, 'map-marker-alt' ],
|
|
'fa-pencil-square-o' => [ 'pencil-square-o', 'far', 'edit' ],
|
|
'fa-share-square-o' => [ 'share-square-o', 'far', 'share-square' ],
|
|
'fa-check-square-o' => [ 'check-square-o', 'far', 'check-square' ],
|
|
'fa-arrows' => [ 'arrows', null, 'arrows-alt' ],
|
|
'fa-times-circle-o' => [ 'times-circle-o', 'far', 'times-circle' ],
|
|
'fa-check-circle-o' => [ 'check-circle-o', 'far', 'check-circle' ],
|
|
'fa-mail-forward' => [ 'mail-forward', null, 'share' ],
|
|
'fa-expand' => [ 'expand', null, 'expand-alt' ],
|
|
'fa-compress' => [ 'compress', null, 'compress-alt' ],
|
|
'fa-eye' => [ 'eye', 'far', null ],
|
|
'fa-eye-slash' => [ 'eye-slash', 'far', null ],
|
|
'fa-warning' => [ 'warning', null, 'exclamation-triangle' ],
|
|
'fa-calendar' => [ 'calendar', null, 'calendar-alt' ],
|
|
'fa-arrows-v' => [ 'arrows-v', null, 'arrows-alt-v' ],
|
|
'fa-arrows-h' => [ 'arrows-h', null, 'arrows-alt-h' ],
|
|
'fa-bar-chart' => [ 'bar-chart', 'far', 'chart-bar' ],
|
|
'fa-bar-chart-o' => [ 'bar-chart-o', 'far', 'chart-bar' ],
|
|
'fa-twitter-square' => [ 'twitter-square', 'fab', null ],
|
|
'fa-facebook-square' => [ 'facebook-square', 'fab', null ],
|
|
'fa-gears' => [ 'gears', null, 'cogs' ],
|
|
'fa-thumbs-o-up' => [ 'thumbs-o-up', 'far', 'thumbs-up' ],
|
|
'fa-thumbs-o-down' => [ 'thumbs-o-down', 'far', 'thumbs-down' ],
|
|
'fa-heart-o' => [ 'heart-o', 'far', 'heart' ],
|
|
'fa-sign-out' => [ 'sign-out', null, 'sign-out-alt' ],
|
|
'fa-linkedin-square' => [ 'linkedin-square', 'fab', 'linkedin' ],
|
|
'fa-thumb-tack' => [ 'thumb-tack', null, 'thumbtack' ],
|
|
'fa-external-link' => [ 'external-link', null, 'external-link-alt' ],
|
|
'fa-sign-in' => [ 'sign-in', null, 'sign-in-alt' ],
|
|
'fa-github-square' => [ 'github-square', 'fab', null ],
|
|
'fa-lemon-o' => [ 'lemon-o', 'far', 'lemon' ],
|
|
'fa-square-o' => [ 'square-o', 'far', 'square' ],
|
|
'fa-bookmark-o' => [ 'bookmark-o', 'far', 'bookmark' ],
|
|
'fa-twitter' => [ 'twitter', 'fab', null ],
|
|
'fa-facebook' => [ 'facebook', 'fab', 'facebook-f' ],
|
|
'fa-facebook-f' => [ 'facebook-f', 'fab', 'facebook-f' ],
|
|
'fa-github' => [ 'github', 'fab', null ],
|
|
'fa-credit-card' => [ 'credit-card', 'far', null ],
|
|
'fa-feed' => [ 'feed', null, 'rss' ],
|
|
'fa-hdd-o' => [ 'hdd-o', 'far', 'hdd' ],
|
|
'fa-hand-o-right' => [ 'hand-o-right', 'far', 'hand-point-right' ],
|
|
'fa-hand-o-left' => [ 'hand-o-left', 'far', 'hand-point-left' ],
|
|
'fa-hand-o-up' => [ 'hand-o-up', 'far', 'hand-point-up' ],
|
|
'fa-hand-o-down' => [ 'hand-o-down', 'far', 'hand-point-down' ],
|
|
'fa-arrows-alt' => [ 'arrows-alt', null, 'expand-arrows-alt' ],
|
|
'fa-group' => [ 'group', null, 'users' ],
|
|
'fa-chain' => [ 'chain', null, 'link' ],
|
|
'fa-scissors' => [ 'scissors', null, 'cut' ],
|
|
'fa-files-o' => [ 'files-o', 'far', 'copy' ],
|
|
'fa-floppy-o' => [ 'floppy-o', 'far', 'save' ],
|
|
'fa-navicon' => [ 'navicon', null, 'bars' ],
|
|
'fa-reorder' => [ 'reorder', null, 'bars' ],
|
|
'fa-pinterest' => [ 'pinterest', 'fab', null ],
|
|
'fa-pinterest-square' => [ 'pinterest-square', 'fab', null ],
|
|
'fa-google-plus-square' => [ 'google-plus-square', 'fab', null ],
|
|
'fa-google-plus' => [ 'google-plus', 'fab', 'google-plus-g' ],
|
|
'fa-money' => [ 'money', 'far', 'money-bill-alt' ],
|
|
'fa-unsorted' => [ 'unsorted', null, 'sort' ],
|
|
'fa-sort-desc' => [ 'sort-desc', null, 'sort-down' ],
|
|
'fa-sort-asc' => [ 'sort-asc', null, 'sort-up' ],
|
|
'fa-linkedin' => [ 'linkedin', 'fab', 'linkedin-in' ],
|
|
'fa-rotate-left' => [ 'rotate-left', null, 'undo' ],
|
|
'fa-legal' => [ 'legal', null, 'gavel' ],
|
|
'fa-tachometer' => [ 'tachometer', null, 'tachometer-alt' ],
|
|
'fa-dashboard' => [ 'dashboard', null, 'tachometer-alt' ],
|
|
'fa-comment-o' => [ 'comment-o', 'far', 'comment' ],
|
|
'fa-comments-o' => [ 'comments-o', 'far', 'comments' ],
|
|
'fa-flash' => [ 'flash', null, 'bolt' ],
|
|
'fa-clipboard' => [ 'clipboard', 'far', null ],
|
|
'fa-paste' => [ 'paste', 'far', 'clipboard' ],
|
|
'fa-lightbulb-o' => [ 'lightbulb-o', 'far', 'lightbulb' ],
|
|
'fa-exchange' => [ 'exchange', null, 'exchange-alt' ],
|
|
'fa-cloud-download' => [ 'cloud-download', null, 'cloud-download-alt' ],
|
|
'fa-cloud-upload' => [ 'cloud-upload', null, 'cloud-upload-alt' ],
|
|
'fa-bell-o' => [ 'bell-o', 'far', 'bell' ],
|
|
'fa-cutlery' => [ 'cutlery', null, 'utensils' ],
|
|
'fa-file-text-o' => [ 'file-text-o', 'far', 'file-alt' ],
|
|
'fa-building-o' => [ 'building-o', 'far', 'building' ],
|
|
'fa-hospital-o' => [ 'hospital-o', 'far', 'hospital' ],
|
|
'fa-tablet' => [ 'tablet', null, 'tablet-alt' ],
|
|
'fa-mobile' => [ 'mobile', null, 'mobile-alt' ],
|
|
'fa-mobile-phone' => [ 'mobile-phone', null, 'mobile-alt' ],
|
|
'fa-circle-o' => [ 'circle-o', 'far', 'circle' ],
|
|
'fa-mail-reply' => [ 'mail-reply', null, 'reply' ],
|
|
'fa-github-alt' => [ 'github-alt', 'fab', null ],
|
|
'fa-folder-o' => [ 'folder-o', 'far', 'folder' ],
|
|
'fa-folder-open-o' => [ 'folder-open-o', 'far', 'folder-open' ],
|
|
'fa-smile-o' => [ 'smile-o', 'far', 'smile' ],
|
|
'fa-frown-o' => [ 'frown-o', 'far', 'frown' ],
|
|
'fa-meh-o' => [ 'meh-o', 'far', 'meh' ],
|
|
'fa-keyboard-o' => [ 'keyboard-o', 'far', 'keyboard' ],
|
|
'fa-flag-o' => [ 'flag-o', 'far', 'flag' ],
|
|
'fa-mail-reply-all' => [ 'mail-reply-all', null, 'reply-all' ],
|
|
'fa-star-half-o' => [ 'star-half-o', 'far', 'star-half' ],
|
|
'fa-star-half-empty' => [ 'star-half-empty', 'far', 'star-half' ],
|
|
'fa-star-half-full' => [ 'star-half-full', 'far', 'star-half' ],
|
|
'fa-code-fork' => [ 'code-fork', null, 'code-branch' ],
|
|
'fa-chain-broken' => [ 'chain-broken', null, 'unlink' ],
|
|
'fa-shield' => [ 'shield', null, 'shield-alt' ],
|
|
'fa-calendar-o' => [ 'calendar-o', 'far', 'calendar' ],
|
|
'fa-maxcdn' => [ 'maxcdn', 'fab', null ],
|
|
'fa-html5' => [ 'html5', 'fab', null ],
|
|
'fa-css3' => [ 'css3', 'fab', null ],
|
|
'fa-ticket' => [ 'ticket', null, 'ticket-alt' ],
|
|
'fa-minus-square-o' => [ 'minus-square-o', 'far', 'minus-square' ],
|
|
'fa-level-up' => [ 'level-up', null, 'level-up-alt' ],
|
|
'fa-level-down' => [ 'level-down', null, 'level-down-alt' ],
|
|
'fa-pencil-square' => [ 'pencil-square', null, 'pen-square' ],
|
|
'fa-external-link-square' => [ 'external-link-square', null, 'external-link-square-alt' ],
|
|
'fa-compass' => [ 'compass', 'far', null ],
|
|
'fa-caret-square-o-down' => [ 'caret-square-o-down', 'far', 'caret-square-down' ],
|
|
'fa-toggle-down' => [ 'toggle-down', 'far', 'caret-square-down' ],
|
|
'fa-caret-square-o-up' => [ 'caret-square-o-up', 'far', 'caret-square-up' ],
|
|
'fa-toggle-up' => [ 'toggle-up', 'far', 'caret-square-up' ],
|
|
'fa-caret-square-o-right' => [ 'caret-square-o-right', 'far', 'caret-square-right' ],
|
|
'fa-toggle-right' => [ 'toggle-right', 'far', 'caret-square-right' ],
|
|
'fa-eur' => [ 'eur', null, 'euro-sign' ],
|
|
'fa-euro' => [ 'euro', null, 'euro-sign' ],
|
|
'fa-gbp' => [ 'gbp', null, 'pound-sign' ],
|
|
'fa-usd' => [ 'usd', null, 'dollar-sign' ],
|
|
'fa-dollar' => [ 'dollar', null, 'dollar-sign' ],
|
|
'fa-inr' => [ 'inr', null, 'rupee-sign' ],
|
|
'fa-rupee' => [ 'rupee', null, 'rupee-sign' ],
|
|
'fa-jpy' => [ 'jpy', null, 'yen-sign' ],
|
|
'fa-cny' => [ 'cny', null, 'yen-sign' ],
|
|
'fa-rmb' => [ 'rmb', null, 'yen-sign' ],
|
|
'fa-yen' => [ 'yen', null, 'yen-sign' ],
|
|
'fa-rub' => [ 'rub', null, 'ruble-sign' ],
|
|
'fa-ruble' => [ 'ruble', null, 'ruble-sign' ],
|
|
'fa-rouble' => [ 'rouble', null, 'ruble-sign' ],
|
|
'fa-krw' => [ 'krw', null, 'won-sign' ],
|
|
'fa-won' => [ 'won', null, 'won-sign' ],
|
|
'fa-btc' => [ 'btc', 'fab', null ],
|
|
'fa-bitcoin' => [ 'bitcoin', 'fab', 'btc' ],
|
|
'fa-file-text' => [ 'file-text', null, 'file-alt' ],
|
|
'fa-sort-alpha-asc' => [ 'sort-alpha-asc', null, 'sort-alpha-down' ],
|
|
'fa-sort-alpha-desc' => [ 'sort-alpha-desc', null, 'sort-alpha-down-alt' ],
|
|
'fa-sort-amount-asc' => [ 'sort-amount-asc', null, 'sort-amount-down' ],
|
|
'fa-sort-amount-desc' => [ 'sort-amount-desc', null, 'sort-amount-down-alt' ],
|
|
'fa-sort-numeric-asc' => [ 'sort-numeric-asc', null, 'sort-numeric-down' ],
|
|
'fa-sort-numeric-desc' => [ 'sort-numeric-desc', null, 'sort-numeric-down-alt' ],
|
|
'fa-youtube-square' => [ 'youtube-square', 'fab', null ],
|
|
'fa-youtube' => [ 'youtube', 'fab', null ],
|
|
'fa-xing' => [ 'xing', 'fab', null ],
|
|
'fa-xing-square' => [ 'xing-square', 'fab', null ],
|
|
'fa-youtube-play' => [ 'youtube-play', 'fab', 'youtube' ],
|
|
'fa-dropbox' => [ 'dropbox', 'fab', null ],
|
|
'fa-stack-overflow' => [ 'stack-overflow', 'fab', null ],
|
|
'fa-instagram' => [ 'instagram', 'fab', null ],
|
|
'fa-flickr' => [ 'flickr', 'fab', null ],
|
|
'fa-adn' => [ 'adn', 'fab', null ],
|
|
'fa-bitbucket' => [ 'bitbucket', 'fab', null ],
|
|
'fa-bitbucket-square' => [ 'bitbucket-square', 'fab', 'bitbucket' ],
|
|
'fa-tumblr' => [ 'tumblr', 'fab', null ],
|
|
'fa-tumblr-square' => [ 'tumblr-square', 'fab', null ],
|
|
'fa-long-arrow-down' => [ 'long-arrow-down', null, 'long-arrow-alt-down' ],
|
|
'fa-long-arrow-up' => [ 'long-arrow-up', null, 'long-arrow-alt-up' ],
|
|
'fa-long-arrow-left' => [ 'long-arrow-left', null, 'long-arrow-alt-left' ],
|
|
'fa-long-arrow-right' => [ 'long-arrow-right', null, 'long-arrow-alt-right' ],
|
|
'fa-apple' => [ 'apple', 'fab', null ],
|
|
'fa-windows' => [ 'windows', 'fab', null ],
|
|
'fa-android' => [ 'android', 'fab', null ],
|
|
'fa-linux' => [ 'linux', 'fab', null ],
|
|
'fa-dribbble' => [ 'dribbble', 'fab', null ],
|
|
'fa-skype' => [ 'skype', 'fab', null ],
|
|
'fa-foursquare' => [ 'foursquare', 'fab', null ],
|
|
'fa-trello' => [ 'trello', 'fab', null ],
|
|
'fa-gratipay' => [ 'gratipay', 'fab', null ],
|
|
'fa-gittip' => [ 'gittip', 'fab', 'gratipay' ],
|
|
'fa-sun-o' => [ 'sun-o', 'far', 'sun' ],
|
|
'fa-moon-o' => [ 'moon-o', 'far', 'moon' ],
|
|
'fa-vk' => [ 'vk', 'fab', null ],
|
|
'fa-weibo' => [ 'weibo', 'fab', null ],
|
|
'fa-renren' => [ 'renren', 'fab', null ],
|
|
'fa-pagelines' => [ 'pagelines', 'fab', null ],
|
|
'fa-stack-exchange' => [ 'stack-exchange', 'fab', null ],
|
|
'fa-arrow-circle-o-right' => [ 'arrow-circle-o-right', 'far', 'arrow-alt-circle-right' ],
|
|
'fa-arrow-circle-o-left' => [ 'arrow-circle-o-left', 'far', 'arrow-alt-circle-left' ],
|
|
'fa-caret-square-o-left' => [ 'caret-square-o-left', 'far', 'caret-square-left' ],
|
|
'fa-toggle-left' => [ 'toggle-left', 'far', 'caret-square-left' ],
|
|
'fa-dot-circle-o' => [ 'dot-circle-o', 'far', 'dot-circle' ],
|
|
'fa-vimeo-square' => [ 'vimeo-square', 'fab', null ],
|
|
'fa-try' => [ 'try', null, 'lira-sign' ],
|
|
'fa-turkish-lira' => [ 'turkish-lira', null, 'lira-sign' ],
|
|
'fa-plus-square-o' => [ 'plus-square-o', 'far', 'plus-square' ],
|
|
'fa-slack' => [ 'slack', 'fab', null ],
|
|
'fa-wordpress' => [ 'wordpress', 'fab', null ],
|
|
'fa-openid' => [ 'openid', 'fab', null ],
|
|
'fa-institution' => [ 'institution', null, 'university' ],
|
|
'fa-bank' => [ 'bank', null, 'university' ],
|
|
'fa-mortar-board' => [ 'mortar-board', null, 'graduation-cap' ],
|
|
'fa-yahoo' => [ 'yahoo', 'fab', null ],
|
|
'fa-google' => [ 'google', 'fab', null ],
|
|
'fa-reddit' => [ 'reddit', 'fab', null ],
|
|
'fa-reddit-square' => [ 'reddit-square', 'fab', null ],
|
|
'fa-stumbleupon-circle' => [ 'stumbleupon-circle', 'fab', null ],
|
|
'fa-stumbleupon' => [ 'stumbleupon', 'fab', null ],
|
|
'fa-delicious' => [ 'delicious', 'fab', null ],
|
|
'fa-digg' => [ 'digg', 'fab', null ],
|
|
'fa-pied-piper-pp' => [ 'pied-piper-pp', 'fab', null ],
|
|
'fa-pied-piper-alt' => [ 'pied-piper-alt', 'fab', null ],
|
|
'fa-drupal' => [ 'drupal', 'fab', null ],
|
|
'fa-joomla' => [ 'joomla', 'fab', null ],
|
|
'fa-spoon' => [ 'spoon', null, 'utensil-spoon' ],
|
|
'fa-behance' => [ 'behance', 'fab', null ],
|
|
'fa-behance-square' => [ 'behance-square', 'fab', null ],
|
|
'fa-steam' => [ 'steam', 'fab', null ],
|
|
'fa-steam-square' => [ 'steam-square', 'fab', null ],
|
|
'fa-automobile' => [ 'automobile', null, 'car' ],
|
|
'fa-envelope-o' => [ 'envelope-o', 'far', 'envelope' ],
|
|
'fa-spotify' => [ 'spotify', 'fab', null ],
|
|
'fa-deviantart' => [ 'deviantart', 'fab', null ],
|
|
'fa-soundcloud' => [ 'soundcloud', 'fab', null ],
|
|
'fa-file-pdf-o' => [ 'file-pdf-o', 'far', 'file-pdf' ],
|
|
'fa-file-word-o' => [ 'file-word-o', 'far', 'file-word' ],
|
|
'fa-file-excel-o' => [ 'file-excel-o', 'far', 'file-excel' ],
|
|
'fa-file-powerpoint-o' => [ 'file-powerpoint-o', 'far', 'file-powerpoint' ],
|
|
'fa-file-image-o' => [ 'file-image-o', 'far', 'file-image' ],
|
|
'fa-file-photo-o' => [ 'file-photo-o', 'far', 'file-image' ],
|
|
'fa-file-picture-o' => [ 'file-picture-o', 'far', 'file-image' ],
|
|
'fa-file-archive-o' => [ 'file-archive-o', 'far', 'file-archive' ],
|
|
'fa-file-zip-o' => [ 'file-zip-o', 'far', 'file-archive' ],
|
|
'fa-file-audio-o' => [ 'file-audio-o', 'far', 'file-audio' ],
|
|
'fa-file-sound-o' => [ 'file-sound-o', 'far', 'file-audio' ],
|
|
'fa-file-video-o' => [ 'file-video-o', 'far', 'file-video' ],
|
|
'fa-file-movie-o' => [ 'file-movie-o', 'far', 'file-video' ],
|
|
'fa-file-code-o' => [ 'file-code-o', 'far', 'file-code' ],
|
|
'fa-vine' => [ 'vine', 'fab', null ],
|
|
'fa-codepen' => [ 'codepen', 'fab', null ],
|
|
'fa-jsfiddle' => [ 'jsfiddle', 'fab', null ],
|
|
'fa-life-ring' => [ 'life-ring', 'far', null ],
|
|
'fa-life-bouy' => [ 'life-bouy', 'far', 'life-ring' ],
|
|
'fa-life-buoy' => [ 'life-buoy', 'far', 'life-ring' ],
|
|
'fa-life-saver' => [ 'life-saver', 'far', 'life-ring' ],
|
|
'fa-support' => [ 'support', 'far', 'life-ring' ],
|
|
'fa-circle-o-notch' => [ 'circle-o-notch', null, 'circle-notch' ],
|
|
'fa-rebel' => [ 'rebel', 'fab', null ],
|
|
'fa-ra' => [ 'ra', 'fab', 'rebel' ],
|
|
'fa-resistance' => [ 'resistance', 'fab', 'rebel' ],
|
|
'fa-empire' => [ 'empire', 'fab', null ],
|
|
'fa-ge' => [ 'ge', 'fab', 'empire' ],
|
|
'fa-git-square' => [ 'git-square', 'fab', null ],
|
|
'fa-git' => [ 'git', 'fab', null ],
|
|
'fa-hacker-news' => [ 'hacker-news', 'fab', null ],
|
|
'fa-y-combinator-square' => [ 'y-combinator-square', 'fab', 'hacker-news' ],
|
|
'fa-yc-square' => [ 'yc-square', 'fab', 'hacker-news' ],
|
|
'fa-tencent-weibo' => [ 'tencent-weibo', 'fab', null ],
|
|
'fa-qq' => [ 'qq', 'fab', null ],
|
|
'fa-weixin' => [ 'weixin', 'fab', null ],
|
|
'fa-wechat' => [ 'wechat', 'fab', 'weixin' ],
|
|
'fa-send' => [ 'send', null, 'paper-plane' ],
|
|
'fa-paper-plane-o' => [ 'paper-plane-o', 'far', 'paper-plane' ],
|
|
'fa-send-o' => [ 'send-o', 'far', 'paper-plane' ],
|
|
'fa-circle-thin' => [ 'circle-thin', 'far', 'circle' ],
|
|
'fa-header' => [ 'header', null, 'heading' ],
|
|
'fa-sliders' => [ 'sliders', null, 'sliders-h' ],
|
|
'fa-futbol-o' => [ 'futbol-o', 'far', 'futbol' ],
|
|
'fa-soccer-ball-o' => [ 'soccer-ball-o', 'far', 'futbol' ],
|
|
'fa-slideshare' => [ 'slideshare', 'fab', null ],
|
|
'fa-twitch' => [ 'twitch', 'fab', null ],
|
|
'fa-yelp' => [ 'yelp', 'fab', null ],
|
|
'fa-newspaper-o' => [ 'newspaper-o', 'far', 'newspaper' ],
|
|
'fa-paypal' => [ 'paypal', 'fab', null ],
|
|
'fa-google-wallet' => [ 'google-wallet', 'fab', null ],
|
|
'fa-cc-visa' => [ 'cc-visa', 'fab', null ],
|
|
'fa-cc-mastercard' => [ 'cc-mastercard', 'fab', null ],
|
|
'fa-cc-discover' => [ 'cc-discover', 'fab', null ],
|
|
'fa-cc-amex' => [ 'cc-amex', 'fab', null ],
|
|
'fa-cc-paypal' => [ 'cc-paypal', 'fab', null ],
|
|
'fa-cc-stripe' => [ 'cc-stripe', 'fab', null ],
|
|
'fa-bell-slash-o' => [ 'bell-slash-o', 'far', 'bell-slash' ],
|
|
'fa-trash' => [ 'trash', null, 'trash-alt' ],
|
|
'fa-copyright' => [ 'copyright', 'far', null ],
|
|
'fa-eyedropper' => [ 'eyedropper', null, 'eye-dropper' ],
|
|
'fa-area-chart' => [ 'area-chart', null, 'chart-area' ],
|
|
'fa-pie-chart' => [ 'pie-chart', null, 'chart-pie' ],
|
|
'fa-line-chart' => [ 'line-chart', null, 'chart-line' ],
|
|
'fa-lastfm' => [ 'lastfm', 'fab', null ],
|
|
'fa-lastfm-square' => [ 'lastfm-square', 'fab', null ],
|
|
'fa-ioxhost' => [ 'ioxhost', 'fab', null ],
|
|
'fa-angellist' => [ 'angellist', 'fab', null ],
|
|
'fa-cc' => [ 'cc', 'far', 'closed-captioning' ],
|
|
'fa-ils' => [ 'ils', null, 'shekel-sign' ],
|
|
'fa-shekel' => [ 'shekel', null, 'shekel-sign' ],
|
|
'fa-sheqel' => [ 'sheqel', null, 'shekel-sign' ],
|
|
'fa-meanpath' => [ 'meanpath', 'fab', 'font-awesome' ],
|
|
'fa-buysellads' => [ 'buysellads', 'fab', null ],
|
|
'fa-connectdevelop' => [ 'connectdevelop', 'fab', null ],
|
|
'fa-dashcube' => [ 'dashcube', 'fab', null ],
|
|
'fa-forumbee' => [ 'forumbee', 'fab', null ],
|
|
'fa-leanpub' => [ 'leanpub', 'fab', null ],
|
|
'fa-sellsy' => [ 'sellsy', 'fab', null ],
|
|
'fa-shirtsinbulk' => [ 'shirtsinbulk', 'fab', null ],
|
|
'fa-simplybuilt' => [ 'simplybuilt', 'fab', null ],
|
|
'fa-skyatlas' => [ 'skyatlas', 'fab', null ],
|
|
'fa-diamond' => [ 'diamond', 'far', 'gem' ],
|
|
'fa-intersex' => [ 'intersex', null, 'transgender' ],
|
|
'fa-facebook-official' => [ 'facebook-official', 'fab', 'facebook' ],
|
|
'fa-pinterest-p' => [ 'pinterest-p', 'fab', null ],
|
|
'fa-whatsapp' => [ 'whatsapp', 'fab', null ],
|
|
'fa-hotel' => [ 'hotel', null, 'bed' ],
|
|
'fa-viacoin' => [ 'viacoin', 'fab', null ],
|
|
'fa-medium' => [ 'medium', 'fab', null ],
|
|
'fa-y-combinator' => [ 'y-combinator', 'fab', null ],
|
|
'fa-yc' => [ 'yc', 'fab', 'y-combinator' ],
|
|
'fa-optin-monster' => [ 'optin-monster', 'fab', null ],
|
|
'fa-opencart' => [ 'opencart', 'fab', null ],
|
|
'fa-expeditedssl' => [ 'expeditedssl', 'fab', null ],
|
|
'fa-battery-4' => [ 'battery-4', null, 'battery-full' ],
|
|
'fa-battery' => [ 'battery', null, 'battery-full' ],
|
|
'fa-battery-3' => [ 'battery-3', null, 'battery-three-quarters' ],
|
|
'fa-battery-2' => [ 'battery-2', null, 'battery-half' ],
|
|
'fa-battery-1' => [ 'battery-1', null, 'battery-quarter' ],
|
|
'fa-battery-0' => [ 'battery-0', null, 'battery-empty' ],
|
|
'fa-object-group' => [ 'object-group', 'far', null ],
|
|
'fa-object-ungroup' => [ 'object-ungroup', 'far', null ],
|
|
'fa-sticky-note-o' => [ 'sticky-note-o', 'far', 'sticky-note' ],
|
|
'fa-cc-jcb' => [ 'cc-jcb', 'fab', null ],
|
|
'fa-cc-diners-club' => [ 'cc-diners-club', 'fab', null ],
|
|
'fa-clone' => [ 'clone', 'far', null ],
|
|
'fa-hourglass-o' => [ 'hourglass-o', 'far', 'hourglass' ],
|
|
'fa-hourglass-1' => [ 'hourglass-1', null, 'hourglass-start' ],
|
|
'fa-hourglass-2' => [ 'hourglass-2', null, 'hourglass-half' ],
|
|
'fa-hourglass-3' => [ 'hourglass-3', null, 'hourglass-end' ],
|
|
'fa-hand-rock-o' => [ 'hand-rock-o', 'far', 'hand-rock' ],
|
|
'fa-hand-grab-o' => [ 'hand-grab-o', 'far', 'hand-rock' ],
|
|
'fa-hand-paper-o' => [ 'hand-paper-o', 'far', 'hand-paper' ],
|
|
'fa-hand-stop-o' => [ 'hand-stop-o', 'far', 'hand-paper' ],
|
|
'fa-hand-scissors-o' => [ 'hand-scissors-o', 'far', 'hand-scissors' ],
|
|
'fa-hand-lizard-o' => [ 'hand-lizard-o', 'far', 'hand-lizard' ],
|
|
'fa-hand-spock-o' => [ 'hand-spock-o', 'far', 'hand-spock' ],
|
|
'fa-hand-pointer-o' => [ 'hand-pointer-o', 'far', 'hand-pointer' ],
|
|
'fa-hand-peace-o' => [ 'hand-peace-o', 'far', 'hand-peace' ],
|
|
'fa-registered' => [ 'registered', 'far', null ],
|
|
'fa-creative-commons' => [ 'creative-commons', 'fab', null ],
|
|
'fa-gg' => [ 'gg', 'fab', null ],
|
|
'fa-gg-circle' => [ 'gg-circle', 'fab', null ],
|
|
'fa-tripadvisor' => [ 'tripadvisor', 'fab', null ],
|
|
'fa-odnoklassniki' => [ 'odnoklassniki', 'fab', null ],
|
|
'fa-odnoklassniki-square' => [ 'odnoklassniki-square', 'fab', null ],
|
|
'fa-get-pocket' => [ 'get-pocket', 'fab', null ],
|
|
'fa-wikipedia-w' => [ 'wikipedia-w', 'fab', null ],
|
|
'fa-safari' => [ 'safari', 'fab', null ],
|
|
'fa-chrome' => [ 'chrome', 'fab', null ],
|
|
'fa-firefox' => [ 'firefox', 'fab', null ],
|
|
'fa-opera' => [ 'opera', 'fab', null ],
|
|
'fa-internet-explorer' => [ 'internet-explorer', 'fab', null ],
|
|
'fa-television' => [ 'television', null, 'tv' ],
|
|
'fa-contao' => [ 'contao', 'fab', null ],
|
|
'fa-500px' => [ '500px', 'fab', null ],
|
|
'fa-amazon' => [ 'amazon', 'fab', null ],
|
|
'fa-calendar-plus-o' => [ 'calendar-plus-o', 'far', 'calendar-plus' ],
|
|
'fa-calendar-minus-o' => [ 'calendar-minus-o', 'far', 'calendar-minus' ],
|
|
'fa-calendar-times-o' => [ 'calendar-times-o', 'far', 'calendar-times' ],
|
|
'fa-calendar-check-o' => [ 'calendar-check-o', 'far', 'calendar-check' ],
|
|
'fa-map-o' => [ 'map-o', 'far', 'map' ],
|
|
'fa-commenting' => [ 'commenting', null, 'comment-dots' ],
|
|
'fa-commenting-o' => [ 'commenting-o', 'far', 'comment-dots' ],
|
|
'fa-houzz' => [ 'houzz', 'fab', null ],
|
|
'fa-vimeo' => [ 'vimeo', 'fab', 'vimeo-v' ],
|
|
'fa-black-tie' => [ 'black-tie', 'fab', null ],
|
|
'fa-fonticons' => [ 'fonticons', 'fab', null ],
|
|
'fa-reddit-alien' => [ 'reddit-alien', 'fab', null ],
|
|
'fa-edge' => [ 'edge', 'fab', null ],
|
|
'fa-credit-card-alt' => [ 'credit-card-alt', null, 'credit-card' ],
|
|
'fa-codiepie' => [ 'codiepie', 'fab', null ],
|
|
'fa-modx' => [ 'modx', 'fab', null ],
|
|
'fa-fort-awesome' => [ 'fort-awesome', 'fab', null ],
|
|
'fa-usb' => [ 'usb', 'fab', null ],
|
|
'fa-product-hunt' => [ 'product-hunt', 'fab', null ],
|
|
'fa-mixcloud' => [ 'mixcloud', 'fab', null ],
|
|
'fa-scribd' => [ 'scribd', 'fab', null ],
|
|
'fa-pause-circle-o' => [ 'pause-circle-o', 'far', 'pause-circle' ],
|
|
'fa-stop-circle-o' => [ 'stop-circle-o', 'far', 'stop-circle' ],
|
|
'fa-bluetooth' => [ 'bluetooth', 'fab', null ],
|
|
'fa-bluetooth-b' => [ 'bluetooth-b', 'fab', null ],
|
|
'fa-gitlab' => [ 'gitlab', 'fab', null ],
|
|
'fa-wpbeginner' => [ 'wpbeginner', 'fab', null ],
|
|
'fa-wpforms' => [ 'wpforms', 'fab', null ],
|
|
'fa-envira' => [ 'envira', 'fab', null ],
|
|
'fa-wheelchair-alt' => [ 'wheelchair-alt', 'fab', 'accessible-icon' ],
|
|
'fa-question-circle-o' => [ 'question-circle-o', 'far', 'question-circle' ],
|
|
'fa-volume-control-phone' => [ 'volume-control-phone', null, 'phone-volume' ],
|
|
'fa-asl-interpreting' => [ 'asl-interpreting', null, 'american-sign-language-interpreting' ],
|
|
'fa-deafness' => [ 'deafness', null, 'deaf' ],
|
|
'fa-hard-of-hearing' => [ 'hard-of-hearing', null, 'deaf' ],
|
|
'fa-glide' => [ 'glide', 'fab', null ],
|
|
'fa-glide-g' => [ 'glide-g', 'fab', null ],
|
|
'fa-signing' => [ 'signing', null, 'sign-language' ],
|
|
'fa-viadeo' => [ 'viadeo', 'fab', null ],
|
|
'fa-viadeo-square' => [ 'viadeo-square', 'fab', null ],
|
|
'fa-snapchat' => [ 'snapchat', 'fab', null ],
|
|
'fa-snapchat-ghost' => [ 'snapchat-ghost', 'fab', null ],
|
|
'fa-snapchat-square' => [ 'snapchat-square', 'fab', null ],
|
|
'fa-pied-piper' => [ 'pied-piper', 'fab', null ],
|
|
'fa-first-order' => [ 'first-order', 'fab', null ],
|
|
'fa-yoast' => [ 'yoast', 'fab', null ],
|
|
'fa-themeisle' => [ 'themeisle', 'fab', null ],
|
|
'fa-google-plus-official' => [ 'google-plus-official', 'fab', 'google-plus' ],
|
|
'fa-google-plus-circle' => [ 'google-plus-circle', 'fab', 'google-plus' ],
|
|
'fa-font-awesome' => [ 'font-awesome', 'fab', null ],
|
|
'fa-fa' => [ 'fa', 'fab', 'font-awesome' ],
|
|
'fa-handshake-o' => [ 'handshake-o', 'far', 'handshake' ],
|
|
'fa-envelope-open-o' => [ 'envelope-open-o', 'far', 'envelope-open' ],
|
|
'fa-linode' => [ 'linode', 'fab', null ],
|
|
'fa-address-book-o' => [ 'address-book-o', 'far', 'address-book' ],
|
|
'fa-vcard' => [ 'vcard', null, 'address-card' ],
|
|
'fa-address-card-o' => [ 'address-card-o', 'far', 'address-card' ],
|
|
'fa-vcard-o' => [ 'vcard-o', 'far', 'address-card' ],
|
|
'fa-user-circle-o' => [ 'user-circle-o', 'far', 'user-circle' ],
|
|
'fa-user-o' => [ 'user-o', 'far', 'user' ],
|
|
'fa-id-badge' => [ 'id-badge', 'far', null ],
|
|
'fa-drivers-license' => [ 'drivers-license', null, 'id-card' ],
|
|
'fa-id-card-o' => [ 'id-card-o', 'far', 'id-card' ],
|
|
'fa-drivers-license-o' => [ 'drivers-license-o', 'far', 'id-card' ],
|
|
'fa-quora' => [ 'quora', 'fab', null ],
|
|
'fa-free-code-camp' => [ 'free-code-camp', 'fab', null ],
|
|
'fa-telegram' => [ 'telegram', 'fab', null ],
|
|
'fa-thermometer-4' => [ 'thermometer-4', null, 'thermometer-full' ],
|
|
'fa-thermometer' => [ 'thermometer', null, 'thermometer-full' ],
|
|
'fa-thermometer-3' => [ 'thermometer-3', null, 'thermometer-three-quarters' ],
|
|
'fa-thermometer-2' => [ 'thermometer-2', null, 'thermometer-half' ],
|
|
'fa-thermometer-1' => [ 'thermometer-1', null, 'thermometer-quarter' ],
|
|
'fa-thermometer-0' => [ 'thermometer-0', null, 'thermometer-empty' ],
|
|
'fa-bathtub' => [ 'bathtub', null, 'bath' ],
|
|
'fa-s15' => [ 's15', null, 'bath' ],
|
|
'fa-window-maximize' => [ 'window-maximize', 'far', null ],
|
|
'fa-window-restore' => [ 'window-restore', 'far', null ],
|
|
'fa-times-rectangle' => [ 'times-rectangle', null, 'window-close' ],
|
|
'fa-window-close-o' => [ 'window-close-o', 'far', 'window-close' ],
|
|
'fa-times-rectangle-o' => [ 'times-rectangle-o', 'far', 'window-close' ],
|
|
'fa-bandcamp' => [ 'bandcamp', 'fab', null ],
|
|
'fa-grav' => [ 'grav', 'fab', null ],
|
|
'fa-etsy' => [ 'etsy', 'fab', null ],
|
|
'fa-imdb' => [ 'imdb', 'fab', null ],
|
|
'fa-ravelry' => [ 'ravelry', 'fab', null ],
|
|
'fa-eercast' => [ 'eercast', 'fab', 'sellcast' ],
|
|
'fa-snowflake-o' => [ 'snowflake-o', 'far', 'snowflake' ],
|
|
'fa-superpowers' => [ 'superpowers', 'fab', null ],
|
|
'fa-wpexplorer' => [ 'wpexplorer', 'fab', null ],
|
|
'fa-cab' => [ 'cab', null, 'taxi' ],
|
|
];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Instantiates the Fusion_Template_Builder class.
|
|
* Make sure the class is properly set-up.
|
|
*
|
|
* @since object 2.2
|
|
* @return object Fusion_App
|
|
*/
|
|
function AWB_Performance_Wizard() { // phpcs:ignore WordPress.NamingConventions
|
|
return AWB_Performance_Wizard::get_instance();
|
|
}
|
|
AWB_Performance_Wizard();
|