'; die(); } // Detect Codeception and load additional code required by tests. if ( class_exists( 'Codeception\TestCase\WPTestCase' ) ) { foreach ( glob( ET_BUILDER_DIR . 'tests/codeception/wpunit/*.php' ) as $test_file ) { require_once $test_file; } } require_once ET_BUILDER_DIR . 'autoload.php'; /** * Retrieve a commonly used translation. * * @since 4.4.9 * * @param string $key Translation key. * @param boolean $reset Reset cache. * * @return string */ function et_builder_i18n( $key, $reset = false ) { static $cache; if ( true === $reset ) { $cache = array(); } if ( ! isset( $cache[ $key ] ) ) { $cache[ $key ] = ET_Builder_I18n::get( $key ); } return $cache[ $key ]; } /** * Resets commonly used translations cache. * * @since 4.4.9 * * @return void */ function et_builder_i18n_reset_cache() { et_builder_i18n( '', true ); } /** * Escape translation with optional value and caches the result. * * @since 4.4.9 * * @param string $text * @param string $value * * @return string. */ function et_esc_html_once( $text, $value = '' ) { static $cache = array(); if ( isset( $cache[ $text ][ $value ] ) ) { return $cache[ $text ][ $value ]; } $escaped = esc_html( '' === $value ? $text : sprintf( $text, $value ) ); $cache[ $text ][ $value ] = $escaped; return $escaped; } /** * Checks to see if Critical CSS is enabled. * * @since 4.10.0 * * @return string. */ function et_builder_is_critical_enabled() { global $shortname; $value = false; if ( et_is_builder_plugin_active() ) { $options = get_option( 'et_pb_builder_options', array() ); $value = isset( $options['performance_main_critical_css'] ) ? $options['performance_main_critical_css'] : 'on'; } else { $value = et_get_option( $shortname . '_critical_css', 'on' ); } return apply_filters( 'et_pb_critical_css_enabled', 'on' === $value ); } require_once ET_BUILDER_DIR . 'compat/early.php'; require_once ET_BUILDER_DIR . 'compat/scripts.php'; require_once ET_BUILDER_DIR . 'feature/gutenberg/blocks/Layout.php'; require_once ET_BUILDER_DIR . 'feature/gutenberg/blocks/PostExcerpt.php'; require_once ET_BUILDER_DIR . 'feature/gutenberg/utils/Conversion.php'; require_once ET_BUILDER_DIR . 'feature/gutenberg/utils/Editor.php'; require_once ET_BUILDER_DIR . 'feature/gutenberg/EditorTypography.php'; require_once ET_BUILDER_DIR . 'core.php'; require_once ET_BUILDER_DIR . 'conditions.php'; require_once ET_BUILDER_DIR . 'post/PostStack.php'; if ( ! ( is_admin() || wp_doing_ajax() || is_customize_preview() || is_et_pb_preview() ) ) { require_once ET_BUILDER_DIR . 'feature/DoNotCachePage.php'; } require_once ET_BUILDER_DIR . 'feature/ClassicEditor.php'; require_once ET_BUILDER_DIR . 'feature/AjaxCache.php'; require_once ET_BUILDER_DIR . 'feature/post-content.php'; require_once ET_BUILDER_DIR . 'feature/content-retriever/ContentRetriever.php'; if ( et_builder_is_critical_enabled() ) { require_once ET_BUILDER_DIR . 'feature/CriticalCSS.php'; } require_once ET_BUILDER_DIR . 'feature/dynamic-assets/dynamic-assets.php'; require_once ET_BUILDER_DIR . 'feature/dynamic-assets/class-dynamic-assets.php'; require_once ET_BUILDER_DIR . 'feature/dynamic-content.php'; require_once ET_BUILDER_DIR . 'feature/search-posts.php'; require_once ET_BUILDER_DIR . 'feature/ErrorReport.php'; require_once ET_BUILDER_DIR . 'api/DiviExtensions.php'; require_once ET_BUILDER_DIR . 'api/rest/BlockLayout.php'; require_once ET_BUILDER_DIR . 'frontend-builder/theme-builder/theme-builder.php'; require_once ET_BUILDER_DIR . 'feature/global-presets/Settings.php'; require_once ET_BUILDER_DIR . 'feature/global-presets/History.php'; require_once ET_BUILDER_DIR . 'feature/window.php'; require_once ET_BUILDER_DIR . 'feature/et-server-frame.php'; require_once ET_BUILDER_DIR . 'feature/ajax-data/AjaxData.php'; require_once ET_BUILDER_DIR . 'feature/display-conditions/DisplayConditions.php'; require_once ET_BUILDER_DIR . 'feature/icon-manager/ExtendedFontIcons.php'; require_once ET_BUILDER_DIR . 'feature/background-masks/Functions.php'; require_once ET_BUILDER_DIR . 'feature/background-masks/PatternFields.php'; require_once ET_BUILDER_DIR . 'feature/background-masks/MaskFields.php'; require_once ET_BUILDER_DIR . 'feature/gutenberg/BlockTemplates.php'; require_once ET_BUILDER_DIR . 'feature/local-library.php'; require_once ET_BUILDER_DIR . 'feature/ai-button.php'; // Conditional Includes. if ( et_is_woocommerce_plugin_active() ) { require_once ET_BUILDER_DIR . 'feature/woocommerce-modules.php'; } global $shortname; if ( apply_filters( 'et_builder_enable_jquery_body', true ) && ! ( is_admin() || wp_doing_ajax() || et_is_builder_plugin_active() || is_customize_preview() || is_et_pb_preview() ) && 'on' === et_get_option( $shortname . '_enable_jquery_body', 'on' ) ) { require_once ET_BUILDER_DIR . 'feature/JQueryBody.php'; } if ( wp_doing_ajax() && ! is_customize_preview() ) { define( 'WPE_HEARTBEAT_INTERVAL', et_builder_heartbeat_interval() ); // Default ajax request exceptions $builder_load_requests = array( 'action' => array( 'et_pb_get_backbone_template', 'et_pb_get_backbone_templates', 'et_pb_process_computed_property', 'et_fb_ajax_render_shortcode', 'et_fb_ajax_save', 'et_fb_get_shortcode_from_fb_object', 'et_fb_get_html_from_shortcode', 'et_fb_ajax_drop_autosave', 'et_fb_get_saved_layouts', 'et_fb_save_layout', 'et_fb_get_cloud_item_content', 'et_fb_update_layout', 'et_pb_execute_content_shortcodes', 'et_pb_ab_builder_data', 'et_pb_create_ab_tables', 'et_pb_update_stats_table', 'et_pb_ab_clear_cache', 'et_pb_ab_clear_stats', 'et_fb_prepare_shortcode', 'et_fb_process_imported_content', 'et_fb_get_saved_templates', 'et_fb_retrieve_builder_data', 'et_fb_update_builder_assets', 'et_pb_process_custom_font', 'et_builder_email_add_account', // email opt-in module. 'et_builder_email_remove_account', // email opt-in module. 'et_builder_email_get_lists', // email opt-in module. 'et_builder_save_settings', // builder plugin dashboard (global builder settings). 'save_epanel', // ePanel (global builder settings). 'save_epanel_temp', // ePanel (temp global builder settings). 'et_builder_library_get_layout', 'et_builder_library_update_terms', 'et_builder_toggle_cloud_status', 'et_builder_library_save_temp_layout', 'et_builder_library_remove_temp_layout', 'et_builder_library_clear_temp_presets', 'et_builder_library_update_item', 'et_builder_library_convert_item', 'et_theme_builder_library_update_item', 'et_theme_builder_library_save_temp_layout', 'et_theme_builder_library_remove_temp_layout', 'et_theme_builder_library_get_preset_items', 'et_theme_builder_library_get_set_items', 'et_builder_library_upload_thumbnail', 'et_builder_library_get_cloud_token', 'et_builder_library_get_layouts_data', 'et_theme_builder_library_get_items_data', 'et_theme_builder_library_update_terms', 'et_theme_builder_library_get_item', 'et_fb_fetch_attachments', 'et_pb_get_saved_templates', 'et_builder_resolve_post_content', 'et_builder_activate_bfb_auto_draft', 'et_builder_toggle_bfb', 'et_fb_error_report', 'et_core_portability_import', 'et_core_version_rollback', 'update-theme', 'et_safe_mode_update', 'et_core_portability_export', 'et_core_portability_import', 'et_builder_migrate_module_customizer_phase_two', 'et_builder_save_global_presets_history', 'et_builder_retrieve_global_presets_history', 'et_theme_builder_api_export_theme_builder_step', 'et_theme_builder_api_import_theme_builder_step', 'et_pb_submit_subscribe_form', 'et_builder_get_woocommerce_tabs', 'et_builder_global_colors_save', 'et_builder_default_colors_update', 'et_builder_ajax_save_domain_token', 'et_fb_fetch_before_after_components', 'et_code_snippets_library_get_items', 'et_builder_global_colors_get', ), ); // AJAX requests that use PHP modules cache for performance reasons. $builder_use_cache_actions = array( 'heartbeat', 'et_builder_retrieve_global_presets_history', 'et_fb_get_saved_templates', 'et_fb_ajax_save', 'et_fb_ajax_drop_autosave', ); // Added built-in third party plugins support // Easy Digital Downloads if ( class_exists( 'Easy_Digital_Downloads' ) ) { $builder_load_requests['action'][] = 'edd_load_gateway'; } // WooCommerce - it uses its own ajax endpoint instead of admin-ajax.php if ( class_exists( 'WooCommerce' ) ) { $builder_load_requests['wc-ajax'] = array( 'update_order_review', ); } // WPML. if ( class_exists( 'SitePress' ) ) { $builder_load_requests['action'][] = 'et_builder_wpml_translate_layout'; } // Merging third party exceptions; built-in exceptions should not be removable $builder_custom_load_requests = apply_filters( 'et_builder_load_requests', array() ); if ( ! empty( $builder_custom_load_requests ) ) { foreach ( $builder_custom_load_requests as $builder_custom_query_string => $builder_custom_possible_values ) { if ( ! isset( $builder_load_requests[ $builder_custom_query_string ] ) ) { $builder_load_requests[ $builder_custom_query_string ] = $builder_custom_possible_values; } else { $builder_load_requests[ $builder_custom_query_string ] = array_merge( $builder_custom_possible_values, $builder_load_requests[ $builder_custom_query_string ] ); } } } // Legacy compatibility for action only request exception filter $builder_load_actions = apply_filters( 'et_builder_load_actions', array() ); if ( ! empty( $builder_load_actions ) ) { $builder_load_requests['action'] = array_merge( $builder_load_actions, $builder_load_requests['action'] ); } // Determine whether current AJAX request should load builder or not $load_builder_on_ajax = false; // If current request's query string exists on list of possible values, load builder // phpcs:disable WordPress.Security.NonceVerification.NoNonceVerification foreach ( $builder_load_requests as $query_string => $possible_values ) { if ( ! is_array( $possible_values ) ) { continue; } if ( isset( $_REQUEST[ $query_string ] ) && in_array( $_REQUEST[ $query_string ], $possible_values ) ) { $load_builder_on_ajax = true; break; } } define( 'ET_BUILDER_LOAD_ON_AJAX', $load_builder_on_ajax ); $action = et_()->array_get( $_POST, 'action', false ); $force_builder_load = isset( $_POST['et_load_builder_modules'] ) && '1' === $_POST['et_load_builder_modules']; $force_memory_limit = 'et_fb_retrieve_builder_data' === $action; if ( 'heartbeat' === $action ) { // if this is the heartbeat, and if its not packing our heartbeat data, then return if ( ! isset( $_REQUEST['data'] ) || ! isset( $_REQUEST['data']['et'] ) ) { return; } } elseif ( ! $force_builder_load && ! $load_builder_on_ajax ) { return; } if ( $force_memory_limit || et_should_memory_limit_increase() ) { et_increase_memory_limit(); } if ( $action && in_array( $action, $builder_use_cache_actions ) ) { add_filter( 'et_builder_ajax_use_cache', '__return_true' ); } // phpcs:enable } /** * Get product script handle for the main script bundle. * * @since 4.10.0 */ function et_get_combined_script_handle() { global $shortname; if ( 'divi' === $shortname ) { $combined_script_handle = 'divi-custom-script'; } elseif ( 'extra' === $shortname ) { $combined_script_handle = 'extra-scripts'; } else { $combined_script_handle = 'divi-builder-custom-script'; } return $combined_script_handle; } /** * Localizes the main front end bundle and adds variables * for et-builder-modules-global-functions-script. * * @since 4.10.0 */ function et_builder_load_global_functions_script() { wp_localize_script( et_get_combined_script_handle(), 'et_builder_utils_params', array( 'condition' => array( 'diviTheme' => function_exists( 'et_divi_fonts_url' ), 'extraTheme' => function_exists( 'et_extra_fonts_url' ), ), 'scrollLocations' => et_builder_get_window_scroll_locations(), 'builderScrollLocations' => et_builder_get_onload_scroll_locations(), 'onloadScrollLocation' => et_builder_get_onload_scroll_location(), 'builderType' => et_builder_get_current_builder_type(), ) ); } add_action( 'wp_enqueue_scripts', 'et_builder_load_global_functions_script', 11 ); function et_builder_load_modules_styles() { $current_page_id = apply_filters( 'et_is_ab_testing_active_post_id', get_the_ID() ); $is_fb_enabled = et_core_is_fb_enabled(); $ab_tests = function_exists( 'et_builder_ab_get_current_tests' ) ? et_builder_ab_get_current_tests() : array(); $is_ab_testing = ! empty( $ab_tests ); $google_maps_api_url_args = array( 'v' => 3, 'key' => et_pb_get_google_api_key(), ); if ( $is_fb_enabled && ! et_builder_tb_enabled() && ! et_builder_bfb_enabled() ) { $google_maps_api_url_args['callback'] = 'ETBuilderInitGoogleMaps'; } $google_maps_api_url = add_query_arg( $google_maps_api_url_args, is_ssl() ? 'https://maps.googleapis.com/maps/api/js' : 'http://maps.googleapis.com/maps/api/js' ); wp_register_script( 'salvattore', ET_BUILDER_URI . '/feature/dynamic-assets/assets/js/salvattore.js', array(), ET_BUILDER_VERSION, true ); wp_register_script( 'google-maps-api', esc_url_raw( $google_maps_api_url ), array(), ET_BUILDER_VERSION, true ); $frontend_scripts_data = array( 'builderCssContainerPrefix' => ET_BUILDER_CSS_CONTAINER_PREFIX, 'builderCssLayoutPrefix' => ET_BUILDER_CSS_LAYOUT_PREFIX, ); wp_localize_script( et_get_combined_script_handle(), 'et_frontend_scripts', $frontend_scripts_data ); // Load modules wrapper on CPT. // Use get_the_ID() explicitly so we decide based on the first post of an archive page. if ( et_builder_post_is_of_custom_post_type( get_the_ID() ) ) { wp_enqueue_script( 'et-builder-cpt-modules-wrapper', ET_BUILDER_URI . '/scripts/cpt-modules-wrapper.js', array( 'jquery' ), ET_BUILDER_VERSION, true ); $modules_wrapper_data = array( 'builderCssContainerPrefix' => ET_BUILDER_CSS_CONTAINER_PREFIX, 'builderCssLayoutPrefix' => ET_BUILDER_CSS_LAYOUT_PREFIX, ); wp_localize_script( 'et-builder-cpt-modules-wrapper', 'et_modules_wrapper', $modules_wrapper_data ); } if ( et_builder_has_limitation( 'register_fittext_script' ) ) { wp_register_script( 'fittext', ET_BUILDER_URI . '/scripts/ext/jquery.fittext.js', array( 'jquery' ), ET_BUILDER_VERSION, true ); } // Load visible.min.js only if AB testing active on current page OR VB (because post settings is synced between VB and BB) if ( $is_ab_testing || $is_fb_enabled ) { wp_enqueue_script( 'et-jquery-visible-viewport', ET_BUILDER_URI . '/scripts/ext/jquery.visible.min.js', array( 'jquery', et_get_combined_script_handle() ), ET_BUILDER_VERSION, true ); } $pb_custom_data = array( 'ajaxurl' => is_ssl() ? admin_url( 'admin-ajax.php' ) : admin_url( 'admin-ajax.php', 'http' ), 'images_uri' => get_template_directory_uri() . '/images', 'builder_images_uri' => ET_BUILDER_URI . '/images', 'et_frontend_nonce' => wp_create_nonce( 'et_frontend_nonce' ), 'subscription_failed' => esc_html__( 'Please, check the fields below to make sure you entered the correct information.', 'et_builder' ), 'et_ab_log_nonce' => wp_create_nonce( 'et_ab_testing_log_nonce' ), 'fill_message' => esc_html__( 'Please, fill in the following fields:', 'et_builder' ), 'contact_error_message' => esc_html__( 'Please, fix the following errors:', 'et_builder' ), 'invalid' => esc_html__( 'Invalid email', 'et_builder' ), 'captcha' => esc_html__( 'Captcha', 'et_builder' ), 'prev' => esc_html__( 'Prev', 'et_builder' ), 'previous' => esc_html__( 'Previous', 'et_builder' ), 'next' => esc_html__( 'Next', 'et_builder' ), 'wrong_captcha' => esc_html__( 'You entered the wrong number in captcha.', 'et_builder' ), 'wrong_checkbox' => esc_html__( 'Checkbox', 'et_builder' ), 'ignore_waypoints' => et_is_ignore_waypoints() ? 'yes' : 'no', 'is_divi_theme_used' => function_exists( 'et_divi_fonts_url' ), 'widget_search_selector' => apply_filters( 'et_pb_widget_search_selector', '.widget_search' ), 'ab_tests' => $ab_tests, 'is_ab_testing_active' => $is_ab_testing, 'page_id' => $current_page_id, 'unique_test_id' => get_post_meta( $current_page_id, '_et_pb_ab_testing_id', true ), 'ab_bounce_rate' => '' !== get_post_meta( $current_page_id, '_et_pb_ab_bounce_rate_limit', true ) ? get_post_meta( $current_page_id, '_et_pb_ab_bounce_rate_limit', true ) : 5, 'is_cache_plugin_active' => false === et_pb_detect_cache_plugins() ? 'no' : 'yes', 'is_shortcode_tracking' => get_post_meta( $current_page_id, '_et_pb_enable_shortcode_tracking', true ), 'tinymce_uri' => defined( 'ET_FB_ASSETS_URI' ) ? ET_FB_ASSETS_URI . '/vendors' : '', 'accent_color' => et_builder_accent_color(), /** * Filters Waypoints options for client side rendering. * * @since 4.15.0 * * @param array $options { * Filtered Waypoints options. Only support `context` at this moment because * there is no test case for other properties. * * @type string[] $context List of container selectors for the Waypoint. The * element will iterate and looking for the closest * parent element matches the given selectors. */ 'waypoints_options' => apply_filters( 'et_builder_waypoints_options', array() ), ); wp_localize_script( et_get_combined_script_handle(), 'et_pb_custom', $pb_custom_data ); /** * Only load this during builder preview screen session */ if ( is_et_pb_preview() ) { // Set fixed protocol for preview URL to prevent cross origin issue $preview_scheme = is_ssl() ? 'https' : 'http'; // Get home url, then parse it $preview_origin_component = parse_url( home_url( '', $preview_scheme ) ); // Rebuild origin URL, strip sub-directory address if there's any (postMessage e.origin doesn't pass sub-directory address) $preview_origin = ''; // Perform check, prevent unnecessary error if ( isset( $preview_origin_component['scheme'] ) && isset( $preview_origin_component['host'] ) ) { $preview_origin = "{$preview_origin_component['scheme']}://{$preview_origin_component['host']}"; // Append port number if different port number is being used if ( isset( $preview_origin_component['port'] ) ) { $preview_origin = "{$preview_origin}:{$preview_origin_component['port']}"; } } // Enqueue theme's style.css if it hasn't been enqueued (possibly being hardcoded by theme) if ( ! et_builder_has_theme_style_enqueued() && et_builder_has_limitation( 'force_enqueue_theme_style' ) ) { wp_enqueue_style( 'et-builder-theme-style-css', get_stylesheet_uri(), array() ); } wp_enqueue_style( 'et-builder-preview-style', ET_BUILDER_URI . '/styles/preview.css', array(), ET_BUILDER_VERSION ); wp_enqueue_script( 'et-builder-preview-script', ET_BUILDER_URI . '/frontend-builder/build/frontend-builder-preview.js', array( 'jquery' ), ET_BUILDER_VERSION, true ); $preview_params_data = array( 'preview_origin' => esc_url( $preview_origin ), 'alert_origin_not_matched' => sprintf( esc_html__( 'Unauthorized access. Preview cannot be accessed outside %1$s.', 'et_builder' ), esc_url( home_url( '', $preview_scheme ) ) ), ); wp_localize_script( 'et-builder-preview-script', 'et_preview_params', $preview_params_data ); } } add_action( 'wp_enqueue_scripts', 'et_builder_load_modules_styles', 11 ); function et_builder_get_modules_js_data() { // Data shouldn't be loaded in Builder, so always pass an empty array there. $animation_data = et_core_is_fb_enabled() ? array() : et_builder_handle_animation_data(); $animation_data_json = json_encode( $animation_data ); $link_options_data = et_core_is_fb_enabled() ? array() : et_builder_handle_link_options_data(); $link_options_data_json = json_encode( $link_options_data ); if ( empty( $animation_data ) && empty( $link_options_data ) ) { return; } ?> get_data( $script, 'data' ); // If to-be dequeued script has localized data, get builder script's data and concatenated both to ensure compatibility. // Concatenating is needed because script's localize data is saved as string (encoded array concatenated into variable name). if ( $script_data && '' !== trim( $script_data ) ) { // If builder script handle localized data returns false/empty, $script_data still need to be added. $concatenated_scripts_data = implode( ' ', array_filter( array( wp_scripts()->get_data( $builder_script_handle, 'data' ), $script_data, ) ) ); // Add concatenated localized data to builder script handle. wp_scripts()->add_data( $builder_script_handle, 'data', $concatenated_scripts_data ); } // If dequeued script has inline script, get it then re-add it to builder script handle using appropriate position. $inline_script_positions = array( 'before', 'after' ); foreach ( $inline_script_positions as $inline_script_position ) { $inline_script = wp_scripts()->get_data( $script, $inline_script_position ); // Inline script is saved as array. add_inline_script() method will handle it appending process. if ( is_array( $inline_script ) && ! empty( $inline_script ) ) { wp_scripts()->add_inline_script( $builder_script_handle, implode( ' ', $inline_script ), $inline_script_position ); } } wp_dequeue_script( $script ); wp_deregister_script( $script ); wp_register_script( $script, '', array(), ET_BUILDER_VERSION, true ); } } } add_action( 'wp_print_scripts', 'et_builder_dequeue_minified_scripts', 99999999 ); // add_action( 'wp_print_footer_scripts', 'et_builder_dequeue_minified_scripts', 9 ); //