: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
<circle cx="8.5" cy="19.5" r="1.5"/>
<circle cx="8.5" cy="14.5" r="1.5"/>
<circle cx="5" cy="12" r="1"/>
<circle cx="5" cy="17" r="1"/>
<circle cx="8.5" cy="9.5" r="1.5"/>
<path d="M15.7 4c-.4 0-.8.1-1.2.3-.6.3-.5.7-1.5.7-1.1 0-2 .9-2 2s.9 2 2 2c.3 0 .5.2.5.5s-.2.5-.5.5c-1.1 0-2 .9-2 2s.9 2 2 2c.3 0 .5.2.5.5s-.2.5-.5.5c-1.1 0-2 .9-2 2s.9 2 2 2c.3 0 .5.2.5.5s-.2.5-.5.5c-1.1 0-2 .9-2 2s.9 2 2 2c1 0 .9.4 1.4.7.4.2.8.3 1.2.3 4.3-.4 8.3-5.3 8.3-10.5s-4-10-8.2-10.5z"/>
<path d="M22 4h-5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h5c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM10 14c0 .6.4 1 1 1h.6L10 16.6c-.4.4-.4 1 0 1.4.4.4 1 .4 1.4 0l3.3-3.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7L11.4 10c-.4-.4-1-.4-1.4 0-.4.4-.4 1 0 1.4l1.6 1.6H11c-.6 0-1 .4-1 1z"/>
<circle cx="7" cy="14" r="1.5"/>
<circle cx="3" cy="14" r="1"/>
<circle cx="21.5" cy="8.5" r="3.5"/>
<circle cx="16" cy="12" r="1.7"/>
<circle cx="13" cy="15" r="1.2"/>
<circle cx="11" cy="18" r="1"/>
<circle cx="9" cy="22" r="1"/>
<circle cx="7" cy="19" r="1"/>
<circle cx="4" cy="17" r="1"/>
<path d="M23.7 4.3c-.1-.1-.2-.2-.3-.2-.1-.1-.3-.1-.4-.1h-5c-.6 0-1 .4-1 1s.4 1 1 1h2.6l-3.1 3.1c-.2-.1-.3-.1-.5-.1h-6c-.2 0-.3 0-.5.1L7.4 6H10c.6 0 1-.4 1-1s-.4-1-1-1H5c-.1 0-.3 0-.4.1-.2.1-.4.3-.5.5-.1.1-.1.3-.1.4v5c0 .6.4 1 1 1s1-.4 1-1V7.4l3.1 3.1c-.1.2-.1.3-.1.5v6c0 .2 0 .3.1.5L6 20.6V18c0-.6-.4-1-1-1s-1 .4-1 1v5c0 .1 0 .3.1.4.1.2.3.4.5.5.1.1.3.1.4.1h5c.6 0 1-.4 1-1s-.4-1-1-1H7.4l3.1-3.1c.2 0 .3.1.5.1h6c.2 0 .3 0 .5-.1l3.1 3.1H18c-.6 0-1 .4-1 1s.4 1 1 1h5c.1 0 .3 0 .4-.1.2-.1.4-.3.5-.5.1-.1.1-.3.1-.4v-5c0-.6-.4-1-1-1s-1 .4-1 1v2.6l-3.1-3.1c0-.2.1-.3.1-.5v-6c0-.2 0-.3-.1-.5L22 7.4V10c0 .6.4 1 1 1s1-.4 1-1V5c0-.1 0-.3-.1-.4 0-.1-.1-.2-.2-.3z"/>
<path d="M22 2.4l-7 2.9V7h-2v-.8L7.6 8.7c-.4.2-.6.5-.6.9v8.7c0 .4.2.7.6.9l5.4 2.5V21h2v1.7l7 2.9c.5.2 1-.2 1-.7V3.1c0-.5-.5-.9-1-.7zM15 19h-2v-2h2v2zm0-4h-2v-2h2v2zm0-4h-2V9h2v2zM13 2h2v2.5h-2zM13 23.5h2V26h-2z"/>
<path d="M24 7h-4V3.4c0-.8-.6-1.4-1.3-1.4-.2 0-.5.1-.7.2l-6.5 3.9c-.9.6-1.5 1.6-1.5 2.6V23c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2zm-6 10.5c0 .2-.1.4-.3.5L12 21.5V8.7c0-.4.2-.7.5-.9L18 4.5v13zM6 7h2v2H6zM6 23h2v2H6zM2.6 7.1c-.1 0-.1.1-.2.1v.1l-.1.1-.1.1c-.1.1-.2.3-.2.5v1h2V7H3c-.1 0-.2 0-.4.1zM2 23v1c0 .4.3.8.7.9.1.1.2.1.3.1h1v-2H2zM2 11h2v2H2zM2 19h2v2H2zM2 15h2v2H2z"/>
<path d="M18.8 5c-5.3-2.7-11.8.2-14 5.6-1.1 2.8-1 6 .2 8.8.4 1 3.9 6.5 5 3.6.5-1.2-1.3-2.2-1.9-3-.8-1.2-1.4-2.5-1.6-3.9-.4-2.7.5-5.5 2.4-7.4 4-4 11.6-2.5 12.6 3.4.4 2.7-.9 5.5-3.4 6.6-2.6 1.1-6 0-6.8-2.8-.7-2.4 1.2-5.7 4-4.8 1.1.3 2 1.5 1.5 2.7-.3.7-1.7 1.2-1.6.1 0-.3.2-.4.2-.8-.1-.4-.5-.6-.9-.6-1.1.1-1.6 1.6-1.3 2.5.3 1.2 1.5 1.9 2.7 1.9 2.9 0 4.2-3.4 3.1-5.7-1.2-2.6-4.6-3.4-7-2.2-2.6 1.3-3.8 4.4-3.1 7.2 1.6 5.9 9.3 6.8 13.1 2.5 3.8-4.2 1.9-11.1-3.2-13.7z"/>
<path d="M14.71 17.71a3 3 0 0 1-2.12-.88l-.71-.71a1 1 0 0 1 1.41-1.41l.71.71a1 1 0 0 0 1.41 0l5-4.95a1 1 0 0 0 0-1.41l-1.46-1.42a1 1 0 0 0-1.41 0L16.1 9.07a1 1 0 0 1-1.41-1.41l1.43-1.43a3.07 3.07 0 0 1 4.24 0l1.41 1.41a3 3 0 0 1 0 4.24l-5 4.95a3 3 0 0 1-2.06.88z"/>
<path d="M9.76 22.66a3 3 0 0 1-2.12-.88l-1.42-1.42a3 3 0 0 1 0-4.24l5-4.95a3.07 3.07 0 0 1 4.24 0l.71.71a1 1 0 0 1-1.41 1.41l-.76-.7a1 1 0 0 0-1.41 0l-5 4.95a1 1 0 0 0 0 1.41L9 20.36a1 1 0 0 0 1.41 0L11.82 19a1 1 0 0 1 1.41 1.41l-1.36 1.36a3 3 0 0 1-2.11.89z"/>
<path d="M22 5H6a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zm-2 15H8V8h12z"/>
<path d="M17 21h2v2h-2zM5 9h2v2H5zM21 17h2v2h-2zM21 9h2v2h-2zM21 13h2v2h-2zM21 23h1a1 1 0 0 0 1-1v-1h-2zM5 17h2v2H5zM5 13h2v2H5zM13 21h2v2h-2zM9 21h2v2H9zM5 21v1a1 1 0 0 0 1 1h1v-2zM22 5H6a1 1 0 0 0-1 1v2h18V6a1 1 0 0 0-1-1z"/>
<path d="M13 5h2v2h-2zM5 9h2v2H5zM9 5h2v2H9zM7 5H6a1 1 0 0 0-1 1v1h2zM5 13h2v2H5zM13 21h2v2h-2zM5 17h2v2H5zM9 21h2v2H9zM17 5h2v2h-2zM5 21v1a1 1 0 0 0 1 1h1v-2zM22 5h-2v18h2a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zM17 21h2v2h-2z"/>
<path d="M9 5h2v2H9zM7 20H5v2a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-2H7zM17 5h2v2h-2zM5 13h2v2H5zM5 9h2v2H5zM13 5h2v2h-2zM5 17h2v2H5zM21 9h2v2h-2zM21 17h2v2h-2zM22 5h-1v2h2V6a1 1 0 0 0-1-1zM21 13h2v2h-2zM7 5H6a1 1 0 0 0-1 1v1h2z"/>
<path d="M22 5h-1v2h2V6a1 1 0 0 0-1-1zM9 21h2v2H9zM21 17h2v2h-2zM13 21h2v2h-2zM21 13h2v2h-2zM9 5h2v2H9zM17 21h2v2h-2zM17 5h2v2h-2zM21 9h2v2h-2zM8 7V5H6a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h2V7zM21 23h1a1 1 0 0 0 1-1v-1h-2zM13 5h2v2h-2z"/>
<path d="M20 12C19.9 11.7 19.3 11 19 11L18 11C18 8.1 16.2 6 14 6 11.8 6 10 8.1 10 11L9 11C8.6 11 8.1 11.6 8 12L8 13 8 19 8 20C8.1 20.3 8.7 20.9 9 21L19 21C19.4 21 19.9 20.4 20 20L20 19 20 14 20 12 20 12ZM14 8C15.1 8 16 9.4 16 11.1L12 11.1C12 9.4 12.9 8 14 8L14 8ZM18 19L10 19 10 13 18 13 18 19 18 19Z" fillRule="evenodd"/>
<path d="M14 18C14.6 18 15 17.6 15 17L15 15C15 14.4 14.6 14 14 14 13.4 14 13 14.4 13 15L13 15 13 17C13 17.6 13.4 18 14 18L14 18Z" fillRule="evenodd"/>
if ( ! function_exists( 'et_pb_get_font_icon_list_items' ) ) :
function et_pb_get_font_icon_list_items() {
$symbols = et_pb_get_font_icon_symbols();
foreach ( $symbols as $symbol ) {
$output .= sprintf( '<li data-icon=\'%1$s\'></li>', esc_attr( $symbol ) );
if ( ! function_exists( 'et_pb_font_icon_list' ) ) :
function et_pb_font_icon_list() {
echo et_core_esc_previously( et_pb_get_font_icon_list() );
if ( ! function_exists( 'et_pb_get_font_down_icon_symbols' ) ) :
function et_pb_get_font_down_icon_symbols() {
$symbols = array( '&#x22;', '&#x33;', '&#x37;', '&#x3b;', '&#x3f;', '&#x43;', '&#x47;', '&#xe03a;', '&#xe044;', '&#xe048;', '&#xe04c;' );
if ( ! function_exists( 'et_pb_get_font_down_icon_list' ) ) :
function et_pb_get_font_down_icon_list() {
$output = is_customize_preview() ? et_pb_get_font_down_icon_list_items() : '<%= window.et_builder.font_down_icon_list_template() %>';
$output = sprintf( '<ul class="et_font_icon">%1$s</ul>', et_core_esc_previously( $output ) );
if ( ! function_exists( 'et_pb_get_font_down_icon_list_items' ) ) :
function et_pb_get_font_down_icon_list_items() {
$symbols = et_pb_get_font_down_icon_symbols();
foreach ( $symbols as $symbol ) {
$output .= sprintf( '<li data-icon="%1$s"></li>', esc_attr( $symbol ) );
if ( ! function_exists( 'et_pb_font_down_icon_list' ) ) :
function et_pb_font_down_icon_list() {
echo et_core_esc_previously( et_pb_get_font_down_icon_list() );
* Processes font icon value for use on front-end
* @param string $font_icon Font Icon ( exact value or in %%index_number%% format ).
* @param string $symbols_function Optional. Name of the function that gets an array of font icon values.
* et_pb_get_font_icon_symbols function is used by default.
* @return string $font_icon Font Icon value
if ( ! function_exists( 'et_pb_process_font_icon' ) ) :
function et_pb_process_font_icon( $font_icon, $symbols_function = 'default' ) {
// the exact font icon value is saved
if ( 1 !== preg_match( "/^%%/", trim( $font_icon ) ) ) {
// the font icon value is saved in the following format: %%index_number%%
$icon_index = (int) str_replace( '%', '', $font_icon );
// @phpcs:ignore Generic.PHP.ForbiddenFunctions.Found
$icon_symbols = 'default' === $symbols_function ? et_pb_get_font_icon_symbols() : call_user_func( $symbols_function );
$font_icon = isset( $icon_symbols[ $icon_index ] ) ? $icon_symbols[ $icon_index ] : '';
if ( ! function_exists( 'et_builder_accent_color' ) ) :
function et_builder_accent_color( $default_color = '#7EBEC5' ) {
// Accent color option exists in Divi theme only. Use default color in plugin
$accent_color = ! et_is_builder_plugin_active() ? et_get_option( 'accent_color', $default_color ) : $default_color;
return apply_filters( 'et_builder_accent_color', $accent_color );
if ( ! function_exists( 'et_pb_process_header_level' ) ) :
function et_pb_process_header_level( $new_level, $default ) {
$valid_header_levels = array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' );
// return the new header level if exists in the list of valid header levels
if ( in_array( $new_level, $valid_header_levels ) ) {
// return default if defined. Fallback to h2 otherwise
return isset( $default ) ? $default : 'h2';
if ( ! function_exists( 'et_pb_get_alignment' ) ) {
function et_pb_get_alignment( $key ) {
if ( is_rtl() && 'left' === $key ) {
if ( ! function_exists( 'et_builder_get_text_orientation_options' ) ) :
function et_builder_get_text_orientation_options( $exclude_options = array(), $include_options = array() ) {
$text_orientation_options = array(
'left' => et_builder_i18n( 'Left' ),
'center' => et_builder_i18n( 'Center' ),
'right' => et_builder_i18n( 'Right' ),
'justified' => et_builder_i18n( 'Justified' ),
$text_orientation_options = array(
'right' => et_builder_i18n( 'Right' ),
'center' => et_builder_i18n( 'Center' ),
'force_left' => et_builder_i18n( 'Left' ),
// Exclude some options if needed
if ( ! empty( $exclude_options ) ) {
foreach ( $exclude_options as $exclude ) {
unset( $text_orientation_options[ $exclude ] );
// Include some options if needed
if ( ! empty( $include_options ) ) {
$text_orientation_options = wp_parse_args( $include_options, $text_orientation_options );
return apply_filters( 'et_builder_text_orientation_options', $text_orientation_options );
if ( ! function_exists( 'et_builder_get_gallery_settings' ) ) :
function et_builder_get_gallery_settings() {
'<input type="button" class="button button-upload et-pb-gallery-button" value="%1$s" />',
esc_attr__( 'Update Gallery', 'et_builder' )
if ( ! function_exists( 'et_builder_get_nav_menus_options' ) ) :
function et_builder_get_nav_menus_options() {
$nav_menus_options = array( 'none' => esc_html__( 'Select a menu', 'et_builder' ) );
$nav_menus = wp_get_nav_menus( array( 'orderby' => 'name' ) );
foreach ( (array) $nav_menus as $_nav_menu ) {
$nav_menus_options[ $_nav_menu->term_id ] = $_nav_menu->name;
return apply_filters( 'et_builder_nav_menus_options', $nav_menus_options );
if ( ! function_exists( 'et_builder_generate_center_map_setting' ) ) :
function et_builder_generate_center_map_setting() {
return '<div id="et_pb_map_center_map" class="et-pb-map et_pb_map_center_map"></div>';
if ( ! function_exists( 'et_builder_generate_pin_zoom_level_input' ) ) :
function et_builder_generate_pin_zoom_level_input() {
return '<input class="et_pb_zoom_level" type="hidden" value="18" />';
* Define conditional tags needed for component's backend parser. This is used for FB's public facing update
* mechanism to pass conditional tag to admin-ajax.php for component which relies to backend parsing. Backend
* uses this conditional tags' key as well for sanitization
function et_fb_conditional_tag_params() {
$post_type = isset( $post->post_type ) ? $post->post_type : false;
$conditional_tags = array(
'is_limited_mode' => et_builder_is_limited_mode(),
'is_bfb' => et_builder_bfb_enabled(),
'is_bfb_activated' => et_builder_bfb_activated(),
'is_tb' => et_builder_tb_enabled(),
'is_front_page' => is_front_page(),
'is_home_page' => is_home() || is_front_page(),
'is_search' => is_search(),
'is_single' => is_single(),
'is_singular' => is_singular(),
'is_singular_project' => is_singular( 'project' ),
'is_no_rtl' => 'on' === et_get_option( 'divi_disable_translations', 'off' ),
'et_is_builder_plugin_active' => et_is_builder_plugin_active(),
'is_user_logged_in' => is_user_logged_in(),
'et_is_ab_testing_active' => et_is_ab_testing_active() ? 'yes' : 'no',
'is_wrapped_styles' => et_builder_has_limitation( 'use_wrapped_styles' ),
'is_gutenberg' => et_core_is_gutenberg_active(),
'is_custom_post_type' => et_builder_is_post_type_custom( $post_type ),
'is_layout_post_type' => et_theme_builder_is_layout_post_type( $post_type ),
'is_rich_editor' => 'true' === apply_filters( 'user_can_richedit', get_user_option( 'rich_editing' ) ) ? 'yes' : 'no',
// Pass falsey as empty string so it remains falsey when conditionalTags is fetched and
// passed string as AJAX payload (on AJAX string, false bool becomes 'false' string)
'is_layout_block' => ET_GB_Block_Layout::is_layout_block_preview() ? true : '',
return apply_filters( 'et_fb_conditional_tag_params', $conditional_tags );
if ( ! function_exists( 'et_builder_page_creation_options' ) ) :
* Get Page Creation flow options
function et_builder_page_creation_options() {
'build_from_scratch' => array(
'className' => 'accent-blue',
'imgSrc' => 'scratch.png',
'imgSrcHover' => 'scratch.gif',
'titleText' => esc_html__( 'Build From Scratch', 'et_builder' ),
'descriptionText' => esc_html__( 'Build your page from the ground up. Don’t worry, you can access our premade layouts at any time.', 'et_builder' ),
'buttonText' => esc_html__( 'Start Building', 'et_builder' ),
'permission' => array( 'add_module' ),
'use_existing_content' => array(
'className' => 'accent-blue',
'imgSrc' => 'existing.png',
'imgSrcHover' => 'existing.gif',
'titleText' => esc_html__( 'Use Existing Content', 'et_builder' ),
'descriptionText' => esc_html__( 'Use the Divi Builder while retaining your existing page content.', 'et_builder' ),
'buttonText' => esc_html__( 'Start Building', 'et_builder' ),
'permission' => array( 'edit_module' ),
'choose_premade_layout' => array(
'className' => 'accent-purple',
'imgSrc' => 'premade.png',
'imgSrcHover' => 'premade.gif',
'titleText' => esc_html__( 'Choose a premade Layout', 'et_builder' ),
'descriptionText' => esc_html__( 'Choose from hundreds of world-class premade layouts or start from any of your existing saved layouts.', 'et_builder' ),
'buttonText' => esc_html__( 'Browse Layouts', 'et_builder' ),
'permission' => array( 'load_layout', 'divi_library' ),
'label' => esc_html__( 'Load Premade Layout', 'et_builder' ),
'clone_existing_page' => array(
'className' => 'accent-green',
'imgSrcHover' => 'clone.gif',
'titleText' => esc_html__( 'Clone Existing page', 'et_builder' ),
'descriptionText' => esc_html__( 'Jump start your layout design by duplicating another page that you’ve already built.', 'et_builder' ),
'buttonText' => esc_html__( 'Choose Page', 'et_builder' ),
'permission' => array( 'load_layout', 'divi_library', 'edit_module' ),
if ( ! function_exists( 'et_builder_page_creation_settings' ) ) :
* Get Page Creation flow setting options
* @param bool $value_as_index Flag to set the options value as numeric index.
function et_builder_page_creation_settings( $value_as_index = false ) {
$default_label = esc_html__( 'Give Me A Choice', 'et_builder' );
'default' => $default_label,
foreach ( et_builder_page_creation_options() as $key => $option ) {
if ( ! et_()->array_get( $option, 'setting' ) ) {
if ( isset( $option['permission'] ) ) {
$capabilities = is_array( $option['permission'] ) ? $option['permission'] : explode( ',', $option['permission'] );
$allowed = array_filter( $capabilities, 'et_pb_is_allowed' );
if ( ! $allowed || count( $capabilities ) !== count( $allowed ) ) {
$value = $value_as_index ? $option['setting']['value_index'] : $key;
$label = et_()->array_get( $option, 'setting.label', $option['titleText'] );
$settings[ $value ] = $label;
function et_fb_app_preferences_settings() {
$app_preferences = array(
'settings_bar_location' => array(
'builder_animation' => array(
'builder_display_modal_settings' => array(
'builder_enable_dummy_content' => array(
'hover' => esc_html__( 'Hover Mode' , 'et_builder' ),
'click' => esc_html__( 'Click Mode' , 'et_builder' ),
'grid' => esc_html__( 'Grid Mode' , 'et_builder' ),
'default' => et_builder_bfb_enabled() ? 'wireframe' : 'desktop',
'desktop' => esc_html__( 'Desktop View' , 'et_builder' ),
'tablet' => esc_html__( 'Tablet View' , 'et_builder' ),
'phone' => esc_html__( 'Phone View' , 'et_builder' ),
'wireframe' => esc_html__( 'Wireframe View' , 'et_builder' ),
'hide_disabled_modules' => array(
'history_intervals' => array(
'1' => esc_html__( 'After Every Action' , 'et_builder' ),
'10' => esc_html__( 'After Every 10th Action' , 'et_builder' ),
'20' => esc_html__( 'After Every 20th Action' , 'et_builder' ),
'30' => esc_html__( 'After Every 30th Action' , 'et_builder' ),
'40' => esc_html__( 'After Every 40th Action' , 'et_builder' ),
'page_creation_flow' => array(
'options' => et_builder_page_creation_settings(),
'quick_actions_always_start_with' => array(
'quick_actions_show_recent_queries' => array(
'quick_actions_recent_queries' => array(