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 }