<?php /** * Class for the import actions used in the One Click Demo Import plugin. * Register default WP actions for OCDI plugin. * * @package ocdi */ namespace OCDI; class ImportActions { /** * Register all action hooks for this class. */ public function register_hooks() { // Before content import. add_action( 'ocdi/before_content_import_execution', array( $this, 'before_content_import_action' ), 10, 3 ); // After content import. add_action( 'ocdi/after_content_import_execution', array( $this, 'before_widget_import_action' ), 10, 3 ); add_action( 'ocdi/after_content_import_execution', array( $this, 'widgets_import' ), 20, 3 ); add_action( 'ocdi/after_content_import_execution', array( $this, 'redux_import' ), 30, 3 ); // Customizer import. add_action( 'ocdi/customizer_import_execution', array( $this, 'customizer_import' ), 10, 1 ); // After full import action. add_action( 'ocdi/after_all_import_execution', array( $this, 'after_import_action' ), 10, 3 ); // Special widget import cases. if ( Helpers::apply_filters( 'ocdi/enable_custom_menu_widget_ids_fix', true ) ) { add_action( 'ocdi/widget_settings_array', array( $this, 'fix_custom_menu_widget_ids' ) ); } } /** * Change the menu IDs in the custom menu widgets in the widget import data. * This solves the issue with custom menu widgets not having the correct (new) menu ID, because they * have the old menu ID from the export site. * * @param array $widget The widget settings array. */ public function fix_custom_menu_widget_ids( $widget ) { // Skip (no changes needed), if this is not a custom menu widget. if ( ! array_key_exists( 'nav_menu', $widget ) || empty( $widget['nav_menu'] ) || ! is_int( $widget['nav_menu'] ) ) { return $widget; } // Get import data, with new menu IDs. $ocdi = OneClickDemoImport::get_instance(); $content_import_data = $ocdi->importer->get_importer_data(); $term_ids = $content_import_data['mapping']['term_id']; // Set the new menu ID for the widget. $widget['nav_menu'] = $term_ids[ $widget['nav_menu'] ]; return $widget; } /** * Execute the widgets import. * * @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux). * @param array $import_files The filtered import files defined in `ocdi/import_files` filter. * @param int $selected_index Selected index of import. */ public function widgets_import( $selected_import_files, $import_files, $selected_index ) { if ( ! empty( $selected_import_files['widgets'] ) ) { WidgetImporter::import( $selected_import_files['widgets'] ); } } /** * Execute the Redux import. * * @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux). * @param array $import_files The filtered import files defined in `ocdi/import_files` filter. * @param int $selected_index Selected index of import. */ public function redux_import( $selected_import_files, $import_files, $selected_index ) { if ( ! empty( $selected_import_files['redux'] ) ) { ReduxImporter::import( $selected_import_files['redux'] ); } } /** * Execute the customizer import. * * @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux). * @param array $import_files The filtered import files defined in `ocdi/import_files` filter. * @param int $selected_index Selected index of import. */ public function customizer_import( $selected_import_files ) { if ( ! empty( $selected_import_files['customizer'] ) ) { CustomizerImporter::import( $selected_import_files['customizer'] ); } } /** * Execute the action: 'ocdi/before_content_import'. * * @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux). * @param array $import_files The filtered import files defined in `ocdi/import_files` filter. * @param int $selected_index Selected index of import. */ public function before_content_import_action( $selected_import_files, $import_files, $selected_index ) { $this->do_import_action( 'ocdi/before_content_import', $import_files[ $selected_index ] ); } /** * Execute the action: 'ocdi/before_widgets_import'. * * @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux). * @param array $import_files The filtered import files defined in `ocdi/import_files` filter. * @param int $selected_index Selected index of import. */ public function before_widget_import_action( $selected_import_files, $import_files, $selected_index ) { $this->do_import_action( 'ocdi/before_widgets_import', $import_files[ $selected_index ] ); } /** * Execute the action: 'ocdi/after_import'. * * @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux). * @param array $import_files The filtered import files defined in `ocdi/import_files` filter. * @param int $selected_index Selected index of import. */ public function after_import_action( $selected_import_files, $import_files, $selected_index ) { $this->do_import_action( 'ocdi/after_import', $import_files[ $selected_index ] ); } /** * Register the do_action hook, so users can hook to these during import. * * @param string $action The action name to be executed. * @param array $selected_import The data of selected import from `ocdi/import_files` filter. */ private function do_import_action( $action, $selected_import ) { if ( false !== Helpers::has_action( $action ) ) { $ocdi = OneClickDemoImport::get_instance(); $log_file_path = $ocdi->get_log_file_path(); ob_start(); Helpers::do_action( $action, $selected_import ); $message = ob_get_clean(); // Add this message to log file. $log_added = Helpers::append_to_file( $message, $log_file_path, $action ); } } }