Edit File by line
/home/zeestwma/ceyloniy.../wp-conte.../plugins/elemento.../modules/wp-cli
File: library.php
<?php
[0] Fix | Delete
namespace Elementor\Modules\WpCli;
[1] Fix | Delete
[2] Fix | Delete
use Elementor\Api;
[3] Fix | Delete
use Elementor\Plugin;
[4] Fix | Delete
use Elementor\TemplateLibrary\Source_Local;
[5] Fix | Delete
[6] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[7] Fix | Delete
exit; // Exit if accessed directly.
[8] Fix | Delete
}
[9] Fix | Delete
[10] Fix | Delete
/**
[11] Fix | Delete
* Elementor Page Builder cli tools.
[12] Fix | Delete
*/
[13] Fix | Delete
class Library extends \WP_CLI_Command {
[14] Fix | Delete
[15] Fix | Delete
/**
[16] Fix | Delete
* Sync Elementor Library.
[17] Fix | Delete
*
[18] Fix | Delete
* [--network]
[19] Fix | Delete
* Sync library in all the sites in the network.
[20] Fix | Delete
*
[21] Fix | Delete
* [--force]
[22] Fix | Delete
* Force sync even if it's looks like that the library is already up to date.
[23] Fix | Delete
*
[24] Fix | Delete
* ## EXAMPLES
[25] Fix | Delete
*
[26] Fix | Delete
* 1. wp elementor library sync
[27] Fix | Delete
* - This will sync the library with Elementor cloud library.
[28] Fix | Delete
*
[29] Fix | Delete
* 2. wp elementor library sync --force
[30] Fix | Delete
* - This will sync the library with Elementor cloud even if it's looks like that the library is already up to date.
[31] Fix | Delete
*
[32] Fix | Delete
* 3. wp elementor library sync --network
[33] Fix | Delete
* - This will sync the library with Elementor cloud library for each site in the network if needed.
[34] Fix | Delete
*
[35] Fix | Delete
* @since 2.8.0
[36] Fix | Delete
* @access public
[37] Fix | Delete
*/
[38] Fix | Delete
public function sync( $args, $assoc_args ) {
[39] Fix | Delete
$network = isset( $assoc_args['network'] ) && is_multisite();
[40] Fix | Delete
[41] Fix | Delete
if ( $network ) {
[42] Fix | Delete
$blog_ids = get_sites( [
[43] Fix | Delete
'fields' => 'ids',
[44] Fix | Delete
'number' => 0,
[45] Fix | Delete
] );
[46] Fix | Delete
[47] Fix | Delete
foreach ( $blog_ids as $blog_id ) {
[48] Fix | Delete
switch_to_blog( $blog_id );
[49] Fix | Delete
[50] Fix | Delete
\WP_CLI::line( 'Site #' . $blog_id . ' - ' . get_option( 'blogname' ) );
[51] Fix | Delete
[52] Fix | Delete
$this->do_sync( isset( $assoc_args['force'] ) );
[53] Fix | Delete
[54] Fix | Delete
\WP_CLI::success( 'Done! - ' . get_option( 'home' ) );
[55] Fix | Delete
[56] Fix | Delete
restore_current_blog();
[57] Fix | Delete
}
[58] Fix | Delete
} else {
[59] Fix | Delete
$this->do_sync( isset( $assoc_args['force'] ) );
[60] Fix | Delete
\WP_CLI::success( 'Done!' );
[61] Fix | Delete
}
[62] Fix | Delete
}
[63] Fix | Delete
[64] Fix | Delete
/**
[65] Fix | Delete
* Import template files to the Library.
[66] Fix | Delete
*
[67] Fix | Delete
* [--returnType]
[68] Fix | Delete
* Forms of output. Possible values are 'ids', 'info'.
[69] Fix | Delete
* if this parameter won't be specified, the import info will be output.
[70] Fix | Delete
*
[71] Fix | Delete
* ## EXAMPLES
[72] Fix | Delete
*
[73] Fix | Delete
* 1. wp elementor library import <file-path>
[74] Fix | Delete
* - This will import a file or a zip of multiple files to the library.
[75] Fix | Delete
* - file-path can be a path or url.
[76] Fix | Delete
*
[77] Fix | Delete
* 2. wp elementor library import <file-path> --returnType=info,ids
[78] Fix | Delete
*
[79] Fix | Delete
* @param $args
[80] Fix | Delete
* @param $assoc_args
[81] Fix | Delete
*
[82] Fix | Delete
* @since 2.8.0
[83] Fix | Delete
* @access public
[84] Fix | Delete
*/
[85] Fix | Delete
public function import( $args, $assoc_args ) {
[86] Fix | Delete
if ( empty( $args[0] ) ) {
[87] Fix | Delete
\WP_CLI::error( 'Please set file path.' );
[88] Fix | Delete
}
[89] Fix | Delete
[90] Fix | Delete
$file = $args[0];
[91] Fix | Delete
$imported_items_ids = [];
[92] Fix | Delete
$return_type = \WP_CLI\Utils\get_flag_value( $assoc_args, 'returnType', 'info' );
[93] Fix | Delete
[94] Fix | Delete
/** @var Source_Local $source */
[95] Fix | Delete
$source = Plugin::$instance->templates_manager->get_source( 'local' );
[96] Fix | Delete
[97] Fix | Delete
if ( filter_var( $file, FILTER_VALIDATE_URL ) ) {
[98] Fix | Delete
$tmp_path = download_url( $file );
[99] Fix | Delete
if ( is_wp_error( $tmp_path ) ) {
[100] Fix | Delete
\WP_CLI::error( $tmp_path->get_error_message() );
[101] Fix | Delete
}
[102] Fix | Delete
$file = $tmp_path;
[103] Fix | Delete
}
[104] Fix | Delete
[105] Fix | Delete
$imported_items = $source->import_template( basename( $file ), $file );
[106] Fix | Delete
[107] Fix | Delete
if ( is_wp_error( $imported_items ) ) {
[108] Fix | Delete
\WP_CLI::error( $imported_items->get_error_message() );
[109] Fix | Delete
}
[110] Fix | Delete
[111] Fix | Delete
foreach ( $imported_items as $item ) {
[112] Fix | Delete
$imported_items_ids[] = $item['template_id'];
[113] Fix | Delete
}
[114] Fix | Delete
$imported_items_ids = implode( ',', $imported_items_ids );
[115] Fix | Delete
[116] Fix | Delete
if ( 'ids' === $return_type ) {
[117] Fix | Delete
\WP_CLI::line( $imported_items_ids );
[118] Fix | Delete
} else {
[119] Fix | Delete
\WP_CLI::success( count( $imported_items ) . ' item(s) has been imported.' );
[120] Fix | Delete
}
[121] Fix | Delete
[122] Fix | Delete
if ( isset( $tmp_path ) ) {
[123] Fix | Delete
// Remove the temporary file, now that we're done with it.
[124] Fix | Delete
Plugin::$instance->uploads_manager->remove_file_or_dir( $file );
[125] Fix | Delete
}
[126] Fix | Delete
}
[127] Fix | Delete
[128] Fix | Delete
/**
[129] Fix | Delete
* Import all template files from a directory.
[130] Fix | Delete
*
[131] Fix | Delete
* ## EXAMPLES
[132] Fix | Delete
*
[133] Fix | Delete
* 1. wp elementor library import-dir <file-path>
[134] Fix | Delete
* - This will import all JSON files from <file-path>
[135] Fix | Delete
*
[136] Fix | Delete
* @param $args
[137] Fix | Delete
*
[138] Fix | Delete
* @since 3.4.7
[139] Fix | Delete
* @access public
[140] Fix | Delete
* @alias import-dir
[141] Fix | Delete
*/
[142] Fix | Delete
public function import_dir( $args ) {
[143] Fix | Delete
if ( empty( $args[0] ) ) {
[144] Fix | Delete
\WP_CLI::error( 'Please set dir path.' );
[145] Fix | Delete
}
[146] Fix | Delete
[147] Fix | Delete
$dir = $args[0];
[148] Fix | Delete
[149] Fix | Delete
if ( ! file_exists( $dir ) ) {
[150] Fix | Delete
\WP_CLI::error( "Dir `{$dir}` not found." );
[151] Fix | Delete
}
[152] Fix | Delete
[153] Fix | Delete
$files = glob( $dir . '/*.json' );
[154] Fix | Delete
[155] Fix | Delete
if ( empty( $files ) ) {
[156] Fix | Delete
\WP_CLI::error( 'Files not found.' );
[157] Fix | Delete
}
[158] Fix | Delete
[159] Fix | Delete
/** @var Source_Local $source */
[160] Fix | Delete
$source = Plugin::$instance->templates_manager->get_source( 'local' );
[161] Fix | Delete
[162] Fix | Delete
$succeed = [];
[163] Fix | Delete
$errors = [];
[164] Fix | Delete
[165] Fix | Delete
foreach ( $files as $file ) {
[166] Fix | Delete
$basename = basename( $file );
[167] Fix | Delete
[168] Fix | Delete
if ( ! file_exists( $file ) ) {
[169] Fix | Delete
$errors[ $basename ] = $file . ' file not found.';
[170] Fix | Delete
continue;
[171] Fix | Delete
}
[172] Fix | Delete
[173] Fix | Delete
$imported_items = $source->import_template( $basename, $file );
[174] Fix | Delete
[175] Fix | Delete
if ( is_wp_error( $imported_items ) ) {
[176] Fix | Delete
$errors[ $basename ] = $imported_items->get_error_message();
[177] Fix | Delete
} else {
[178] Fix | Delete
$succeed[ $basename ] = true;
[179] Fix | Delete
}
[180] Fix | Delete
}
[181] Fix | Delete
[182] Fix | Delete
$succeed_message = count( $succeed ) . ' item(s) has been imported.';
[183] Fix | Delete
[184] Fix | Delete
if ( ! empty( $errors ) ) {
[185] Fix | Delete
$error_message = var_export( $errors, 1 );
[186] Fix | Delete
if ( ! empty( $succeed ) ) {
[187] Fix | Delete
$error_message = $succeed_message . ' ' . count( $errors ) . ' has errors: ' . $error_message;
[188] Fix | Delete
}
[189] Fix | Delete
\WP_CLI::error( $error_message );
[190] Fix | Delete
}
[191] Fix | Delete
[192] Fix | Delete
\WP_CLI::success( $succeed_message );
[193] Fix | Delete
}
[194] Fix | Delete
[195] Fix | Delete
/**
[196] Fix | Delete
* Connect site to Elementor Library.
[197] Fix | Delete
* (Network is not supported)
[198] Fix | Delete
*
[199] Fix | Delete
* --user
[200] Fix | Delete
* The user to connect <id|login|email>
[201] Fix | Delete
*
[202] Fix | Delete
* --token
[203] Fix | Delete
* A connect token from Elementor Account Dashboard.
[204] Fix | Delete
*
[205] Fix | Delete
* ## EXAMPLES
[206] Fix | Delete
*
[207] Fix | Delete
* 1. wp elementor library connect --user=admin --token=<connect-cli-token>
[208] Fix | Delete
* - This will connect the admin to Elementor library.
[209] Fix | Delete
*
[210] Fix | Delete
* @param $args
[211] Fix | Delete
* @param $assoc_args
[212] Fix | Delete
*
[213] Fix | Delete
* @since 2.8.0
[214] Fix | Delete
* @access public
[215] Fix | Delete
*/
[216] Fix | Delete
public function connect( $args, $assoc_args ) {
[217] Fix | Delete
if ( ! get_current_user_id() ) {
[218] Fix | Delete
\WP_CLI::error( 'Please set user to connect (--user=<id|login|email>).' );
[219] Fix | Delete
}
[220] Fix | Delete
[221] Fix | Delete
if ( empty( $assoc_args['token'] ) ) {
[222] Fix | Delete
\WP_CLI::error( 'Please set connect token.' );
[223] Fix | Delete
}
[224] Fix | Delete
[225] Fix | Delete
$_REQUEST['mode'] = 'cli';
[226] Fix | Delete
$_REQUEST['token'] = $assoc_args['token'];
[227] Fix | Delete
[228] Fix | Delete
$app = $this->get_library_app();
[229] Fix | Delete
[230] Fix | Delete
$app->set_auth_mode( 'cli' );
[231] Fix | Delete
[232] Fix | Delete
$app->action_authorize();
[233] Fix | Delete
[234] Fix | Delete
$app->action_get_token();
[235] Fix | Delete
}
[236] Fix | Delete
[237] Fix | Delete
/**
[238] Fix | Delete
* Disconnect site from Elementor Library.
[239] Fix | Delete
*
[240] Fix | Delete
* --user
[241] Fix | Delete
* The user to disconnect <id|login|email>
[242] Fix | Delete
*
[243] Fix | Delete
* ## EXAMPLES
[244] Fix | Delete
*
[245] Fix | Delete
* 1. wp elementor library disconnect --user=admin
[246] Fix | Delete
* - This will disconnect the admin from Elementor library.
[247] Fix | Delete
*
[248] Fix | Delete
* @param $args
[249] Fix | Delete
* @param $assoc_args
[250] Fix | Delete
*
[251] Fix | Delete
* @since 2.8.0
[252] Fix | Delete
* @access public
[253] Fix | Delete
*/
[254] Fix | Delete
public function disconnect() {
[255] Fix | Delete
if ( ! get_current_user_id() ) {
[256] Fix | Delete
\WP_CLI::error( 'Please set user to connect (--user=<id|login|email>).' );
[257] Fix | Delete
}
[258] Fix | Delete
[259] Fix | Delete
$_REQUEST['mode'] = 'cli';
[260] Fix | Delete
[261] Fix | Delete
$this->get_library_app()->action_disconnect();
[262] Fix | Delete
}
[263] Fix | Delete
[264] Fix | Delete
private function do_sync() {
[265] Fix | Delete
$data = Api::get_library_data( true );
[266] Fix | Delete
[267] Fix | Delete
if ( empty( $data ) ) {
[268] Fix | Delete
\WP_CLI::error( 'Cannot sync library.' );
[269] Fix | Delete
}
[270] Fix | Delete
}
[271] Fix | Delete
[272] Fix | Delete
/**
[273] Fix | Delete
* @return \Elementor\Core\Common\Modules\Connect\Apps\Library
[274] Fix | Delete
*/
[275] Fix | Delete
private function get_library_app() {
[276] Fix | Delete
$connect = Plugin::$instance->common->get_component( 'connect' );
[277] Fix | Delete
$app = $connect->get_app( 'library' );
[278] Fix | Delete
// Before init.
[279] Fix | Delete
if ( ! $app ) {
[280] Fix | Delete
$connect->init();
[281] Fix | Delete
$app = $connect->get_app( 'library' );
[282] Fix | Delete
}
[283] Fix | Delete
[284] Fix | Delete
return $app;
[285] Fix | Delete
}
[286] Fix | Delete
}
[287] Fix | Delete
[288] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function