Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
firepot
/
wp-content
/
plugins
/
one-click-demo-import
/
inc
:
Importer.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /** * Class for declaring the content importer used in the One Click Demo Import plugin * * @package ocdi */ namespace OCDI; class Importer { /** * The importer class object used for importing content. * * @var object */ private $importer; /** * Time in milliseconds, marking the beginning of the import. * * @var float */ private $microtime; /** * The instance of the OCDI\Logger class. * * @var object */ public $logger; /** * The instance of the One Click Demo Import class. * * @var object */ private $ocdi; /** * Constructor method. * * @param array $importer_options Importer options. * @param object $logger Logger object used in the importer. */ public function __construct( $importer_options = array(), $logger = null ) { // Include files that are needed for WordPress Importer v2. $this->include_required_files(); // Set the WordPress Importer v2 as the importer used in this plugin. // More: https://github.com/humanmade/WordPress-Importer. $this->importer = new WXRImporter( $importer_options ); // Set logger to the importer. $this->logger = $logger; if ( ! empty( $this->logger ) ) { $this->set_logger( $this->logger ); } // Get the OCDI (main plugin class) instance. $this->ocdi = OneClickDemoImport::get_instance(); } /** * Include required files. */ private function include_required_files() { if ( ! class_exists( '\WP_Importer' ) ) { require ABSPATH . '/wp-admin/includes/class-wp-importer.php'; } } /** * Imports content from a WordPress export file. * * @param string $data_file path to xml file, file with WordPress export data. */ public function import( $data_file ) { $this->importer->import( $data_file ); } /** * Set the logger used in the import * * @param object $logger logger instance. */ public function set_logger( $logger ) { $this->importer->set_logger( $logger ); } /** * Get all protected variables from the WXR_Importer needed for continuing the import. */ public function get_importer_data() { return $this->importer->get_importer_data(); } /** * Sets all protected variables from the WXR_Importer needed for continuing the import. * * @param array $data with set variables. */ public function set_importer_data( $data ) { $this->importer->set_importer_data( $data ); } /** * Import content from an WP XML file. * * @param string $import_file_path Path to the import file. */ public function import_content( $import_file_path ) { $this->microtime = microtime( true ); // Increase PHP max execution time. Just in case, even though the AJAX calls are only 25 sec long. if ( strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) === false ) { set_time_limit( Helpers::apply_filters( 'ocdi/set_time_limit_for_demo_data_import', 300 ) ); } // Disable import of authors. add_filter( 'wxr_importer.pre_process.user', '__return_false' ); // Check, if we need to send another AJAX request and set the importing author to the current user. add_filter( 'wxr_importer.pre_process.post', array( $this, 'new_ajax_request_maybe' ) ); // Disables generation of multiple image sizes (thumbnails) in the content import step. if ( ! Helpers::apply_filters( 'ocdi/regenerate_thumbnails_in_content_import', true ) ) { add_filter( 'intermediate_image_sizes_advanced', '__return_null' ); } // Import content. if ( ! empty( $import_file_path ) ) { ob_start(); $this->import( $import_file_path ); $message = ob_get_clean(); } // Return any error messages for the front page output (errors, critical, alert and emergency level messages only). return $this->logger->error_output; } /** * Check if we need to create a new AJAX request, so that server does not timeout. * * @param array $data current post data. * @return array */ public function new_ajax_request_maybe( $data ) { if ( empty( $data ) ) { return $data; } $time = microtime( true ) - $this->microtime; // We should make a new ajax call, if the time is right. if ( $time > Helpers::apply_filters( 'ocdi/time_for_one_ajax_call', 25 ) ) { $response = array( 'status' => 'newAJAX', 'message' => 'Time for new AJAX request!: ' . $time, ); // Add any output to the log file and clear the buffers. $message = ob_get_clean(); // Add any error messages to the frontend_error_messages variable in OCDI main class. if ( ! empty( $message ) ) { $this->ocdi->append_to_frontend_error_messages( $message ); } // Add message to log file. $log_added = Helpers::append_to_file( __( 'New AJAX call!' , 'one-click-demo-import' ) . PHP_EOL . $message, $this->ocdi->get_log_file_path(), '' ); // Set the current importer stat, so it can be continued on the next AJAX call. $this->set_current_importer_data(); // Send the request for a new AJAX call. wp_send_json( $response ); } // Set importing author to the current user. // Fixes the [WARNING] Could not find the author for ... log warning messages. $current_user_obj = wp_get_current_user(); $data['post_author'] = $current_user_obj->user_login; return $data; } /** * Set current state of the content importer, so we can continue the import with new AJAX request. */ private function set_current_importer_data() { $data = array_merge( $this->ocdi->get_current_importer_data(), $this->get_importer_data() ); Helpers::set_ocdi_import_data_transient( $data ); } }