You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
512 lines
18 KiB
PHP
512 lines
18 KiB
PHP
<?php
|
|
class ET_Builder_Module_Settings_Migration_OptionsHarmony extends ET_Builder_Module_Settings_Migration {
|
|
|
|
public $version = '3.0.74';
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
|
|
self::$_bb_excluded_name_changes[] = 'text_orientation';
|
|
}
|
|
|
|
public function get_fields() {
|
|
return array(
|
|
'parallax' => array(
|
|
'affected_fields' => array(
|
|
'parallax_effect' => $this->get_modules( 'post_title' ),
|
|
),
|
|
),
|
|
'parallax_method' => array(
|
|
'affected_fields' => array(
|
|
'parallax_effect' => $this->get_modules( 'post_title' ),
|
|
'parallax_method' => $this->get_modules( 'slide' ),
|
|
),
|
|
'values' => array(
|
|
'off' => 'on',
|
|
'on' => 'off',
|
|
),
|
|
),
|
|
'background_color' => array(
|
|
'affected_fields' => array(
|
|
'module_bg_color' => $this->get_modules( 'post_title' ),
|
|
'field_bg' => $this->get_modules( 'search' ),
|
|
'bg_color' => $this->get_modules( 'social_media_follow_network' ),
|
|
'transparent_background' => $this->get_modules( 'section' ),
|
|
'transparent_background_fb' => $this->get_modules( 'section' ),
|
|
),
|
|
),
|
|
'custom_padding' => array(
|
|
'affected_fields' => array(
|
|
'bar_top_padding' => $this->get_modules( 'bar_counters' ),
|
|
'bar_bottom_padding' => $this->get_modules( 'bar_counters' ),
|
|
'top_padding' => $this->get_modules( 'slider' ),
|
|
'bottom_padding' => $this->get_modules( 'slider' ),
|
|
'custom_padding' => $this->get_modules( 'section' ),
|
|
),
|
|
),
|
|
'custom_padding_tablet' => array(
|
|
'affected_fields' => array(
|
|
'bar_top_padding_tablet' => $this->get_modules( 'bar_counters' ),
|
|
'bar_bottom_padding_tablet' => $this->get_modules( 'bar_counters' ),
|
|
'top_padding_tablet' => $this->get_modules( 'slider' ),
|
|
'bottom_padding_tablet' => $this->get_modules( 'slider' ),
|
|
'padding_mobile' => $this->get_modules( 'section' ),
|
|
),
|
|
),
|
|
'custom_padding_phone' => array(
|
|
'affected_fields' => array(
|
|
'bar_top_padding_phone' => $this->get_modules( 'bar_counters' ),
|
|
'bar_bottom_padding_phone' => $this->get_modules( 'bar_counters' ),
|
|
'top_padding_phone' => $this->get_modules( 'slider' ),
|
|
'bottom_padding_phone' => $this->get_modules( 'slider' ),
|
|
),
|
|
),
|
|
'custom_padding_last_edited' => array(
|
|
'affected_fields' => array(
|
|
'bar_top_padding_last_edited' => $this->get_modules( 'bar_counters' ),
|
|
'bar_bottom_padding_last_edited' => $this->get_modules( 'bar_counters' ),
|
|
'top_padding_last_edited' => $this->get_modules( 'slider' ),
|
|
'bottom_padding_last_edited' => $this->get_modules( 'slider' ),
|
|
'padding_mobile' => $this->get_modules( 'section' ),
|
|
),
|
|
),
|
|
'background_video_mp4' => array(
|
|
'affected_fields' => array(
|
|
'video_bg_mp4' => $this->get_modules( 'slide' ),
|
|
),
|
|
),
|
|
'background_video_webm' => array(
|
|
'affected_fields' => array(
|
|
'video_bg_webm' => $this->get_modules( 'slide' ),
|
|
),
|
|
),
|
|
'background_video_width' => array(
|
|
'affected_fields' => array(
|
|
'video_bg_width' => $this->get_modules( 'slide' ),
|
|
),
|
|
),
|
|
'background_video_height' => array(
|
|
'affected_fields' => array(
|
|
'video_bg_height' => $this->get_modules( 'slide' ),
|
|
),
|
|
),
|
|
'disabled_on' => array(
|
|
'affected_fields' => array(
|
|
'hide_on_mobile' => $this->get_modules( 'divider' ),
|
|
),
|
|
),
|
|
'show_prev' => array(
|
|
'affected_fields' => array(
|
|
'hide_prev' => $this->get_modules( 'post_nav' ),
|
|
),
|
|
),
|
|
'show_next' => array(
|
|
'affected_fields' => array(
|
|
'hide_next' => $this->get_modules( 'post_nav' ),
|
|
),
|
|
),
|
|
'show_inner_shadow' => array(
|
|
'affected_fields' => array(
|
|
'remove_inner_shadow' => $this->get_modules( 'slider' ),
|
|
),
|
|
),
|
|
'show_featured_drop_shadow' => array(
|
|
'affected_fields' => array(
|
|
'remove_featured_drop_shadow' => $this->get_modules( 'pricing_table' ),
|
|
),
|
|
),
|
|
'show_button' => array(
|
|
'affected_fields' => array(
|
|
'hide_button' => $this->get_modules( 'search' ),
|
|
),
|
|
),
|
|
'show_border' => array(
|
|
'affected_fields' => array(
|
|
'remove_border' => $this->get_modules( 'sidebar' ),
|
|
),
|
|
),
|
|
'show_image_overlay' => array(
|
|
'affected_fields' => array(
|
|
'show_image_overlay' => $this->get_modules( 'video_slider' ),
|
|
),
|
|
),
|
|
'show_content_on_mobile' => array(
|
|
'affected_fields' => array(
|
|
'hide_content_on_mobile' => $this->get_modules( 'slider' ),
|
|
),
|
|
),
|
|
'show_cta_on_mobile' => array(
|
|
'affected_fields' => array(
|
|
'hide_cta_on_mobile' => $this->get_modules( 'slider' ),
|
|
),
|
|
),
|
|
'show_bottom_space' => array(
|
|
'affected_fields' => array(
|
|
'sticky' => $this->get_modules( 'image' ),
|
|
),
|
|
),
|
|
'image_max_width' => array(
|
|
'affected_fields' => array(
|
|
'max_width' => $this->get_modules( 'blurb' ),
|
|
),
|
|
),
|
|
'content_max_width' => array(
|
|
'affected_fields' => array(
|
|
'max_width' => $this->get_modules( 'fullwidth_header' ),
|
|
),
|
|
),
|
|
'max_width' => array(
|
|
'affected_fields' => array(
|
|
'max_width' => $this->get_modules( 'reset_max_width' ),
|
|
),
|
|
),
|
|
'title_text_color' => array(
|
|
'affected_fields' => array(
|
|
'label_color' => $this->get_modules( 'bar_counter' ),
|
|
),
|
|
),
|
|
'percent_text_color' => array(
|
|
'affected_fields' => array(
|
|
'percentage_color' => $this->get_modules( 'bar_counter' ),
|
|
),
|
|
),
|
|
'module_alignment' => array(
|
|
'affected_fields' => array(
|
|
'text_orientation' => $this->get_modules( 'text_orientation' ),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
public function get_modules( $attr = '' ) {
|
|
$modules = array();
|
|
// Section
|
|
if ( in_array( $attr, array( '', 'section' ) ) ) {
|
|
$modules[] = 'et_pb_section';
|
|
}
|
|
|
|
// Post title & Fullwidth post title migration settings
|
|
if ( in_array( $attr, array( '', 'post_title' ) ) ) {
|
|
$modules[] = 'et_pb_post_title';
|
|
$modules[] = 'et_pb_fullwidth_post_title';
|
|
}
|
|
|
|
// Blurb migration setting
|
|
if ( in_array( $attr, array( '', 'blurb' ) ) ) {
|
|
$modules[] = 'et_pb_blurb';
|
|
}
|
|
|
|
// Fullwidth Header
|
|
if ( in_array( $attr, array( '', 'fullwidth_header' ) ) ) {
|
|
$modules[] = 'et_pb_fullwidth_header';
|
|
}
|
|
|
|
if ( 'reset_max_width' === $attr ) {
|
|
$modules[] = 'et_pb_blurb';
|
|
$modules[] = 'et_pb_fullwidth_header';
|
|
}
|
|
|
|
if ( in_array( $attr, array( '', 'text_orientation' ) ) ) {
|
|
$modules[] = 'et_pb_text';
|
|
$modules[] = 'et_pb_search';
|
|
}
|
|
|
|
// Social media follow item migration settings
|
|
if ( in_array( $attr, array( '', 'social_media_follow_network' ) ) ) {
|
|
$modules[] = 'et_pb_social_media_follow_network';
|
|
}
|
|
|
|
// Bar Counters
|
|
if ( in_array( $attr, array( '', 'bar_counters' ) ) ) {
|
|
$modules[] = 'et_pb_counters';
|
|
}
|
|
|
|
// Bar Counter Item
|
|
if ( in_array( $attr, array( '', 'bar_counter' ) ) ) {
|
|
$modules[] = 'et_pb_counter';
|
|
}
|
|
|
|
// Slider
|
|
if ( in_array( $attr, array( '', 'slider' ) ) ) {
|
|
$modules[] = 'et_pb_post_slider';
|
|
$modules[] = 'et_pb_fullwidth_post_slider';
|
|
$modules[] = 'et_pb_slider';
|
|
$modules[] = 'et_pb_fullwidth_slider';
|
|
}
|
|
|
|
// Slide Item
|
|
if ( in_array( $attr, array( '', 'slide' ) ) ) {
|
|
$modules[] = 'et_pb_slide';
|
|
}
|
|
|
|
// Divider
|
|
if ( in_array( $attr, array( '', 'divider' ) ) ) {
|
|
$modules[] = 'et_pb_divider';
|
|
}
|
|
|
|
// Post Nav
|
|
if ( in_array( $attr, array( '', 'post_nav' ) ) ) {
|
|
$modules[] = 'et_pb_post_nav';
|
|
}
|
|
|
|
// Pricing Tables
|
|
if ( in_array( $attr, array( '', 'pricing_table' ) ) ) {
|
|
$modules[] = 'et_pb_pricing_tables';
|
|
}
|
|
|
|
// Search
|
|
if ( in_array( $attr, array( '', 'search' ) ) ) {
|
|
$modules[] = 'et_pb_search';
|
|
}
|
|
|
|
// Sidebar
|
|
if ( in_array( $attr, array( '', 'sidebar' ) ) ) {
|
|
$modules[] = 'et_pb_sidebar';
|
|
}
|
|
|
|
// Video Slider
|
|
if ( in_array( $attr, array( '', 'video_slider' ) ) ) {
|
|
$modules[] = 'et_pb_video_slider';
|
|
}
|
|
|
|
// Image
|
|
if ( in_array( $attr, array( '', 'image' ) ) ) {
|
|
$modules[] = 'et_pb_image';
|
|
}
|
|
|
|
return $modules;
|
|
}
|
|
|
|
public function migrate_spacing( $current_value, $saved_value, $location, $saved_field_name = '', $module_slug = '' ) {
|
|
$locations = array( 'top', 'right', 'bottom', 'left' );
|
|
$location_index = array_search( $location, $locations );
|
|
$spacings = array( '', '', '', '' );
|
|
|
|
if ( -1 === $location_index ) {
|
|
return $current_value;
|
|
}
|
|
|
|
if ( '' !== $saved_value ) {
|
|
$spacings = explode( '|', $saved_value );
|
|
$spacings[ $location_index ] = $saved_value;
|
|
}
|
|
|
|
$spacings[ $location_index ] = $current_value;
|
|
|
|
// Automatically add zero pixel to padding-right & padding-left of slider & post slider if custom top/bottom padding exist
|
|
if ( '' !== $current_value && in_array( $saved_field_name, array( 'top_padding', 'bottom_padding' ) ) && in_array( $module_slug, array( 'et_pb_slider', 'et_pb_post_slider' ) ) ) {
|
|
$spacings[1] = '0px';
|
|
$spacings[3] = '0px';
|
|
}
|
|
|
|
return implode( '|', $spacings );
|
|
}
|
|
|
|
/**
|
|
* Re-map value to new value. Originally add to reverse yes/no button value due to option migration
|
|
*
|
|
* @param string saved value
|
|
* @param array map of value, expected mapped value in key-value relationship
|
|
* @param string default value
|
|
* @return string mapped value
|
|
*/
|
|
public function migrate_remap_value( $value, $map = array(), $default = 'on' ) {
|
|
$map = wp_parse_args(
|
|
$map,
|
|
array(
|
|
'' => 'on',
|
|
'off' => 'on',
|
|
'on' => 'off',
|
|
)
|
|
);
|
|
|
|
return isset( $map[ $value ] ) ? $map[ $value ] : $default;
|
|
}
|
|
|
|
public function migrate( $field_name, $current_value, $module_slug, $saved_value, $saved_field_name, $attrs, $content, $module_address ) {
|
|
// Padding top & bottom migration to full paddings
|
|
if ( in_array( $module_slug, array( 'et_pb_counters', 'et_pb_post_slider', 'et_pb_fullwidth_post_slider', 'et_pb_slider', 'et_pb_fullwidth_slider' ) ) ) {
|
|
|
|
$top_padding_selectors = array(
|
|
'bar_top_padding',
|
|
'bar_top_padding_tablet',
|
|
'bar_top_padding_phone',
|
|
'top_padding',
|
|
'top_padding_tablet',
|
|
'top_padding_phone',
|
|
);
|
|
|
|
if ( in_array( $saved_field_name, $top_padding_selectors ) ) {
|
|
return $this->migrate_spacing( $current_value, $saved_value, 'top', $saved_field_name, $module_slug );
|
|
}
|
|
|
|
$bottom_padding_selectors = array(
|
|
'bar_bottom_padding',
|
|
'bar_bottom_padding_tablet',
|
|
'bar_bottom_padding_phone',
|
|
'bottom_padding',
|
|
'bottom_padding_tablet',
|
|
'bottom_padding_phone',
|
|
);
|
|
|
|
if ( in_array( $saved_field_name, $bottom_padding_selectors ) ) {
|
|
return $this->migrate_spacing( $current_value, $saved_value, 'bottom', $saved_field_name, $module_slug );
|
|
}
|
|
|
|
if ( in_array( $saved_field_name, array( 'bar_top_padding_last_edited', 'bar_bottom_padding_last_edited' ) ) ) {
|
|
$last_edited_current_value = '' === $current_value ? array( '', '' ) : explode( '|', $current_value );
|
|
$last_edited_saved_value = '' === $saved_value ? array( '', '' ) : explode( '|', $saved_value );
|
|
$last_edited_responsive = in_array( 'on', array( $last_edited_current_value[0], $last_edited_saved_value[0] ) ) ? 'on' : 'off';
|
|
$last_edited_tabs = array_filter( array( $last_edited_current_value[1], $last_edited_saved_value[1] ) );
|
|
$last_edited_tab = empty( $last_edited_tabs ) ? 'desktop' : end( $last_edited_tabs );
|
|
|
|
return "{$last_edited_responsive}|{$last_edited_tab}";
|
|
}
|
|
}
|
|
|
|
// Section's padding related migration
|
|
if ( 'et_pb_section' === $module_slug ) {
|
|
|
|
// Migrating two side paddings (prior to Divi v2.4) into full paddings
|
|
if ( 'custom_padding' === $field_name && 'custom_padding' === $saved_field_name ) {
|
|
$padding_sides = explode( '|', $current_value );
|
|
|
|
if ( 2 === count( $padding_sides ) ) {
|
|
$full_padding_sides = array(
|
|
$padding_sides[0],
|
|
'',
|
|
$padding_sides[1],
|
|
'',
|
|
);
|
|
|
|
return implode( '|', $full_padding_sides );
|
|
}
|
|
}
|
|
|
|
// Translating "Keep padding on mobile" options into *_last_edited value
|
|
if ( 'custom_padding_last_edited' === $field_name && 'padding_mobile' === $saved_field_name ) {
|
|
|
|
if ( 'off' === $current_value && '' === $saved_value ) {
|
|
return 'on|desktop';
|
|
}
|
|
|
|
return $saved_value;
|
|
}
|
|
|
|
// Translating "Keep padding on mobile" options into custom_padding_tablet value
|
|
if ( 'custom_padding_tablet' === $field_name && 'padding_mobile' === $saved_field_name ) {
|
|
// Keep padding on mobile is disabled
|
|
if ( '' === $saved_value && 'off' === $current_value ) {
|
|
return '50px|0|50px|0';
|
|
}
|
|
|
|
// Keep padding on mobile is enabled and custom padding is defined. If no custom_padding value is defined,
|
|
// the value is expected to be empty string, which makes letting $saved_value to be returned is ok
|
|
if ( '' === $saved_value && 'on' === $current_value && isset( $attrs['custom_padding'] ) ) {
|
|
return $attrs['custom_padding'];
|
|
}
|
|
|
|
return $saved_value;
|
|
}
|
|
|
|
// Translating transparent_background into background_color
|
|
if ( 'background_color' === $field_name && in_array( $saved_field_name, array( 'transparent_background', 'transparent_background_fb' ) ) ) {
|
|
// Transparent is default for Builder Plugin, but not for theme
|
|
if ( 'on' === $current_value || ( et_is_builder_plugin_active() && 'default' === $current_value ) ) {
|
|
return 'rgba(255,255,255,0)';
|
|
} else {
|
|
return $saved_value;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Divider's hide_on_mobile migration
|
|
if ( 'et_pb_divider' === $module_slug && 'disabled_on' === $field_name ) {
|
|
// Set disabled_on if it is previously empty and hide_on_mobile is empty / on (its default value is on)
|
|
if ( in_array( $current_value, array( '', 'on' ) ) && '' === $saved_value ) {
|
|
return 'on|on|off';
|
|
}
|
|
|
|
// Translate hide_on_mobile into disabled_on if hide_on_mobile is empty / on and saved_value isn't empty
|
|
if ( in_array( $current_value, array( '', 'on' ) ) && '' !== $saved_value ) {
|
|
$disabled_on_array = explode( '|', $saved_value );
|
|
$disabled_on_array[0] = 'on';
|
|
$disabled_on_array[1] = 'on';
|
|
|
|
return implode( '|', $disabled_on_array );
|
|
}
|
|
|
|
// Otherwise, return saved value
|
|
return $saved_value;
|
|
}
|
|
|
|
if ( 'parallax_method' === $field_name ) {
|
|
// Reverse post title and fullwidth post title's parallax_method value because its previous select option values (on = CSS, off = True)
|
|
// were reversed compared to background UI's parallax_method select options values (on = True, off = CSS)
|
|
if ( in_array( $module_slug, $this->get_modules( 'post_title' ) ) && isset( $this->fields[ $field_name ] ) && isset( $this->fields[ $field_name ]['values'][ $saved_value ] ) ) {
|
|
return $this->fields[ $field_name ]['values'][ $saved_value ];
|
|
}
|
|
|
|
// Previous version of slide item has parallax_method options order reversed which causing CSS Parallax can't be rendered.
|
|
// If the attribute has been saved, it will be rendered just fine
|
|
// $saved_value reflects the correct value, now it inherits value from Slider / Fullwidth Slider module
|
|
if ( in_array( $module_slug, $this->get_modules( 'slide' ) ) && '' === $current_value ) {
|
|
return $saved_value;
|
|
}
|
|
}
|
|
|
|
// Normalizing video slider's display image overlay's hide/show & select-based field into yes_no_button + on/off-based option
|
|
if ( 'et_pb_video_slider' === $module_slug && 'show_image_overlay' === $field_name ) {
|
|
return $this->migrate_remap_value(
|
|
$current_value,
|
|
array(
|
|
'hide' => 'off',
|
|
'show' => 'on',
|
|
'' => 'off',
|
|
),
|
|
'off'
|
|
);
|
|
}
|
|
|
|
// Search's input background migration
|
|
if ( 'et_pb_search' === $module_slug && 'background_color' === $field_name ) {
|
|
if ( '' !== $saved_value && '' === $current_value ) {
|
|
return $saved_value;
|
|
}
|
|
}
|
|
|
|
// Only Text & Search module's text_orientation = center that is being migrated to each module's module_alignment attribute
|
|
// If module's text_orientation has different value, let it be. This is needed because on previous version, .et_pb_text_align_center class
|
|
// set text-align: center; AND margin: 0 auto; margin: 0 auto; belongs to module alignment now, hence the migration
|
|
if ( in_array( $module_slug, $this->get_modules( 'text_orientation' ) ) && 'text_orientation' === $saved_field_name && 'module_alignment' === $field_name ) {
|
|
if ( 'center' === $current_value && '' === $saved_value ) {
|
|
return $current_value;
|
|
}
|
|
|
|
return $saved_value;
|
|
}
|
|
|
|
// Normalizing "remove_*" & "hide_*" option, to ensure that "Yes" === "Show".
|
|
// saved value needs to be reversed / remapped, off == on, vice versa
|
|
$is_slider_remove = in_array( $module_slug, $this->get_modules( 'slider' ) ) && in_array( $saved_field_name, array( 'remove_inner_shadow', 'hide_content_on_mobile', 'hide_cta_on_mobile' ) );
|
|
$is_post_nav_hides = 'et_pb_post_nav' === $module_slug && in_array( $saved_field_name, array( 'hide_prev', 'hide_next' ) );
|
|
$is_pricing_tables_remove = 'et_pb_pricing_tables' === $module_slug && in_array( $saved_field_name, array( 'remove_featured_drop_shadow' ) );
|
|
$is_search_hide = 'et_pb_search' === $module_slug && in_array( $saved_field_name, array( 'hide_button' ) );
|
|
$is_sidebar_remove = 'et_pb_sidebar' === $module_slug && in_array( $saved_field_name, array( 'remove_border' ) );
|
|
$is_image_sticky = 'et_pb_image' === $module_slug && in_array( $saved_field_name, array( 'sticky' ) );
|
|
|
|
if ( $is_slider_remove || $is_post_nav_hides || $is_pricing_tables_remove || $is_search_hide || $is_sidebar_remove || $is_image_sticky ) {
|
|
return $this->migrate_remap_value( $current_value );
|
|
}
|
|
|
|
// Blurb's max_width needs to be removed, since older max_width is new image_max_width
|
|
if ( in_array( $module_slug, $this->get_modules( 'reset_max_width' ) ) && 'max_width' === $field_name && 'max_width' === $saved_field_name ) {
|
|
return '';
|
|
}
|
|
|
|
return $current_value;
|
|
}
|
|
}
|
|
|
|
return new ET_Builder_Module_Settings_Migration_OptionsHarmony();
|