PluginProbe
Elementor Website Builder – more than just a page builder / 3.1.2
Elementor Website Builder – more than just a page builder v3.1.2
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / modules / wp-cli / library.php

library.php in Elementor Website Builder – more than just a page builder 3.1.2, at modules/wp-cli/library.php

190 lines 4.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor\Modules\WpCli;
3
4 use Elementor\Api;
5 use Elementor\Plugin;
6 use Elementor\TemplateLibrary\Source_Local;
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit; // Exit if accessed directly
10 }
11
12 /**
13 * Elementor Page Builder cli tools.
14 */
15 class Library extends \WP_CLI_Command {
16
17 /**
18 * Sync Elementor Library.
19 *
20 * [--network]
21 * Sync library in all the sites in the network.
22 *
23 * [--force]
24 * Force sync even if it's looks like that the library is already up to date.
25 *
26 * ## EXAMPLES
27 *
28 * 1. wp elementor library sync
29 * - This will sync the library with Elementor cloud library.
30 *
31 * 2. wp elementor library sync --force
32 * - This will sync the library with Elementor cloud even if it's looks like that the library is already up to date.
33 *
34 * 3. wp elementor library sync --network
35 * - This will sync the library with Elementor cloud library for each site in the network if needed.
36 *
37 * @since 2.8.0
38 * @access public
39 */
40 public function sync( $args, $assoc_args ) {
41 $network = isset( $assoc_args['network'] ) && is_multisite();
42
43 if ( $network ) {
44 /** @var \WP_Site[] $sites */
45 $sites = get_sites();
46
47 foreach ( $sites as $keys => $blog ) {
48 // Cast $blog as an array instead of object
49 $blog_id = $blog->blog_id;
50
51 switch_to_blog( $blog_id );
52
53 \WP_CLI::line( 'Site #' . $blog_id . ' - ' . get_option( 'blogname' ) );
54
55 $this->do_sync( isset( $assoc_args['force'] ) );
56
57 \WP_CLI::success( 'Done! - ' . get_option( 'home' ) );
58
59 restore_current_blog();
60 }
61 } else {
62 $this->do_sync( isset( $assoc_args['force'] ) );
63 \WP_CLI::success( 'Done!' );
64 }
65 }
66
67 /**
68 * Import template files to the Library.
69 *
70 * ## EXAMPLES
71 *
72 * 1. wp elementor library import <file-path>
73 * - This will import a file or a zip of multiple files to the library.
74 *
75 * @param $args
76 * @param $assoc_args
77 *
78 * @since 2.8.0
79 * @access public
80 */
81 public function import( $args ) {
82 if ( empty( $args[0] ) ) {
83 \WP_CLI::error( 'Please set file path.' );
84 }
85
86 $file = $args[0];
87
88 /** @var Source_Local $source */
89 $source = Plugin::$instance->templates_manager->get_source( 'local' );
90
91 $imported_items = $source->import_template( basename( $file ), $file );
92
93 if ( is_wp_error( $imported_items ) ) {
94 \WP_CLI::error( $imported_items->get_error_message() );
95 }
96
97 \WP_CLI::success( count( $imported_items ) . ' item(s) has been imported.' );
98 }
99
100 /**
101 * Connect site to Elementor Library.
102 * (Network is not supported)
103 *
104 * --user
105 * The user to connect <id|login|email>
106 *
107 * --token
108 * A connect token from Elementor Account Dashboard.
109 *
110 * ## EXAMPLES
111 *
112 * 1. wp elementor library connect --user=admin --token=<connect-cli-token>
113 * - This will connect the admin to Elementor library.
114 *
115 * @param $args
116 * @param $assoc_args
117 *
118 * @since 2.8.0
119 * @access public
120 */
121 public function connect( $args, $assoc_args ) {
122 if ( ! get_current_user_id() ) {
123 \WP_CLI::error( 'Please set user to connect (--user=<id|login|email>).' );
124 }
125
126 if ( empty( $assoc_args['token'] ) ) {
127 \WP_CLI::error( 'Please set connect token.' );
128 }
129
130 $_REQUEST['mode'] = 'cli';
131 $_REQUEST['token'] = $assoc_args['token'];
132
133 $app = $this->get_library_app();
134
135 $app->action_authorize();
136
137 $app->action_get_token();
138 }
139
140 /**
141 * Disconnect site from Elementor Library.
142 *
143 * --user
144 * The user to disconnect <id|login|email>
145 *
146 * ## EXAMPLES
147 *
148 * 1. wp elementor library disconnect --user=admin
149 * - This will disconnect the admin from Elementor library.
150 *
151 * @param $args
152 * @param $assoc_args
153 *
154 * @since 2.8.0
155 * @access public
156 */
157 public function disconnect() {
158 if ( ! get_current_user_id() ) {
159 \WP_CLI::error( 'Please set user to connect (--user=<id|login|email>).' );
160 }
161
162 $_REQUEST['mode'] = 'cli';
163
164 $this->get_library_app()->action_disconnect();
165 }
166
167 private function do_sync() {
168 $data = Api::get_library_data( true );
169
170 if ( empty( $data ) ) {
171 \WP_CLI::error( 'Cannot sync library.' );
172 }
173 }
174
175 /**
176 * @return \Elementor\Core\Common\Modules\Connect\Apps\Library
177 */
178 private function get_library_app() {
179 $connect = Plugin::$instance->common->get_component( 'connect' );
180 $app = $connect->get_app( 'library' );
181 // Before init.
182 if ( ! $app ) {
183 $connect->init();
184 $app = $connect->get_app( 'library' );
185 }
186
187 return $app;
188 }
189 }
190