Willkommen bei WordPress. Dies ist dein erster Beitrag. Bearbeite oder lösche ihn und beginne mit dem Schreiben!
Hallo Welt!
von raredesign | Dez 3, 2019 | Allgemein | 0 Kommentare
Cokiee Shell
Current Path : /var/www/web28/html/wp-content/themes/Avada/includes/lib/inc/fusion-app/ |
Current File : //var/www/web28/html/wp-content/themes/Avada/includes/lib/inc/fusion-app/class-fusion-app.php |
<?php /** * Main Fusion_App Class. * * @since 2.0 * @package fusion-library */ /** * Main Fusion_App Class. * * @since 2.0 */ class Fusion_App { /** * The one, true instance of this object. * * @static * @access private * @since 2.0 * @var object */ private static $instance; /** * Has data to filter in. * * @access protected * @since 2.0 * @var bool */ protected $has_data = false; /** * Data we want to emulate. * * @access protected * @since 2.0 * @var bool */ protected $data = []; /** * Is this the preview? * * @access protected * @since 2.0 * @var bool */ protected $is_preview = false; /** * Is this preview only? * * @access protected * @since 2.0 * @var bool */ protected $is_preview_only = false; /** * Is builder active. * * @access public * @var boolean $is_builder. */ public $is_builder = false; /** * Preferences object * * @access public * @var Fusion_Preferences */ public $preferences = null; /** * Save data * * @access public * @var save_data */ public $save_data = []; /** * Is this ajax from app? * * @access protected * @since 2.0 * @var bool */ protected $is_ajax = false; /** * An array of our google fonts. * * @static * @access public * @var null|object */ public static $google_fonts = null; /** * Backup object for global $wp_query. * * @access protected * @var null|object */ protected $backup_wp_query = null; /** * Creates or returns an instance of this class. * * @static * @access public * @since 2.0 */ 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 Fusion_App(); } return self::$instance; } /** * Initializes the plugin by setting localization, hooks, filters, * and administrative functions. * * @access private * @since 2.0 */ private function __construct() { $can_edit = current_user_can( apply_filters( 'awb_role_manager_access_capability', 'manage_options', null, 'live_builder_edit' ) ) || current_user_can( apply_filters( 'awb_role_manager_access_capability', 'publish_', null, 'live_builder_edit' ) ); $this->set_ajax_status(); // Action to get google fonts, used both in Live Editor and Backend builder. add_action( 'wp_ajax_fusion_get_webfonts_ajax', [ $this, 'get_googlefonts_ajax' ] ); if ( apply_filters( 'fusion_load_live_editor', $can_edit ) ) { // Save post content. add_action( 'wp_ajax_fusion_app_save_post_content', [ $this, 'fusion_app_save_post_content' ] ); $this->set_builder_status(); $this->set_preview_status(); $this->init(); } add_action( 'wp_ajax_fusion_get_post_lock_data', [ $this, 'ajax_get_post_lock_data' ] ); } /** * Initializes the plugin by setting localization, hooks, filters, * and administrative functions. * * @access public * @since 2.0 * @return void */ public function init() { add_filter( 'wp_refresh_nonces', [ $this, 'fusion_refresh_nonces' ], 10, 3 ); $this->set_data(); if ( $this->has_data ) { add_action( 'wp', [ $this, 'filter_data' ] ); } // If preview frame. if ( $this->is_preview ) { add_action( 'wp_footer', [ $this, 'preview_data' ] ); show_admin_bar( false ); // phpcs:ignore WPThemeReview.PluginTerritory add_action( 'wp_enqueue_scripts', [ $this, 'preview_live_scripts' ], 999 ); add_filter( 'body_class', [ $this, 'preview_body_class' ], 999 ); add_filter( 'avada_the_html_class', [ $this, 'preview_html_class' ], 999 ); add_action( 'wp_head', [ $this, 'access_control_allow_origin' ] ); } if ( $this->is_builder ) { show_admin_bar( false ); // phpcs:ignore WPThemeReview.PluginTerritory add_action( 'wp_enqueue_scripts', function() { global $wp_scripts, $wp_styles; $wp_scripts->queue = []; $wp_styles->queue = []; }, 100 ); add_action( 'wp_enqueue_scripts', [ $this, 'live_scripts' ], 997 ); add_action( 'wp_footer', [ $this, 'load_templates' ] ); add_action( 'wp_footer', [ $this, 'inject_css_vars' ] ); add_action( 'wp_print_footer_scripts', [ $this, 'fusion_authorization' ], 10 ); add_filter( 'body_class', [ $this, 'body_class' ], 997 ); add_filter( 'template_include', [ $this, 'template_include' ], 999 ); } if ( $this->is_preview || $this->is_builder ) { add_filter( 'wp_headers', [ $this, 'cache_headers' ], 999 ); } $this->set_preference(); // Action for replacing partial contents. add_action( 'wp_ajax_fusion_app_partial_refresh', [ $this, 'fusion_app_partial_refresh' ] ); // Action to add new term from live editor. add_action( 'wp_ajax_fusion_multiselect_addnew', [ $this, 'fusion_multiselect_addnew' ] ); // Load empty checkout page in live editor. add_action( 'init', [ $this, 'load_empty_checkout_page' ] ); // Front end page edit trigger. Work around for theme check. $add_to_admin_bar_hook = 'admin_bar_menu'; add_action( $add_to_admin_bar_hook, [ $this, 'builder_trigger' ], 999 ); add_action( 'wp_footer', [ $this, 'remove_unused_form_links' ], 997 ); add_action( 'wp_footer', [ $this, 'remove_unused_off_canvas_links' ], 997 ); add_action( 'wp_footer', [ $this, 'remove_unused_mega_menus_links' ], 997 ); } /** * Remove unused form links. * * @access public * @since 3.1 * @return void */ public function remove_unused_form_links() { $maybe_has_forms = class_exists( 'Fusion_Template_Builder' ) && function_exists( 'get_post_type' ) && 'fusion_tb_section' !== get_post_type(); $forms_enabled = class_exists( 'Fusion_Form_Builder' ) && false !== Fusion_Form_Builder::is_enabled(); if ( ! $forms_enabled || ! current_user_can( 'edit_others_posts' ) || ! is_admin_bar_showing() || ! $maybe_has_forms ) { return; } ?> <script> jQuery( document ).ready( function() { var $ul = jQuery( '#wp-admin-bar-awb-form-group' ), $formEditLinks = $ul.children( 'li' ); if ( 0 < $formEditLinks.length ) { $formEditLinks.each( function() { var formId = this.id.replace( 'wp-admin-bar-fb-edit-form', 'fusion-form' ); if ( ! jQuery( '.' + formId ).length ) { this.remove(); } } ); // Remove empty Ul. if ( $ul.length && ! $ul.children().length ) { $ul.remove(); } } } ) </script> <?php } /** * Remove unused mega menus links. * * @access public * @since 3.9 * @return void */ public function remove_unused_mega_menus_links() { $maybe_has_mega_menus = class_exists( 'Fusion_Template_Builder' ) && function_exists( 'get_post_type' ) && 'fusion_tb_section' !== get_post_type(); if ( ! $maybe_has_mega_menus || ! current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_others_posts', 'avada_library' ) ) || ! is_admin_bar_showing() ) { return; } ?> <script> jQuery( document ).ready( function() { var $ul = jQuery( '#wp-admin-bar-awb-mega-menus-group' ), $offCanvasEditLink = $ul.children( 'li' ); if ( 0 < $offCanvasEditLink.length ) { $offCanvasEditLink.each( function() { var megaMenuId = this.id.replace( 'wp-admin-bar-fb-edit-mega-menu', 'awb-mega-menu' ); if ( ! jQuery( '#' + megaMenuId ).length ) { this.remove(); } } ); // Remove empty Ul. if ( $ul.length && ! $ul.children().length ) { $ul.remove(); } } else { } } ) </script> <?php } /** * Remove unused off canvas links. * * @access public * @since 3.6 * @return void */ public function remove_unused_off_canvas_links() { $maybe_has_off_canvas = class_exists( 'Fusion_Template_Builder' ) && function_exists( 'get_post_type' ) && 'fusion_tb_section' !== get_post_type(); $off_canvas_enabled = class_exists( 'AWB_Off_Canvas_Front_End' ) && false !== AWB_Off_Canvas_Front_End::is_enabled(); if ( ! $off_canvas_enabled || ! current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_others_posts', 'avada_library' ) ) || ! is_admin_bar_showing() || ! $maybe_has_off_canvas ) { return; } ?> <script> jQuery( document ).ready( function() { var $ul = jQuery( '#wp-admin-bar-awb-off-canvas-group' ), $offCanvasEditLink = $ul.children( 'li' ); if ( 0 < $offCanvasEditLink.length ) { $offCanvasEditLink.each( function() { var offCanvasId = this.id.replace( 'wp-admin-bar-fb-edit-off-canvas', 'awb-oc' ); if ( ! jQuery( '#' + offCanvasId ).length ) { this.remove(); } } ); // Remove empty Ul. if ( $ul.length && ! $ul.children().length ) { $ul.remove(); } } else { } } ) </script> <?php } /** * Check for POST data of refresh. * * @access public * @since 2.0 * @return void */ public function set_data() { $data = []; $this->has_data = isset( $_POST ) && isset( $_POST['action'] ) && isset( $_POST['fusion_load_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['fusion_load_nonce'] ) ), 'fusion_load_nonce' ); if ( $this->has_data ) { $this->data['action'] = sanitize_text_field( wp_unslash( $_POST['action'] ) ); if ( isset( $_POST['post_id'] ) ) { $this->data['post_id'] = sanitize_text_field( wp_unslash( $_POST['post_id'] ) ); } if ( isset( $_POST['partials'] ) ) { $this->data['partials'] = wp_unslash( $_POST['partials'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } if ( isset( $_POST['post_details'] ) ) { $this->data['post_details'] = fusion_string_to_array( $_POST['post_details'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } if ( isset( $_POST['post_content'] ) ) { $post_content = $_POST['post_content']; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput if ( 'fusion_app_preview_only' === $this->data['action'] ) { $post_content = urldecode( utf8_encode( $post_content ) ); } $this->data['post_content'] = wp_unslash( apply_filters( 'content_save_pre', $post_content ) ); } if ( isset( $_POST['query'] ) ) { $this->data['query'] = wp_unslash( $_POST['query'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } if ( isset( $_POST['option_name'] ) ) { $this->data['option_name'] = sanitize_text_field( wp_unslash( $_POST['option_name'] ) ); } if ( isset( $_POST['fusion_options'] ) ) { $this->data['fusion_options'] = fusion_string_to_array( $_POST['fusion_options'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } if ( isset( $_POST['meta_values'] ) ) { $this->data['meta_values'] = fusion_string_to_array( $_POST['meta_values'], false ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } } } /** * Get any data set to app. * * @access public * @since 2.0 * @param string $id The data we want to get (post_id, partials, post_content etc). * @return mixed */ public function get_data( $id = '' ) { if ( '' === $id ) { return $this->has_data ? $this->data : false; } if ( isset( $this->data[ $id ] ) ) { return $this->data[ $id ]; } return false; } /** * Checks if request is for a full refresh of same page. * * @access public * @since 2.0 * @return boolean */ public function is_full_refresh() { return $this->has_data && 'fusion_app_full_refresh' === $this->data['action']; } /** * Filter page data with POST data. * * @access public * @since 2.0 * @return void */ public function filter_data() { if ( ! $this->has_data ) { return; } delete_transient( 'avada_googlefonts_contents' ); delete_site_transient( 'avada_googlefonts_contents' ); $this->filter_core_settings(); do_action( 'fusion_filter_data' ); } /** * Set no cache headers for the builder frames. * * @access public * @since 2.0 * @param array $headers Existing headers. * @return array */ public function cache_headers( $headers ) { $headers = wp_get_nocache_headers(); return $headers; } /** * Echoes the data for Front-End builder preview. * * @access public * @since 2.0 * @return void */ public function preview_data() { global $post, $fusion_library, $template, $wp_query; $_post = $post; $permalink = fusion_app_get_permalink(); $permalink = remove_query_arg( [ 'builder', 'builder_id', 'option' ], $permalink ); $permalink = add_query_arg( 'fb-edit', true, $permalink ); $page_id = Fusion::get_instance()->get_page_id(); $post_content = ''; $post_type = get_post_type( $page_id ); $post_type_obj = get_post_type_object( $post_type ); $is_fusion_element = 'fusion_element' === $post_type ? true : false; $fusion_element_type = false; $backend_link = ''; if ( $page_id && false === strpos( $page_id, '-archive' ) ) { $_post = get_post( $page_id ); $post_content = is_object( $_post ) ? wpautop( trim( apply_filters( 'content_edit_pre', $_post->post_content, $page_id ) ) ) : ''; if ( function_exists( 'fusion_builder_fix_shortcodes' ) ) { $post_content = fusion_builder_fix_shortcodes( $post_content ); } // Add additional next page element, for the last page live preview. if ( 0 < substr_count( $post_content, '[fusion_builder_next_page]' ) ) { $last_part_of_post = substr( $post_content, -strlen( '[fusion_builder_next_page last="true"]' ) - 2 ); if ( 0 === substr_count( $last_part_of_post, '[fusion_builder_next_page last="true"]' ) ) { // Do not add another one if it already ends with. $post_content .= '[fusion_builder_next_page last="true"]'; } } } if ( ( is_category() || is_tax() ) && ( ! function_exists( 'FusionBuilder' ) || ! FusionBuilder()->editing_post_card ) ) { $category = get_queried_object(); $backend_link = get_edit_term_link( $category->term_id, $category->taxonomy ); } if ( $is_fusion_element ) { $terms = get_the_terms( $post->ID, 'element_category' ); if ( $terms ) { $fusion_element_type = $terms[0]->name; } } $data = [ 'query' => $wp_query->query, 'currentPage' => fusion_app_get_current_page(), 'is_home' => is_home(), 'is_front_page' => is_front_page(), 'is_single' => is_single( $page_id ), 'is_sticky' => is_sticky( $page_id ), 'is_post_type_archive' => is_post_type_archive(), 'is_posts_archive' => is_post_type_archive( 'post' ), 'comments_open' => comments_open(), 'is_page' => is_page( $page_id ), 'template' => str_replace( [ get_template_directory() . '/', get_stylesheet_directory() . '/' ], '', $template ), 'is_archive' => is_archive() && ( ! function_exists( 'is_shop' ) || function_exists( 'is_shop' ) && ! is_shop() ), 'is_category' => is_category(), 'is_tag' => is_tag(), 'is_tax' => is_tax(), 'is_author' => is_author(), 'is_date' => is_date(), 'is_year' => is_year(), 'is_month' => is_month(), 'is_day' => is_day(), 'is_time' => is_time(), 'is_new_day' => is_new_day(), 'is_search' => is_search(), 'is_404' => is_404(), 'is_paged' => is_paged(), 'is_attachment' => is_attachment(), 'is_singular' => is_singular(), 'has_excerpt' => has_excerpt(), 'is_child_theme' => is_child_theme(), 'is_singular_post' => is_singular( 'post' ), 'is_woocommerce' => function_exists( 'is_woocommerce' ) ? is_woocommerce() : false, 'is_shop' => function_exists( 'is_shop' ) ? is_shop() : false, 'is_product_category' => function_exists( 'is_product_category' ) ? is_product_category() : false, 'is_product_tag' => function_exists( 'is_product_tag' ) ? is_product_tag() : false, 'is_product' => function_exists( 'is_product' ) ? is_product() : false, 'is_cart' => function_exists( 'is_cart' ) ? is_cart() : false, 'is_checkout' => function_exists( 'is_checkout' ) ? is_checkout() : false, 'is_account_page' => function_exists( 'is_account_page' ) ? is_account_page() : false, 'is_woo_archive' => ( ( function_exists( 'is_woocommerce' ) && is_woocommerce() && is_tax() ) || ( function_exists( 'is_product_taxonomy' ) && is_product_taxonomy() ) ), 'is_portfolio_single' => is_singular( 'avada_portfolio' ), 'is_portfolio_archive' => is_post_type_archive( 'avada_portfolio' ) || is_tax( [ 'portfolio_category', 'portfolio_skills', 'portfolio_tags' ] ), 'is_singular_ec' => ( is_singular( 'tribe_events' ) || is_singular( 'tribe_organizer' ) || is_singular( 'tribe_venue' ) ), 'is_bbpress' => function_exists( 'is_bbpress' ) && is_bbpress(), 'is_buddypress' => function_exists( 'is_buddypress' ) && is_buddypress(), 'backendLink' => $backend_link, 'is_fusion_element' => $is_fusion_element, 'fusion_element_type' => $fusion_element_type, 'plugins_active' => [ 'woocommerce' => class_exists( 'WooCommerce' ), 'slider_rev' => defined( 'RS_PLUGIN_PATH' ), 'layer_slider' => defined( 'LS_PLUGIN_BASE' ), 'events_calendar' => class_exists( 'Tribe__Events__Main' ), 'cf7' => defined( 'WPCF7_PLUGIN' ), 'convert_plus' => class_exists( 'Convert_Plug' ), 'awb_studio' => class_exists( 'Avada_Studio' ), ], 'postDetails' => [ 'post_id' => $page_id, 'post_permalink' => $permalink, ], ]; // If editing a post card, add as template category for element filtering. if ( 'post_cards' === $fusion_element_type || 'mega_menus' === $fusion_element_type ) { $data['template_category'] = $fusion_element_type; } if ( $page_id && false === strpos( $page_id, '-archive' ) ) { $data['postDetails'] = [ 'post_id' => $page_id, 'post_permalink' => $permalink, 'post_title' => get_the_title( $page_id ), 'post_content' => $post_content, 'post_name' => $_post->post_name, 'post_type' => $post_type, 'post_type_name' => is_object( $post_type_obj ) ? $post_type_obj->labels->singular_name : esc_html__( 'Page', 'fusion-builder' ), 'post_status' => get_post_status( $page_id ), 'post_password' => is_object( $_post ) ? $_post->post_password : '', 'post_date' => is_object( $_post ) ? $_post->post_date : '', 'post_parent' => is_object( $_post ) ? $_post->post_parent : '', 'menu_order' => ( isset( $_post->menu_order ) ) ? $_post->menu_order : '0', ]; if ( post_type_supports( $post_type, 'post-formats' ) && current_theme_supports( 'post-formats' ) ) { $data['postDetails']['post_format'] = get_post_format( $page_id ) ? $data['postDetails']['post_format'] : 'standard'; } // Taxonomies. $taxonomy_post_types = (array) apply_filters( 'fusion_taxonomy_post_type', [ 'post', 'avada_portfolio' ] ); if ( in_array( $post_type, $taxonomy_post_types, true ) ) { $post_taxonomies = get_object_taxonomies( $post_type, 'objects' ); if ( 0 < count( $post_taxonomies ) ) { foreach ( $post_taxonomies as $taxonomy ) { if ( ( 'post_format' !== $taxonomy->name && 'fusion_tb_category' !== $taxonomy->name ) || ( 'fusion_tb_category' === $taxonomy->name && class_exists( 'Avada_Studio' ) ) ) { // current terms. $post_terms = get_the_terms( $page_id, $taxonomy->name ); $current_value = []; $post_terms = ( is_array( $post_terms ) ) ? $post_terms : []; if ( 0 < count( $post_terms ) && ! empty( $post_terms ) ) { foreach ( $post_terms as $post_term ) { array_push( $current_value, $post_term->term_id ); } } $data['postDetails'][ $taxonomy->name ] = implode( ',', $current_value ); } } } } } elseif ( $page_id && false !== strpos( $page_id, '-archive' ) ) { $_term = get_term( (int) str_replace( 'archive-', '', $page_id ) ); if ( ! is_wp_error( $_term ) ) { $data['postDetails'] = [ 'post_id' => $page_id, 'post_permalink' => $permalink, 'name' => $_term->name, 'slug' => $_term->slug, 'parent' => (int) $_term->parent, 'description' => $_term->description, ]; } } $data = $this->add_multilingual_data( $data ); $data = apply_filters( 'fusion_app_preview_data', $data, $page_id, $post_type ); // Load font for inline editor. fusion_the_admin_font_async(); ?> <script type="text/javascript"> function initFusionAppInitialData() { if ( 'undefined' === typeof parent.window.FusionApp ) { setTimeout( function() { initFusionAppInitialData(); }, 60 ); return; } parent.window.FusionApp.initialData = <?php echo wp_json_encode( $data, JSON_FORCE_OBJECT ); ?>; parent.window.FusionApp.preferences = <?php echo wp_json_encode( $this->preferences->params(), JSON_FORCE_OBJECT ); ?>; parent.window.FusionApp.preferencesData = <?php echo wp_json_encode( $this->preferences->get_preferences(), JSON_FORCE_OBJECT ); ?>; parent.window.FusionApp.setup(); window.addEventListener( 'load', function() { parent.window.FusionApp.iframeLoaded(); } ); } initFusionAppInitialData(); </script> <?php } /** * Add multilingual data if necessary. * * @access public * @since 2.0 * @param array $data The data for the fusion app. * @return array */ public function add_multilingual_data( $data ) { $multilingual = Fusion_Library()->multilingual; $available_languages = $multilingual->get_available_languages(); $language = false; if ( ! empty( $available_languages ) ) { $language = $multilingual->get_active_language(); $option_name = Avada::get_option_name(); $data['optionName'] = $option_name; $data['languageTo'] = get_option( $option_name ); $data['languageSwitcher'] = $multilingual->get_language_switcher_data(); // Retrieve defaults for this language. do_action( 'fusion_builder_before_init' ); FusionBuilder()->do_fusion_builder_wp_loaded(); $fusion_builder_elements = fusion_builder_filter_available_elements(); if ( ! empty( $fusion_builder_elements ) ) { $fusion_builder_elements = apply_filters( 'fusion_builder_all_elements', $fusion_builder_elements ); $data['languageDefaults'] = $fusion_builder_elements; } } $data['language'] = $language; return $data; } /** * Include a template file. * * @access public * @since 2.0 * @param string $template The template file we want to include. * @return string */ public function template_include( $template ) { global $wp_query; if ( $wp_query->is_main_query() && $this->get_builder_status() ) { return FUSION_LIBRARY_PATH . '/inc/fusion-app/templates/front-customize.php'; } return $template; } /** * Add link to admin bar for builder. * * @access public * @since 2.0 * @param Object $admin_bar admin bar. * @return void */ public function builder_trigger( $admin_bar ) { $customize_url = fusion_app_get_permalink( $admin_bar ); $forms_enabled = class_exists( 'Fusion_Form_Builder' ) && false !== Fusion_Form_Builder::is_enabled(); $post_cards_enabled = function_exists( 'fusion_is_element_enabled' ) && fusion_is_element_enabled( 'fusion_post_cards' ); $off_canvas_enabled = class_exists( 'AWB_Off_Canvas_Front_End' ) && false !== AWB_Off_Canvas_Front_End::is_enabled(); $post_type = get_post_type(); $post_type_names = [ 'avada_portfolio' => 'Portfolio Post', 'avada_faq' => 'FAQ Post', 'tribe_events' => 'Event', ]; if ( is_search() || is_404() ) { $customize_url = '#'; } if ( ! $customize_url || '' === $customize_url ) { return; } $customize_url = '#' !== $customize_url ? add_query_arg( 'fb-edit', true, $customize_url ) : $customize_url; $live_editor = apply_filters( 'fusion_load_live_editor', true ); if ( $live_editor && ( current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_', $post_type, 'live_builder_edit' ) ) ) ) { $admin_bar->add_node( [ 'id' => 'fb-edit', 'title' => apply_filters( 'fusion_edit_live_title', esc_html__( 'Edit Live', 'fusion-builder' ) ), 'href' => $customize_url, ] ); } if ( $live_editor && class_exists( 'Fusion_Template_Builder' ) && function_exists( 'get_post_type' ) && 'fusion_tb_section' !== $post_type ) { $layouts = Fusion_Template_Builder()->get_registered_layouts(); $templates = current_user_can( apply_filters( 'awb_role_manager_access_capability', 'manage_options', 'fusion_tb_section' ) ) ? Fusion_Template_Builder()->get_template_terms() : []; $submenu_items = []; $forms = []; $post_cards = []; $group_class_name = ''; $layout_link = ''; foreach ( $templates as $key => $template_arr ) { $template = Fusion_Template_Builder::get_instance()->get_override( $key ); if ( $template ) { $submenu_items[] = [ 'key' => $key, 'label' => $template_arr['label'], 'name' => $template->post_title, 'template_id' => $template->ID, 'layout_id' => isset( $template->layout_id ) ? $template->layout_id : '', ]; if ( $forms_enabled ) { preg_match_all( '/form_post_id\=\"(.*?)\"/', $template->post_content, $matches ); $forms = array_merge( $forms, $matches[1] ); } if ( $post_cards_enabled ) { preg_match_all( '/post_card\=\"(.*?)\"/', $template->post_content, $matches ); $post_cards = array_merge( $post_cards, $matches[1] ); } } } if ( $forms_enabled ) { preg_match_all( '/form_post_id\=\"(.*?)\"/', get_the_content( null, false, get_the_id() ), $matches ); $forms = array_merge( $forms, $matches[1] ); } if ( $post_cards_enabled ) { preg_match_all( '/post_card\=\"(.*?)\"/', get_the_content( null, false, get_the_id() ), $matches ); $post_cards = array_merge( $post_cards, $matches[1] ); } if ( isset( $post_type_names[ $post_type ] ) ) { $post_type_name = $post_type_names[ $post_type ]; } else { $post_type_name = ucwords( $post_type ); } if ( '#' !== $customize_url && apply_filters( 'fusion_load_live_editor', true ) ) { $admin_bar->add_node( [ 'parent' => 'fb-edit', 'id' => 'fb-edit-page', /* translators: Name of post type. */ 'title' => sprintf( __( 'Edit %s', 'fusion-builder' ), esc_html( $post_type_name ) ), 'href' => $customize_url, ] ); $group_class_name = 'fb-edit-group'; } if ( ! empty( $submenu_items ) ) { // Add a layout group. $args = [ 'id' => 'awb-layout-group', 'parent' => 'fb-edit', 'meta' => [ 'class' => 'awb-layout-group ' . $group_class_name ], ]; $admin_bar->add_group( $args ); foreach ( $submenu_items as $item ) { $admin_bar->add_node( [ 'parent' => 'awb-layout-group', 'id' => 'fb-edit-' . $item['key'], 'title' => '<span class="awb-edit-item"><span class="awb-edit-name">' . esc_html( $item['name'] ) . '</span><span class="awb-edit-type">' . $item['label'] . '</span></span>', 'href' => add_query_arg( 'fb-edit', true, get_permalink( $item['template_id'] ) ), ] ); if ( ! empty( $item['layout_id'] ) && current_user_can( apply_filters( 'awb_role_manager_access_capability', 'manage_options', 'fusion_tb_layout' ) ) ) { $layout_id = 'global' === $item['layout_id'] ? 0 : $item['layout_id']; $layout_name = isset( $layouts[ $layout_id ] ) ? $layouts[ $layout_id ]['title'] : ''; $layout_id = $item['layout_id']; $layout_link = '<a class="awb-edit-layout" href="' . esc_url( admin_url( 'admin.php?page=avada-layouts&layout=' . $layout_id ) ) . '" target="_blank">' . esc_html( $layout_name ) . '</a>'; $admin_bar->add_node( [ 'parent' => 'fb-edit-' . $item['key'], 'id' => 'fb-edit-layout-' . $item['key'], /* translators: Number of layout. */ 'title' => sprintf( __( 'Edit Layout: %s', 'fusion-builder' ), esc_html( $layout_name ) ), 'href' => esc_url( admin_url( 'admin.php?page=avada-layouts&layout=' . $layout_id ) ), 'meta' => [ 'target' => '_blank', ], ] ); } } } elseif ( current_user_can( apply_filters( 'awb_role_manager_access_capability', 'manage_options', 'fusion_tb_layout' ) ) ) { // Add a layout group. $args = [ 'id' => 'awb-layout-group', 'parent' => 'fb-edit', 'meta' => [ 'class' => $group_class_name ], ]; $admin_bar->add_group( $args ); $admin_bar->add_node( [ 'parent' => 'awb-layout-group', 'id' => 'fb-edit-layout', 'title' => '<span class="awb-edit-item"><span class="awb-edit-name">' . __( 'Use Layouts', 'fusion-builder' ) . '</span><span class="awb-edit-type">' . __( 'Manage', 'fusion-builder' ) . '</span></span>', 'href' => esc_url( admin_url( 'admin.php?page=avada-layouts' ) ), 'meta' => [ 'target' => '_blank', ], ] ); } $group_class_name = 'fb-edit-group'; // Add all forms. if ( current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_posts', 'fusion_form', 'live_builder_edit' ) ) && ! empty( $forms ) && $forms_enabled && function_exists( 'get_post_type' ) && 'fusion_form' !== $post_type ) { $args = [ 'post_type' => 'fusion_form', 'post__in' => $forms, 'posts_per_page' => -1, // phpcs:ignore WPThemeReview.CoreFunctionality.PostsPerPage.posts_per_page_posts_per_page 'post_status' => 'publish', ]; $fusion_forms = get_posts( $args ); if ( ! empty( $fusion_forms ) ) { // Add a form group. $args = [ 'id' => 'awb-form-group', 'parent' => 'fb-edit', 'meta' => [ 'class' => $group_class_name ], ]; $admin_bar->add_group( $args ); foreach ( $fusion_forms as $index => $form ) { $element_post_id = $form->ID; $element_post_title = $form->post_title; $admin_bar->add_node( [ 'parent' => 'awb-form-group', 'id' => 'fb-edit-form-' . $element_post_id, 'title' => '<span class="awb-edit-item"><span class="awb-edit-name">' . esc_html( $element_post_title ) . '</span><span class="awb-edit-type">' . esc_html__( 'Form', 'fusion-builder' ) . '</span></span>', 'href' => add_query_arg( 'fb-edit', true, get_permalink( $element_post_id ) ), ] ); } } } // Add all post cards. if ( current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_posts', 'avada_library', 'live_builder_edit' ) ) && ! empty( $post_cards ) && $post_cards_enabled && ( function_exists( 'get_post_type' ) && 'fusion_element' !== $post_type || function_exists( 'is_object_in_term' ) && is_object_in_term( get_the_ID(), 'element_category', 'post_cards' ) ) ) { $fusion_post_cards = get_posts( [ 'post_type' => 'fusion_element', 'post__in' => $post_cards, 'posts_per_page' => '-1', // phpcs:ignore WPThemeReview.CoreFunctionality.PostsPerPage.posts_per_page_posts_per_page 'tax_query' => [ // phpcs:ignore WordPress.DB.SlowDBQuery [ 'taxonomy' => 'element_category', 'field' => 'slug', 'terms' => 'post_cards', ], ], ] ); if ( ! empty( $fusion_post_cards ) ) { // Add a post card group. $args = [ 'id' => 'awb-post-card-group', 'parent' => 'fb-edit', 'meta' => [ 'class' => $group_class_name ], ]; $admin_bar->add_group( $args ); foreach ( $fusion_post_cards as $card ) { $element_post_id = $card->ID; $element_post_title = $card->post_title; $admin_bar->add_node( [ 'parent' => 'awb-post-card-group', 'id' => 'fb-edit-post-card-' . $element_post_id, 'title' => '<span class="awb-edit-item"><span class="awb-edit-name">' . esc_html( $element_post_title ) . '</span><span class="awb-edit-type">' . esc_html__( 'Post Card', 'fusion-builder' ) . '</span></span>', 'href' => add_query_arg( 'fb-edit', true, get_permalink( $element_post_id ) ), ] ); } } } // Add all mega menus. if ( current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_posts', 'avada_library', 'live_builder_edit' ) ) && ( function_exists( 'get_post_type' ) && 'fusion_element' !== $post_type || function_exists( 'is_object_in_term' ) && is_object_in_term( get_the_ID(), 'element_category', 'mega_menus' ) ) ) { $fusion_mega_menus = get_posts( [ 'post_type' => 'fusion_element', 'posts_per_page' => '-1', // phpcs:ignore WPThemeReview.CoreFunctionality.PostsPerPage.posts_per_page_posts_per_page 'tax_query' => [ // phpcs:ignore WordPress.DB.SlowDBQuery [ 'taxonomy' => 'element_category', 'field' => 'slug', 'terms' => 'mega_menus', ], ], ] ); if ( ! empty( $fusion_mega_menus ) ) { // Add a mega menus group. $args = [ 'id' => 'awb-mega-menus-group', 'parent' => 'fb-edit', 'meta' => [ 'class' => $group_class_name ], ]; $admin_bar->add_group( $args ); foreach ( $fusion_mega_menus as $mega_menu ) { $element_post_id = $mega_menu->ID; $element_post_title = $mega_menu->post_title; $admin_bar->add_node( [ 'parent' => 'awb-mega-menus-group', 'id' => 'fb-edit-mega-menu-' . $element_post_id, 'title' => '<span class="awb-edit-item"><span class="awb-edit-name">' . esc_html( $element_post_title ) . '</span><span class="awb-edit-type">' . esc_html__( 'Mega Menu', 'fusion-builder' ) . '</span></span>', 'href' => add_query_arg( 'fb-edit', true, get_permalink( $element_post_id ) ), ] ); } } } // Add all off canvas. if ( $off_canvas_enabled && current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_posts', 'awb_off_canvas', 'live_builder_edit' ) ) && ! is_admin() && function_exists( 'get_post_type' ) && 'awb_off_canvas' !== $post_type ) { $args = [ 'post_type' => 'awb_off_canvas', 'posts_per_page' => -1, // phpcs:ignore WPThemeReview.CoreFunctionality.PostsPerPage.posts_per_page_posts_per_page 'post_status' => 'publish', ]; $off_canvases = get_posts( $args ); if ( ! empty( $off_canvases ) ) { // Add a off-canvas group. $args = [ 'id' => 'awb-off-canvas-group', 'parent' => 'fb-edit', 'meta' => [ 'class' => $group_class_name ], ]; $admin_bar->add_group( $args ); foreach ( $off_canvases as $off_canvas ) { $element_post_id = $off_canvas->ID; $element_post_title = $off_canvas->post_title; $admin_bar->add_node( [ 'parent' => 'awb-off-canvas-group', 'id' => 'fb-edit-off-canvas-' . $element_post_id, 'title' => '<span class="awb-edit-item"><span class="awb-edit-name">' . esc_html( $element_post_title ) . '</span><span class="awb-edit-type">' . esc_html__( 'Off Canvas', 'fusion-builder' ) . '</span></span>', 'href' => add_query_arg( 'fb-edit', true, get_permalink( $element_post_id ) ), ] ); } } } } } /** * Add preview frame body class. * * @access public * @since 2.0 * @param array $classes classes being used. * @return string */ public function preview_body_class( $classes ) { $classes[] = 'fusion-builder-live dont-animate'; if ( is_preview_only() ) { $classes[] = 'fusion-builder-live-preview-only'; } else { $classes[] = 'fusion-builder-live-preview'; } $preferences = $this->preferences; if ( ! isset( $preferences::$preferences['droppables_visible'] ) || 'off' === $preferences::$preferences['droppables_visible'] ) { $classes[] = 'fusion-hide-droppables'; } if ( ( isset( $preferences::$preferences['tooltips'] ) && 'off' === $preferences::$preferences['tooltips'] ) || 'awb_off_canvas' === get_post_type() ) { $classes[] = 'fusion-hide-all-tooltips'; } if ( isset( $preferences::$preferences['element_filters'] ) && 'off' === $preferences::$preferences['element_filters'] ) { $classes[] = 'fusion-disable-element-filters'; } if ( isset( $preferences::$preferences['sticky_header'] ) && 'off' === $preferences::$preferences['sticky_header'] ) { $classes[] = 'fusion-disable-sticky'; } if ( isset( $preferences::$preferences['transparent_header'] ) && 'off' === $preferences::$preferences['transparent_header'] ) { $classes[] = 'fusion-no-absolute-containers'; } if ( isset( $preferences::$preferences['element_transform'] ) && 'never' === $preferences::$preferences['element_transform'] ) { $classes[] = 'fusion-disable-element-transform'; } if ( isset( $preferences::$preferences['element_transform'] ) && 'editing' === $preferences::$preferences['element_transform'] ) { $classes[] = 'fusion-element-transform-on-edit'; } return $classes; } /** * Add preview frame html class. * * @access public * @since 2.0 * @param array $classes classes being used. * @return string */ public function preview_html_class( $classes ) { $preferences = $this->preferences; if ( isset( $preferences::$preferences['transparent_header'] ) && 'off' === $preferences::$preferences['transparent_header'] && in_array( 'avada-header-color-not-opaque', $classes, true ) ) { unset( $classes[ array_search( 'avada-header-color-not-opaque', $classes, true ) ] ); } return $classes; } /** * Add editor body class. * * @access public * @since 2.0 * @param array $classes classes being used. * @return string */ public function body_class( $classes ) { $preferences = $this->preferences; $classes = []; $classes[] = 'fusion-builder-live fusion-builder-module-settings-large wp-core-ui fb-customizer js'; if ( wp_is_mobile() ) { $classes[] = 'mobile'; } if ( ! current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_private_posts', 'avada_library', 'global_elements' ) ) ) { $classes[] = 'awb-global-restricted'; } if ( isset( $preferences::$preferences['sidebar_position'] ) && 'right' === $preferences::$preferences['sidebar_position'] ) { $classes[] = 'sidebar-right'; } if ( isset( $preferences::$preferences['tooltips'] ) && 'off' === $preferences::$preferences['tooltips'] ) { $classes[] = 'fusion-hide-all-tooltips'; } if ( isset( $preferences::$preferences['element_filters'] ) && 'off' === $preferences::$preferences['element_filters'] ) { $classes[] = 'fusion-disable-element-filters'; } if ( isset( $preferences::$preferences['element_transform'] ) && 'off' === $preferences::$preferences['element_transform'] ) { $classes[] = 'fusion-disable-element-transform'; } if ( isset( $preferences::$preferences['options_subtabs'] ) && 'collapsed' === $preferences::$preferences['options_subtabs'] ) { $classes[] = 'fusion-options-subtabs-collapsed'; } if ( is_rtl() ) { $classes[] = 'rtl'; } else { $classes[] = 'ltr'; } $classes[] = 'locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_user_locale() ) ) ); return $classes; } /** * Partial refresh. * * @access public * @since 2.0 * @return void */ public function fusion_app_partial_refresh() { check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' ); $this->set_data(); $this->emulate_wp_query(); $return_data = []; // Emulate the page id. $post_id = $this->get_data( 'post_id' ); if ( $post_id ) { add_filter( 'fusion-page-id', function() use ( $post_id ) { return absint( $post_id ); } ); } $this->filter_core_settings(); do_action( 'fusion_filter_data' ); $partials = $this->get_data( 'partials' ); if ( is_array( $partials ) ) { foreach ( $partials as $key => $partial ) { if ( is_callable( $partial['render_callback'] ) ) { ob_start(); call_user_func( $partial['render_callback'] ); $data = ob_get_clean(); $return_data[ $key ] = $data; } } } echo wp_json_encode( $return_data ); wp_die(); } /** * Emulate changed core page or archive settings. * * @since 6.0.0 * @return void */ public function filter_core_settings() { global $post; $post_details = $this->get_data( 'post_details' ); if ( is_array( $post_details ) ) { if ( false === strpos( $post_details['post_id'], '-archive' ) ) { // Update global post. foreach ( $post_details as $key => $value ) { if ( property_exists( $post, $key ) ) { $post->{ $key } = $value; } } // Filter post title. if ( isset( $post_details['post_title'] ) ) { add_filter( 'the_title', function( $title, $id ) use ( $post_details ) { if ( $id === (int) $post_details['post_id'] ) { return $post_details['post_title']; } return $title; }, 10, 2 ); } // Filter post format. $taxonomy_post_types = (array) apply_filters( 'fusion_taxonomy_post_type', [ 'post', 'avada_portfolio' ] ); if ( in_array( $post_details['post_type'], $taxonomy_post_types, true ) ) { add_filter( 'get_the_terms', function( $terms, $id, $taxonomy ) use ( $post_details ) { if ( $id === (int) $post_details['post_id'] && isset( $post_details[ $taxonomy ] ) ) { if ( 'post_format' === $taxonomy && isset( $terms[0] ) ) { $terms[0]->slug = 'post-format-' . $post_details['post_format']; } elseif ( ( is_array( $post_details[ $taxonomy ] ) && 0 < count( $post_details[ $taxonomy ] ) ) || ( is_string( $post_details[ $taxonomy ] ) && 0 < strlen( $post_details[ $taxonomy ] ) ) ) { $term_data = is_array( $post_details[ $taxonomy ] ) ? $post_details[ $taxonomy ] : explode( ',', $post_details[ $taxonomy ] ); $term_data = array_map( 'intval', $term_data ); $terms = get_terms( [ 'taxonomy' => $taxonomy, 'hide_empty' => false, 'include' => $term_data, ] ); } return $terms; } return $terms; }, 10, 3 ); } } else { // Filter the term values. add_filter( 'get_term', function( $_term, $taxonomy ) use ( $post_details ) { if ( (int) str_replace( '-archive', '', $post_details['post_id'] ) === $_term->term_id ) { foreach ( $post_details as $key => $value ) { if ( property_exists( $_term, $key ) ) { $_term->{ $key } = $value; } } } return $_term; }, 10, 2 ); // Filter for single term title. $type = false; if ( is_category() ) { $type = 'cat'; } elseif ( is_tag() ) { $type = 'tag'; } elseif ( is_tax() ) { $type = 'term'; } if ( $type ) { add_filter( 'single_' . $type . '_title', function( $title ) use ( $post_details ) { return $post_details['name']; } ); } } } } /** * Sets builder status. * * @access public * @since 2.0 * @return void */ public function set_builder_status() { if ( isset( $_SERVER['REQUEST_URI'] ) && false !== strpos( $_SERVER['REQUEST_URI'], 'fb-edit' ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput $this->is_builder = true; } } /** * Gets builder status. * * @access public * @since 2.0 * @return bool */ public function get_builder_status() { return $this->is_builder; } /** * Sets preview status. * * @access public * @since 2.0 * @return void */ public function set_preview_status() { $request_uri = ( isset( $_SERVER['REQUEST_URI'] ) ) ? $_SERVER['REQUEST_URI'] : false; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput if ( $request_uri && false !== strpos( $request_uri, 'builder=true' ) || ( false !== strpos( $request_uri, 'builder_id' ) && false !== strpos( $request_uri, 'fbpreview=true' ) ) ) { $this->is_preview = true; } } /** * Gets preview only status. * * @access public * @since 2.0 * @return bool */ public function get_preview_only_status() { return $this->has_data && 'fusion_app_preview_only' === $this->data['action']; } /** * Sets ajax status. * * @access public * @since 2.0 * @return void */ public function set_ajax_status() { if ( function_exists( 'wp_doing_ajax' ) ) { $this->is_ajax = wp_doing_ajax(); return; } $this->is_ajax = defined( 'DOING_AJAX' ) && DOING_AJAX; } /** * Gets preview status. * * @access public * @since 2.0 * @return bool */ public function get_preview_status() { return $this->is_preview; } /** * Gets ajax status. * * @access public * @since 2.0 * @return bool */ public function get_ajax_status() { return $this->is_ajax; } /** * Load the template files. * * @access public * @since 2.0 * @return void */ public function load_templates() { include FUSION_LIBRARY_PATH . '/inc/fusion-app/templates/front-end-toolbar.php'; include FUSION_LIBRARY_PATH . '/inc/fusion-app/templates/repeater-fields.php'; include FUSION_LIBRARY_PATH . '/inc/fusion-app/templates/typography-set.php'; include FUSION_LIBRARY_PATH . '/inc/fusion-app/templates/modal-dialog-more.php'; include FUSION_LIBRARY_PATH . '/inc/fusion-app/templates/bulk-add.php'; } /** * Enqueue preview frame scripts. * * @access public * @since 2.0 * @param mixed $hook The hook. * @return void */ public function preview_live_scripts( $hook ) { global $fusion_library_latest_version; wp_enqueue_style( 'fusion-app-preview-frame-css', FUSION_LIBRARY_URL . '/inc/fusion-app/css/fusion-preview-frame.css', [], $fusion_library_latest_version ); $min = ''; if ( ( ! defined( 'FUSION_LIBRARY_DEV_MODE' ) || ! FUSION_LIBRARY_DEV_MODE ) ) { $min = '.min'; } wp_enqueue_style( 'fusion-font-icomoon', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/fonts/icomoon' . $min . '.css', false, $fusion_library_latest_version, 'all' ); if ( function_exists( 'AWB_Global_Colors' ) ) { AWB_Global_Colors()->enqueue(); } // Media. wp_enqueue_media(); wp_enqueue_style( 'forms' ); } /** * Enqueue scripts. * * @access public * @since 2.0 * @param mixed $hook The hook. * @return void */ public function live_scripts( $hook ) { global $fusion_library_latest_version, $fusion_settings; $builder_options = get_option( 'fusion_builder_settings', [] ); // Compatibility with WP 5.2: These don't get loaded by default so if missing we need to include the post.php file. if ( ! function_exists( 'get_available_post_mime_types' ) || ! function_exists( 'get_available_post_mime_types' ) ) { require_once ABSPATH . '/wp-admin/includes/post.php'; } $min = ''; if ( ( ! defined( 'FUSION_LIBRARY_DEV_MODE' ) || ! FUSION_LIBRARY_DEV_MODE ) ) { $min = '.min'; } // Authorization styling for logging back in. wp_enqueue_script( 'heartbeat' ); wp_enqueue_style( 'wp-auth-check' ); wp_enqueue_script( 'wp-auth-check' ); wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'underscore' ); wp_enqueue_script( 'backbone' ); wp_enqueue_style( 'editor-buttons' ); // Main styling. wp_enqueue_style( 'fusion-app-builder-frame-css', FUSION_LIBRARY_URL . '/inc/fusion-app/css/fusion-builder-frame' . $min . '.css', [], $fusion_library_latest_version ); // Underscore util. wp_enqueue_script( 'wp-util' ); // jQuery UI. wp_enqueue_script( 'jquery-ui-core' ); wp_enqueue_script( 'jquery-ui-dialog' ); wp_enqueue_script( 'jquery-ui-tabs' ); wp_enqueue_script( 'jquery-ui-sortable' ); wp_enqueue_script( 'jquery-ui-draggable' ); wp_enqueue_script( 'jquery-ui-slider' ); wp_enqueue_style( 'jquery-ui-css', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/css/jquery-ui/jquery-ui.min.css', false, $fusion_library_latest_version ); // Font Awesome Search. wp_enqueue_script( 'fuse-script', FUSION_LIBRARY_URL . '/assets/min/js/library/fuse.js', [], $fusion_library_latest_version, false ); wp_enqueue_script( 'fontawesome-search-script', FUSION_LIBRARY_URL . '/assets/fonts/fontawesome/js/icons-search-free.js', [], $fusion_library_latest_version, false ); // FontAwesome. wp_enqueue_style( 'fontawesome', Fusion_Font_Awesome::get_backend_css_url(), [], $fusion_library_latest_version ); if ( '1' === $fusion_settings->get( 'fontawesome_v4_compatibility' ) ) { wp_enqueue_script( 'fontawesome-shim-script', FUSION_LIBRARY_URL . '/assets/fonts/fontawesome/js/fa-v4-shims.js', [], $fusion_library_latest_version, false ); wp_enqueue_style( 'fontawesome-shims', Fusion_Font_Awesome::get_backend_shims_css_url(), [], $fusion_library_latest_version ); } // Fonts. wp_enqueue_style( 'fusion-font-icomoon', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/fonts/icomoon' . $min . '.css', false, $fusion_library_latest_version, 'all' ); // Media. wp_enqueue_media(); wp_enqueue_script( 'media-upload' ); wp_enqueue_script( 'thickbox' ); wp_enqueue_style( 'thickbox' ); wp_enqueue_style( 'forms' ); if ( function_exists( 'AWB_Global_Colors' ) ) { AWB_Global_Colors()->enqueue(); } if ( function_exists( 'Avada_Studio_Colors' ) ) { Avada_Studio_Colors()->enqueue(); } if ( function_exists( 'Avada_Studio_Typography' ) ) { Avada_Studio_Typography()->enqueue(); } if ( function_exists( 'AWB_Global_Typography' ) ) { AWB_Global_Typography()->enqueue(); } // Code Mirror. if ( function_exists( 'wp_enqueue_code_editor' ) ) { foreach ( [ 'text/html', 'text/css', 'application/javascript' ] as $mime_type ) { wp_enqueue_code_editor( [ 'type' => $mime_type, ] ); } } else { wp_enqueue_script( 'fusion-builder-codemirror-js', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/codemirror/codemirror.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion-builder-codemirror-js-mode', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/codemirror/modes/javascript/javascript.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion-builder-codemirror-css-mode', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/codemirror/modes/css/css.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion-builder-codemirror-xml-mode', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/codemirror/modes/xml/xml.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion-builder-codemirror-html-mode', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/codemirror/modes/htmlmixed/htmlmixed.js', [], $fusion_library_latest_version, true ); } wp_enqueue_style( 'fusion-builder-codemirror-css', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/codemirror/codemirror.css', [], $fusion_library_latest_version, 'all' ); // Bootstrap date and time picker. wp_enqueue_script( 'bootstrap-datetimepicker', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/datetimepicker/bootstrap-datetimepicker.min.js', [], $fusion_library_latest_version, false ); wp_enqueue_style( 'bootstrap-datetimepicker', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/css/bootstrap-datetimepicker.css', [], $fusion_library_latest_version, 'all' ); // WP Editor. wp_enqueue_script( 'fusion-builder-wp-editor-js', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/wpeditor/wp-editor.js', [], $fusion_library_latest_version, true ); // The noUi Slider. wp_enqueue_style( 'avadaredux-nouislider-css', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/css/nouislider.css', [], $fusion_library_latest_version, 'all' ); wp_enqueue_script( 'avadaredux-nouislider-js', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/nouislider/nouislider.min.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'wnumb-js', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/wNumb.js', [ 'jquery' ], $fusion_library_latest_version, true ); // Live editor. wp_enqueue_script( 'medium-editor', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/medium-editor.min.js', [], $fusion_library_latest_version, false ); wp_enqueue_script( 'rangy-core', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/rangy-core.js', [], $fusion_library_latest_version, false ); wp_enqueue_script( 'rangy-classapplier', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/rangy-classapplier.js', [], $fusion_library_latest_version, false ); wp_enqueue_script( 'fuse', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/fuse.min.js', [], $fusion_library_latest_version, false ); wp_enqueue_script( 'webfont-loader', FUSION_LIBRARY_URL . '/inc/fusion-app/assets/js/webfontloader.js', [], $fusion_library_latest_version, false ); // If we're not debugging, load the combined script. if ( ( ! defined( 'FUSION_LIBRARY_DEV_MODE' ) || ! FUSION_LIBRARY_DEV_MODE ) && ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) ) { wp_enqueue_script( 'fusion_library_frontend_combined', FUSION_LIBRARY_URL . '/inc/fusion-app/fusion-frontend-combined.min.js', [ 'jquery', 'underscore', 'backbone' ], $fusion_library_latest_version, true ); $localize_handle = 'fusion_library_frontend_combined'; } else { wp_enqueue_script( 'cssua', FUSION_LIBRARY_URL . '/assets/min/js/library/cssua.js', [], $fusion_library_latest_version, false ); wp_enqueue_script( 'fusion_app_toolbar', FUSION_LIBRARY_URL . '/inc/fusion-app/views/view-toolbar.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_dialog', FUSION_LIBRARY_URL . '/inc/fusion-app/model-dialog.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_validation', FUSION_LIBRARY_URL . '/inc/fusion-app/model-validation.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_callback_functions', FUSION_LIBRARY_URL . '/inc/fusion-app/model-callback-functions.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_dependencies', FUSION_LIBRARY_URL . '/inc/fusion-app/model-dependencies.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_model_view_manager', FUSION_LIBRARY_URL . '/inc/fusion-app/model-view-manager.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_active_states', FUSION_LIBRARY_URL . '/inc/fusion-app/model-active-states.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_hotkeys', FUSION_LIBRARY_URL . '/inc/fusion-app/model-hotkeys.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_util_js', FUSION_LIBRARY_URL . '/inc/fusion-app/util.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_inline_editor', FUSION_LIBRARY_URL . '/inc/fusion-app/model-inline-editor.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_inline_editor_manager', FUSION_LIBRARY_URL . '/inc/fusion-app/model-inline-editor-manager.js', [], $fusion_library_latest_version, true ); // Options. wp_enqueue_script( 'fusion_app_option_linkselector', FUSION_LIBRARY_URL . '/inc/fusion-app/options/link-selector.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_linkselector_object', FUSION_LIBRARY_URL . '/inc/fusion-app/options/link-selector-object.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_media_upload', FUSION_LIBRARY_URL . '/inc/fusion-app/options/media-upload.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_placeholder', FUSION_LIBRARY_URL . '/inc/fusion-app/options/textfield-placeholder.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_date_picker', FUSION_LIBRARY_URL . '/inc/fusion-app/options/date-picker.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_color_picker', FUSION_LIBRARY_URL . '/inc/fusion-app/options/color-picker.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_icon_picker', FUSION_LIBRARY_URL . '/inc/fusion-app/options/icon-picker.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_code_block', FUSION_LIBRARY_URL . '/inc/fusion-app/options/code-block.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_dimension', FUSION_LIBRARY_URL . '/inc/fusion-app/options/dimension.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_select', FUSION_LIBRARY_URL . '/inc/fusion-app/options/select.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_ajax-select', FUSION_LIBRARY_URL . '/inc/fusion-app/options/ajax-select.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_multi_select', FUSION_LIBRARY_URL . '/inc/fusion-app/options/multi-select.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_editor', FUSION_LIBRARY_URL . '/inc/fusion-app/options/editor.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_checkbox_set', FUSION_LIBRARY_URL . '/inc/fusion-app/options/checkbox-set.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_radio_set', FUSION_LIBRARY_URL . '/inc/fusion-app/options/radio-set.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_raw', FUSION_LIBRARY_URL . '/inc/fusion-app/options/raw.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_range', FUSION_LIBRARY_URL . '/inc/fusion-app/options/range.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_repeater', FUSION_LIBRARY_URL . '/inc/fusion-app/options/repeater.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_switch', FUSION_LIBRARY_URL . '/inc/fusion-app/options/switch.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_typography', FUSION_LIBRARY_URL . '/inc/fusion-app/options/typography.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_import', FUSION_LIBRARY_URL . '/inc/fusion-app/options/import.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_export', FUSION_LIBRARY_URL . '/inc/fusion-app/options/export.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_sortable', FUSION_LIBRARY_URL . '/inc/fusion-app/options/sortable.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_sortable_text', FUSION_LIBRARY_URL . '/inc/fusion-app/options/sortable-text.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_connected_sortable', FUSION_LIBRARY_URL . '/inc/fusion-app/options/connected-sortable.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_color_palette', FUSION_LIBRARY_URL . '/inc/fusion-app/options/color-palette.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_typography_sets', FUSION_LIBRARY_URL . '/inc/fusion-app/options/typography-sets.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_column_width', FUSION_LIBRARY_URL . '/inc/fusion-app/options/column-width.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_form_options', FUSION_LIBRARY_URL . '/inc/fusion-app/options/form-options.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_fusion_logics', FUSION_LIBRARY_URL . '/inc/fusion-app/options/fusion-logics.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_hubspot_map', FUSION_LIBRARY_URL . '/inc/fusion-app/options/hubspot-map.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_hubspot_consent_map', FUSION_LIBRARY_URL . '/inc/fusion-app/options/hubspot-consent-map.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_mailchimp_map', FUSION_LIBRARY_URL . '/inc/fusion-app/options/mailchimp-map.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_image_focus_point', FUSION_LIBRARY_URL . '/inc/fusion-app/options/image-focus-point.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_toggle', FUSION_LIBRARY_URL . '/inc/fusion-app/options/toggle.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_layout_conditions', FUSION_LIBRARY_URL . '/inc/fusion-app/options/layout-conditions.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_nominatimselector', FUSION_LIBRARY_URL . '/inc/fusion-app/options/nominatim-selector.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_option_textarea', FUSION_LIBRARY_URL . '/inc/fusion-app/options/textarea.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion-extra-panel-functions', FUSION_LIBRARY_URL . '/inc/fusion-app/callbacks.js', [], $fusion_library_latest_version, true ); wp_enqueue_script( 'fusion_app_modal_dialog_more', FUSION_LIBRARY_URL . '/inc/fusion-app/views/view-dialog-more-options.js', [], $fusion_library_latest_version, true ); // Fusion App. wp_enqueue_script( 'fusion_app', FUSION_LIBRARY_URL . '/inc/fusion-app/fusion-app.js', [], $fusion_library_latest_version, true ); $localize_handle = 'fusion_app'; } $fusion_load_nonce = false; $_post_type = get_post_type(); $can_manage_options = current_user_can( apply_filters( 'awb_role_manager_access_capability', 'manage_options', 'awb_global_options' ) ); $can_edit_in_live_builder = current_user_can( apply_filters( 'awb_role_manager_access_capability', 'edit_', $_post_type, 'live_builder_edit' ) ); if ( $can_manage_options || $can_edit_in_live_builder ) { $fusion_load_nonce = wp_create_nonce( 'fusion_load_nonce' ); } // Localize Scripts. wp_localize_script( $localize_handle, 'fusionAppConfig', [ 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'admin_url' => admin_url(), 'fusion_load_nonce' => $fusion_load_nonce, 'fontawesomeicons' => fusion_get_icons_array(), 'studio_status' => class_exists( 'AWB_Studio' ) && AWB_Studio::is_studio_enabled(), 'customIcons' => fusion_get_custom_icons_array(), 'includes_url' => includes_url(), 'fusion_library_url' => esc_url_raw( FUSION_LIBRARY_URL ), 'fusion_web_fonts' => apply_filters( 'fusion_live_initial_google_fonts', true ) ? $this->get_googlefonts_ajax() : false, 'widget_element_enabled' => function_exists( 'fusion_is_element_enabled' ) && fusion_is_element_enabled( 'fusion_widget' ), 'predefined_choices' => apply_filters( 'fusion_predefined_choices', [] ), 'builder_type' => isset( $builder_options['enable_builder_ui_by_default'] ) ? $builder_options['enable_builder_ui_by_default'] : 'backend', 'posts_per_page' => get_option( 'posts_per_page' ), // phpcs:ignore WPThemeReview, WordPress -- Normal number. 'removeEmptyAttributes' => isset( $builder_options['remove_empty_attributes'] ) ? $builder_options['remove_empty_attributes'] : 'off', 'post_lock_data' => $this->get_post_lock_data(), ] ); wp_localize_script( $localize_handle, 'builderConfig', [ 'fusion_builder_plugin_dir' => defined( 'FUSION_BUILDER_PLUGIN_URL' ) ? FUSION_BUILDER_PLUGIN_URL : '', 'allowed_post_types' => class_exists( 'FusionBuilder' ) ? FusionBuilder()->allowed_post_types() : [], 'disable_encoding' => get_option( 'avada_disable_encoding' ), ] ); // Localize scripts. Text strings. wp_localize_script( $localize_handle, 'fusionBuilderText', fusion_app_textdomain_strings() ); // Allow other components to add scripts and styles to builder window. do_action( 'fusion_enqueue_live_scripts' ); } /** * Save post content. * * @access public * @since 2.0 * @return void */ public function fusion_app_save_post_content() { if ( ! is_user_logged_in() ) { wp_send_json_error( [ 'failure' => 'logged_in' ] ); wp_die(); } if ( ! isset( $_POST['fusion_load_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['fusion_load_nonce'] ) ), 'fusion_load_nonce' ) ) { wp_send_json_error( [ 'failure' => 'nonce_check' ] ); wp_die(); } $this->set_data(); // Save the shared post details. $post_id = $this->get_data( 'post_id' ); $post_content = $this->get_data( 'post_content' ); $post_details = $this->get_data( 'post_details' ); if ( ( false !== $post_content || false !== $post_details ) && $post_id && '' !== $post_id && false === strpos( $post_id, '-archive' ) ) { if ( ! $this->can_edit_post( $post_id ) ) { $this->add_save_data( 'content', false, esc_html__( 'You do not have permission to edit this post.', 'fusion-builder' ) ); } else { $post = [ 'ID' => $post_id, ]; if ( $post_details ) { // Post-Title. if ( isset( $post_details['post_title'] ) ) { $post['post_title'] = $post_details['post_title']; } // Post-Permalink. if ( isset( $post_details['post_name'] ) ) { $post['post_name'] = sanitize_title( $post_details['post_name'] ); } // Post Status. if ( isset( $post_details['post_status'] ) ) { $post['post_status'] = sanitize_key( $post_details['post_status'] ); } // Parent post. if ( is_post_type_hierarchical( get_post_type( $post_id ) ) ) { if ( isset( $post_details['post_parent'] ) ) { $post['post_parent'] = sanitize_key( $post_details['post_parent'] ); } } // Post Order. if ( isset( $post_details['menu_order'] ) && ! empty( $post_details['menu_order'] ) ) { $post['menu_order'] = absint( $post_details['menu_order'] ); } // Post Format. if ( isset( $post_details['post_format'] ) && ! empty( $post_details['post_format'] ) ) { set_post_format( $post_id, sanitize_key( $post_details['post_format'] ) ); } // Post taxonomies. $taxonomy_post_types = (array) apply_filters( 'fusion_taxonomy_post_type', [ 'post', 'avada_portfolio' ] ); if ( in_array( $post_details['post_type'], $taxonomy_post_types, true ) ) { $post_taxonomies = get_object_taxonomies( $post_details['post_type'], 'objects' ); foreach ( $post_taxonomies as $taxonomy ) { if ( 'post_format' !== $taxonomy->name ) { if ( is_null( $post_details[ $taxonomy->name ] ) ) { // If term data is null, we want to remove the whole terms from the post. $term_data = $post_details[ $taxonomy->name ]; } else { $term_data = is_array( $post_details[ $taxonomy->name ] ) ? $post_details[ $taxonomy->name ] : explode( ',', $post_details[ $taxonomy->name ] ); $term_data = array_map( 'intval', $term_data ); } wp_set_object_terms( $post_id, $term_data, $taxonomy->name ); } } } } $update_post = wp_update_post( apply_filters( 'fusion_save_post_object', $post ), true ); if ( is_wp_error( $update_post ) ) { $this->add_save_data( 'content', false, $update_post->get_error_messages() ); } else { $this->add_save_data( 'content', true, esc_html__( 'The page contents updated.', 'fusion-builder' ) ); } } } elseif ( $post_id && '' !== $post_id && false !== strpos( $post_id, '-archive' ) ) { $term_id = (int) str_replace( 'archive-', '', $post_id ); if ( ! current_user_can( 'manage_categories', $term_id ) ) { $this->add_save_data( 'content', false, esc_html__( 'You do not have permission to edit this archive.', 'fusion-builder' ) ); } else { $term_data = get_term( $term_id ); $term_details = []; $term = []; if ( $post_details ) { $term_details = $post_details; // Term Name. if ( isset( $term_details['name'] ) ) { $term['name'] = $term_details['name']; } // Term Slug. if ( isset( $term_details['slug'] ) ) { $term['slug'] = sanitize_title( $term_details['slug'] ); } // Term Description. if ( isset( $term_details['description'] ) ) { $term['description'] = $term_details['description']; } // Term Parent. if ( is_taxonomy_hierarchical( $term_data->taxonomy ) ) { if ( isset( $term_details['parent'] ) ) { $term['parent'] = sanitize_key( $term_details['parent'] ); } } $update_term = wp_update_term( $term_id, $term_data->taxonomy, apply_filters( 'fusion_save_term_object', $term ) ); if ( is_wp_error( $update_term ) ) { $this->add_save_data( 'content', false, $update_term->get_error_messages() ); } else { $this->add_save_data( 'content', true, esc_html__( 'The archive details updated.', 'fusion-builder' ) ); } } } } do_action( 'fusion_save_post' ); do_action( 'fusion_builder_custom_save' ); $save_data = apply_filters( 'fusion_save_data', $this->save_data ); wp_send_json_success( $save_data ); wp_die(); } /** * Check if user can edit this post. * * @access public * @since 3.0.10 * @param string $post_id The id of the post to edit. * @return boolean */ public function can_edit_post( $post_id ) { $post_id = ! isset( $post_id ) || '' === $post_id ? fusion_library()->get_page_id() : $post_id; $post_type = get_post_type( $post_id ); $post_type_object = get_post_type_object( $post_type ); return current_user_can( $post_type_object->cap->edit_post, $post_id ); } /** * Used to set success, failure and message for each module being saved. * * @access public * @since 3.0.10 * @param string $context The context/module name being saved. * @param boolean $success Whether the save was successful. * @param mixed $message The message or messages to describe save. * @return void */ public function add_save_data( $context, $success, $message ) { $existing_data = $this->save_data; $type = $success ? 'success' : 'failure'; // Create new entry. $new_data[ $type ][ $context ] = $message; // Merge in the new data. $this->save_data = array_merge_recursive( $new_data, $existing_data ); } /** * This is fired via AJAX to return an array of added terms. * * @access public * @since 3.0.10 * @return void|array */ public function fusion_multiselect_addnew() { check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' ); $values = ''; if ( isset( $_POST['values'] ) ) { $values = wp_unslash( $_POST['values'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput } $taxonomy = ''; if ( isset( $_POST['taxonomy'] ) ) { $taxonomy = sanitize_text_field( wp_unslash( $_POST['taxonomy'] ) ); } $selection = []; if ( ! empty( $values ) && is_array( $values ) ) { foreach ( $values as $value ) { $term_exists = term_exists( trim( $value ), $taxonomy ); $term_data = null === $term_exists || 0 === $term_exists ? wp_insert_term( trim( $value ), $taxonomy ) : $term_exists; $selection[ $value ] = $term_data['term_id']; } } echo wp_json_encode( $selection ); wp_die(); } /** * This is fired via AJAX to return an array of googlefonts. * * @access public * @since 3.0.10 * @return void|array */ public function get_googlefonts_ajax() { $fusion_settings = awb_get_fusion_settings(); // Get google-fonts. if ( null === self::$google_fonts || empty( self::$google_fonts ) ) { $fonts = include FUSION_LIBRARY_PATH . '/inc/googlefonts-array.php'; self::$google_fonts = []; if ( is_array( $fonts ) ) { foreach ( $fonts['items'] as $font ) { self::$google_fonts[ $font['family'] ] = [ 'label' => $font['family'], 'variants' => $font['variants'], ]; } } } $google_fonts = self::$google_fonts; // An array of all available variants. $all_variants = $this->get_variants_translations(); // Format the array for use by the typography controls. $google_fonts_final = []; foreach ( $google_fonts as $family => $args ) { $variants = ( isset( $args['variants'] ) ) ? $args['variants'] : [ 'regular', '700' ]; $available_variants = []; if ( is_array( $variants ) ) { foreach ( $variants as $variant ) { if ( array_key_exists( $variant, $all_variants ) ) { $available_variants[] = [ 'id' => 'regular' === $variant ? '400' : $variant, 'label' => $all_variants[ $variant ], ]; } } } $google_fonts_final[] = [ 'family' => $family, 'label' => ( isset( $args['label'] ) ) ? $args['label'] : $family, 'variants' => $available_variants, ]; } // Build the standard fonts. $standard_fonts = [ "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue' ,sans-serif", "'Iowan Old Style', 'Apple Garamond', Baskerville, 'Times New Roman', 'Droid Serif', Times, 'Source Serif Pro', serif", "Menlo, Consolas, Monaco, 'Liberation Mono', 'Lucida Console', monospace", 'Arial, Helvetica, sans-serif', "'Arial Black', Gadget, sans-serif", "'Bookman Old Style', serif", "'Comic Sans MS', cursive", 'Courier, monospace', 'Garamond, serif', 'Georgia, serif', 'Impact, Charcoal, sans-serif', "'Lucida Console', Monaco, monospace", "'Lucida Sans Unicode', 'Lucida Grande', sans-serif", "'MS Sans Serif', Geneva, sans-serif", "'MS Serif', 'New York', sans-serif", "'Palatino Linotype', 'Book Antiqua', Palatino, serif", 'Tahoma,Geneva, sans-serif', "'Times New Roman', Times,serif", "'Trebuchet MS', Helvetica, sans-serif", 'Verdana, Geneva, sans-serif', ]; $standard_fonts_final = []; $default_variants = [ [ 'id' => '400', 'label' => $all_variants['400'], ], [ 'id' => 'italic', 'label' => $all_variants['italic'], ], [ 'id' => '700', 'label' => $all_variants['700'], ], [ 'id' => '700italic', 'label' => $all_variants['700italic'], ], ]; foreach ( $standard_fonts as $font ) { $standard_fonts_final[] = [ 'family' => $font, 'label' => $font, 'is_standard' => true, 'variants' => $default_variants, ]; } $custom_fonts = []; $saved_custom_fonts = $fusion_settings->get( 'custom_fonts' ); if ( ! empty( $saved_custom_fonts ) && is_array( $saved_custom_fonts ) && isset( $saved_custom_fonts['name'] ) && ! empty( $saved_custom_fonts['name'] ) ) { foreach ( $saved_custom_fonts['name'] as $font ) { $custom_fonts[] = [ 'family' => $font, 'label' => $font, 'variants' => [ [ 'id' => '400', 'label' => $all_variants['400'], ], ], ]; } } // Adobe Fonts. $adobe_fonts_data = get_option( 'avada_adobe_fonts', [] ); $adobe_fonts_final = []; foreach ( $adobe_fonts_data as $adobe_font_data ) { $adobe_font_item = [ 'family' => $adobe_font_data['font_slug'], 'label' => $adobe_font_data['label'], 'variants' => $adobe_font_data['variants'], ]; array_push( $adobe_fonts_final, $adobe_font_item ); } $fonts_array = [ 'standard' => $standard_fonts_final, 'google' => $google_fonts_final, 'adobe' => $adobe_fonts_final, 'custom' => $custom_fonts, ]; if ( $this->is_ajax ) { echo wp_json_encode( $fonts_array ); wp_die(); } return $fonts_array; } /** * Get the translations of the variants id. * * @return array */ public function get_variants_translations() { $all_variants = [ '100' => esc_html__( 'Ultra-Light 100', 'Avada' ), '100light' => esc_html__( 'Ultra-Light 100', 'Avada' ), '100italic' => esc_html__( 'Ultra-Light 100 Italic', 'Avada' ), '200' => esc_html__( 'Light 200', 'Avada' ), '200italic' => esc_html__( 'Light 200 Italic', 'Avada' ), '300' => esc_html__( 'Book 300', 'Avada' ), '300italic' => esc_html__( 'Book 300 Italic', 'Avada' ), '400' => esc_html__( 'Normal 400', 'Avada' ), 'regular' => esc_html__( 'Normal 400', 'Avada' ), 'italic' => esc_html__( 'Normal 400 Italic', 'Avada' ), '500' => esc_html__( 'Medium 500', 'Avada' ), '500italic' => esc_html__( 'Medium 500 Italic', 'Avada' ), '600' => esc_html__( 'Semi-Bold 600', 'Avada' ), '600bold' => esc_html__( 'Semi-Bold 600', 'Avada' ), '600italic' => esc_html__( 'Semi-Bold 600 Italic', 'Avada' ), '700' => esc_html__( 'Bold 700', 'Avada' ), '700italic' => esc_html__( 'Bold 700 Italic', 'Avada' ), '800' => esc_html__( 'Extra-Bold 800', 'Avada' ), '800bold' => esc_html__( 'Extra-Bold 800', 'Avada' ), '800italic' => esc_html__( 'Extra-Bold 800 Italic', 'Avada' ), '900' => esc_html__( 'Ultra-Bold 900', 'Avada' ), '900bold' => esc_html__( 'Ultra-Bold 900', 'Avada' ), '900italic' => esc_html__( 'Ultra-Bold 900 Italic', 'Avada' ), ]; return $all_variants; } /** * Gets all typography fonts. * * @since 3.7 * @return array */ public function get_typography_fonts() { $this->is_ajax = false; $fonts = $this->get_googlefonts_ajax(); $this->set_ajax_status(); return $fonts; } /** * Include preferences. * * @access public * @since 3.0.10 * @return void */ public function set_preference() { require_once FUSION_LIBRARY_PATH . '/inc/fusion-app/class-fusion-preferences.php'; $this->preferences = new Fusion_Preferences(); } /** * Adds an "Access-Control-Allow-Origin" meta in the <head> to avoid cross-site-scripting errors in the browser. * * @access public * @since 2.0 * @return void */ public function access_control_allow_origin() { echo '<meta http-equiv="Access-Control-Allow-Origin" content="' . esc_url_raw( site_url() ) . '">'; } /** * Adds authorization check html.. * * @access public * @since 2.0 * @return void */ public function fusion_authorization() { wp_auth_check_html(); } /** * Adds authorization check html. * * @access public * @since 2.0 * @param array $response The Heartbeat response. * @param array $data The $_POST data sent. * @param string $screen_id The screen id. * @return array $response Reponse data. */ public function fusion_refresh_nonces( $response, $data, $screen_id ) { if ( ! current_user_can( 'manage_options' ) && ! current_user_can( 'edit_published_pages' ) && ! current_user_can( 'edit_published_posts' ) ) { return $response; } // TODO: add more checks here. $response['fusion_builder'] = [ 'fusion_load_nonce' => wp_create_nonce( 'fusion_load_nonce' ), ]; return $response; } /** * Changes the global $wp_query to emulate the current page. * * @access public * @since 6.0 * @return WP_Query */ public function emulate_wp_query() { global $wp_query, $wp_the_query, $post; $query = $this->get_data( 'query' ); if ( $query ) { // Encode to json and then decode it so that we're sure everything (including all nested levels) // are formatted as an array and there are no onjects. $args = json_decode( wp_json_encode( $query ), true ); $this->backup_wp_query = $wp_query; $wp_query = new WP_Query( $args ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride if ( fusion_doing_ajax() ) { $wp_the_query = $wp_query; // phpcs:ignore WordPress.WP.GlobalVariablesOverride $post_id = $this->get_data( 'post_id' ); $post_id = $post_id ? $post_id : 0; $post = get_post( $post_id ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride } return $wp_query; } /** * Fallback implementation in case there is no query arg. */ $post_id = $this->get_data( 'post_id' ); $post_id = $post_id ? $post_id : 0; $post_type = get_post_type( $post_id ); $args = [ 'p' => $post_id, 'post_type' => $post_type ? $post_type : 'any', ]; if ( false !== strpos( $args['p'], '-archive' ) ) { $term_id = absint( $args['p'] ); $term = get_term( $term_id ); if ( is_object( $term ) && isset( $term->taxonomy ) ) { global $wp_taxonomies; $post_type = 'post'; if ( isset( $wp_taxonomies[ $term->taxonomy ] ) ) { $post_types = $wp_taxonomies[ $term->taxonomy ]->object_type; $post_type = $post_types[0]; } $args = [ 'post_type' => $post_type, 'tax_query' => [ // phpcs:ignore WordPress.DB.SlowDBQuery 'taxonomy' => $term->taxonomy, 'filed' => 'slug', 'terms' => $term->slug, ], ]; // Category query. if ( 'category' === $term->taxonomy ) { $args = [ 'category_name' => $term->slug, ]; } // Tag query. if ( 'tag' === $term->taxonomy ) { $args = [ 'tag' => $term->slug, ]; } } } $this->backup_wp_query = $wp_query; $wp_query = new WP_Query( $args ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride return $wp_query; } /** * Restores the global $wp_query. * * @access public * @since 6.2 * @return void */ public function restore_wp_query() { global $wp_query; if ( null !== $this->backup_wp_query ) { $wp_query = $this->backup_wp_query; // phpcs:ignore WordPress.WP.GlobalVariablesOverride } } /** * Inject CSS vars to parent window. * * @access public * @since 7.0 */ public function inject_css_vars() { $fusion_settings = awb_get_fusion_settings(); echo '<style type="text/css" id="fusion-parent-window-css-vars">'; echo ':root{--small_screen_width:' . absint( $fusion_settings->get( 'visibility_small' ) ) . 'px;}'; echo ':root{--medium_screen_width:' . absint( $fusion_settings->get( 'visibility_medium' ) ) . 'px;}'; echo '</style>'; } /** * Adds necessary filters to load empty checkout page in live editor. * * @access public * @since 7.8.1 */ public function load_empty_checkout_page() { if ( $this->is_preview || $this->is_builder || ( defined( 'WC_DOING_AJAX' ) && WC_DOING_AJAX && isset( $_GET['wc-ajax'] ) && 'update_order_review' === $_GET['wc-ajax'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification add_filter( 'woocommerce_checkout_redirect_empty_cart', '__return_false' ); add_filter( 'woocommerce_checkout_update_order_review_expired', '__return_false' ); } } /** * Ajax Get post lock data. * * @access public * @since 3.9.2 */ public function ajax_get_post_lock_data() { check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' ); $post_id = ( isset( $_POST['post_id'] ) ) ? sanitize_text_field( wp_unslash( $_POST['post_id'] ) ) : ''; $takeover = ( isset( $_POST['takeover'] ) ) ? sanitize_text_field( wp_unslash( $_POST['takeover'] ) ) : false; if ( $post_id ) { die( wp_json_encode( $this->get_post_lock_data( $post_id, $takeover ) ) ); } die(); } /** * Get post lock data. * * @param WP_Post|int|null $post_id Defaults to empty. * @param bool $takeover Defaults to false. * @since 3.9.2 */ public function get_post_lock_data( $post_id = '', $takeover = false ) { $post = get_post( $post_id ); $data = []; if ( ! $post ) { return; } $user = null; if ( ! function_exists( 'wp_check_post_lock' ) ) { require_once ABSPATH . 'wp-admin/includes/post.php'; } $user_id = wp_check_post_lock( $post->ID ); if ( $user_id ) { $user = get_userdata( $user_id ); } if ( ! $user ) { return null; } $sendback = wp_get_referer(); $sendback_text = __( 'Go back', 'fusion-builder' ); if ( $takeover ) { $sendback = admin_url( 'edit.php' ); if ( 'post' !== $post->post_type ) { $sendback = add_query_arg( 'post_type', $post->post_type, $sendback ); } $sendback_text = __( 'Back to', 'fusion-builder' ) . ' ' . get_post_type_object( $post->post_type )->labels->all_items; } $preview_link = get_preview_post_link( $post->ID ); $preview_text = __( 'Preview', 'fusion-builder' ); $takeover_text = __( 'Take Over', 'fusion-builder' ); $data = [ 'back_link' => esc_url( $sendback ), 'back_text' => esc_html( $sendback_text ), 'preview_link' => esc_url( $preview_link ), 'preview_text' => esc_html( $preview_text ), 'takeover_text' => esc_html( $takeover_text ), 'msg' => __( 'is currently editing this post. Do you want to take over?', 'fusion-builder' ), 'name' => esc_html( $user->display_name ), 'avatar' => get_avatar( $user->ID, 64 ), ]; if ( $takeover ) { $data['msg'] = __( 'has taken over and is currently editing.', 'fusion-builder' ); $data['is_taken'] = true; } return $data; } } /** * Instantiates the Fusion_App class. * Make sure the class is properly set-up. * The Fusion_App class is a singleton * so we can directly access the one true FusionBuilder object using this function. * * @since 2.0 * @return Fusion_App */ function Fusion_App() { // phpcs:ignore WordPress.NamingConventions return Fusion_App::get_instance(); }
Cokiee Shell Web 1.0, Coded By Razor
Neueste Kommentare