Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/elemento.../app/modules/import-e...
File: wp-cli.php
<?php
[0] Fix | Delete
namespace Elementor\App\Modules\ImportExport;
[1] Fix | Delete
[2] Fix | Delete
use Elementor\Core\Utils\Collection;
[3] Fix | Delete
use Elementor\Core\Utils\Plugins_Manager;
[4] Fix | Delete
use Elementor\Plugin;
[5] Fix | Delete
use Elementor\App\Modules\KitLibrary\Connect\Kit_Library;
[6] Fix | Delete
[7] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[8] Fix | Delete
exit; // Exit if accessed directly.
[9] Fix | Delete
}
[10] Fix | Delete
[11] Fix | Delete
class Wp_Cli extends \WP_CLI_Command {
[12] Fix | Delete
[13] Fix | Delete
const AVAILABLE_SETTINGS = [ 'include', 'overrideConditions', 'selectedCustomPostTypes', 'plugins' ];
[14] Fix | Delete
[15] Fix | Delete
/**
[16] Fix | Delete
* Export a Kit
[17] Fix | Delete
*
[18] Fix | Delete
* [--include]
[19] Fix | Delete
* Which type of content to include. Possible values are 'content', 'templates', 'site-settings'.
[20] Fix | Delete
* if this parameter won't be specified, All data types will be included.
[21] Fix | Delete
*
[22] Fix | Delete
* ## EXAMPLES
[23] Fix | Delete
*
[24] Fix | Delete
* 1. wp elementor kit export path/to/export-file-name.zip
[25] Fix | Delete
* - This will export all site data to the specified file name.
[26] Fix | Delete
*
[27] Fix | Delete
* 2. wp elementor kit export path/to/export-file-name.zip --include=kit-settings,content
[28] Fix | Delete
* - This will export only site settings and content.
[29] Fix | Delete
*
[30] Fix | Delete
* @param array $args
[31] Fix | Delete
* @param array $assoc_args
[32] Fix | Delete
*/
[33] Fix | Delete
public function export( $args, $assoc_args ) {
[34] Fix | Delete
if ( empty( $args[0] ) ) {
[35] Fix | Delete
\WP_CLI::error( 'Please specify a file name' );
[36] Fix | Delete
}
[37] Fix | Delete
[38] Fix | Delete
\WP_CLI::line( 'Kit export started.' );
[39] Fix | Delete
[40] Fix | Delete
$export_settings = [];
[41] Fix | Delete
foreach ( $assoc_args as $key => $value ) {
[42] Fix | Delete
if ( ! in_array( $key, static::AVAILABLE_SETTINGS, true ) ) {
[43] Fix | Delete
continue;
[44] Fix | Delete
}
[45] Fix | Delete
[46] Fix | Delete
$export_settings[ $key ] = explode( ',', $value );
[47] Fix | Delete
}
[48] Fix | Delete
[49] Fix | Delete
try {
[50] Fix | Delete
/**
[51] Fix | Delete
* Running the export process through the import-export module so the export property in the module will be available to use.
[52] Fix | Delete
*
[53] Fix | Delete
* @type Module $import_export_module
[54] Fix | Delete
*/
[55] Fix | Delete
$import_export_module = Plugin::$instance->app->get_component( 'import-export' );
[56] Fix | Delete
$result = $import_export_module->export_kit( $export_settings );
[57] Fix | Delete
[58] Fix | Delete
rename( $result['file_name'], $args[0] );
[59] Fix | Delete
} catch ( \Error $error ) {
[60] Fix | Delete
\WP_CLI::error( $error->getMessage() );
[61] Fix | Delete
}
[62] Fix | Delete
[63] Fix | Delete
\WP_CLI::success( 'Kit exported successfully.' );
[64] Fix | Delete
}
[65] Fix | Delete
[66] Fix | Delete
/**
[67] Fix | Delete
* Import a Kit
[68] Fix | Delete
*
[69] Fix | Delete
* [--include]
[70] Fix | Delete
* Which type of content to include. Possible values are 'content', 'templates', 'site-settings'.
[71] Fix | Delete
* if this parameter won't be specified, All data types will be included.
[72] Fix | Delete
*
[73] Fix | Delete
* [--overrideConditions]
[74] Fix | Delete
* Templates ids to override conditions for.
[75] Fix | Delete
*
[76] Fix | Delete
* [--sourceType]
[77] Fix | Delete
* Which source type is used in the current session. Available values are 'local', 'remote', 'library'.
[78] Fix | Delete
* The default value is 'local'
[79] Fix | Delete
*
[80] Fix | Delete
* ## EXAMPLES
[81] Fix | Delete
*
[82] Fix | Delete
* 1. wp elementor kit import path/to/elementor-kit.zip
[83] Fix | Delete
* - This will import the whole kit file content.
[84] Fix | Delete
*
[85] Fix | Delete
* 2. wp elementor kit import path/to/elementor-kit.zip --include=site-settings,content
[86] Fix | Delete
* - This will import only site settings and content.
[87] Fix | Delete
*
[88] Fix | Delete
* 3. wp elementor kit import path/to/elementor-kit.zip --overrideConditions=3478,4520
[89] Fix | Delete
* - This will import all content and will override conditions for the given template ids.
[90] Fix | Delete
*
[91] Fix | Delete
* 4. wp elementor kit import path/to/elementor-kit.zip --unfilteredFilesUpload=enable
[92] Fix | Delete
* - This will allow the import process to import unfiltered files.
[93] Fix | Delete
*
[94] Fix | Delete
* @param array $args
[95] Fix | Delete
* @param array $assoc_args
[96] Fix | Delete
*/
[97] Fix | Delete
public function import( array $args, array $assoc_args ) {
[98] Fix | Delete
if ( ! current_user_can( 'manage_options' ) ) {
[99] Fix | Delete
\WP_CLI::error( 'You must run this command as an admin user' );
[100] Fix | Delete
}
[101] Fix | Delete
[102] Fix | Delete
if ( empty( $args[0] ) ) {
[103] Fix | Delete
\WP_CLI::error( 'Please specify a file to import' );
[104] Fix | Delete
}
[105] Fix | Delete
[106] Fix | Delete
\WP_CLI::line( 'Kit import started' );
[107] Fix | Delete
[108] Fix | Delete
$assoc_args = wp_parse_args( $assoc_args, [
[109] Fix | Delete
'sourceType' => 'local',
[110] Fix | Delete
] );
[111] Fix | Delete
[112] Fix | Delete
$url = null;
[113] Fix | Delete
$file_path = $args[0];
[114] Fix | Delete
$import_settings = [];
[115] Fix | Delete
$import_settings['referrer'] = Module::REFERRER_LOCAL;
[116] Fix | Delete
[117] Fix | Delete
switch ( $assoc_args['sourceType'] ) {
[118] Fix | Delete
case 'library':
[119] Fix | Delete
$url = $this->get_url_from_library( $file_path );
[120] Fix | Delete
$zip_path = $this->create_temp_file_from_url( $url );
[121] Fix | Delete
$import_settings['referrer'] = Module::REFERRER_KIT_LIBRARY;
[122] Fix | Delete
break;
[123] Fix | Delete
[124] Fix | Delete
case 'remote':
[125] Fix | Delete
$zip_path = $this->create_temp_file_from_url( $file_path );
[126] Fix | Delete
break;
[127] Fix | Delete
[128] Fix | Delete
case 'local':
[129] Fix | Delete
$zip_path = $file_path;
[130] Fix | Delete
break;
[131] Fix | Delete
[132] Fix | Delete
default:
[133] Fix | Delete
\WP_CLI::error( 'Unknown source type.' );
[134] Fix | Delete
break;
[135] Fix | Delete
}
[136] Fix | Delete
[137] Fix | Delete
if ( 'enable' === $assoc_args['unfilteredFilesUpload'] ) {
[138] Fix | Delete
Plugin::$instance->uploads_manager->enable_unfiltered_files_upload();
[139] Fix | Delete
}
[140] Fix | Delete
[141] Fix | Delete
foreach ( $assoc_args as $key => $value ) {
[142] Fix | Delete
if ( ! in_array( $key, static::AVAILABLE_SETTINGS, true ) ) {
[143] Fix | Delete
continue;
[144] Fix | Delete
}
[145] Fix | Delete
[146] Fix | Delete
$import_settings[ $key ] = explode( ',', $value );
[147] Fix | Delete
}
[148] Fix | Delete
[149] Fix | Delete
try {
[150] Fix | Delete
\WP_CLI::line( 'Importing data...' );
[151] Fix | Delete
[152] Fix | Delete
/**
[153] Fix | Delete
* Running the import process through the import-export module so the import property in the module will be available to use.
[154] Fix | Delete
*
[155] Fix | Delete
* @type Module $import_export_module
[156] Fix | Delete
*/
[157] Fix | Delete
$import_export_module = Plugin::$instance->app->get_component( 'import-export' );
[158] Fix | Delete
[159] Fix | Delete
if ( ! $import_export_module ) {
[160] Fix | Delete
\WP_CLI::error( 'Import Export module is not available.' );
[161] Fix | Delete
}
[162] Fix | Delete
[163] Fix | Delete
$import = $import_export_module->import_kit( $zip_path, $import_settings );
[164] Fix | Delete
[165] Fix | Delete
$manifest_data = $import_export_module->import->get_manifest();
[166] Fix | Delete
[167] Fix | Delete
/**
[168] Fix | Delete
* Import Export Manifest Data
[169] Fix | Delete
*
[170] Fix | Delete
* Allows 3rd parties to read and edit the kit's manifest before it is used.
[171] Fix | Delete
*
[172] Fix | Delete
* @since 3.7.0
[173] Fix | Delete
*
[174] Fix | Delete
* @param array $manifest_data The Kit's Manifest data
[175] Fix | Delete
*/
[176] Fix | Delete
$manifest_data = apply_filters( 'elementor/import-export/wp-cli/manifest_data', $manifest_data );
[177] Fix | Delete
[178] Fix | Delete
\WP_CLI::line( 'Removing temp files...' );
[179] Fix | Delete
[180] Fix | Delete
// The file was created from remote or library request, it also should be removed.
[181] Fix | Delete
if ( $url ) {
[182] Fix | Delete
Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $zip_path ) );
[183] Fix | Delete
}
[184] Fix | Delete
[185] Fix | Delete
\WP_CLI::success( 'Kit imported successfully' );
[186] Fix | Delete
} catch ( \Error $error ) {
[187] Fix | Delete
Plugin::$instance->logger->get_logger()->error( $error->getMessage(), [
[188] Fix | Delete
'meta' => [
[189] Fix | Delete
'trace' => $error->getTraceAsString(),
[190] Fix | Delete
],
[191] Fix | Delete
] );
[192] Fix | Delete
[193] Fix | Delete
if ( $url ) {
[194] Fix | Delete
Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $zip_path ) );
[195] Fix | Delete
}
[196] Fix | Delete
[197] Fix | Delete
\WP_CLI::error( $error->getMessage() );
[198] Fix | Delete
}
[199] Fix | Delete
}
[200] Fix | Delete
[201] Fix | Delete
/**
[202] Fix | Delete
* Revert last imported kit.
[203] Fix | Delete
*/
[204] Fix | Delete
public function revert() {
[205] Fix | Delete
\WP_CLI::line( 'Kit revert started.' );
[206] Fix | Delete
[207] Fix | Delete
try {
[208] Fix | Delete
/**
[209] Fix | Delete
* Running the revert process through the import-export module so the revert property in the module will be available to use.
[210] Fix | Delete
*
[211] Fix | Delete
* @type Module $import_export_module
[212] Fix | Delete
*/
[213] Fix | Delete
$import_export_module = Plugin::$instance->app->get_component( 'import-export' );
[214] Fix | Delete
$import_export_module->revert_last_imported_kit();
[215] Fix | Delete
[216] Fix | Delete
} catch ( \Error $error ) {
[217] Fix | Delete
\WP_CLI::error( $error->getMessage() );
[218] Fix | Delete
}
[219] Fix | Delete
[220] Fix | Delete
\WP_CLI::success( 'Kit reverted successfully.' );
[221] Fix | Delete
}
[222] Fix | Delete
[223] Fix | Delete
/**
[224] Fix | Delete
* Helper to get kit url by the kit id
[225] Fix | Delete
* TODO: Maybe extract it.
[226] Fix | Delete
*
[227] Fix | Delete
* @param $kit_id
[228] Fix | Delete
*
[229] Fix | Delete
* @return string
[230] Fix | Delete
*/
[231] Fix | Delete
private function get_url_from_library( $kit_id ) {
[232] Fix | Delete
/** @var Kit_Library $app */
[233] Fix | Delete
$app = Plugin::$instance->common->get_component( 'connect' )->get_app( 'kit-library' );
[234] Fix | Delete
[235] Fix | Delete
if ( ! $app ) {
[236] Fix | Delete
\WP_CLI::error( 'Kit library app not found' );
[237] Fix | Delete
}
[238] Fix | Delete
[239] Fix | Delete
$response = $app->download_link( $kit_id );
[240] Fix | Delete
[241] Fix | Delete
if ( is_wp_error( $response ) ) {
[242] Fix | Delete
\WP_CLI::error( "Library Response: {$response->get_error_message()}" );
[243] Fix | Delete
}
[244] Fix | Delete
[245] Fix | Delete
return $response->download_link;
[246] Fix | Delete
}
[247] Fix | Delete
[248] Fix | Delete
/**
[249] Fix | Delete
* Helper to get kit zip file path by the kit url
[250] Fix | Delete
* TODO: Maybe extract it.
[251] Fix | Delete
*
[252] Fix | Delete
* @param $url
[253] Fix | Delete
*
[254] Fix | Delete
* @return string
[255] Fix | Delete
*/
[256] Fix | Delete
private function create_temp_file_from_url( $url ) {
[257] Fix | Delete
\WP_CLI::line( 'Extracting zip archive...' );
[258] Fix | Delete
$response = wp_remote_get( $url );
[259] Fix | Delete
[260] Fix | Delete
if ( is_wp_error( $response ) ) {
[261] Fix | Delete
\WP_CLI::error( "Download file url: {$response->get_error_message()}" );
[262] Fix | Delete
}
[263] Fix | Delete
[264] Fix | Delete
if ( 200 !== $response['response']['code'] ) {
[265] Fix | Delete
\WP_CLI::error( "Download file url: {$response['response']['message']}" );
[266] Fix | Delete
}
[267] Fix | Delete
[268] Fix | Delete
// Set the Request's state as an Elementor upload request, in order to support unfiltered file uploads.
[269] Fix | Delete
Plugin::$instance->uploads_manager->set_elementor_upload_state( true );
[270] Fix | Delete
[271] Fix | Delete
$file = Plugin::$instance->uploads_manager->create_temp_file( $response['body'], 'kit.zip' );
[272] Fix | Delete
[273] Fix | Delete
// After the upload complete, set the elementor upload state back to false.
[274] Fix | Delete
Plugin::$instance->uploads_manager->set_elementor_upload_state( false );
[275] Fix | Delete
[276] Fix | Delete
return $file;
[277] Fix | Delete
}
[278] Fix | Delete
}
[279] Fix | Delete
[280] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function