691 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			691 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						||
/**
 | 
						||
 * Icon manager migartion class.
 | 
						||
 *
 | 
						||
 * @package Divi
 | 
						||
 * @subpackage Builder
 | 
						||
 * @since ?
 | 
						||
 */
 | 
						||
 | 
						||
/**
 | 
						||
 * Migration process to handle all the changes done in Icon Manager QF.
 | 
						||
 *
 | 
						||
 * @since ?
 | 
						||
 */
 | 
						||
class ET_Builder_Module_Settings_Migration_IconManager extends ET_Builder_Module_Settings_Migration {
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Migration Version.
 | 
						||
	 *
 | 
						||
	 * @var string
 | 
						||
	 */
 | 
						||
	public $version = '4.13.0';
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Proccessing field name.
 | 
						||
	 *
 | 
						||
	 * @var string
 | 
						||
	 */
 | 
						||
	private $_field_name;
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Current field value.
 | 
						||
	 *
 | 
						||
	 * @var string
 | 
						||
	 */
 | 
						||
	private $_current_value;
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Saved field value.
 | 
						||
	 *
 | 
						||
	 * @var string
 | 
						||
	 */
 | 
						||
	private $_saved_value;
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Current field name.
 | 
						||
	 *
 | 
						||
	 * @var string
 | 
						||
	 */
 | 
						||
	private $_saved_field_name;
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Array of attributes.
 | 
						||
	 *
 | 
						||
	 * @var array
 | 
						||
	 */
 | 
						||
	private $_attrs;
 | 
						||
 | 
						||
	/**
 | 
						||
	 * All responsive modes suffixes.
 | 
						||
	 *
 | 
						||
	 * @var array
 | 
						||
	 */
 | 
						||
	private $_responsive_modes_suffixes = array( '', '_tablet', '_phone', '__hover', '__hover_enabled', '_last_edited' );
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Responsive modes.
 | 
						||
	 *
 | 
						||
	 * @var array
 | 
						||
	 */
 | 
						||
	private $_responsive_modes = array( '', '_tablet', '_phone' );
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Default values for the fields related to icon placement migration.
 | 
						||
	 *
 | 
						||
	 * @var array
 | 
						||
	 */
 | 
						||
	private $_icon_placement_migration_values = array(
 | 
						||
		'image_icon_width'          => array(
 | 
						||
			'left' => '16px',
 | 
						||
			'top'  => '48px',
 | 
						||
		),
 | 
						||
		'image_icon_custom_padding' => array(
 | 
						||
			'left' => '8px|8px|8px|8px|false|false',
 | 
						||
			'top'  => '25px|25px|25px|25px|false|false',
 | 
						||
		),
 | 
						||
		'border_width_all_image'    => array(
 | 
						||
			'left' => '2px',
 | 
						||
			'top'  => '3px',
 | 
						||
		),
 | 
						||
	);
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Border radii value for the circle icon attr migration.
 | 
						||
	 *
 | 
						||
	 * @var string
 | 
						||
	 */
 | 
						||
	private $_circle_border_radii_value = 'on|100%|100%|100%|100%';
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Attrs sticky suffixes.
 | 
						||
	 *
 | 
						||
	 * @var array
 | 
						||
	 */
 | 
						||
	private $_sticky_suffixes = array( '__sticky_enabled', '__sticky' );
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get array with Blurb module slug.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	private function _get_blurb_modules() {
 | 
						||
		return et_pb_get_font_icon_modules( 'blurb' );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Returns the list of Divi modules with buttons that have a custom icons.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	private function _get_button_modules() {
 | 
						||
		return et_pb_get_font_icon_modules( 'button' );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get array with slugs for modules that supported Hover Overlay functionality.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	private function _get_overlay_modules() {
 | 
						||
		return et_pb_get_font_icon_modules( 'overlay' );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get array with slugs for modules that supported Toggle Icon functionality.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	private function _get_toggle_modules() {
 | 
						||
		return et_pb_get_font_icon_modules( 'toggle' );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get Blurb fields.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	private function _get_blurb_fields() {
 | 
						||
 | 
						||
		// The order of the array keys and the order of the field names in the values is important when
 | 
						||
		// executing the migration logic, since it uses the "return early" principle.
 | 
						||
		if ( parent::$_maybe_global_presets_migration ) {
 | 
						||
			// Migrations rules for the Global Presets migrations case.
 | 
						||
			$migration_options = array(
 | 
						||
				'icon_font_size'         => array( 'image_icon_width' ),
 | 
						||
				'border_color_all_image' => array( 'border_color_all_image' ),
 | 
						||
				'border_width_all_image' => array( 'border_width_all_image' ),
 | 
						||
				'font_icon'              => array( 'font_icon' ),
 | 
						||
				'image_max_width'        => array( 'image_icon_width' ),
 | 
						||
				'circle_border_color'    => array( 'border_color_all_image' ),
 | 
						||
				'circle_color'           => array( 'image_icon_background_color' ),
 | 
						||
				'use_circle_border'      => array( 'border_color_all_image' ),
 | 
						||
				'use_circle'             => array( 'image_icon_custom_padding', 'border_color_all_image', 'border_radii_image', 'image_icon_background_color', 'border_width_all_image' ),
 | 
						||
				'icon_placement'         => array( 'image_icon_width', 'border_width_all_image' ),
 | 
						||
			);
 | 
						||
		} else {
 | 
						||
			$migration_options = array(
 | 
						||
				'icon_font_size'         => array( 'image_icon_width' ),
 | 
						||
				'border_color_all_image' => array( 'border_color_all_image' ),
 | 
						||
				'border_width_all_image' => array( 'border_width_all_image' ),
 | 
						||
				'font_icon'              => array( 'font_icon' ),
 | 
						||
				'image_max_width'        => array( 'image_icon_width' ),
 | 
						||
				'circle_border_color'    => array( 'border_color_all_image' ),
 | 
						||
				'circle_color'           => array( 'image_icon_background_color' ),
 | 
						||
				'use_circle_border'      => array( 'border_color_all_image' ),
 | 
						||
				'use_circle'             => array( 'border_color_all_image', 'border_radii_image', 'image_icon_background_color', 'border_width_all_image' ),
 | 
						||
				'icon_placement'         => array( 'image_icon_width', 'image_icon_custom_padding', 'border_width_all_image' ),
 | 
						||
			);
 | 
						||
		}
 | 
						||
 | 
						||
		$sticky_options = array( 'circle_color', 'circle_border_color', 'image_max_width', 'icon_font_size' );
 | 
						||
 | 
						||
		$result_fields_keys = array();
 | 
						||
 | 
						||
		$modes_with_sticky = array_merge( $this->_responsive_modes_suffixes, $this->_sticky_suffixes );
 | 
						||
 | 
						||
		foreach ( $migration_options as $saved_field_name => $field_names ) {
 | 
						||
			foreach ( $modes_with_sticky as $mode_suffix ) {
 | 
						||
 | 
						||
				$maybe_border_width_all_image_saved_field = 'border_width_all_image' === $saved_field_name && in_array( $mode_suffix, array( '__hover', '__hover_enabled' ), true );
 | 
						||
				$maybe_use_circle_border_saved_field      = 'use_circle_border' === $saved_field_name && in_array( $mode_suffix, array( '_tablet', '_phone', '__hover', '__hover_enabled', '_last_edited' ), true );
 | 
						||
				$maybe_use_circle_responsive              = 'use_circle' === $saved_field_name && '' !== $mode_suffix;
 | 
						||
				$maybe_icon_placement_in_hover            = 'icon_placement' === $saved_field_name && in_array( $mode_suffix, array( '__hover', '__hover_enabled' ), true );
 | 
						||
				$maybe_not_sticky_option_when_sticky_mode = in_array( $mode_suffix, $this->_sticky_suffixes, true ) && ! in_array( $saved_field_name, $sticky_options, true );
 | 
						||
 | 
						||
				if ( $maybe_icon_placement_in_hover || $maybe_border_width_all_image_saved_field || $maybe_use_circle_border_saved_field || $maybe_use_circle_responsive || $maybe_not_sticky_option_when_sticky_mode ) {
 | 
						||
					continue;
 | 
						||
				}
 | 
						||
				foreach ( $field_names as $field_name ) {
 | 
						||
					$affected_fields = 'use_circle' === $saved_field_name ? array( $saved_field_name => $this->_get_blurb_modules() ) : array( $saved_field_name . $mode_suffix => $this->_get_blurb_modules() );
 | 
						||
					if ( ! empty( $result_fields_keys[ $field_name . $mode_suffix ]['affected_fields'] ) ) {
 | 
						||
						$affected_fields += $result_fields_keys[ $field_name . $mode_suffix ]['affected_fields'];
 | 
						||
					};
 | 
						||
 | 
						||
					$result_fields_keys[ $field_name . $mode_suffix ] = array(
 | 
						||
						'affected_fields' => $affected_fields,
 | 
						||
					);
 | 
						||
				}
 | 
						||
			}
 | 
						||
		}
 | 
						||
 | 
						||
		return $result_fields_keys;
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get fields for modules with Button support.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	private function _get_button_fields() {
 | 
						||
		$result_button_fields          = array();
 | 
						||
		$button_field_names_for_module = array(
 | 
						||
			'et_pb_fullwidth_header' => array( 'button_one_icon', 'button_two_icon' ),
 | 
						||
			'one_button_modules'     => array( 'button_icon' ),
 | 
						||
		);
 | 
						||
		foreach ( $button_field_names_for_module as $field_module => $field_names ) {
 | 
						||
			foreach ( $field_names as $field_name ) {
 | 
						||
				foreach ( $this->_responsive_modes as $mode_suffix ) {
 | 
						||
					$modules                                  = 'et_pb_fullwidth_header' === $field_module ? array( 'et_pb_fullwidth_header' ) : array_diff( $this->_get_button_modules(), array( 'et_pb_fullwidth_header' ) );
 | 
						||
					$full_field_name                          = $field_name . $mode_suffix;
 | 
						||
					$result_button_fields[ $full_field_name ] = array(
 | 
						||
						'affected_fields' => array( $full_field_name => $modules ),
 | 
						||
					);
 | 
						||
				}
 | 
						||
			}
 | 
						||
		}
 | 
						||
 | 
						||
		return $result_button_fields;
 | 
						||
	}
 | 
						||
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get modules which are using overlay functionality by responsive suffix.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 * @param string $suffix responsive suffix.
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	private function _get_overlay_modules_by_suffix( $suffix ) {
 | 
						||
		return '' === $suffix ? $this->_get_overlay_modules() : array_filter(
 | 
						||
			$this->_get_overlay_modules(),
 | 
						||
			function( $module ) {
 | 
						||
				return 'et_pb_filterable_portfolio' !== $module;
 | 
						||
			}
 | 
						||
		);
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get fields for modules with Hover Overlay functionality.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	private function _get_overlay_fields() {
 | 
						||
		$result_overlay_fields = array();
 | 
						||
		foreach ( $this->_responsive_modes as $mode_suffix ) {
 | 
						||
			$full_field_name                           = 'hover_icon' . $mode_suffix;
 | 
						||
			$modules                                   = $this->_get_overlay_modules_by_suffix( $mode_suffix );
 | 
						||
			$result_overlay_fields[ $full_field_name ] = array(
 | 
						||
				'affected_fields' => array( $full_field_name => $modules ),
 | 
						||
			);
 | 
						||
		}
 | 
						||
		return $result_overlay_fields;
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get fields for modules with Toggle icon functionality.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	private function _get_toggle_fields() {
 | 
						||
		$result_overlay_fields = array();
 | 
						||
		$toggle_icon_fields    = array( 'use_icon_font_size', 'icon_color', 'icon_font_size' );
 | 
						||
		foreach ( $toggle_icon_fields as $toggle_icon_field ) {
 | 
						||
			foreach ( $this->_responsive_modes_suffixes as $mode_suffix ) {
 | 
						||
				if ( 'use_icon_font_size' === $toggle_icon_field && '' !== $mode_suffix ) {
 | 
						||
					continue;
 | 
						||
				}
 | 
						||
				$full_field_name = $toggle_icon_field . $mode_suffix;
 | 
						||
				$modules         = $this->_get_toggle_modules();
 | 
						||
				$result_overlay_fields[ 'open_' . $full_field_name ] = array(
 | 
						||
					'affected_fields' => array( $full_field_name => $modules ),
 | 
						||
				);
 | 
						||
			}
 | 
						||
		}
 | 
						||
		return $result_overlay_fields;
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get all affected fields.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	public function get_fields() {
 | 
						||
		return array_merge( $this->_get_blurb_fields(), $this->_get_button_fields(), $this->_get_overlay_fields(), $this->_get_toggle_fields() );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get all affected modules.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	public function get_modules() {
 | 
						||
		return array_merge( $this->_get_blurb_modules(), $this->_get_overlay_modules(), $this->_get_button_modules(), $this->_get_toggle_modules() );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Base migrate method, which launching during migration.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @param string $field_name field name.
 | 
						||
	 * @param string $current_value current value.
 | 
						||
	 * @param string $module_slug module slug.
 | 
						||
	 * @param string $saved_value saved value.
 | 
						||
	 * @param string $saved_field_name saved field name.
 | 
						||
	 * @param array  $attrs attrs array.
 | 
						||
	 * @param string $content content.
 | 
						||
	 * @param string $module_address module_address.
 | 
						||
	 *
 | 
						||
	 * @return array
 | 
						||
	 */
 | 
						||
	public function migrate( $field_name, $current_value, $module_slug, $saved_value, $saved_field_name, $attrs, $content, $module_address ) {
 | 
						||
		// Initialize migration params from received args.
 | 
						||
		$this->_init_params( $field_name, $current_value, $saved_value, $saved_field_name, $attrs );
 | 
						||
 | 
						||
		// For the non Blurb modules we only migarte `font_icon` option.
 | 
						||
		if ( ! in_array( $module_slug, $this->_get_blurb_modules(), true ) ) {
 | 
						||
			// Simple migrate filed names for toggle icons.
 | 
						||
			if ( in_array( $module_slug, $this->_get_toggle_modules(), true ) ) {
 | 
						||
				return $current_value;
 | 
						||
			}
 | 
						||
			return $this->_migrate_font_icon();
 | 
						||
		}
 | 
						||
 | 
						||
		// Run different scripts depending on the type of migration.
 | 
						||
		return ( parent::$_maybe_global_presets_migration ) ? $this->_blurb_global_presets_attrs_migration() : $this->_blurb_post_attrs_migration();
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Initialize migration params from received args.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @param string $field_name field_name.
 | 
						||
	 * @param string $current_value current_value.
 | 
						||
	 * @param string $saved_value saved_value.
 | 
						||
	 * @param string $saved_field_name saved_field_name.
 | 
						||
	 * @param string $attrs attrs.
 | 
						||
	 *
 | 
						||
	 * @return void
 | 
						||
	 */
 | 
						||
	private function _init_params( $field_name, $current_value, $saved_value, $saved_field_name, $attrs ) {
 | 
						||
		$this->_field_name       = $field_name;
 | 
						||
		$this->_current_value    = $current_value;
 | 
						||
		$this->_saved_value      = $saved_value;
 | 
						||
		$this->_saved_field_name = $saved_field_name;
 | 
						||
		$this->_attrs            = $attrs;
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Check if an passed attribute is an on\off type via its name.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @param string $attr_name attribute name.
 | 
						||
	 *
 | 
						||
	 * @return bool
 | 
						||
	 */
 | 
						||
	private function _maybe_on( $attr_name ) {
 | 
						||
		return ! empty( $this->_attrs[ $attr_name ] ) && 'on' === ( $this->_attrs[ $attr_name ] );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Check if current migrated `field_name` contains passed attribute name.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @param string $attr_name attribute name.
 | 
						||
	 * @return bool
 | 
						||
	 */
 | 
						||
	private function _field_name_contains( $attr_name ) {
 | 
						||
		return false !== strpos( $this->_field_name, $attr_name );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Check if current migrated `saved_name` contains passed attribute name.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @param string $attr_name attr_name.
 | 
						||
	 * @return bool
 | 
						||
	 */
 | 
						||
	private function _saved_name_contains( $attr_name ) {
 | 
						||
		return false !== strpos( $this->_saved_field_name, $attr_name );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get current migrated field name suffix.
 | 
						||
	 *
 | 
						||
	 * @param bool $use_sticky_suffixes use or not sticky_suffixes.
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return string
 | 
						||
	 */
 | 
						||
	private function _get_field_suffix( $use_sticky_suffixes = false ) {
 | 
						||
		$suffixes = $use_sticky_suffixes ? array_merge( $this->_sticky_suffixes, array_reverse( $this->_responsive_modes_suffixes ) ) : array_reverse( $this->_responsive_modes_suffixes );
 | 
						||
		array_pop( $suffixes );
 | 
						||
		foreach ( $suffixes as $suffix ) {
 | 
						||
			if ( $this->_field_name_contains( $suffix ) ) {
 | 
						||
				return $suffix;
 | 
						||
			}
 | 
						||
		}
 | 
						||
		return '';
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Get current migrated field name without suffix.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return string
 | 
						||
	 */
 | 
						||
	private function _get_field_name_without_suffix() {
 | 
						||
		return str_replace( $this->_get_field_suffix(), '', $this->_field_name );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Migrate fields value "as is" if the current field is one of the
 | 
						||
	 * service fields ( fields with suffix '__hover_enabled' or '_last_edited' ) or sticky fields.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return bool
 | 
						||
	 */
 | 
						||
	private function _maybe_service_or_sticky_field() {
 | 
						||
		$service_suffixes = array_merge( $this->_sticky_suffixes, array( '__hover_enabled', '_last_edited' ) );
 | 
						||
		return in_array( $this->_get_field_suffix( true ), $service_suffixes, true ) && ! empty( $this->_current_value );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Returns an attribute value from by attribute's name.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @param string $attr_name attribute name.
 | 
						||
	 * @return bool
 | 
						||
	 */
 | 
						||
	private function _get_attr( $attr_name ) {
 | 
						||
		return ! empty( $this->_attrs[ $attr_name ] ) ? $this->_attrs[ $attr_name ] : '';
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Migrate fields which depends on the icon placement option.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @param string $for_empty_current_value setting returned value for empty icon_placement.
 | 
						||
	 * @return string
 | 
						||
	 */
 | 
						||
	private function _migrate_icon_placement( $for_empty_current_value = '' ) {
 | 
						||
		$result_values                = $this->_icon_placement_migration_values[ $this->_get_field_name_without_suffix() ];
 | 
						||
		$result_values['']            = $for_empty_current_value;
 | 
						||
		$current_icon_placement_value = $this->_get_attr( 'icon_placement' . $this->_get_field_suffix() );
 | 
						||
		if ( '' === $this->_get_field_suffix() || ! empty( $current_icon_placement_value ) ) {
 | 
						||
			return $result_values[ $current_icon_placement_value ];
 | 
						||
		}
 | 
						||
		return '';
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Migrate background color with circle color.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return string
 | 
						||
	 */
 | 
						||
	private function _migrate_background_color_with_circle_color() {
 | 
						||
 | 
						||
		if ( empty( $this->_current_value ) && '' === $this->_get_field_suffix() ) {
 | 
						||
			return et_builder_accent_color();
 | 
						||
		}
 | 
						||
 | 
						||
		return $this->_current_value;
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Migrate font icon.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return string
 | 
						||
	 */
 | 
						||
	private function _migrate_font_icon() {
 | 
						||
		if ( empty( $this->_current_value ) ) {
 | 
						||
			return '';
 | 
						||
		}
 | 
						||
 | 
						||
		return et_pb_build_extended_font_icon_value( $this->_current_value );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Run Blurb's attributes migration when post's shortcodes attributes migrating.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return string
 | 
						||
	 */
 | 
						||
	private function _blurb_post_attrs_migration() {
 | 
						||
		// Determine the conditions for the migration of various options.
 | 
						||
		$is_icon_mode                                      = $this->_maybe_on( 'use_icon' );
 | 
						||
		$maybe_set_border_color_all_image_as_is            = ! $is_icon_mode && $this->_field_name_contains( 'border_color_all_image' ) && ! empty( $this->_attrs[ $this->_field_name ] );
 | 
						||
		$_migrate_font_icon                                = $is_icon_mode && $this->_field_name_contains( 'font_icon' ) && ! $this->_field_name_contains( '__hover_enabled' ) && ! $this->_field_name_contains( '_last_edited' );
 | 
						||
		$migrate_border_radii_image                        = $is_icon_mode && $this->_field_name_contains( 'border_radii_image' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$migrate_image_icon_custom_padding                 = $is_icon_mode && $this->_field_name_contains( 'image_icon_custom_padding' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$migrate_border_width_all_image_as_is              = $this->_field_name_contains( 'border_width_all_image' ) && $this->_saved_name_contains( 'border_width_all_image' );
 | 
						||
		$migrate_border_width_all_image_with_circle_border = $is_icon_mode && $this->_field_name_contains( 'border_width_all_image' ) && $this->_maybe_on( 'use_circle' ) && $this->_maybe_on( 'use_circle_border' );
 | 
						||
		$migrate_border_color_all_image                    = ! $maybe_set_border_color_all_image_as_is && $is_icon_mode && $this->_field_name_contains( 'border_color_all_image' ) && $this->_maybe_on( 'use_circle' ) && $this->_maybe_on( 'use_circle_border' );
 | 
						||
		$migrate_image_icon_width_with_circle              = $is_icon_mode && $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'icon_placement' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$migrate_icon_font_size_as_is                      = $is_icon_mode && $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'icon_font_size' ) && ! empty( $this->_current_value );
 | 
						||
		$_migrate_background_color_with_circle_color       = $is_icon_mode && $this->_field_name_contains( 'image_icon_background_color' ) && $this->_saved_name_contains( 'circle_color' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$maybe_return_default_accent_color_for_default_border = empty( $this->_get_attr( 'circle_border_color' ) ) && empty( $this->_get_attr( 'circle_border_color' . $this->_get_field_suffix() ) ) && empty( $this->_get_attr( 'border_color_all_image' ) ) && empty( $this->_get_attr( 'border_color_all_image' . $this->_get_field_suffix() ) );
 | 
						||
		$migrate_image_max_width_as_is                        = ! $is_icon_mode && $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'image_max_width' );
 | 
						||
 | 
						||
		if ( $this->_maybe_service_or_sticky_field() ) {
 | 
						||
			return $this->_current_value;
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $maybe_set_border_color_all_image_as_is && ! empty( $this->_saved_value ) ) {
 | 
						||
			return $this->_saved_value;
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_icon_font_size_as_is ) {
 | 
						||
			return $this->_current_value;
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $_migrate_background_color_with_circle_color ) {
 | 
						||
			return $this->_migrate_background_color_with_circle_color();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_image_icon_width_with_circle ) {
 | 
						||
			return $this->_migrate_icon_placement();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_border_color_all_image && $maybe_return_default_accent_color_for_default_border ) {
 | 
						||
			return et_builder_accent_color();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $_migrate_font_icon ) {
 | 
						||
			return $this->_migrate_font_icon();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_border_radii_image ) {
 | 
						||
			return $this->_circle_border_radii_value;
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_image_icon_custom_padding ) {
 | 
						||
			return $this->_migrate_icon_placement();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_border_width_all_image_with_circle_border ) {
 | 
						||
			return $this->_migrate_icon_placement( $this->_icon_placement_migration_values['border_width_all_image']['top'] );
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_border_width_all_image_as_is && $is_icon_mode ) {
 | 
						||
			return in_array( $this->_saved_value, $this->_icon_placement_migration_values['border_width_all_image'], true ) ? $this->_saved_value : '';
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_border_color_all_image ) {
 | 
						||
			return $this->_current_value;
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_image_max_width_as_is ) {
 | 
						||
			return $this->_current_value;
 | 
						||
		}
 | 
						||
 | 
						||
		return $this->_saved_value;
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Run Blurb's attributes migration when Global Presets attributes migrating.
 | 
						||
	 *
 | 
						||
	 * @since ?
 | 
						||
	 *
 | 
						||
	 * @return string
 | 
						||
	 */
 | 
						||
	private function _blurb_global_presets_attrs_migration() {
 | 
						||
		// Determine the conditions for the migration of various options.
 | 
						||
		$_migrate_font_icon                                = $this->_field_name_contains( 'font_icon' ) && ! $this->_field_name_contains( '__hover_enabled' ) && ! $this->_field_name_contains( '_last_edited' );
 | 
						||
		$migrate_border_radii_image                        = $this->_field_name_contains( 'border_radii_image' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$migrate_image_icon_custom_padding                 = $this->_field_name_contains( 'image_icon_custom_padding' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$migrate_border_width_all_image_as_is              = $this->_field_name_contains( 'border_width_all_image' ) && $this->_saved_name_contains( 'border_width_all_image' );
 | 
						||
		$migrate_border_width_all_image_with_circle_border = ! $migrate_border_width_all_image_as_is && $this->_field_name_contains( 'border_width_all_image' ) && $this->_maybe_on( 'use_circle' ) && $this->_maybe_on( 'use_circle_border' );
 | 
						||
		$migrate_no_border_width_all_image_field           = ! $migrate_border_width_all_image_with_circle_border && $this->_field_name_contains( 'border_width_all_image' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$migrate_border_color_all_image                    = $this->_field_name_contains( 'border_color_all_image' ) && $this->_maybe_on( 'use_circle' ) && $this->_maybe_on( 'use_circle_border' );
 | 
						||
		$migrate_image_icon_width_with_circle              = $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'icon_placement' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$migrate_icon_font_size_as_is                      = $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'icon_font_size' ) && ! empty( $this->_current_value );
 | 
						||
		$_migrate_background_color_with_circle_color       = $this->_field_name_contains( 'image_icon_background_color' ) && $this->_saved_name_contains( 'circle_color' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$migrate_default_background_color                  = ! $_migrate_background_color_with_circle_color && $this->_field_name_contains( 'image_icon_background_color' ) && $this->_maybe_on( 'use_circle' );
 | 
						||
		$maybe_return_accent_color_for_default_border      = empty( $this->_attrs[ 'circle_border_color' . $this->_get_field_suffix() ] ) && in_array( $this->_get_field_suffix(), array( '', '_tablet', '_phone', '__hover' ), true );
 | 
						||
		$migrate_circle_border_color_as_is                 = $this->_field_name_contains( 'border_color_all_image' ) && $this->_saved_name_contains( 'circle_border_color' ) && ! empty( $this->_current_value );
 | 
						||
		$migrate_image_max_width_as_is                     = $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'image_max_width' );
 | 
						||
 | 
						||
		if ( $this->_maybe_service_or_sticky_field() ) {
 | 
						||
			return $this->_current_value;
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_icon_font_size_as_is ) {
 | 
						||
			return $this->_current_value;
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_default_background_color ) {
 | 
						||
			return et_builder_accent_color();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $_migrate_background_color_with_circle_color ) {
 | 
						||
			return $this->_migrate_background_color_with_circle_color();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_image_icon_width_with_circle ) {
 | 
						||
			return $this->_migrate_icon_placement();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_border_color_all_image && $maybe_return_accent_color_for_default_border ) {
 | 
						||
			return et_builder_accent_color();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $_migrate_font_icon ) {
 | 
						||
			return $this->_migrate_font_icon();
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_border_radii_image ) {
 | 
						||
			return $this->_circle_border_radii_value;
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_image_icon_custom_padding ) {
 | 
						||
			return $this->_migrate_icon_placement( $this->_icon_placement_migration_values['image_icon_custom_padding']['top'] );
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_border_width_all_image_with_circle_border ) {
 | 
						||
			return $this->_migrate_icon_placement( $this->_icon_placement_migration_values['border_width_all_image']['top'] );
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_no_border_width_all_image_field ) {
 | 
						||
			return in_array( $this->_saved_value, $this->_icon_placement_migration_values['border_width_all_image'], true ) ? $this->_saved_value : '';
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_border_color_all_image || $migrate_circle_border_color_as_is ) {
 | 
						||
			return $this->_current_value;
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $migrate_image_max_width_as_is ) {
 | 
						||
			return $this->_current_value;
 | 
						||
		}
 | 
						||
 | 
						||
		return $this->_saved_value;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
return new ET_Builder_Module_Settings_Migration_IconManager();
 |