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();
|