PluginProbe
Elementor Website Builder – more than just a page builder / 3.2.3
Elementor Website Builder – more than just a page builder v3.2.3
4.3.0-beta3 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 All 452 releases
← All changes | core/kits/manager.php +27 -168 4.1.33.2.3 View file →
@@ -1,14 +1,13 @@
1 1 <?php
2 2 namespace Elementor\Core\Kits;
3 3
4 -use Elementor\Core\Base\Document;
5 4 use Elementor\Core\Kits\Controls\Repeater;
6 5 use Elementor\Core\Kits\Documents\Tabs\Global_Colors;
7 6 use Elementor\Core\Kits\Documents\Tabs\Global_Typography;
8 7 use Elementor\Plugin;
9 8 use Elementor\Core\Files\CSS\Post as Post_CSS;
10 -use Elementor\Core\Files\CSS\Post_Preview;
9 +use Elementor\Core\Files\CSS\Post_Preview as Post_Preview;
11 10 use Elementor\Core\Documents_Manager;
12 11 use Elementor\Core\Kits\Documents\Kit;
13 12 use Elementor\TemplateLibrary\Source_Local;
14 13 use Elementor\Utils;
@@ -20,69 +19,36 @@
20 19 class Manager {
21 20
22 21 const OPTION_ACTIVE = 'elementor_active_kit';
23 22
24 - const OPTION_PREVIOUS = 'elementor_previous_kit';
25 -
26 23 const E_HASH_COMMAND_OPEN_SITE_SETTINGS = 'e:run:panel/global/open';
27 24
28 - private $should_skip_trash_kit_confirmation = false;
29 -
30 25 public function get_active_id() {
31 - return get_option( self::OPTION_ACTIVE );
32 - }
26 + $id = get_option( self::OPTION_ACTIVE );
33 27
34 - public function get_previous_id() {
35 - return get_option( self::OPTION_PREVIOUS );
36 - }
28 + $kit_document = Plugin::$instance->documents->get( $id );
37 29
38 - public function get_kit( $kit_id ) {
39 - $kit = Plugin::$instance->documents->get( $kit_id );
40 -
41 - if ( ! $this->is_valid_kit( $kit ) ) {
42 - return $this->get_empty_kit_instance();
30 + if ( ! $kit_document || ! $kit_document instanceof Kit || 'trash' === $kit_document->get_main_post()->post_status ) {
31 + $id = $this->create_default();
32 + update_option( self::OPTION_ACTIVE, $id );
43 33 }
44 34
45 - return $kit;
35 + return $id;
46 36 }
47 37
48 38 public function get_active_kit() {
49 - return $this->get_kit( $this->get_active_id() );
39 + $id = $this->get_active_id();
40 +
41 + return Plugin::$instance->documents->get( $id );
50 42 }
51 43
52 44 public function get_active_kit_for_frontend() {
53 - $kit = Plugin::$instance->documents->get_doc_for_frontend( $this->get_active_id() );
45 + $id = $this->get_active_id();
54 46
55 - if ( ! $this->is_valid_kit( $kit ) ) {
56 - return $this->get_empty_kit_instance();
57 - }
58 -
59 - return $kit;
47 + return Plugin::$instance->documents->get_doc_for_frontend( $id );
60 48 }
61 49
62 50 /**
63 - * @param $kit
64 - *
65 - * @return bool
66 - */
67 - private function is_valid_kit( $kit ) {
68 - return $kit && $kit instanceof Kit && 'trash' !== $kit->get_main_post()->post_status;
69 - }
70 -
71 - /**
72 - * Returns an empty kit for situation when there is no kit in the site.
73 - *
74 - * @return Kit
75 - * @throws \Exception If the kit instance cannot be created.
76 - */
77 - private function get_empty_kit_instance() {
78 - return new Kit( [
79 - 'settings' => [],
80 - 'post_id' => 0,
81 - ] );
82 - }
83 -
84 - /**
85 51 * Checks if specific post is a kit.
86 52 *
87 53 * @param $post_id
88 54 *
@@ -127,113 +93,16 @@
127 93 $kit_data['post_type'] = Source_Local::CPT;
128 94
129 95 $kit = Plugin::$instance->documents->create( 'kit', $kit_data, $kit_meta_data );
130 96
131 - if ( isset( $kit_data['settings'] ) ) {
132 - $kit->save( [ 'settings' => $kit_data['settings'] ] );
133 - }
134 -
135 97 return $kit->get_id();
136 98 }
137 99
138 - public function create_new_kit( $kit_name = '', $settings = [], $active = true ) {
139 - $kit_name = $kit_name ? $kit_name : esc_html__( 'Custom', 'elementor' );
140 -
141 - $current_kit = $this->get_active_kit();
142 -
143 - $kit_meta_data = $this->get_meta_to_preserve( $current_kit );
144 -
145 - $id = $this->create( [
146 - 'post_title' => $kit_name,
147 - 'settings' => $settings,
148 - ], $kit_meta_data );
149 -
150 - if ( $active ) {
151 - update_option( self::OPTION_PREVIOUS, $this->get_active_id() );
152 - update_option( self::OPTION_ACTIVE, $id );
153 - }
154 -
155 - return $id;
100 + private function create_default() {
101 + return $this->create( [ 'post_title' => __( 'Default Kit', 'elementor' ) ] );
156 102 }
157 103
158 - private function get_meta_to_preserve( Kit $current_kit ): array {
159 - $meta_keys_to_preserve = apply_filters( 'elementor/kit/meta_to_preserve_on_kit_import', [] );
160 -
161 - $kit_meta_data = [];
162 -
163 - foreach ( $meta_keys_to_preserve as $meta_key ) {
164 - $value = $current_kit->get_meta( $meta_key );
165 -
166 - if ( ! empty( $value ) ) {
167 - $kit_meta_data[ $meta_key ] = $value;
168 - }
169 - }
170 -
171 - return $kit_meta_data;
172 - }
173 -
174 - public function create_default() {
175 - return $this->create( [
176 - 'post_title' => esc_html__( 'Default Kit', 'elementor' ),
177 - ] );
178 - }
179 -
180 104 /**
181 - * Create a default kit if needed.
182 - *
183 - * This action runs on activation hook, all the Plugin components do not exists and
184 - * the Document manager and Kits manager instances cannot be used.
185 - *
186 - * @return int|void|\WP_Error
187 - */
188 - public static function create_default_kit() {
189 - if ( get_option( self::OPTION_ACTIVE ) ) {
190 - return;
191 - }
192 -
193 - $id = wp_insert_post( [
194 - 'post_title' => esc_html__( 'Default Kit', 'elementor' ),
195 - 'post_type' => Source_Local::CPT,
196 - 'post_status' => 'publish',
197 - 'meta_input' => [
198 - '_elementor_edit_mode' => 'builder',
199 - Document::TYPE_META_KEY => 'kit',
200 - ],
201 - ] );
202 -
203 - update_option( self::OPTION_ACTIVE, $id );
204 -
205 - return $id;
206 - }
207 -
208 - /**
209 - * @param $imported_kit_id int The id of the imported kit that should be deleted.
210 - * @param $active_kit_id int The id of the kit that should set as 'active_kit' after the deletion.
211 - * @param $previous_kit_id int The id of the kit that should set as 'previous_kit' after the deletion.
212 - * @return void
213 - */
214 - public function revert( int $imported_kit_id, int $active_kit_id, int $previous_kit_id ) {
215 - // If the kit that should set as active is not a valid kit then abort the revert.
216 - if ( ! $this->is_kit( $active_kit_id ) ) {
217 - return;
218 - }
219 -
220 - // This a hacky solution to avoid from the revert process to be interrupted by the `trash_kit_confirmation`.
221 - $this->should_skip_trash_kit_confirmation = true;
222 -
223 - $kit = $this->get_kit( $imported_kit_id );
224 - $kit->force_delete();
225 -
226 - $this->should_skip_trash_kit_confirmation = false;
227 -
228 - update_option( self::OPTION_ACTIVE, $active_kit_id );
229 -
230 - if ( $this->is_kit( $previous_kit_id ) ) {
231 - update_option( self::OPTION_PREVIOUS, $previous_kit_id );
232 - }
233 - }
234 -
235 - /**
236 105 * @param Documents_Manager $documents_manager
237 106 */
238 107 public function register_document( $documents_manager ) {
239 108 $documents_manager->register_document_type( 'kit', Kit::get_class_full_name() );
@@ -296,9 +165,9 @@
296 165 $is_kit_preview = is_preview() && isset( $_GET['preview_id'] ) && $active_kit->get_main_id() === (int) $_GET['preview_id'];
297 166
298 167 if ( $is_kit_preview ) {
299 168 $kit = Plugin::$instance->documents->get_doc_or_auto_save( $active_kit->get_main_id(), get_current_user_id() );
300 - } elseif ( null !== $active_kit->get_main_post() && 'publish' === $active_kit->get_main_post()->post_status ) {
169 + } elseif ( 'publish' === $active_kit->get_main_post()->post_status ) {
301 170 $kit = $active_kit;
302 171 }
303 172
304 173 return $kit;
@@ -319,9 +188,9 @@
319 188 * Map Scheme To Global
320 189 *
321 190 * Convert a given scheme value to its corresponding default global value
322 191 *
323 - * @param string $type 'color'/'typography'.
192 + * @param string $type 'color'/'typography'
324 193 * @param $value
325 194 * @return mixed
326 195 */
327 196 private function map_scheme_to_global( $type, $value ) {
@@ -354,9 +223,9 @@
354 223 * @access public
355 224 */
356 225 public function convert_scheme_to_global( $scheme ) {
357 226 if ( isset( $scheme['type'] ) && isset( $scheme['value'] ) ) {
358 - // _deprecated_argument( $args['scheme'], '3.0.0', 'Schemes are now deprecated - use $args[\'global\'] instead.' );
227 + //_deprecated_argument( $args['scheme'], '3.0.0', 'Schemes are now deprecated - use $args[\'global\'] instead.' );
359 228 return $this->map_scheme_to_global( $scheme['type'], $scheme['value'] );
360 229 }
361 230
362 231 // Typography control 'scheme' properties usually only include the string with the typography value ('1'-'4').
@@ -365,9 +234,9 @@
365 234
366 235 public function register_controls() {
367 236 $controls_manager = Plugin::$instance->controls_manager;
368 237
369 - $controls_manager->register( new Repeater() );
238 + $controls_manager->register_control( Repeater::CONTROL_TYPE, new Repeater() );
370 239 }
371 240
372 241 public function is_custom_colors_enabled() {
373 242 return ! get_option( 'elementor_disable_color_schemes' );
@@ -393,16 +262,12 @@
393 262
394 263 /**
395 264 * Send a confirm message before move a kit to trash, or if delete permanently not for trash.
396 265 *
397 - * @param $post_id
398 - * @param bool $is_permanently_delete
266 + * @param $post_id
267 + * @param false $is_permanently_delete
399 268 */
400 269 private function before_delete_kit( $post_id, $is_permanently_delete = false ) {
401 - if ( $this->should_skip_trash_kit_confirmation ) {
402 - return;
403 - }
404 -
405 270 $document = Plugin::$instance->documents->get( $post_id );
406 271
407 272 if (
408 273 ! $document ||
@@ -417,10 +282,11 @@
417 282 require __DIR__ . '/views/trash-kit-confirmation.php';
418 283
419 284 $confirmation_content = ob_get_clean();
420 285
421 - // PHPCS - the content does not contain user input value.
422 - wp_die( new \WP_Error( 'cant_delete_kit', $confirmation_content ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
286 + wp_die(
287 + new \WP_Error( 'cant_delete_kit', $confirmation_content )
288 + );
423 289 }
424 290
425 291 /**
426 292 * Add 'Edit with elementor -> Site Settings' in admin bar.
@@ -443,20 +309,13 @@
443 309 }
444 310 }
445 311
446 312 if ( $document ) {
447 - $document_edit_url = add_query_arg(
448 - [
449 - 'active-document' => $this->get_active_id(),
450 - ],
451 - $document->get_edit_url()
452 - );
453 -
454 313 $admin_bar_config['elementor_edit_page']['children'][] = [
455 314 'id' => 'elementor_site_settings',
456 - 'title' => esc_html__( 'Site Settings', 'elementor' ),
457 - 'sub_title' => esc_html__( 'Site', 'elementor' ),
458 - 'href' => $document_edit_url,
315 + 'title' => __( 'Site Settings', 'elementor' ),
316 + 'sub_title' => __( 'Site', 'elementor' ),
317 + 'href' => $document->get_edit_url() . '#' . self::E_HASH_COMMAND_OPEN_SITE_SETTINGS,
459 318 'class' => 'elementor-site-settings',
460 319 'parent_class' => 'elementor-second-section',
461 320 ];
462 321 }
@@ -469,9 +328,9 @@
469 328 add_filter( 'elementor/editor/localize_settings', [ $this, 'localize_settings' ] );
470 329 add_filter( 'elementor/editor/footer', [ $this, 'render_panel_html' ] );
471 330 add_action( 'elementor/frontend/after_enqueue_styles', [ $this, 'frontend_before_enqueue_styles' ], 0 );
472 331 add_action( 'elementor/preview/enqueue_styles', [ $this, 'preview_enqueue_styles' ], 0 );
473 - add_action( 'elementor/controls/register', [ $this, 'register_controls' ] );
332 + add_action( 'elementor/controls/controls_registered', [ $this, 'register_controls' ] );
474 333
475 334 add_action( 'wp_trash_post', function ( $post_id ) {
476 335 $this->before_delete_kit( $post_id );
477 336 } );