balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

elementor-3-re-migrate-globals.php (4609B)


      1 <?php
      2 namespace Elementor\Core\Upgrade;
      3 
      4 use Elementor\Core\Common\Modules\Ajax\Module as Ajax;
      5 use Elementor\Core\Settings\Manager as SettingsManager;
      6 use Elementor\Core\Settings\Page\Manager as SettingsPageManager;
      7 use Elementor\Plugin;
      8 use Elementor\Tools;
      9 
     10 if ( ! defined( 'ABSPATH' ) ) {
     11 	exit; // Exit if accessed directly
     12 }
     13 
     14 class Elementor_3_Re_Migrate_Globals {
     15 
     16 	public function register_ajax_actions( Ajax $ajax ) {
     17 		$ajax->register_ajax_action( 're_migrate_globals', [ $this, 'ajax_re_migrate_globals' ] );
     18 	}
     19 
     20 	public function ajax_re_migrate_globals() {
     21 		$this->run();
     22 
     23 		return true;
     24 	}
     25 
     26 	/**
     27 	 * @deprecated 3.1.0
     28 	 */
     29 	public function admin_localize_settings() {
     30 		Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0' );
     31 
     32 		return [];
     33 	}
     34 
     35 	public function register_admin_tools_fields( Tools $tools ) {
     36 		// Add the re-migrate button only if needed.
     37 		if ( ! $this->has_typography() && ! $this->has_colors() && ! $this->has_saved_colors() ) {
     38 			return;
     39 		}
     40 
     41 		// Add the button to the rollback screen.
     42 		$tools->add_fields( 'versions', 'rollback', [
     43 			're_migrate_globals_separator' => [
     44 				'field_args' => [
     45 					'type' => 'raw_html',
     46 					'html' => '<hr>',
     47 				],
     48 			],
     49 			're_migrate_globals' => [
     50 				'label' => esc_html__( 'Rerun Update Script', 'elementor' ),
     51 				'field_args' => [
     52 					'type' => 'raw_html',
     53 					'html' => sprintf(
     54 						'<a href="#" data-nonce="%s" class="button elementor-button-spinner elementor-re-migrate-globals-button">%s</a>',
     55 						wp_create_nonce( 'elementor_re_migrate_globals' ),
     56 						__( 'Migrate to v3.0', 'elementor' )
     57 					),
     58 					'desc' => '<span style="color: red;">' . esc_html__( 'Warning: This will reset your current Global Fonts and Colors, and will migrate your previous settings from v2.x versions.', 'elementor' ) . '</span>',
     59 				],
     60 			],
     61 		] );
     62 	}
     63 
     64 	private function run() {
     65 		$this->notice( 'Re-migrate 3.0.0 globals: Start' );
     66 
     67 		$callbacks = [];
     68 
     69 		$kit = Plugin::$instance->kits_manager->get_active_kit();
     70 		// Already exist. use raw settings that doesn't have default values.
     71 		$meta_key = SettingsPageManager::META_KEY;
     72 		$kit_raw_settings = $kit->get_meta( $meta_key );
     73 
     74 		// Apply a default value for $kit_raw_settings in case it's not defined.
     75 		if ( empty( $kit_raw_settings ) ) {
     76 			$kit_raw_settings = [];
     77 		}
     78 
     79 		if ( $this->has_typography() ) {
     80 			$callbacks[] = [ Upgrades::class, '_v_3_0_0_move_default_typography_to_kit' ];
     81 			unset( $kit_raw_settings['system_typography'] );
     82 		} else {
     83 			$this->notice( 'Typography not found' );
     84 		}
     85 
     86 		if ( $this->has_colors() ) {
     87 			$callbacks[] = [ Upgrades::class, '_v_3_0_0_move_default_colors_to_kit' ];
     88 			unset( $kit_raw_settings['system_colors'] );
     89 		} else {
     90 			$this->notice( 'Colors not found' );
     91 		}
     92 
     93 		if ( $this->has_saved_colors() ) {
     94 			$callbacks[] = [ Upgrades::class, '_v_3_0_0_move_saved_colors_to_kit' ];
     95 			unset( $kit_raw_settings['custom_colors'] );
     96 		} else {
     97 			$this->notice( 'Saved Colors not found' );
     98 		}
     99 
    100 		if ( ! empty( $callbacks ) ) {
    101 			$page_settings_manager = SettingsManager::get_settings_managers( 'page' );
    102 			$page_settings_manager->save_settings( $kit_raw_settings, $active_kit_id );
    103 
    104 			$this->run_callbacks( $callbacks );
    105 		}
    106 
    107 		Plugin::$instance->files_manager->clear_cache();
    108 
    109 		$this->notice( 'Re-migrate 3.0.0 globals: End' );
    110 	}
    111 
    112 	private function run_callbacks( $callbacks ) {
    113 		foreach ( $callbacks as $callback ) {
    114 			$updater = $this->create_updater();
    115 
    116 			$this->notice( 'Re-migrate 3.0.0 globals: ' . $callback[1] );
    117 
    118 			// Run upgrade.
    119 			call_user_func( $callback, $updater, false );
    120 		}
    121 	}
    122 
    123 	/**
    124 	 * @return Updater
    125 	 */
    126 	private function create_updater() {
    127 		$upgrades_manager = new Manager();
    128 
    129 		/** @var Updater $updater */
    130 		$updater = $upgrades_manager->get_task_runner();
    131 
    132 		$updater->set_current_item( [
    133 			'iterate_num' => 1,
    134 		] );
    135 
    136 		return $updater;
    137 	}
    138 
    139 	private function has_typography() {
    140 		return ! ! get_option( 'elementor_scheme_typography' );
    141 	}
    142 
    143 	private function has_colors() {
    144 		return ! ! get_option( 'elementor_scheme_color' );
    145 	}
    146 
    147 	private function has_saved_colors() {
    148 		return ! ! get_option( 'elementor_scheme_color-picker' );
    149 	}
    150 
    151 	private function notice( $message ) {
    152 		$logger = Plugin::$instance->logger->get_logger();
    153 		$logger->notice( $message );
    154 	}
    155 
    156 	public function __construct() {
    157 		add_action( 'elementor/admin/after_create_settings/' . Tools::PAGE_ID, [ $this, 'register_admin_tools_fields' ], 60 /* After plugins rollback */ );
    158 		add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] );
    159 
    160 	}
    161 }