PluginProbe
Elementor Website Builder – more than just a page builder / 4.2.0
Elementor Website Builder – more than just a page builder v4.2.0
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 / core / kits / documents / kit.php

kit.php in Elementor Website Builder – more than just a page builder 4.2.0, at core/kits/documents/kit.php

222 lines 5.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor\Core\Kits\Documents;
3
4 use Elementor\Core\DocumentTypes\PageBase;
5 use Elementor\Core\Files\CSS\Post as Post_CSS;
6 use Elementor\Core\Settings\Manager as SettingsManager;
7 use Elementor\Core\Settings\Page\Manager as PageManager;
8 use Elementor\Plugin;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit; // Exit if accessed directly.
12 }
13
14 class Kit extends PageBase {
15 /**
16 * @var Tabs\Tab_Base[]
17 */
18 private $tabs;
19
20 public function __construct( array $data = [] ) {
21 parent::__construct( $data );
22
23 $this->register_tabs();
24 }
25
26 public static function get_properties() {
27 $properties = parent::get_properties();
28
29 $properties['has_elements'] = false;
30 $properties['show_in_finder'] = false;
31 $properties['show_on_admin_bar'] = false;
32 $properties['edit_capability'] = 'edit_theme_options';
33 $properties['support_kit'] = true;
34
35 return $properties;
36 }
37
38 public static function get_type() {
39 return 'kit';
40 }
41
42 public static function get_title() {
43 return esc_html__( 'Kit', 'elementor' );
44 }
45
46 /**
47 * @return Tabs\Tab_Base[]
48 */
49 public function get_tabs() {
50 return $this->tabs;
51 }
52
53 /**
54 * Retrieve a tab by ID.
55 *
56 * @param $id
57 *
58 * @return Tabs\Tab_Base
59 */
60 public function get_tab( $id ) {
61 return self::get_items( $this->get_tabs(), $id );
62 }
63
64 protected function get_have_a_look_url() {
65 return '';
66 }
67
68 public static function get_editor_panel_config() {
69 $config = parent::get_editor_panel_config();
70 $config['default_route'] = 'panel/global/menu';
71
72 $config['needHelpUrl'] = 'https://go.elementor.com/global-settings/';
73
74 return $config;
75 }
76
77 public function get_css_wrapper_selector() {
78 return '.elementor-kit-' . $this->get_main_id();
79 }
80
81 public function save( $data ) {
82 foreach ( $this->tabs as $tab ) {
83 $data = $tab->before_save( $data );
84 }
85
86 $saved = parent::save( $data );
87
88 if ( ! $saved ) {
89 return false;
90 }
91
92 // Should set is_saving to true, to avoid infinite loop when updating
93 // settings like: 'site_name" or "site_description".
94 $this->set_is_saving( true );
95
96 foreach ( $this->tabs as $tab ) {
97 $tab->on_save( $data );
98 }
99
100 $this->set_is_saving( false );
101
102 // When deleting a global color or typo, the css variable still exists in the frontend
103 // but without any value and it makes the element to be un styled even if there is a default style for the base element,
104 // for that reason this method removes css files of the entire site.
105 Plugin::instance()->files_manager->clear_cache();
106
107 return $saved;
108 }
109
110 /**
111 * Register a kit settings menu.
112 *
113 * @param $id
114 * @param $class_name
115 */
116 public function register_tab( $id, $class_name ) {
117 $this->tabs[ $id ] = new $class_name( $this );
118 }
119
120 /**
121 * @inheritDoc
122 */
123 protected function get_initial_config() {
124 $config = parent::get_initial_config();
125
126 foreach ( $this->tabs as $id => $tab ) {
127 $config['tabs'][ $id ] = [
128 'id' => $id,
129 'title' => $tab->get_title(),
130 'icon' => $tab->get_icon(),
131 'group' => $tab->get_group(),
132 'helpUrl' => $tab->get_help_url(),
133 'additionalContent' => $tab->get_additional_tab_content(),
134 ];
135 }
136
137 return $config;
138 }
139
140 /**
141 * @since 3.1.0
142 * @access protected
143 */
144 protected function register_controls() {
145 $this->register_document_controls();
146
147 foreach ( $this->tabs as $tab ) {
148 $tab->register_controls();
149 }
150 }
151
152 protected function get_post_statuses() {
153 return [
154 'draft' => sprintf( '%s (%s)', esc_html__( 'Disabled', 'elementor' ), esc_html__( 'Draft', 'elementor' ) ),
155 'publish' => esc_html__( 'Published', 'elementor' ),
156 ];
157 }
158
159 public function add_repeater_row( $control_id, $item ) {
160 $meta_key = PageManager::META_KEY;
161 $document_settings = $this->get_meta( $meta_key );
162
163 if ( ! $document_settings ) {
164 $document_settings = [];
165 }
166
167 if ( ! isset( $document_settings[ $control_id ] ) ) {
168 $document_settings[ $control_id ] = [];
169 }
170
171 $document_settings[ $control_id ][] = $item;
172
173 $page_settings_manager = SettingsManager::get_settings_managers( 'page' );
174 $page_settings_manager->save_settings( $document_settings, $this->get_id() );
175
176 /** @var Kit $autosave */
177 $autosave = $this->get_autosave();
178
179 if ( $autosave ) {
180 $autosave->add_repeater_row( $control_id, $item );
181 }
182
183 // Remove Post CSS.
184 $post_css = Post_CSS::create( $this->post->ID );
185
186 $post_css->delete();
187
188 // Refresh Cache.
189 Plugin::$instance->documents->get( $this->post->ID, false );
190
191 $post_css = Post_CSS::create( $this->post->ID );
192
193 $post_css->enqueue();
194 }
195
196 /**
197 * Register default tabs (menu pages) for site settings.
198 */
199 private function register_tabs() {
200 $tabs = [
201 'global-colors' => Tabs\Global_Colors::class,
202 'global-typography' => Tabs\Global_Typography::class,
203 'theme-style-typography' => Tabs\Theme_Style_Typography::class,
204 'theme-style-buttons' => Tabs\Theme_Style_Buttons::class,
205 'theme-style-images' => Tabs\Theme_Style_Images::class,
206 'theme-style-form-fields' => Tabs\Theme_Style_Form_Fields::class,
207 'settings-site-identity' => Tabs\Settings_Site_Identity::class,
208 'settings-background' => Tabs\Settings_Background::class,
209 'settings-layout' => Tabs\Settings_Layout::class,
210 'settings-lightbox' => Tabs\Settings_Lightbox::class,
211 'settings-page-transitions' => Tabs\Settings_Page_Transitions::class,
212 'settings-custom-css' => Tabs\Settings_Custom_CSS::class,
213 ];
214
215 foreach ( $tabs as $id => $class ) {
216 $this->register_tab( $id, $class );
217 }
218
219 do_action( 'elementor/kit/register_tabs', $this );
220 }
221 }
222