• File: class-migration.php
  • Full Path: /home/matthif/www/wp-content/plugins/visual-portfolio/classes/class-migration.php
  • Date Modified: 12/12/2023 4:36 AM
  • File size: 11.12 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?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' ), );
        } else {
            
add_action'wp', array( $this'init' ), );
        }
    }

    
/**
     * 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_attrtrue );
                    
$new_val get_post_meta$post->ID'vp_' $new_attrtrue );

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

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