355 lines
11 KiB
PHP
355 lines
11 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Migrations
|
||
|
*
|
||
|
* @package visual-portfolio
|
||
|
*/
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Class Visual_Portfolio_Migrations
|
||
|
*/
|
||
|
class Visual_Portfolio_Migrations {
|
||
|
/**
|
||
|
* The version.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $version = VISUAL_PORTFOLIO_VERSION;
|
||
|
|
||
|
/**
|
||
|
* Initial version.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $initial_version = '1.16.2';
|
||
|
|
||
|
/**
|
||
|
* Visual_Portfolio_Migrations constructor.
|
||
|
*/
|
||
|
public function __construct() {
|
||
|
if ( is_admin() ) {
|
||
|
add_action( 'admin_init', array( $this, 'init' ), 3 );
|
||
|
} else {
|
||
|
add_action( 'wp', array( $this, 'init' ), 3 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Init.
|
||
|
*/
|
||
|
public function init() {
|
||
|
// Migration code added after `$this->initial_version` plugin version.
|
||
|
$saved_version = get_option( 'vpf_db_version', $this->initial_version );
|
||
|
$current_version = $this->version;
|
||
|
|
||
|
foreach ( $this->get_migrations() as $migration ) {
|
||
|
if ( version_compare( $saved_version, $migration['version'], '<' ) ) {
|
||
|
call_user_func( $migration['cb'] );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( version_compare( $saved_version, $current_version, '<' ) ) {
|
||
|
update_option( 'vpf_db_version', $current_version );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get all available migrations.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
public function get_migrations() {
|
||
|
return array(
|
||
|
array(
|
||
|
'version' => '3.0.0',
|
||
|
'cb' => array( $this, 'v_3_0_0' ),
|
||
|
),
|
||
|
array(
|
||
|
'version' => '2.15.0',
|
||
|
'cb' => array( $this, 'v_2_15_0' ),
|
||
|
),
|
||
|
array(
|
||
|
'version' => '2.10.0',
|
||
|
'cb' => array( $this, 'v_2_10_0' ),
|
||
|
),
|
||
|
array(
|
||
|
'version' => '2.0.0',
|
||
|
'cb' => array( $this, 'v_2_0_0' ),
|
||
|
),
|
||
|
array(
|
||
|
'version' => '1.11.0',
|
||
|
'cb' => array( $this, 'v_1_11_0' ),
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add new attributes and values from old attributes.
|
||
|
*/
|
||
|
public function v_3_0_0() {
|
||
|
// Get all available Layouts.
|
||
|
// Don't use WP_Query on the admin side https://core.trac.wordpress.org/ticket/18408.
|
||
|
$layouts_query = get_posts(
|
||
|
array(
|
||
|
'post_type' => 'vp_lists',
|
||
|
'posts_per_page' => -1,
|
||
|
'paged' => -1,
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$attributes_to_change = array(
|
||
|
// Align.
|
||
|
'items_style_default__align' => 'items_style_default__caption_text_align',
|
||
|
'items_style_fade__align' => 'items_style_fade__overlay_text_align',
|
||
|
'items_style_fly__align' => 'items_style_fly__overlay_text_align',
|
||
|
'items_style_emerge__align' => 'items_style_emerge__caption_text_align',
|
||
|
'items_style_caption_move__align' => 'items_style_caption_move__caption_text_align',
|
||
|
|
||
|
// Color.
|
||
|
'items_style_default__bg_color' => 'items_style_default__overlay_bg_color',
|
||
|
'items_style_default__text_color' => 'items_style_default__overlay_text_color',
|
||
|
'items_style_default__meta_text_color' => 'items_style_default__caption_text_color',
|
||
|
'items_style_default__meta_links_color' => 'items_style_default__caption_links_color',
|
||
|
'items_style_default__meta_links_hover_color' => 'items_style_default__caption_links_hover_color',
|
||
|
'items_style_fade__bg_color' => 'items_style_fade__overlay_bg_color',
|
||
|
'items_style_fade__text_color' => 'items_style_fade__overlay_text_color',
|
||
|
'items_style_fly__bg_color' => 'items_style_fly__overlay_bg_color',
|
||
|
'items_style_fly__text_color' => 'items_style_fly__overlay_text_color',
|
||
|
'items_style_emerge__bg_color' => 'items_style_emerge__caption_bg_color',
|
||
|
'items_style_emerge__text_color' => 'items_style_emerge__caption_text_color',
|
||
|
'items_style_emerge__links_color' => 'items_style_emerge__caption_links_color',
|
||
|
'items_style_emerge__links_hover_color' => 'items_style_emerge__caption_links_hover_color',
|
||
|
'items_style_emerge__img_overlay_bg_color' => 'items_style_emerge__overlay_bg_color',
|
||
|
'items_style_caption-move__bg_color' => 'items_style_caption-move__caption_bg_color',
|
||
|
'items_style_caption-move__text_color' => 'items_style_caption-move__caption_text_color',
|
||
|
'items_style_caption-move__img_overlay_bg_color' => 'items_style_caption-move__overlay_bg_color',
|
||
|
'items_style_caption-move__overlay_text_color' => 'items_style_caption-move__overlay_text_color',
|
||
|
|
||
|
// Move Under Image.
|
||
|
'items_style_fade__move_overlay_under_image' => 'items_style_fade__overlay_under_image',
|
||
|
'items_style_fly__move_overlay_under_image' => 'items_style_fly__overlay_under_image',
|
||
|
'items_style_emerge__move_overlay_under_image' => 'items_style_emerge__caption_under_image',
|
||
|
'items_style_caption-move__move_overlay_under_image' => 'items_style_caption-move__caption_under_image',
|
||
|
);
|
||
|
|
||
|
$attributes_border_radius = array(
|
||
|
'items_style_default__images_rounded_corners',
|
||
|
'items_style_fade__images_rounded_corners',
|
||
|
'items_style_fly__images_rounded_corners',
|
||
|
'items_style_emerge__images_rounded_corners',
|
||
|
'items_style_caption_move__images_rounded_corners',
|
||
|
);
|
||
|
|
||
|
if ( $layouts_query ) {
|
||
|
foreach ( $layouts_query as $post ) {
|
||
|
// Change Portfolio content source to Post with custom post type Portfolio.
|
||
|
if ( 'portfolio' === get_post_meta( $post->ID, 'vp_content_source', true ) ) {
|
||
|
update_post_meta( $post->ID, 'vp_content_source', 'post-based' );
|
||
|
update_post_meta( $post->ID, 'vp_posts_source', 'portfolio' );
|
||
|
}
|
||
|
|
||
|
foreach ( $attributes_to_change as $old_attr => $new_attr ) {
|
||
|
$old_val = get_post_meta( $post->ID, 'vp_' . $old_attr, true );
|
||
|
$new_val = get_post_meta( $post->ID, 'vp_' . $new_attr, true );
|
||
|
|
||
|
if ( $old_val && ! $new_val ) {
|
||
|
update_post_meta( $post->ID, 'vp_' . $new_attr, $old_val );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
foreach ( $attributes_border_radius as $attr_name ) {
|
||
|
$attr_val = get_post_meta( $post->ID, 'vp_' . $attr_name, true );
|
||
|
|
||
|
if ( is_numeric( $attr_val ) ) {
|
||
|
update_post_meta( $post->ID, 'vp_' . $attr_name, $attr_val . 'px' );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
wp_reset_postdata();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check the old portfolio slug option and create a page with archive page based on it.
|
||
|
*/
|
||
|
public function v_2_15_0() {
|
||
|
// Backward compatible with old slug option.
|
||
|
$settings_section = 'vp_general';
|
||
|
$option_name = 'portfolio_slug';
|
||
|
$options = get_option( $settings_section );
|
||
|
|
||
|
if ( isset( $options[ $option_name ] ) ) {
|
||
|
$custom_slug = $options[ $option_name ];
|
||
|
$archive_id = get_option( '_vp_add_archive_page' );
|
||
|
|
||
|
if ( $archive_id ) {
|
||
|
// Update archive slug on page.
|
||
|
wp_update_post(
|
||
|
array(
|
||
|
'ID' => $archive_id,
|
||
|
'post_name' => wp_slash( $custom_slug ),
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// Rewrite flush rules.
|
||
|
visual_portfolio()->defer_flush_rewrite_rules();
|
||
|
} else {
|
||
|
// Create archive page.
|
||
|
Visual_Portfolio_Archive_Mapping::create_archive_page( $custom_slug );
|
||
|
}
|
||
|
|
||
|
// Delete old option.
|
||
|
unset( $options[ $option_name ] );
|
||
|
update_option( $settings_section, $options );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Move popup title and description settings to single Layouts.
|
||
|
*/
|
||
|
public function v_2_10_0() {
|
||
|
$options = get_option( 'vp_images' );
|
||
|
|
||
|
if ( ! isset( $options['lazy_loading'] ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( 'off' === $options['lazy_loading'] || ! $options['lazy_loading'] ) {
|
||
|
$options['lazy_loading'] = '';
|
||
|
} else {
|
||
|
$options['lazy_loading'] = 'vp';
|
||
|
}
|
||
|
|
||
|
update_option( 'vp_images', $options );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 1. Change Portfolio content source to Post with custom post type Portfolio
|
||
|
* 2. Change filters, sort and pagination to layout-elements.
|
||
|
*/
|
||
|
public function v_2_0_0() {
|
||
|
// Get all available Layouts.
|
||
|
// Don't use WP_Query on the admin side https://core.trac.wordpress.org/ticket/18408.
|
||
|
$layouts_query = get_posts(
|
||
|
array(
|
||
|
'post_type' => 'vp_lists',
|
||
|
'posts_per_page' => -1,
|
||
|
'paged' => -1,
|
||
|
)
|
||
|
);
|
||
|
|
||
|
if ( $layouts_query ) {
|
||
|
foreach ( $layouts_query as $post ) {
|
||
|
// Change Portfolio content source to Post with custom post type Portfolio.
|
||
|
if ( 'portfolio' === get_post_meta( $post->ID, 'vp_content_source', true ) ) {
|
||
|
update_post_meta( $post->ID, 'vp_content_source', 'post-based' );
|
||
|
update_post_meta( $post->ID, 'vp_posts_source', 'portfolio' );
|
||
|
}
|
||
|
|
||
|
// Change filters, sort and pagination to layout-elements.
|
||
|
if ( ! get_post_meta( $post->ID, 'vp_layout_elements', true ) ) {
|
||
|
$top = array();
|
||
|
$bottom = array();
|
||
|
$filter = get_post_meta( $post->ID, 'vp_filter', true );
|
||
|
$sort = get_post_meta( $post->ID, 'vp_sort', true );
|
||
|
$pagination = get_post_meta( $post->ID, 'vp_pagination_style', true );
|
||
|
|
||
|
// Filter.
|
||
|
if ( $filter && 'false' !== $filter && false !== $filter ) {
|
||
|
$top[] = 'filter';
|
||
|
} else {
|
||
|
update_post_meta( $post->ID, 'vp_filter', 'minimal' );
|
||
|
}
|
||
|
|
||
|
// Sort.
|
||
|
if ( $sort && 'false' !== $sort && false !== $sort ) {
|
||
|
$top[] = 'sort';
|
||
|
} else {
|
||
|
update_post_meta( $post->ID, 'vp_sort', 'dropdown' );
|
||
|
}
|
||
|
|
||
|
// Pagination.
|
||
|
if ( $pagination && 'false' !== $pagination && false !== $pagination ) {
|
||
|
$bottom[] = 'pagination';
|
||
|
} else {
|
||
|
update_post_meta( $post->ID, 'vp_pagination_style', 'minimal' );
|
||
|
}
|
||
|
|
||
|
// Layout Elements.
|
||
|
if ( ! empty( $top ) || ! empty( $bottom ) ) {
|
||
|
update_post_meta(
|
||
|
$post->ID,
|
||
|
'vp_layout_elements',
|
||
|
array(
|
||
|
'top' => array(
|
||
|
'elements' => $top,
|
||
|
'align' => 'center',
|
||
|
),
|
||
|
'items' => array(
|
||
|
'elements' => array( 'items' ),
|
||
|
),
|
||
|
'bottom' => array(
|
||
|
'elements' => $bottom,
|
||
|
'align' => 'center',
|
||
|
),
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
wp_reset_postdata();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Move popup title and description settings to single Layouts.
|
||
|
*/
|
||
|
public function v_1_11_0() {
|
||
|
$options = get_option( 'vp_popup_gallery' );
|
||
|
|
||
|
if ( ! isset( $options['show_caption'] ) && ! isset( $options['caption_title'] ) && ! isset( $options['caption_description'] ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$new_show_caption = isset( $options['show_caption'] ) ? 'on' === $options['show_caption'] : true;
|
||
|
$new_title_source = $new_show_caption && isset( $options['caption_title'] ) ? $options['caption_title'] : 'none';
|
||
|
$new_description_source = $new_show_caption && isset( $options['caption_description'] ) ? $options['caption_description'] : 'none';
|
||
|
|
||
|
// Get all available Layouts.
|
||
|
// Don't use WP_Query on the admin side https://core.trac.wordpress.org/ticket/18408.
|
||
|
$layouts_query = get_posts(
|
||
|
array(
|
||
|
'post_type' => 'vp_lists',
|
||
|
'posts_per_page' => -1,
|
||
|
'paged' => -1,
|
||
|
)
|
||
|
);
|
||
|
if ( $layouts_query ) {
|
||
|
foreach ( $layouts_query as $post ) {
|
||
|
update_post_meta( $post->ID, 'vp_items_click_action_popup_title_source', $new_title_source );
|
||
|
update_post_meta( $post->ID, 'vp_items_click_action_popup_description_source', $new_description_source );
|
||
|
}
|
||
|
wp_reset_postdata();
|
||
|
}
|
||
|
|
||
|
// remove saved old options.
|
||
|
if ( isset( $options['show_caption'] ) ) {
|
||
|
unset( $options['show_caption'] );
|
||
|
}
|
||
|
if ( isset( $options['caption_title'] ) ) {
|
||
|
unset( $options['caption_title'] );
|
||
|
}
|
||
|
if ( isset( $options['caption_description'] ) ) {
|
||
|
unset( $options['caption_description'] );
|
||
|
}
|
||
|
|
||
|
update_option( 'vp_popup_gallery', $options );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
new Visual_Portfolio_Migrations();
|