array(), 'top_center' => array(), 'top_right' => array(), 'middle_left' => array(), 'middle_center' => array(), 'middle_right' => array(), 'bottom_left' => array(), 'bottom_center' => array(), 'bottom_right' => array(), 'hidden' => array(), ); if ( $state != 'default' AND isset( $us_header_settings['default']['layout'] ) AND is_array( $us_header_settings['default']['layout'] ) ) { $layout = array_merge( $layout, $us_header_settings['default']['layout'] ); } if ( isset( $us_header_settings[ $state ]['layout'] ) AND is_array( $us_header_settings[ $state ]['layout'] ) ) { $layout = array_merge( $layout, $us_header_settings[ $state ]['layout'] ); } return $layout; } /** * Load the current header settings for all possible responsive states */ function us_load_header_settings_once() { global $us_header_settings; if ( isset( $us_header_settings ) ) { return; } // Basic structure $us_header_settings = array( 'default' => array( 'options' => array(), 'layout' => array() ), 'tablets' => array( 'options' => array(), 'layout' => array() ), 'mobiles' => array( 'options' => array(), 'layout' => array() ), 'data' => array(), ); $us_header_settings = apply_filters( 'us_load_header_settings', $us_header_settings ); } /** * Translating the v.2 USOF header settings to v.3 header-builder compatible ones */ add_filter( 'us_load_header_settings', 'us_load_usof_header_settings' ); function us_load_usof_header_settings( $header_settings ) { global $usof_options; usof_load_options_once(); // Side options defaults from theme-options.php config $side_options_config = us_config( 'header-settings.options', array() ); foreach ( $side_options_config as $section_name => $section_options ) { foreach ( $section_options as $field_name => $field ) { $field_value = isset( $field['std'] ) ? $field['std'] : ''; $header_settings['default']['options'][ $field_name ] = $field_value; $header_settings['tablets']['options'][ $field_name ] = $field_value; $header_settings['mobiles']['options'][ $field_name ] = $field_value; } } // Layout-defined values $header_templates = us_config( 'header-templates', array() ); if ( isset( $usof_options['header_layout'] ) AND isset( $header_templates[ $usof_options['header_layout'] ] ) ) { $header_template = us_fix_header_template_settings( $header_templates[ $usof_options['header_layout'] ] ); $header_settings = us_array_merge( $header_settings, $header_template ); } // Filling elements' data with default values $header_settings = us_fix_header_settings( $header_settings ); // Side options $rules = array( 'header_transparent' => array( 'new_name' => 'transparent', ), 'header_fullwidth' => array( 'new_names' => array( 'top_fullwidth', 'middle_fullwidth', 'bottom_fullwidth' ), ), 'header_top_height' => array( 'new_name' => 'top_height', ), 'header_top_sticky_height' => array( 'new_name' => 'top_sticky_height', ), 'header_middle_height' => array( 'new_name' => 'middle_height', ), 'header_middle_sticky_height' => array( 'new_name' => 'middle_sticky_height', ), 'header_bottom_height' => array( 'new_name' => 'bottom_height', ), 'header_bottom_sticky_height' => array( 'new_name' => 'bottom_sticky_height', ), 'header_main_width' => array( 'new_name' => 'width', ), ); foreach ( $rules as $old_name => $rule ) { if ( ! isset( $usof_options[ $old_name ] ) AND ( isset( $rule['new_name'] ) OR isset( $rule['new_names'] ) ) ) { continue; } if ( isset( $rule['transfer_if'] ) AND ! usof_execute_show_if( $rule['transfer_if'], $usof_options ) ) { continue; } $new_names = isset( $rule['new_names'] ) ? $rule['new_names'] : array( $rule['new_name'] ); foreach ( $new_names as $new_name ) { $header_settings['default']['options'][ $new_name ] = $usof_options[ $old_name ]; } } // header_sticky => sticky if ( isset( $usof_options['header_sticky'] ) ) { if ( is_array( $usof_options['header_sticky'] ) ) { foreach ( array( 'default', 'tablets', 'mobiles' ) as $layout ) { $header_settings[ $layout ]['options']['sticky'] = in_array( $layout, $usof_options['header_sticky'] ); } } else { $header_settings['default']['options']['sticky'] = $usof_options['header_sticky']; $header_settings['tablets']['options']['sticky'] = $usof_options['header_sticky']; $header_settings['mobiles']['options']['sticky'] = $usof_options['header_sticky']; } } // Transferring elements' values $rules = array( 'image:1' => array( 'show_if' => array( 'logo_type', '=', 'img' ), 'values' => array( 'img' => '=logo_image', 'link' => array( 'url' => '/' ), 'height' => '=logo_height', 'height_tablets' => '=logo_height_tablets', 'height_mobiles' => '=logo_height_mobiles', 'height_sticky' => '=logo_height_sticky', 'height_sticky_tablets' => '=logo_height_tablets', 'height_sticky_mobiles' => '=logo_height_mobiles', ), ), 'text:1' => array( 'show_if' => array( 'logo_type', '=', 'text' ), 'values' => array( 'text' => '=logo_text', 'link' => array( 'url' => '/' ), 'size' => '=logo_font_size', 'size_tablets' => '=logo_font_size_tablets', 'size_mobiles' => '=logo_font_size_mobiles', ), ), 'text:2' => array( 'show_if' => array( array( 'header_contacts_show', '=', 1 ), 'and', array( 'header_contacts_phone', '!=', '' ), ), 'values' => array( 'text' => '=header_contacts_phone', 'icon' => 'fas|phone', ), ), 'text:3' => array( 'show_if' => array( array( 'header_contacts_show', '=', 1 ), 'and', array( 'header_contacts_email', '!=', '' ), ), 'values' => array( 'text' => '=header_contacts_email', 'icon' => 'fas|envelope', ), ), 'menu:1' => array( 'values' => array( 'source' => '=menu_source', 'font_size' => '=menu_fontsize', 'indents' => '=menu_indents', 'vstretch' => '=menu_height', 'dropdown_font_size' => '=menu_sub_fontsize', 'mobile_width' => '=menu_mobile_width', 'mobile_behavior' => '=menu_togglable_type', 'mobile_font_size' => '=menu_fontsize_mobile', 'mobile_dropdown_font_size' => '=menu_sub_fontsize_mobile', ), ), 'search:1' => array( 'show_if' => array( 'header_search_show', '=', 1 ), 'values' => array( 'layout' => '=header_search_layout', ), ), 'socials:1' => array( 'values' => array( 'items' => array(), ), ), ); foreach ( $rules as $elm => $rule ) { if ( ! isset( $header_settings['data'][ $elm ] ) ) { $header_settings['data'][ $elm ] = array(); $type = strtok( $elm, ':' ); // Setting default values for fallback $elm_config = us_config( 'elements/' . $type, array() ); foreach ( $elm_config['params'] as $field_name => $field ) { $value = isset( $field['std'] ) ? $field['std'] : ''; // Some default header values may be based on main theme options' values if ( is_string( $value ) AND substr( $value, 0, 1 ) == '=' AND isset( $usof_options[ substr( $value, 1 ) ] ) ) { $value = $usof_options[ substr( $value, 1 ) ]; } $header_settings['data'][ $elm ][ $field_name ] = $value; } } // Setting values if ( isset( $rule['values'] ) AND is_array( $rule['values'] ) ) { foreach ( $rule['values'] as $key => $value ) { if ( is_string( $value ) AND substr( $value, 0, 1 ) == '=' ) { $old_key = substr( $value, 1 ); if ( ! isset( $usof_options[ $old_key ] ) ) { continue; } $value = $usof_options[ $old_key ]; } $header_settings['data'][ $elm ][ $key ] = $value; } } // Hiding the element when needed if ( isset( $rule['show_if'] ) AND ! usof_execute_show_if( $rule['show_if'], $usof_options ) ) { foreach ( array( 'default', 'tablets', 'mobiles' ) as $layout ) { foreach ( $header_settings[ $layout ]['layout'] as $cell => $cell_elms ) { if ( $cell == 'hidden' ) { continue; } if ( ( $elm_pos = array_search( $elm, $cell_elms ) ) !== FALSE ) { array_splice( $header_settings[ $layout ]['layout'][ $cell ], $elm_pos, 1 ); $header_settings[ $layout ]['layout']['hidden'][] = $elm; break; } } } } } // Logos for tablets and mobiles states if ( isset( $header_settings['data']['image:1'] ) ) { foreach ( array( 'tablets' => 'image:2', 'mobiles' => 'image:3' ) as $layout => $key ) { if ( isset( $header_settings['data'][ $key ] ) OR ! isset( $usof_options[ 'logo_image_' . $layout ] ) OR empty( $usof_options[ 'logo_image_' . $layout ] ) ) { continue; } $header_settings['data'][ $key ] = array_merge( $header_settings['data']['image:1'], array( 'img' => $usof_options[ 'logo_image_' . $layout ], 'img_transparent' => '', ) ); foreach ( $header_settings[ $layout ]['layout'] as $cell => $cell_elms ) { if ( $cell == 'hidden' ) { continue; } if ( ( $elm_pos = array_search( 'image:1', $cell_elms ) ) !== FALSE ) { $header_settings[ $layout ]['layout'][ $cell ][ $elm_pos ] = $key; $header_settings[ $layout ]['layout']['hidden'][] = 'image:1'; break; } } $header_settings['default']['layout']['hidden'][] = $key; $header_settings[ ( $layout == 'tablets' ) ? 'mobiles' : 'tablets' ]['layout']['hidden'][] = $key; } } // Fixing text links if ( isset( $header_settings['data']['text:3'] ) AND isset( $header_settings['data']['text:3']['text'] ) ) { $header_settings['data']['text:3']['link'] = 'mailto:' . $header_settings['data']['text:3']['text']; } // Inverting logo position if ( isset( $usof_options['header_invert_logo_pos'] ) AND $usof_options['header_invert_logo_pos'] ) { foreach ( array( 'default', 'tablets', 'mobiles' ) as $layout ) { if ( isset( $header_settings[ $layout ]['layout']['middle_left'] ) AND isset( $header_settings[ $layout ]['layout']['middle_left'] ) ) { $tmp = $header_settings[ $layout ]['layout']['middle_left']; $header_settings[ $layout ]['layout']['middle_left'] = $header_settings[ $layout ]['layout']['middle_right']; $header_settings[ $layout ]['layout']['middle_right'] = $tmp; } } } return $header_settings; } /** * Recursively output elements of a certain state / place * * @param array $settings Current layout * @param string $state Current state * @param string $place Outputted place * @param string $context 'header' / 'grid' */ function us_output_builder_elms( &$settings, $state, $place, $context = 'header' ) { $layout = &$settings[ $state ]['layout']; $data = &$settings['data']; if ( ! isset( $layout[ $place ] ) OR ! is_array( $layout[ $place ] ) ) { return; } // Set 3 states for header and 1 for other contexts, like Grid Layouts $_states = ( $context === 'header' ) ? array( 'default', 'tablets', 'mobiles' ) : array( 'default' ); $visible_elms = array(); foreach ( $_states as $_state ) { $visible_elms[ $_state ] = us_get_builder_shown_elements_list( us_arr_path( $settings, $_state . '.layout', array() ) ); } foreach ( $layout[ $place ] as $elm ) { $classes = ''; if ( $context === 'header' ) { if ( isset( $data[ $elm ] ) ) { if ( us_arr_path( $data[ $elm ], 'hide_for_sticky', FALSE ) ) { $classes .= ' hide-for-sticky'; } if ( us_arr_path( $data[ $elm ], 'hide_for_not_sticky', FALSE ) ) { $classes .= ' hide-for-not-sticky'; } } } foreach ( $_states as $_state ) { if ( ! in_array( $elm, $visible_elms[ $_state ] ) ) { $classes .= ' hidden_for_' . $_state; } } if ( $context === 'header' ) { $classes .= ' ush_' . str_replace( ':', '_', $elm ); } elseif ( in_array( $context, array( 'grid', 'grid_term' ) ) ) { $classes .= ' usg_' . str_replace( ':', '_', $elm ); } if ( substr( $elm, 1, 7 ) == 'wrapper' ) { // Wrapper $type = strtok( $elm, ':' ); if ( isset( $data[ $elm ] ) ) { if ( isset( $data[ $elm ]['alignment'] ) ) { $classes .= ' align_' . $data[ $elm ]['alignment']; } if ( isset( $data[ $elm ]['valign'] ) ) { $classes .= ' valign_' . $data[ $elm ]['valign']; } if ( isset( $data[ $elm ]['wrap'] ) AND $data[ $elm ]['wrap'] ) { $classes .= ' wrap'; } if ( isset( $data[ $elm ]['bg_gradient'] ) AND $data[ $elm ]['bg_gradient'] ) { $classes .= ' bg_gradient'; } if ( isset( $data[ $elm ]['el_class'] ) ) { $classes .= ' ' . $data[ $elm ]['el_class']; } } echo '