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