307 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			307 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * This file handles typography migration.
 | 
						|
 *
 | 
						|
 * @package GeneratePress
 | 
						|
 */
 | 
						|
 | 
						|
if ( ! defined( 'ABSPATH' ) ) {
 | 
						|
	exit; // Exit if accessed directly.
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Handles all of our typography migration.
 | 
						|
 */
 | 
						|
class GeneratePress_Typography_Migration {
 | 
						|
	/**
 | 
						|
	 * Class instance.
 | 
						|
	 *
 | 
						|
	 * @access private
 | 
						|
	 * @var $instance Class instance.
 | 
						|
	 */
 | 
						|
	private static $instance;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Initiator
 | 
						|
	 */
 | 
						|
	public static function get_instance() {
 | 
						|
		if ( ! isset( self::$instance ) ) {
 | 
						|
			self::$instance = new self();
 | 
						|
		}
 | 
						|
		return self::$instance;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Map our new typography keys to the old prefixes.
 | 
						|
	 */
 | 
						|
	public static function get_option_prefixes() {
 | 
						|
		$data = array(
 | 
						|
			array(
 | 
						|
				'selector' => 'body',
 | 
						|
				'legacy_prefix' => 'body',
 | 
						|
				'group' => 'base',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
			array(
 | 
						|
				'selector' => 'top-bar',
 | 
						|
				'legacy_prefix' => 'top_bar',
 | 
						|
				'group' => 'widgets',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
			array(
 | 
						|
				'selector' => 'main-title',
 | 
						|
				'legacy_prefix' => 'site_title',
 | 
						|
				'group' => 'header',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
			array(
 | 
						|
				'selector' => 'site-description',
 | 
						|
				'legacy_prefix' => 'site_tagline',
 | 
						|
				'group' => 'header',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
			array(
 | 
						|
				'selector' => 'primary-menu-items',
 | 
						|
				'legacy_prefix' => 'navigation',
 | 
						|
				'group' => 'primaryNavigation',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
			array(
 | 
						|
				'selector' => 'widget-titles',
 | 
						|
				'legacy_prefix' => 'widget_title',
 | 
						|
				'group' => 'widgets',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
			array(
 | 
						|
				'selector' => 'buttons',
 | 
						|
				'legacy_prefix' => 'buttons',
 | 
						|
				'group' => 'content',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
			array(
 | 
						|
				'selector' => 'single-content-title',
 | 
						|
				'legacy_prefix' => 'single_post_title',
 | 
						|
				'group' => 'content',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
			array(
 | 
						|
				'selector' => 'archive-content-title',
 | 
						|
				'legacy_prefix' => 'archive_post_title',
 | 
						|
				'group' => 'content',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
			array(
 | 
						|
				'selector' => 'footer',
 | 
						|
				'legacy_prefix' => 'footer',
 | 
						|
				'group' => 'footer',
 | 
						|
				'module' => 'core',
 | 
						|
			),
 | 
						|
		);
 | 
						|
 | 
						|
		$headings = array(
 | 
						|
			'h1' => 'heading_1',
 | 
						|
			'h2' => 'heading_2',
 | 
						|
			'h3' => 'heading_3',
 | 
						|
			'h4' => 'heading_4',
 | 
						|
			'h5' => 'heading_5',
 | 
						|
			'h6' => 'heading_6',
 | 
						|
		);
 | 
						|
 | 
						|
		foreach ( $headings as $selector => $legacy_prefix ) {
 | 
						|
			$data[] = array(
 | 
						|
				'selector' => $selector,
 | 
						|
				'legacy_prefix' => $legacy_prefix,
 | 
						|
				'group' => 'content',
 | 
						|
				'module' => 'core',
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		if ( function_exists( 'generate_secondary_nav_typography_selectors' ) ) {
 | 
						|
			$data[] = array(
 | 
						|
				'selector' => 'secondary-nav-menu-items',
 | 
						|
				'legacy_prefix' => 'secondary_navigation',
 | 
						|
				'group' => 'secondaryNavigation',
 | 
						|
				'module' => 'secondary-nav',
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		if ( function_exists( 'generate_menu_plus_typography_selectors' ) ) {
 | 
						|
			$data[] = array(
 | 
						|
				'selector' => 'off-canvas-panel-menu-items',
 | 
						|
				'legacy_prefix' => 'slideout',
 | 
						|
				'group' => 'offCanvasPanel',
 | 
						|
				'module' => 'off-canvas-panel',
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		if ( function_exists( 'generate_woocommerce_typography_selectors' ) ) {
 | 
						|
			$data[] = array(
 | 
						|
				'selector' => 'woocommerce-catalog-product-titles',
 | 
						|
				'legacy_prefix' => 'wc_product_title',
 | 
						|
				'group' => 'wooCommerce',
 | 
						|
				'module' => 'woocommerce',
 | 
						|
			);
 | 
						|
 | 
						|
			$data[] = array(
 | 
						|
				'selector' => 'woocommerce-related-product-titles',
 | 
						|
				'legacy_prefix' => 'wc_related_product_title',
 | 
						|
				'group' => 'wooCommerce',
 | 
						|
				'module' => 'woocommerce',
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		return $data;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Check if we have a saved value.
 | 
						|
	 *
 | 
						|
	 * @param string $id The option ID.
 | 
						|
	 * @param array  $settings The saved settings.
 | 
						|
	 * @param array  $defaults The defaults.
 | 
						|
	 */
 | 
						|
	public static function has_saved_value( $id, $settings, $defaults ) {
 | 
						|
		return isset( $settings[ $id ] )
 | 
						|
			&& isset( $defaults[ $id ] )
 | 
						|
			&& $defaults[ $id ] !== $settings[ $id ] // Need this because the Customizer treats defaults as saved values.
 | 
						|
			&& (
 | 
						|
				! empty( $settings[ $id ] )
 | 
						|
				|| 0 === $settings[ $id ]
 | 
						|
			);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get all of our mapped typography data.
 | 
						|
	 */
 | 
						|
	public static function get_mapped_typography_data() {
 | 
						|
		$settings = get_option( 'generate_settings', array() );
 | 
						|
		$defaults = generate_get_default_fonts();
 | 
						|
		$typography_mapping = array();
 | 
						|
 | 
						|
		// These options don't have "font" in their IDs.
 | 
						|
		$no_font_in_ids = array(
 | 
						|
			'single_post_title',
 | 
						|
			'archive_post_title',
 | 
						|
		);
 | 
						|
 | 
						|
		for ( $headings = 1; $headings < 7; $headings++ ) {
 | 
						|
			$no_font_in_ids[] = 'heading_' . $headings;
 | 
						|
		}
 | 
						|
 | 
						|
		foreach ( self::get_option_prefixes() as $key => $data ) {
 | 
						|
			$legacy_setting_ids = array(
 | 
						|
				'fontFamily' => 'font_' . $data['legacy_prefix'],
 | 
						|
				'fontWeight' => $data['legacy_prefix'] . '_font_weight',
 | 
						|
				'textTransform' => $data['legacy_prefix'] . '_font_transform',
 | 
						|
				'fontSize' => $data['legacy_prefix'] . '_font_size',
 | 
						|
				'fontSizeMobile' => 'mobile_' . $data['legacy_prefix'] . 'font_size',
 | 
						|
				'lineHeight' => $data['legacy_prefix'] . '_line_height',
 | 
						|
			);
 | 
						|
 | 
						|
			if ( 'slideout' === $data['legacy_prefix'] ) {
 | 
						|
				$legacy_setting_ids['fontSizeMobile'] = $data['legacy_prefix'] . '_mobile_font_size';
 | 
						|
			}
 | 
						|
 | 
						|
			if ( in_array( $data['legacy_prefix'], $no_font_in_ids ) ) {
 | 
						|
				$legacy_setting_ids['fontWeight'] = $data['legacy_prefix'] . '_weight';
 | 
						|
				$legacy_setting_ids['textTransform'] = $data['legacy_prefix'] . '_transform';
 | 
						|
			}
 | 
						|
 | 
						|
			foreach ( $legacy_setting_ids as $name => $id ) {
 | 
						|
				if ( self::has_saved_value( $id, $settings, $defaults ) ) {
 | 
						|
					$typography_mapping[ $key ][ $name ] = $settings[ $id ];
 | 
						|
				}
 | 
						|
 | 
						|
				if ( 'secondary_navigation' === $data['legacy_prefix'] && function_exists( 'generate_secondary_nav_get_defaults' ) ) {
 | 
						|
					$secondary_nav_settings = get_option( 'generate_secondary_nav_settings', array() );
 | 
						|
					$secondary_nav_defaults = generate_secondary_nav_get_defaults();
 | 
						|
 | 
						|
					if ( self::has_saved_value( $id, $secondary_nav_settings, $secondary_nav_defaults ) ) {
 | 
						|
						$typography_mapping[ $key ][ $name ] = $secondary_nav_settings[ $id ];
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			if ( 'body' === $key ) {
 | 
						|
				if ( self::has_saved_value( 'body_line_height', $settings, $defaults ) ) {
 | 
						|
					$typography_mapping[ $key ]['lineHeightUnit'] = '';
 | 
						|
				}
 | 
						|
 | 
						|
				if ( self::has_saved_value( 'paragraph_margin', $settings, $defaults ) ) {
 | 
						|
					$typography_mapping[ $key ]['marginBottom'] = $settings['paragraph_margin'];
 | 
						|
					$typography_mapping[ $key ]['marginBottomUnit'] = 'em';
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			if ( 'widget-titles' === $key && self::has_saved_value( 'widget_title_separator', $settings, $defaults ) ) {
 | 
						|
				$typography_mapping[ $key ]['marginBottom'] = $settings['widget_title_separator'];
 | 
						|
				$typography_mapping[ $key ]['marginBottomUnit'] = 'px';
 | 
						|
			}
 | 
						|
 | 
						|
			if ( 'h1' === $key || 'h2' === $key || 'h3' === $key ) {
 | 
						|
				if ( self::has_saved_value( $data['legacy_prefix'] . '_margin_bottom', $settings, $defaults ) ) {
 | 
						|
					$typography_mapping[ $key ]['marginBottom'] = $settings[ $data['legacy_prefix'] . '_margin_bottom' ];
 | 
						|
					$typography_mapping[ $key ]['marginBottomUnit'] = 'px';
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			if ( isset( $typography_mapping[ $key ]['fontSize'] ) ) {
 | 
						|
				$typography_mapping[ $key ]['fontSizeUnit'] = 'px';
 | 
						|
			}
 | 
						|
 | 
						|
			if ( isset( $typography_mapping[ $key ] ) ) {
 | 
						|
				$typography_mapping[ $key ]['selector'] = $data['selector'];
 | 
						|
				$typography_mapping[ $key ]['module'] = $data['module'];
 | 
						|
				$typography_mapping[ $key ]['group'] = $data['group'];
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// Reset array keys starting at 0.
 | 
						|
		$typography_mapping = array_values( $typography_mapping );
 | 
						|
 | 
						|
		return $typography_mapping;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get all of our mapped font data.
 | 
						|
	 */
 | 
						|
	public static function get_mapped_font_data() {
 | 
						|
		$font_mapping = array();
 | 
						|
 | 
						|
		foreach ( self::get_option_prefixes() as $key => $data ) {
 | 
						|
			$settings = get_option( 'generate_settings', array() );
 | 
						|
			$defaults = generate_get_default_fonts();
 | 
						|
 | 
						|
			if ( 'secondary_navigation' === $data['legacy_prefix'] && function_exists( 'generate_secondary_nav_get_defaults' ) ) {
 | 
						|
				$settings = get_option( 'generate_secondary_nav_settings', array() );
 | 
						|
				$defaults = generate_secondary_nav_get_defaults();
 | 
						|
			}
 | 
						|
 | 
						|
			if ( self::has_saved_value( 'font_' . $data['legacy_prefix'], $settings, $defaults ) ) {
 | 
						|
				$has_font = array_search( $settings[ 'font_' . $data['legacy_prefix'] ], array_column( $font_mapping, 'fontFamily' ) );
 | 
						|
 | 
						|
				if ( false !== $has_font ) {
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
 | 
						|
				$font_mapping[ $key ]['fontFamily'] = $settings[ 'font_' . $data['legacy_prefix'] ];
 | 
						|
 | 
						|
				$local_fonts = generate_typography_default_fonts();
 | 
						|
 | 
						|
				if ( ! in_array( $settings[ 'font_' . $data['legacy_prefix'] ], $local_fonts ) ) {
 | 
						|
					$font_mapping[ $key ]['googleFont'] = true;
 | 
						|
					$font_mapping[ $key ]['googleFontCategory'] = get_theme_mod( 'font_' . $data['legacy_prefix'] . '_category' );
 | 
						|
					$font_mapping[ $key ]['googleFontVariants'] = get_theme_mod( 'font_' . $data['legacy_prefix'] . '_variants' );
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// Reset array keys starting at 0.
 | 
						|
		$font_mapping = array_values( $font_mapping );
 | 
						|
 | 
						|
		return $font_mapping;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
GeneratePress_Typography_Migration::get_instance();
 |