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.
258 lines
7.2 KiB
PHP
258 lines
7.2 KiB
PHP
<?php
|
|
/**
|
|
* Bsf Custom Fonts update class
|
|
*
|
|
* @since 1.2.5
|
|
* @package Bsf_Custom_Fonts
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
/**
|
|
* Custom_Fonts_Update initial setup
|
|
*
|
|
* @since 1.2.5
|
|
*/
|
|
class Custom_Fonts_Update {
|
|
|
|
/**
|
|
* Member Variable
|
|
*
|
|
* @var instance
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* Option key for stored version number.
|
|
*
|
|
* @var instance
|
|
*/
|
|
private $db_version_key = '_custom_fonts_db_version';
|
|
|
|
/**
|
|
* Initiator
|
|
*/
|
|
public static function get_instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct() {
|
|
|
|
// Plugin updates.
|
|
if ( is_admin() ) {
|
|
add_action( 'admin_init', array( $this, 'init' ), 5 );
|
|
} else {
|
|
add_action( 'wp', array( $this, 'init' ), 5 );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Implement plugin update logic.
|
|
*
|
|
* @since 1.2.5
|
|
*/
|
|
public function init() {
|
|
do_action( 'custom_fonts_update_before' );
|
|
|
|
if ( ! $this->needs_db_update() ) {
|
|
return;
|
|
}
|
|
|
|
$db_version = get_option( $this->db_version_key, false );
|
|
|
|
if ( version_compare( $db_version, '1.2.4', '<=' ) ) {
|
|
$this->v_1_2_5();
|
|
}
|
|
|
|
if ( version_compare( $db_version, '1.2.6', '<=' ) ) {
|
|
$this->v_1_3_0();
|
|
}
|
|
|
|
if ( version_compare( $db_version, '2.0.2', '<=' ) ) {
|
|
$this->v_2_0_2();
|
|
}
|
|
|
|
$this->update_db_version();
|
|
|
|
do_action( 'custom_fonts_update_after' );
|
|
}
|
|
|
|
/**
|
|
* Removes the http:// from the font display property.
|
|
*
|
|
* @since 1.2.5
|
|
*/
|
|
public function v_1_2_5() {
|
|
|
|
$terms = get_terms(
|
|
'bsf_custom_fonts',
|
|
array(
|
|
'hide_empty' => false,
|
|
)
|
|
);
|
|
|
|
if ( ! empty( $terms ) && class_exists( 'Bsf_Custom_Fonts_Taxonomy' ) ) {
|
|
foreach ( $terms as $term ) {
|
|
$font_links = Bsf_Custom_Fonts_Taxonomy::get_font_links( $term->term_id );
|
|
|
|
$font_links['font-display'] = str_replace( 'http://', '', $font_links['font-display'] );
|
|
|
|
Bsf_Custom_Fonts_Taxonomy::update_font_links( $font_links, $term->term_id );
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Update the font array according to new font weight repeater fields.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
public function v_1_3_0() {
|
|
|
|
$terms = get_terms(
|
|
'bsf_custom_fonts',
|
|
array(
|
|
'hide_empty' => false,
|
|
)
|
|
);
|
|
|
|
if ( ! empty( $terms ) && class_exists( 'Bsf_Custom_Fonts_Taxonomy' ) ) {
|
|
foreach ( $terms as $term ) {
|
|
$font_links = Bsf_Custom_Fonts_Taxonomy::get_font_links( $term->term_id );
|
|
|
|
$new_font_arr = array();
|
|
$new_font_arr['font_fallback'] = '';
|
|
$new_font_arr['font-display'] = isset( $font_links['font-display'] ) ? $font_links['font-display'] : '';
|
|
$new_font_arr['font-weight-0'] = '400';
|
|
$new_font_arr['font_woff_2-0'] = isset( $font_links['font_woff_2'] ) ? $font_links['font_woff_2'] : '';
|
|
$new_font_arr['font_woff-0'] = isset( $font_links['font_woff'] ) ? $font_links['font_woff'] : '';
|
|
$new_font_arr['font_ttf-0'] = isset( $font_links['font_ttf'] ) ? $font_links['font_ttf'] : '';
|
|
$new_font_arr['font_eot-0'] = isset( $font_links['font_eot'] ) ? $font_links['font_eot'] : '';
|
|
$new_font_arr['font_svg-0'] = isset( $font_links['font_svg'] ) ? $font_links['font_svg'] : '';
|
|
$new_font_arr['font_otf-0'] = isset( $font_links['font_otf'] ) ? $font_links['font_otf'] : '';
|
|
|
|
Bsf_Custom_Fonts_Taxonomy::update_font_links( $new_font_arr, $term->term_id );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Hotfix update for handling following migration cases.
|
|
* 1. v1.3.7 <> v2.0.0 <> v2.0.1 <> v2.0.2
|
|
* 2. v1.3.7 <> v2.0.2
|
|
* 3. v2.0.0 <> v2.0.2 && v2.0.1 <> v2.0.2
|
|
*
|
|
* @since 2.0.2
|
|
*/
|
|
public function v_2_0_2() {
|
|
$is_already_migrated_2_0_2 = get_option( 'bcf_custom_fonts_2_0_2_migration', false ); // Check if already migrated.
|
|
|
|
// Halt if already migrated.
|
|
if ( false !== $is_already_migrated_2_0_2 ) {
|
|
return;
|
|
}
|
|
|
|
$tax_fonts = Bsf_Custom_Fonts_Taxonomy::get_fonts(); // Get all fonts from taxonomy.
|
|
$all_font_posts = Bsf_Custom_Fonts_Render::get_instance()->get_existing_font_posts(); // Get all fonts from v2 post type posts.
|
|
$is_already_migrated_2_0 = get_option( 'bcf_custom_fonts_2_0_migration', false ); // Migrated flag 2.0.
|
|
$v2_0_migration_done = ( ! empty( $all_font_posts ) && false !== $is_already_migrated_2_0 ) ? true : false;
|
|
|
|
if ( ! empty( $tax_fonts ) ) {
|
|
foreach ( $tax_fonts as $load_font_name => $load_font ) {
|
|
if ( $v2_0_migration_done ) {
|
|
// Fixing v1.3.7 <> v2.0.0 <> v2.0.2 migration case.
|
|
foreach ( $all_font_posts as $font_post => $font_post_id ) {
|
|
if ( get_the_title( $font_post_id ) === $load_font_name ) {
|
|
$font_data = bcf_prepare_backward_font_data( $load_font_name );
|
|
$font_face = bcf_get_font_face_css( $font_post_id, $font_data, true );
|
|
|
|
update_post_meta( $font_post_id, 'fonts-data', $font_data );
|
|
update_post_meta( $font_post_id, 'fonts-face', $font_face );
|
|
} else {
|
|
$font_metadata = get_post_meta( $font_post_id, 'fonts-data', true );
|
|
$font_data = bcf_make_font_url_meta_as_array( $font_metadata );
|
|
$font_face = bcf_get_font_face_css( $font_post_id, $font_data, true );
|
|
|
|
update_post_meta( $font_post_id, 'fonts-data', $font_data );
|
|
update_post_meta( $font_post_id, 'fonts-face', $font_face );
|
|
}
|
|
}
|
|
} else {
|
|
// Fixing v1.3.7 <> v2.0.2 migration case.
|
|
$font_data = bcf_prepare_backward_font_data( $load_font_name );
|
|
|
|
// Create post object.
|
|
$new_font_post = array(
|
|
'post_title' => ! empty( $font_data['font_name'] ) ? $font_data['font_name'] : 'untitled',
|
|
'post_status' => 'publish',
|
|
'post_type' => BSF_CUSTOM_FONTS_POST_TYPE,
|
|
);
|
|
|
|
// Insert the post into the database.
|
|
$font_post_id = wp_insert_post( $new_font_post );
|
|
|
|
if ( is_wp_error( $font_post_id ) ) {
|
|
return;
|
|
}
|
|
|
|
$font_face = bcf_get_font_face_css( $font_post_id, $font_data, true );
|
|
|
|
update_post_meta( $font_post_id, 'fonts-data', $font_data );
|
|
update_post_meta( $font_post_id, 'fonts-face', $font_face );
|
|
update_post_meta( $font_post_id, 'font-type', 'local' );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! empty( $all_font_posts ) && false === $is_already_migrated_2_0 ) {
|
|
// Fixing v2.0.0 <> v2.0.2 migration case.
|
|
foreach ( $all_font_posts as $font_post => $font_post_id ) {
|
|
$font_metadata = get_post_meta( $font_post_id, 'fonts-data', true );
|
|
$font_data = bcf_make_font_url_meta_as_array( $font_metadata );
|
|
$font_face = bcf_get_font_face_css( $font_post_id, $font_data, true );
|
|
|
|
update_post_meta( $font_post_id, 'fonts-data', $font_data );
|
|
update_post_meta( $font_post_id, 'fonts-face', $font_face );
|
|
}
|
|
}
|
|
|
|
update_option( 'bcf_custom_fonts_2_0_2_migration', true );
|
|
}
|
|
|
|
/**
|
|
* Check if db upgrade is required.
|
|
*
|
|
* @since 1.2.5
|
|
* @return true|false True if stored database version is lower than constant; false if otherwise.
|
|
*/
|
|
private function needs_db_update() {
|
|
$db_version = get_option( $this->db_version_key, false );
|
|
|
|
if ( false === $db_version || version_compare( $db_version, BSF_CUSTOM_FONTS_VER, '!=' ) ) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Update DB version.
|
|
*
|
|
* @since 1.2.5
|
|
* @return void
|
|
*/
|
|
private function update_db_version() {
|
|
update_option( '_custom_fonts_db_version', BSF_CUSTOM_FONTS_VER );
|
|
}
|
|
}
|
|
|
|
Custom_Fonts_Update::get_instance();
|