409 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			409 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Migrates old options on update.
 | |
|  *
 | |
|  * @package GeneratePress
 | |
|  */
 | |
| 
 | |
| if ( ! defined( 'ABSPATH' ) ) {
 | |
| 	exit; // Exit if accessed directly.
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Process option updates if necessary.
 | |
|  */
 | |
| class GeneratePress_Theme_Update {
 | |
| 	/**
 | |
| 	 * 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;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 *  Constructor
 | |
| 	 */
 | |
| 	public function __construct() {
 | |
| 		if ( is_admin() ) {
 | |
| 			add_action( 'admin_init', __CLASS__ . '::init', 5 );
 | |
| 		} else {
 | |
| 			add_action( 'wp', __CLASS__ . '::init', 5 );
 | |
| 		}
 | |
| 
 | |
| 		add_action( 'admin_init', __CLASS__ . '::admin_updates', 1 );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Implement theme update logic. Only run updates on existing sites.
 | |
| 	 *
 | |
| 	 * @since 3.0.0
 | |
| 	 */
 | |
| 	public static function init() {
 | |
| 		if ( is_customize_preview() ) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$saved_version = get_option( 'generate_db_version', false );
 | |
| 
 | |
| 		if ( false === $saved_version ) {
 | |
| 			// Typically this would mean this is a new install, but we haven't always had the version saved, so we need to check for existing settings.
 | |
| 
 | |
| 			$existing_settings = get_option( 'generate_settings', array() );
 | |
| 
 | |
| 			// Can't count this as a user-set option since a previous migration script set it.
 | |
| 			if ( isset( $existing_settings['combine_css'] ) ) {
 | |
| 				unset( $existing_settings['combine_css'] );
 | |
| 			}
 | |
| 
 | |
| 			if ( ! empty( $existing_settings ) ) {
 | |
| 				// We have settings, which means this is an old install with no version number.
 | |
| 				$saved_version = '2.0';
 | |
| 			} else {
 | |
| 				// No settings and no saved version, must be a new install.
 | |
| 
 | |
| 				if ( 'admin_init' === current_action() ) {
 | |
| 					// If we're in the admin, add our version to the database.
 | |
| 					update_option( 'generate_db_version', GENERATE_VERSION );
 | |
| 				}
 | |
| 
 | |
| 				return;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if ( version_compare( $saved_version, GENERATE_VERSION, '=' ) ) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		if ( version_compare( $saved_version, '2.3.0', '<' ) ) {
 | |
| 			self::v_2_3_0();
 | |
| 		}
 | |
| 
 | |
| 		if ( version_compare( $saved_version, '3.0.0-alpha.1', '<' ) ) {
 | |
| 			self::v_3_0_0();
 | |
| 		}
 | |
| 
 | |
| 		if ( version_compare( $saved_version, '3.1.0-alpha.1', '<' ) ) {
 | |
| 			self::v_3_1_0();
 | |
| 		}
 | |
| 
 | |
| 		// Delete our CSS cache.
 | |
| 		delete_option( 'generate_dynamic_css_output' );
 | |
| 		delete_option( 'generate_dynamic_css_cached_version' );
 | |
| 
 | |
| 		// Reset our dynamic CSS file updated time so it regenerates.
 | |
| 		$dynamic_css_data = get_option( 'generatepress_dynamic_css_data', array() );
 | |
| 
 | |
| 		if ( ! empty( $dynamic_css_data ) ) {
 | |
| 			if ( isset( $dynamic_css_data['updated_time'] ) ) {
 | |
| 				unset( $dynamic_css_data['updated_time'] );
 | |
| 			}
 | |
| 
 | |
| 			update_option( 'generatepress_dynamic_css_data', $dynamic_css_data );
 | |
| 		}
 | |
| 
 | |
| 		// Last thing to do is update our version.
 | |
| 		update_option( 'generate_db_version', GENERATE_VERSION );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Less important updates that should only happen in the Dashboard.
 | |
| 	 * These use a database flag instead of our version number for legacy reasons.
 | |
| 	 *
 | |
| 	 * @since 3.0.0
 | |
| 	 */
 | |
| 	public static function admin_updates() {
 | |
| 		self::v_1_3_0();
 | |
| 		self::v_1_3_29();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Remove variants from font family values.
 | |
| 	 *
 | |
| 	 * @since 1.3.0
 | |
| 	 */
 | |
| 	public static function v_1_3_0() {
 | |
| 		// Don't run this if Typography add-on is activated.
 | |
| 		if ( function_exists( 'generate_fonts_customize_register' ) ) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$settings = get_option( 'generate_settings', array() );
 | |
| 
 | |
| 		if ( ! isset( $settings['font_body'] ) ) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$value = $settings['font_body'];
 | |
| 		$needs_update = false;
 | |
| 
 | |
| 		// If our value has : in it.
 | |
| 		if ( ! empty( $value ) && strpos( $value, ':' ) !== false ) {
 | |
| 			// Remove the : and anything past it.
 | |
| 			$value = current( explode( ':', $value ) );
 | |
| 
 | |
| 			$settings['font_body'] = $value;
 | |
| 			$needs_update = true;
 | |
| 		}
 | |
| 
 | |
| 		if ( $needs_update ) {
 | |
| 			update_option( 'generate_settings', $settings );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Move logo to custom_logo option as required by WP.org.
 | |
| 	 *
 | |
| 	 * @since 1.3.29
 | |
| 	 */
 | |
| 	public static function v_1_3_29() {
 | |
| 		if ( ! function_exists( 'the_custom_logo' ) ) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		if ( get_theme_mod( 'custom_logo' ) ) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$settings = get_option( 'generate_settings', array() );
 | |
| 
 | |
| 		if ( ! isset( $settings['logo'] ) ) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$old_value = $settings['logo'];
 | |
| 
 | |
| 		if ( empty( $old_value ) ) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$logo = attachment_url_to_postid( $old_value );
 | |
| 
 | |
| 		if ( is_int( $logo ) ) {
 | |
| 			set_theme_mod( 'custom_logo', $logo );
 | |
| 		}
 | |
| 
 | |
| 		if ( get_theme_mod( 'custom_logo' ) ) {
 | |
| 			$settings['logo'] = '';
 | |
| 			update_option( 'generate_settings', $settings );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Turn off the combine CSS option for existing sites.
 | |
| 	 *
 | |
| 	 * @since 2.3.0
 | |
| 	 */
 | |
| 	public static function v_2_3_0() {
 | |
| 		$settings = get_option( 'generate_settings', array() );
 | |
| 		$update_options = false;
 | |
| 
 | |
| 		if ( ! isset( $settings['combine_css'] ) ) {
 | |
| 			$settings['combine_css'] = false;
 | |
| 			$update_options = true;
 | |
| 		}
 | |
| 
 | |
| 		if ( $update_options ) {
 | |
| 			update_option( 'generate_settings', $settings );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Update sites using old defaults.
 | |
| 	 *
 | |
| 	 * @since 3.0.0
 | |
| 	 */
 | |
| 	public static function v_3_0_0() {
 | |
| 		$settings = get_option( 'generate_settings', array() );
 | |
| 		$update_options = false;
 | |
| 
 | |
| 		$old_defaults = array(
 | |
| 			'icons' => 'font',
 | |
| 			'structure' => 'floats',
 | |
| 			'hide_tagline' => '',
 | |
| 			'container_width' => '1100',
 | |
| 			'nav_position_setting' => 'nav-below-header',
 | |
| 			'container_alignment' => 'boxes',
 | |
| 			'background_color' => '#efefef',
 | |
| 			'text_color' => '#3a3a3a',
 | |
| 			'header_text_color' => '#3a3a3a',
 | |
| 			'header_link_color' => '#3a3a3a',
 | |
| 			'navigation_background_color' => '#222222',
 | |
| 			'navigation_text_color' => '#ffffff',
 | |
| 			'navigation_background_hover_color' => '#3f3f3f',
 | |
| 			'navigation_text_hover_color' => '#ffffff',
 | |
| 			'navigation_background_current_color' => '#3f3f3f',
 | |
| 			'navigation_text_current_color' => '#ffffff',
 | |
| 			'subnavigation_background_color' => '#3f3f3f',
 | |
| 			'subnavigation_text_color' => '#ffffff',
 | |
| 			'subnavigation_background_hover_color' => '#4f4f4f',
 | |
| 			'subnavigation_text_hover_color' => '#ffffff',
 | |
| 			'subnavigation_background_current_color' => '#4f4f4f',
 | |
| 			'subnavigation_text_current_color' => '#ffffff',
 | |
| 			'sidebar_widget_title_color' => '#000000',
 | |
| 			'site_title_font_size' => '45',
 | |
| 			'mobile_site_title_font_size' => '30',
 | |
| 			'form_button_background_color' => '#666666',
 | |
| 			'form_button_background_color_hover' => '#3f3f3f',
 | |
| 			'footer_background_color' => '#222222',
 | |
| 			'footer_link_hover_color' => '#606060',
 | |
| 			'entry_meta_link_color' => '#595959',
 | |
| 			'entry_meta_link_color_hover' => '#1e73be',
 | |
| 			'blog_post_title_color' => '',
 | |
| 			'blog_post_title_hover_color' => '',
 | |
| 			'heading_1_font_size' => '40',
 | |
| 			'mobile_heading_1_font_size' => '30',
 | |
| 			'heading_1_weight' => '300',
 | |
| 			'heading_2_font_size' => '30',
 | |
| 			'mobile_heading_2_font_size' => '25',
 | |
| 			'heading_2_weight' => '300',
 | |
| 			'heading_3_font_size' => '20',
 | |
| 			'mobile_heading_3_font_size' => '',
 | |
| 			'heading_4_font_size' => '',
 | |
| 			'mobile_heading_4_font_size' => '',
 | |
| 			'heading_5_font_size' => '',
 | |
| 			'mobile_heading_5_font_size' => '',
 | |
| 		);
 | |
| 
 | |
| 		foreach ( $old_defaults as $key => $value ) {
 | |
| 			if ( ! isset( $settings[ $key ] ) ) {
 | |
| 				$settings[ $key ] = $value;
 | |
| 				$update_options = true;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if ( $update_options ) {
 | |
| 			update_option( 'generate_settings', $settings );
 | |
| 		}
 | |
| 
 | |
| 		$spacing_settings = get_option( 'generate_spacing_settings', array() );
 | |
| 		$update_spacing_options = false;
 | |
| 
 | |
| 		$old_spacing_defaults = array(
 | |
| 			'left_sidebar_width' => '25',
 | |
| 			'right_sidebar_width' => '25',
 | |
| 			'top_bar_right' => '10',
 | |
| 			'top_bar_left' => '10',
 | |
| 			'mobile_top_bar_right' => '',
 | |
| 			'mobile_top_bar_left' => '',
 | |
| 			'header_top' => '40',
 | |
| 			'header_bottom' => '40',
 | |
| 			'mobile_header_right' => '',
 | |
| 			'mobile_header_left' => '',
 | |
| 			'mobile_widget_top' => '',
 | |
| 			'mobile_widget_right' => '',
 | |
| 			'mobile_widget_bottom' => '',
 | |
| 			'mobile_widget_left' => '',
 | |
| 			'mobile_footer_widget_container_top' => '',
 | |
| 			'mobile_footer_widget_container_right' => '',
 | |
| 			'mobile_footer_widget_container_bottom' => '',
 | |
| 			'mobile_footer_widget_container_left' => '',
 | |
| 			'footer_right' => '20',
 | |
| 			'footer_left' => '20',
 | |
| 			'mobile_footer_right' => '10',
 | |
| 			'mobile_footer_left' => '10',
 | |
| 		);
 | |
| 
 | |
| 		foreach ( $old_spacing_defaults as $key => $value ) {
 | |
| 			if ( ! isset( $spacing_settings[ $key ] ) ) {
 | |
| 				$spacing_settings[ $key ] = $value;
 | |
| 				$update_spacing_options = true;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if ( $update_spacing_options ) {
 | |
| 			update_option( 'generate_spacing_settings', $spacing_settings );
 | |
| 		}
 | |
| 
 | |
| 		if ( $update_options || $update_spacing_options ) {
 | |
| 			delete_option( 'generate_dynamic_css_output' );
 | |
| 			delete_option( 'generate_dynamic_css_cached_version' );
 | |
| 
 | |
| 			// Reset our dynamic CSS file updated time so it regenerates.
 | |
| 			$dynamic_css_data = get_option( 'generatepress_dynamic_css_data', array() );
 | |
| 
 | |
| 			if ( ! empty( $dynamic_css_data ) ) {
 | |
| 				if ( isset( $dynamic_css_data['updated_time'] ) ) {
 | |
| 					unset( $dynamic_css_data['updated_time'] );
 | |
| 				}
 | |
| 
 | |
| 				update_option( 'generatepress_dynamic_css_data', $dynamic_css_data );
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Update sites using old defaults.
 | |
| 	 *
 | |
| 	 * @since 3.1.0
 | |
| 	 */
 | |
| 	public static function v_3_1_0() {
 | |
| 		$settings = get_option( 'generate_settings', array() );
 | |
| 		$update_options = false;
 | |
| 
 | |
| 		$old_defaults = array(
 | |
| 			'underline_links' => 'never',
 | |
| 			'use_dynamic_typography' => false,
 | |
| 			'background_color' => '#f7f8f9',
 | |
| 			'text_color' => '#222222',
 | |
| 			'link_color' => '#1e73be',
 | |
| 			'link_color_hover' => '#000000',
 | |
| 			'header_background_color' => '#ffffff',
 | |
| 			'site_title_color' => '#222222',
 | |
| 			'site_tagline_color' => '#757575',
 | |
| 			'navigation_background_color' => '#ffffff',
 | |
| 			'navigation_background_hover_color' => '#ffffff',
 | |
| 			'navigation_background_current_color' => '#ffffff',
 | |
| 			'navigation_text_color' => '#515151',
 | |
| 			'navigation_text_hover_color' => '#7a8896',
 | |
| 			'navigation_text_current_color' => '#7a8896',
 | |
| 			'subnavigation_background_color' => '#eaeaea',
 | |
| 			'subnavigation_background_hover_color' => '#eaeaea',
 | |
| 			'subnavigation_background_current_color' => '#eaeaea',
 | |
| 			'subnavigation_text_color' => '#515151',
 | |
| 			'subnavigation_text_hover_color' => '#7a8896',
 | |
| 			'subnavigation_text_current_color' => '#7a8896',
 | |
| 			'content_background_color' => '#ffffff',
 | |
| 			'blog_post_title_color' => '#222222',
 | |
| 			'blog_post_title_hover_color' => '#55555e',
 | |
| 			'entry_meta_text_color' => '#595959',
 | |
| 			'sidebar_widget_background_color' => '#ffffff',
 | |
| 			'footer_widget_background_color' => '#ffffff',
 | |
| 			'footer_widget_title_color' => '#000000',
 | |
| 			'footer_background_color' => '#55555e',
 | |
| 			'footer_text_color' => '#ffffff',
 | |
| 			'footer_link_color' => '#ffffff',
 | |
| 			'footer_link_hover_color' => '#d3d3d3',
 | |
| 			'form_background_color' => '#fafafa',
 | |
| 			'form_text_color' => '#666666',
 | |
| 			'form_background_color_focus' => '#ffffff',
 | |
| 			'form_text_color_focus' => '#666666',
 | |
| 			'form_border_color' => '#cccccc',
 | |
| 			'form_border_color_focus' => '#bfbfbf',
 | |
| 		);
 | |
| 
 | |
| 		foreach ( $old_defaults as $key => $value ) {
 | |
| 			if ( ! isset( $settings[ $key ] ) ) {
 | |
| 				$settings[ $key ] = $value;
 | |
| 				$update_options = true;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if ( $update_options ) {
 | |
| 			update_option( 'generate_settings', $settings );
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| GeneratePress_Theme_Update::get_instance();
 |