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.

319 lines
10 KiB
PHP

<?php
/**
* ET_Builder_Module_Settings_Migration_BackgroundGradientOverlaysImage.
*
* @package Divi
* @subpackage Builder
* @since 4.15.0
*/
/**
* Migrate Background Color Gradient Overlays Image option to 'off' based on condition.
*
* This migration will check three existing settings, and update as following:
*
* OLD:
* - use_background_color_gradient: on
* - background_color_gradient_overlays_image: on
* - parallax: on
*
* NEW:
* - background_color_gradient_overlays_image: off
*
* @package Divi
* @subpackage Builder/Migration
* @since 4.15.0
*/
/**
* Background Gradient Overlays Image migrations class.
*/
class ET_Builder_Module_Settings_Migration_BackgroundGradientOverlaysImage extends ET_Builder_Module_Settings_Migration {
/**
* The Divi release where this migration was introduced.
*
* @var string
*
* @since 4.15.0
*/
public $version = '4.15';
/**
* Array of modules to inspect for settings to migrate.
*
* Pass attribute and it will return selected modules only. Default return all affected modules.
*
* @param string $attr Attribute name.
*
* @return array
*
* @since 4.15.0
*/
public function get_modules( $attr = '' ) {
$modules = array();
// Background.
if ( in_array( $attr, array( '', 'module_bg' ), true ) ) {
// Structure Elements.
$modules[] = 'et_pb_column_inner';
$modules[] = 'et_pb_column_specialty';
$modules[] = 'et_pb_column';
$modules[] = 'et_pb_section_fullwidth';
$modules[] = 'et_pb_section_specialty';
$modules[] = 'et_pb_section';
$modules[] = 'et_pb_row_inner';
$modules[] = 'et_pb_row';
// Divi Content Modules.
$modules[] = 'et_pb_accordion_item';
$modules[] = 'et_pb_accordion';
$modules[] = 'et_pb_audio';
$modules[] = 'et_pb_blog';
$modules[] = 'et_pb_blurb';
$modules[] = 'et_pb_circle_counter';
$modules[] = 'et_pb_code';
$modules[] = 'et_pb_comments';
$modules[] = 'et_pb_contact_field';
$modules[] = 'et_pb_contact_form';
$modules[] = 'et_pb_countdown_timer';
$modules[] = 'et_pb_counter';
$modules[] = 'et_pb_counters';
$modules[] = 'et_pb_cta';
$modules[] = 'et_pb_divider';
$modules[] = 'et_pb_filterable_portfolio';
$modules[] = 'et_pb_gallery';
$modules[] = 'et_pb_image';
$modules[] = 'et_pb_login';
$modules[] = 'et_pb_map';
$modules[] = 'et_pb_menu';
$modules[] = 'et_pb_number_counter';
$modules[] = 'et_pb_portfolio';
$modules[] = 'et_pb_post_content';
$modules[] = 'et_pb_post_nav';
$modules[] = 'et_pb_post_slider';
$modules[] = 'et_pb_post_title';
$modules[] = 'et_pb_pricing_table';
$modules[] = 'et_pb_pricing_tables';
$modules[] = 'et_pb_search';
$modules[] = 'et_pb_shop';
$modules[] = 'et_pb_sidebar';
$modules[] = 'et_pb_signup_custom_field';
$modules[] = 'et_pb_signup';
$modules[] = 'et_pb_slide_fullwidth';
$modules[] = 'et_pb_slide';
$modules[] = 'et_pb_slider';
$modules[] = 'et_pb_social_media_follow';
$modules[] = 'et_pb_tab';
$modules[] = 'et_pb_tabs';
$modules[] = 'et_pb_team_member';
$modules[] = 'et_pb_testimonial';
$modules[] = 'et_pb_text';
$modules[] = 'et_pb_toggle';
$modules[] = 'et_pb_video_slider';
$modules[] = 'et_pb_video';
$modules[] = 'et_pb_fullwidth_code';
$modules[] = 'et_pb_fullwidth_header';
$modules[] = 'et_pb_fullwidth_image';
$modules[] = 'et_pb_fullwidth_map';
$modules[] = 'et_pb_fullwidth_menu';
$modules[] = 'et_pb_fullwidth_portfolio';
$modules[] = 'et_pb_fullwidth_post_content';
$modules[] = 'et_pb_fullwidth_post_slider';
$modules[] = 'et_pb_fullwidth_post_title';
$modules[] = 'et_pb_fullwidth_slider';
// WooCommerce Modules.
$modules[] = 'et_pb_wc_add_to_cart';
$modules[] = 'et_pb_wc_additional_info';
$modules[] = 'et_pb_wc_breadcrumb';
$modules[] = 'et_pb_wc_cart_notice';
$modules[] = 'et_pb_wc_description';
$modules[] = 'et_pb_wc_gallery';
$modules[] = 'et_pb_wc_images';
$modules[] = 'et_pb_wc_meta';
$modules[] = 'et_pb_wc_price';
$modules[] = 'et_pb_wc_rating';
$modules[] = 'et_pb_wc_related_products';
$modules[] = 'et_pb_wc_reviews';
$modules[] = 'et_pb_wc_stock';
$modules[] = 'et_pb_wc_tabs';
$modules[] = 'et_pb_wc_title';
$modules[] = 'et_pb_wc_upsells';
}
return $modules;
}
/**
* Get fields that are affected by this migration.
*
* @return array
*
* @since 4.15.0
*/
public function get_fields() {
return array(
'background_color_gradient_overlays_image' => array(
'affected_fields' => array(
'background_color_gradient_overlays_image' => $this->get_modules( 'module_bg' ),
),
),
'background_color_gradient_overlays_image_tablet' => array(
'affected_fields' => array(
'background_color_gradient_overlays_image_tablet' => $this->get_modules( 'module_bg' ),
),
),
'background_color_gradient_overlays_image_phone' => array(
'affected_fields' => array(
'background_color_gradient_overlays_image_phone' => $this->get_modules( 'module_bg' ),
),
),
'background_color_gradient_overlays_image__hover' => array(
'affected_fields' => array(
'background_color_gradient_overlays_image__hover' => $this->get_modules( 'module_bg' ),
),
),
'background_color_gradient_overlays_image__sticky' => array(
'affected_fields' => array(
'background_color_gradient_overlays_image__sticky' => $this->get_modules( 'module_bg' ),
),
),
);
}
/**
* Migrate.
*
* @param string $to_field_name This migration's target field.
* @param string|array $affected_field_value Affected field reference value.
* @param string|number $module_slug Current module type.
* @param string $to_field_value Migration target's current value.
* @param string $affected_field_name Affected field attribute name.
* @param array $module_attrs Current module's full attributes.
* @param string $module_content Current module's content.
* @param string|number $module_address Current module's address.
*
* @return string
*
* @since 4.15.0
*/
public function migrate(
$to_field_name,
$affected_field_value,
$module_slug,
$to_field_value,
$affected_field_name,
$module_attrs,
$module_content,
$module_address
) {
// Early exit if affected field ("Use Gradient" or "Parallax") is not "on".
if ( 'on' !== $affected_field_value ) {
return $affected_field_value;
}
$default_settings = array(
'use_gradient' => 'off',
'overlays_image' => ET_Global_Settings::get_value( 'all_background_gradient_overlays_image' ),
'parallax' => 'off',
);
$old_values = $default_settings;
// Collect the old settings.
switch ( $affected_field_name ) {
// Desktop View.
case 'background_color_gradient_overlays_image':
if ( ! isset( $module_attrs[ $affected_field_name ] ) ) {
return $affected_field_value;
} else {
$old_values['use_gradient'] = $this->_get_attr_value( 'use_background_color_gradient', $module_attrs );
$old_values['overlays_image'] = $this->_get_attr_value( 'background_color_gradient_overlays_image', $module_attrs );
$old_values['parallax'] = $this->_get_attr_value( 'parallax', $module_attrs );
}
break;
// Tablet View.
case 'background_color_gradient_overlays_image_tablet':
if ( ! isset( $module_attrs[ $affected_field_name ] ) ) {
return $affected_field_value;
} else {
$old_values['use_gradient'] = $this->_get_attr_value( 'use_background_color_gradient_tablet', $module_attrs );
$old_values['overlays_image'] = $this->_get_attr_value( 'background_color_gradient_overlays_image_tablet', $module_attrs );
$old_values['parallax'] = $this->_get_attr_value( 'parallax_tablet', $module_attrs );
}
break;
// Phone View.
case 'background_color_gradient_overlays_image_phone':
if ( ! isset( $module_attrs[ $affected_field_name ] ) ) {
return $affected_field_value;
} else {
$old_values['use_gradient'] = $this->_get_attr_value( 'use_background_color_gradient_phone', $module_attrs );
$old_values['overlays_image'] = $this->_get_attr_value( 'background_color_gradient_overlays_image_phone', $module_attrs );
$old_values['parallax'] = $this->_get_attr_value( 'parallax_phone', $module_attrs );
}
break;
// Hover Mode.
case 'background_color_gradient_overlays_image__hover':
if ( ! isset( $module_attrs[ $affected_field_name ] ) ) {
return $affected_field_value;
} else {
$old_values['use_gradient'] = $this->_get_attr_value( 'use_background_color_gradient__hover', $module_attrs );
$old_values['overlays_image'] = $this->_get_attr_value( 'background_color_gradient_overlays_image__hover', $module_attrs );
$old_values['parallax'] = $this->_get_attr_value( 'parallax__hover', $module_attrs );
}
break;
// Sticky Mode.
case 'background_color_gradient_overlays_image__sticky':
if ( ! isset( $module_attrs[ $affected_field_name ] ) ) {
return $affected_field_value;
} else {
$old_values['use_gradient'] = $this->_get_attr_value( 'use_background_color_gradient__sticky', $module_attrs );
$old_values['overlays_image'] = $this->_get_attr_value( 'background_color_gradient_overlays_image__sticky', $module_attrs );
$old_values['parallax'] = $this->_get_attr_value( 'parallax__sticky', $module_attrs );
}
break;
default:
return $affected_field_value;
}
// If overlays_image aren't defined, pull in global default settings.
if ( empty( $old_values['use_gradient'] ) ) {
$old_values['use_gradient'] = $default_settings['use_gradient'];
}
if ( empty( $old_values['overlays_image'] ) ) {
$old_values['overlays_image'] = $default_settings['overlays_image'];
}
if ( empty( $old_values['parallax'] ) ) {
$old_values['parallax'] = $default_settings['parallax'];
}
// New value for overlays_image.
return 'on' === $old_values['use_gradient'] && 'on' === $old_values['overlays_image'] && 'on' === $old_values['parallax']
? 'off' : $affected_field_value;
}
/**
* Get attributes value by field_name.
*
* @param string $field_name Field name.
* @param array $module_attrs Module's full attributes.
*
* @return string
*/
private function _get_attr_value( $field_name, $module_attrs ) {
if ( array_key_exists( $field_name, $module_attrs ) ) {
return $module_attrs[ $field_name ];
}
return '';
}
}
return new ET_Builder_Module_Settings_Migration_BackgroundGradientOverlaysImage();