<?php
  /**
   * Below script helps you migrate from "WooCommerce Multi Currency Premium" by VillaTheme to WPML's own multi-currency
   * This is helpful if you've added WPML to your site, after setting up multi currency, and would like to lower
   * your plugin overhead, or if you're experiecing issues with VillaTheme's plugin.
   *
   * Esentially, when you run below script, it will migrate all the postmeta from your products / variations from meta
   * values "_DKK" to "_price_DKK", etc.
   *
   * NOTE: This script does not handle scheduled prices, but it can be easilly managed. Also sale price is not included,
   * but it's very easy to add if you'd like.
   *
   * How to use:
   * 1) Update the $currencies array to the currencies you'd like to update
   * 2) Install WP-Cli and run the command "wp convert-currencies-format"
   * 3) Verify that you currencies have been updated.
   *
   *
   * Usage: `wp convert-currencies-format`
   *
   * @author Mattias Fjellvang <simplenotezy@github>
   */
   
   function convert_currencies_format() {
		global $wpdb;

		$metas_updated = 0;

		/**
		 * Currencies - add your currencies to the below array
		 */
		
			$currencies = [
				'"_DKK"',
				'"_NOK"',
				'"_GBP"',
				'"_EUR"',
				'"_SEK"'
			];

		/**
		 * Fetch posts
		 */
		
			$query = "
				SELECT
					p.id
				FROM
					" . $wpdb->prefix . "postmeta pm
				INNER JOIN
					" . $wpdb->prefix . "posts p ON p.id = pm.post_id AND p.post_type IN ('product', 'product_variation')
				WHERE
					pm.meta_key IN (" . implode(',', $currencies) . ")
				GROUP BY
					p.id
			";

			$products = $wpdb->get_results($query);

		/**
		 * Look through and update
		 */
		
			WP_CLI::success( 'Found ' . count($products) . ' products to update ');

		/**
		 * Promt user to confirm
		 */
		
			WP_CLI::warning('Please backup your database before proceeding!');
			
			WP_CLI::confirm('Would you like to continue? Following currencies will be updated if they exist: ' . str_replace(['"', '_'], '', implode(',', $currencies)));

		/**
		 * Loop through and update
		 * @var [type]
		 */
		
			$progress = \WP_CLI\Utils\make_progress_bar( 'Converting product meta', count($products) );

			foreach($products as $product) {
				/**
				 * Fetch post meta
				 */
				
					$query = "
						SELECT
							*
						FROM
							" . $wpdb->prefix . "postmeta pm
						WHERE	
							pm.post_id = '" . $product->id . "' AND pm.meta_key IN (" . implode(',', $currencies + ['_sale_price']) . ")
					";

					$metas = $wpdb->get_results($query);

				/**
				 * Convert metas
				 */
				
					foreach($metas as $meta) {
						$metas_updated = $metas_updated + 3; // amount of metas updating...

						update_post_meta( $product->id, '_price' . $meta->meta_key, $meta->meta_value);
						update_post_meta( $product->id, '_regular_price' . $meta->meta_key, $meta->meta_value);
						update_post_meta( $product->id, '_wcml_custom_prices_status', '1');

						//update_post_meta( $product->ID, '_sale_price' . $meta->meta_key, $meta->meta_value);
					}

				$progress->tick();
			}

		$progress->finish();

		// Show success message
		WP_CLI::success( 'Finished updating ' . count($products) . ' with ' . $metas_updated . ' meta values' );

	}
	if ( defined( 'WP_CLI' ) && WP_CLI ) {
		WP_CLI::add_command( 'convert-currencies-format', 'convert_currencies_format' );
	}
  ?>