wp_back/wp-content/plugins/visual-portfolio/classes/class-migration.php
2024-05-20 15:37:46 +03:00

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