register_ajax_action( 're_migrate_globals', [ $this, 'ajax_re_migrate_globals' ] ); } public function ajax_re_migrate_globals() { $this->run(); return true; } /** * @deprecated 3.1.0 */ public function admin_localize_settings() { Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.1.0' ); return []; } public function register_admin_tools_fields( Tools $tools ) { // Add the re-migrate button only if needed. if ( ! $this->has_typography() && ! $this->has_colors() && ! $this->has_saved_colors() ) { return; } // Add the button to the rollback screen. $tools->add_fields( 'versions', 'rollback', [ 're_migrate_globals_separator' => [ 'field_args' => [ 'type' => 'raw_html', 'html' => '
', ], ], 're_migrate_globals' => [ 'label' => esc_html__( 'Rerun Update Script', 'elementor' ), 'field_args' => [ 'type' => 'raw_html', 'html' => sprintf( '%s', wp_create_nonce( 'elementor_re_migrate_globals' ), __( 'Migrate to v3.0', 'elementor' ) ), 'desc' => '' . esc_html__( 'Warning: This will reset your current Global Fonts and Colors, and will migrate your previous settings from v2.x versions.', 'elementor' ) . '', ], ], ] ); } private function run() { $this->notice( 'Re-migrate 3.0.0 globals: Start' ); $callbacks = []; $kit = Plugin::$instance->kits_manager->get_active_kit(); // Already exist. use raw settings that doesn't have default values. $meta_key = SettingsPageManager::META_KEY; $kit_raw_settings = $kit->get_meta( $meta_key ); // Apply a default value for $kit_raw_settings in case it's not defined. if ( empty( $kit_raw_settings ) ) { $kit_raw_settings = []; } if ( $this->has_typography() ) { $callbacks[] = [ Upgrades::class, '_v_3_0_0_move_default_typography_to_kit' ]; unset( $kit_raw_settings['system_typography'] ); } else { $this->notice( 'Typography not found' ); } if ( $this->has_colors() ) { $callbacks[] = [ Upgrades::class, '_v_3_0_0_move_default_colors_to_kit' ]; unset( $kit_raw_settings['system_colors'] ); } else { $this->notice( 'Colors not found' ); } if ( $this->has_saved_colors() ) { $callbacks[] = [ Upgrades::class, '_v_3_0_0_move_saved_colors_to_kit' ]; unset( $kit_raw_settings['custom_colors'] ); } else { $this->notice( 'Saved Colors not found' ); } if ( ! empty( $callbacks ) ) { $page_settings_manager = SettingsManager::get_settings_managers( 'page' ); $page_settings_manager->save_settings( $kit_raw_settings, $active_kit_id ); $this->run_callbacks( $callbacks ); } Plugin::$instance->files_manager->clear_cache(); $this->notice( 'Re-migrate 3.0.0 globals: End' ); } private function run_callbacks( $callbacks ) { foreach ( $callbacks as $callback ) { $updater = $this->create_updater(); $this->notice( 'Re-migrate 3.0.0 globals: ' . $callback[1] ); // Run upgrade. call_user_func( $callback, $updater, false ); } } /** * @return Updater */ private function create_updater() { $upgrades_manager = new Manager(); /** @var Updater $updater */ $updater = $upgrades_manager->get_task_runner(); $updater->set_current_item( [ 'iterate_num' => 1, ] ); return $updater; } private function has_typography() { return ! ! get_option( 'elementor_scheme_typography' ); } private function has_colors() { return ! ! get_option( 'elementor_scheme_color' ); } private function has_saved_colors() { return ! ! get_option( 'elementor_scheme_color-picker' ); } private function notice( $message ) { $logger = Plugin::$instance->logger->get_logger(); $logger->notice( $message ); } public function __construct() { add_action( 'elementor/admin/after_create_settings/' . Tools::PAGE_ID, [ $this, 'register_admin_tools_fields' ], 60 /* After plugins rollback */ ); add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); } }