PluginProbe
Elementor Website Builder – more than just a page builder / 3.3.0
Elementor Website Builder – more than just a page builder v3.3.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
← All changes | includes/settings/tools.php +94 -190 4.1.0-dev23.3.0 View file →
@@ -1,12 +1,8 @@
1 1 <?php
2 2 namespace Elementor;
3 3
4 -use Elementor\Core\Admin\Menu\Admin_Menu_Manager;
5 4 use Elementor\Core\Kits\Manager;
6 -use Elementor\Includes\Settings\AdminMenuItems\Tools_Menu_Item;
7 -use Elementor\Modules\EditorOne\Classes\Menu_Data_Provider;
8 -use Elementor\Includes\Settings\AdminMenuItems\Editor_One_Tools_Menu;
9 5
10 6 if ( ! defined( 'ABSPATH' ) ) {
11 7 exit; // Exit if accessed directly.
12 8 }
@@ -20,10 +16,8 @@
20 16 * @since 1.0.0
21 17 */
22 18 class Tools extends Settings_Page {
23 19
24 - const CAPABILITY = 'manage_options';
25 -
26 20 /**
27 21 * Settings page ID for Elementor tools.
28 22 */
29 23 const PAGE_ID = 'elementor-tools';
@@ -28,8 +22,29 @@
28 22 */
29 23 const PAGE_ID = 'elementor-tools';
30 24
31 25 /**
26 + * Register admin menu.
27 + *
28 + * Add new Elementor Tools admin menu.
29 + *
30 + * Fired by `admin_menu` action.
31 + *
32 + * @since 1.0.0
33 + * @access public
34 + */
35 + public function register_admin_menu() {
36 + add_submenu_page(
37 + Settings::PAGE_ID,
38 + __( 'Tools', 'elementor' ),
39 + __( 'Tools', 'elementor' ),
40 + 'manage_options',
41 + self::PAGE_ID,
42 + [ $this, 'display_settings_page' ]
43 + );
44 + }
45 +
46 + /**
32 47 * Clear cache.
33 48 *
34 49 * Delete post meta containing the post CSS file data. And delete the actual
35 50 * CSS files from the upload directory.
@@ -41,35 +56,13 @@
41 56 */
42 57 public function ajax_elementor_clear_cache() {
43 58 check_ajax_referer( 'elementor_clear_cache', '_nonce' );
44 59
45 - if ( ! current_user_can( static::CAPABILITY ) ) {
46 - wp_send_json_error( 'Permission denied' );
47 - }
48 -
49 60 Plugin::$instance->files_manager->clear_cache();
50 61
51 62 wp_send_json_success();
52 63 }
53 64
54 - public function admin_post_elementor_site_clear_cache() {
55 - check_ajax_referer( 'elementor_site_clear_cache' );
56 -
57 - if ( ! current_user_can( static::CAPABILITY ) ) {
58 - wp_die( 'Permission denied' );
59 - }
60 -
61 - Plugin::$instance->files_manager->clear_cache();
62 -
63 - $http_referer = wp_get_raw_referer();
64 - if ( empty( $http_referer ) ) {
65 - $http_referer = admin_url( 'admin.php?page=' . static::PAGE_ID );
66 - }
67 -
68 - wp_safe_redirect( $http_referer );
69 - die;
70 - }
71 -
72 65 /**
73 66 * Recreate kit.
74 67 *
75 68 * Recreate default kit (only when default kit does not exist).
@@ -81,27 +74,23 @@
81 74 */
82 75 public function ajax_elementor_recreate_kit() {
83 76 check_ajax_referer( 'elementor_recreate_kit', '_nonce' );
84 77
85 - if ( ! current_user_can( static::CAPABILITY ) ) {
86 - wp_send_json_error( 'Permission denied' );
87 - }
88 -
89 78 $kit = Plugin::$instance->kits_manager->get_active_kit();
90 79
91 80 if ( $kit->get_id() ) {
92 - wp_send_json_error( [ 'message' => esc_html__( 'There\'s already an active kit.', 'elementor' ) ], 400 );
81 + wp_send_json_error( [ 'message' => __( 'There\'s already an active kit.', 'elementor' ) ], 400 );
93 82 }
94 83
95 84 $created_default_kit = Plugin::$instance->kits_manager->create_default();
96 85
97 86 if ( ! $created_default_kit ) {
98 - wp_send_json_error( [ 'message' => esc_html__( 'An error occurred while trying to create a kit.', 'elementor' ) ], 500 );
87 + wp_send_json_error( [ 'message' => __( 'An error occurred while trying to create a kit.', 'elementor' ) ], 500 );
99 88 }
100 89
101 90 update_option( Manager::OPTION_ACTIVE, $created_default_kit );
102 91
103 - wp_send_json_success( esc_html__( 'New kit have been created successfully', 'elementor' ) );
92 + wp_send_json_success( __( 'New kit have been created successfully', 'elementor' ) );
104 93 }
105 94
106 95 /**
107 96 * Replace URLs.
@@ -116,15 +105,11 @@
116 105 */
117 106 public function ajax_elementor_replace_url() {
118 107 check_ajax_referer( 'elementor_replace_url', '_nonce' );
119 108
120 - if ( ! current_user_can( static::CAPABILITY ) ) {
121 - wp_send_json_error( 'Permission denied' );
122 - }
109 + $from = ! empty( $_POST['from'] ) ? $_POST['from'] : '';
110 + $to = ! empty( $_POST['to'] ) ? $_POST['to'] : '';
123 111
124 - $from = Utils::get_super_global_value( $_POST, 'from' ) ?? '';
125 - $to = Utils::get_super_global_value( $_POST, 'to' ) ?? '';
126 -
127 112 try {
128 113 $results = Utils::replace_urls( $from, $to );
129 114 wp_send_json_success( $results );
130 115 } catch ( \Exception $e ) {
@@ -144,45 +129,28 @@
144 129 */
145 130 public function post_elementor_rollback() {
146 131 check_admin_referer( 'elementor_rollback' );
147 132
148 - if ( ! static::can_user_rollback_versions() ) {
149 - wp_die( esc_html__( 'Not allowed to rollback versions', 'elementor' ) );
150 - }
151 -
152 133 $rollback_versions = $this->get_rollback_versions();
153 - $version = Utils::get_super_global_value( $_GET, 'version' );
154 -
155 - if ( empty( $version ) || ! in_array( $version, $rollback_versions, true ) ) {
156 - wp_die( esc_html__( 'An error occurred, the selected version is invalid. Try selecting different version.', 'elementor' ) );
134 + if ( empty( $_GET['version'] ) || ! in_array( $_GET['version'], $rollback_versions ) ) {
135 + wp_die( __( 'Error occurred, The version selected is invalid. Try selecting different version.', 'elementor' ) );
157 136 }
158 137
159 - /**
160 - * Filter to allow override the rollback process.
161 - * Should return an instance of `Rollback` class.
162 - *
163 - * @since 3.16.0
164 - *
165 - * @param Rollback|null $rollback The rollback instance.
166 - * @param string $version The version to roll back to.
167 - */
168 - $rollback = apply_filters( 'elementor/settings/rollback', null, $version );
138 + $plugin_slug = basename( ELEMENTOR__FILE__, '.php' );
169 139
170 - if ( ! ( $rollback instanceof Rollback ) ) {
171 - $plugin_slug = basename( ELEMENTOR__FILE__, '.php' );
172 -
173 - $rollback = new Rollback( [
174 - 'version' => $version,
140 + $rollback = new Rollback(
141 + [
142 + 'version' => $_GET['version'],
175 143 'plugin_name' => ELEMENTOR_PLUGIN_BASE,
176 144 'plugin_slug' => $plugin_slug,
177 - 'package_url' => sprintf( 'https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, $version ),
178 - ] );
179 - }
145 + 'package_url' => sprintf( 'https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, $_GET['version'] ),
146 + ]
147 + );
180 148
181 149 $rollback->run();
182 150
183 151 wp_die(
184 - '', esc_html__( 'Rollback to Previous Version', 'elementor' ), [
152 + '', __( 'Rollback to Previous Version', 'elementor' ), [
185 153 'response' => 200,
186 154 ]
187 155 );
188 156 }
@@ -197,14 +165,11 @@
197 165 */
198 166 public function __construct() {
199 167 parent::__construct();
200 168
201 - add_action( 'elementor/editor-one/menu/register', function ( Menu_Data_Provider $menu_data_provider ) {
202 - $this->register_editor_one_menu( $menu_data_provider );
203 - } );
169 + add_action( 'admin_menu', [ $this, 'register_admin_menu' ], 205 );
204 170
205 171 add_action( 'wp_ajax_elementor_clear_cache', [ $this, 'ajax_elementor_clear_cache' ] );
206 - add_action( 'admin_post_elementor_site_clear_cache', [ $this, 'admin_post_elementor_site_clear_cache' ] );
207 172 add_action( 'wp_ajax_elementor_replace_url', [ $this, 'ajax_elementor_replace_url' ] );
208 173 add_action( 'wp_ajax_elementor_recreate_kit', [ $this, 'ajax_elementor_recreate_kit' ] );
209 174
210 175 add_action( 'admin_post_elementor_rollback', [ $this, 'post_elementor_rollback' ] );
@@ -209,46 +174,31 @@
209 174
210 175 add_action( 'admin_post_elementor_rollback', [ $this, 'post_elementor_rollback' ] );
211 176 }
212 177
213 - private function register_editor_one_menu( Menu_Data_Provider $menu_data_provider ) {
214 - $menu_data_provider->register_menu( new Editor_One_Tools_Menu() );
215 - }
216 -
217 - public function get_warning_span( string $text ): string {
218 - $color = 'var(--e-one-palette-error-main)';
219 - return sprintf( '<span style="color: %s;">%s</span>', esc_attr( $color ), esc_html( $text ) );
220 - }
221 -
222 178 private function get_rollback_versions() {
223 179 $rollback_versions = get_transient( 'elementor_rollback_versions_' . ELEMENTOR_VERSION );
224 -
225 180 if ( false === $rollback_versions ) {
226 181 $max_versions = 30;
227 182
228 - $versions = apply_filters( 'elementor/settings/rollback/versions', [] );
183 + require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
229 184
230 - if ( empty( $versions ) ) {
231 - require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
185 + $plugin_information = plugins_api(
186 + 'plugin_information', [
187 + 'slug' => 'elementor',
188 + ]
189 + );
232 190
233 - $plugin_information = plugins_api(
234 - 'plugin_information', [
235 - 'slug' => 'elementor',
236 - ]
237 - );
191 + if ( empty( $plugin_information->versions ) || ! is_array( $plugin_information->versions ) ) {
192 + return [];
193 + }
238 194
239 - if ( empty( $plugin_information->versions ) || ! is_array( $plugin_information->versions ) ) {
240 - return [];
241 - }
195 + krsort( $plugin_information->versions );
242 196
243 - uksort( $plugin_information->versions, 'version_compare' );
244 - $versions = array_keys( array_reverse( $plugin_information->versions ) );
245 - }
246 -
247 197 $rollback_versions = [];
248 198
249 199 $current_index = 0;
250 - foreach ( $versions as $version ) {
200 + foreach ( $plugin_information->versions as $version => $download_link ) {
251 201 if ( $max_versions <= $current_index ) {
252 202 break;
253 203 }
254 204
@@ -254,15 +204,8 @@
254 204
255 205 $lowercase_version = strtolower( $version );
256 206 $is_valid_rollback_version = ! preg_match( '/(trunk|beta|rc|dev)/i', $lowercase_version );
257 207
258 - /**
259 - * Is rollback version is valid.
260 - *
261 - * Filters the check whether the rollback version is valid.
262 - *
263 - * @param bool $is_valid_rollback_version Whether the rollback version is valid.
264 - */
265 208 $is_valid_rollback_version = apply_filters(
266 209 'elementor/settings/tools/rollback/is_valid_rollback_version',
267 210 $is_valid_rollback_version,
268 211 $lowercase_version
@@ -275,9 +218,9 @@
275 218 if ( version_compare( $version, ELEMENTOR_VERSION, '>=' ) ) {
276 219 continue;
277 220 }
278 221
279 - ++$current_index;
222 + $current_index++;
280 223 $rollback_versions[] = $version;
281 224 }
282 225
283 226 set_transient( 'elementor_rollback_versions_' . ELEMENTOR_VERSION, $rollback_versions, WEEK_IN_SECONDS );
@@ -305,26 +248,26 @@
305 248 $rollback_html .= '</select>';
306 249
307 250 $tabs = [
308 251 'general' => [
309 - 'label' => esc_html__( 'General', 'elementor' ),
252 + 'label' => __( 'General', 'elementor' ),
310 253 'sections' => [
311 254 'tools' => [
312 255 'fields' => [
313 256 'clear_cache' => [
314 - 'label' => esc_html__( 'Elementor Cache', 'elementor' ),
257 + 'label' => esc_html__( 'Regenerate CSS & Data', 'elementor' ),
315 258 'field_args' => [
316 259 'type' => 'raw_html',
317 - 'html' => sprintf( '<button data-nonce="%s" data-id="elementor-tools-general-button-clear-files-data" class="button elementor-button-spinner" id="elementor-clear-cache-button">%s</button>', wp_create_nonce( 'elementor_clear_cache' ), esc_html__( 'Clear Files & Data', 'elementor' ) ),
318 - 'desc' => esc_html__( "Clear outdated CSS files and cached data in the database (rendered HTML, JS/CSS assets, etc.). We'll regenerate those files the next time someone visits any page on your website.", 'elementor' ),
260 + 'html' => sprintf( '<button data-nonce="%s" class="button elementor-button-spinner" id="elementor-clear-cache-button">%s</button>', wp_create_nonce( 'elementor_clear_cache' ), esc_html__( 'Regenerate Files & Data', 'elementor' ) ),
261 + 'desc' => esc_html__( 'Styles set in Elementor are saved in CSS files in the uploads folder and in the site’s database. Recreate those files and settings, according to the most recent settings.', 'elementor' ),
319 262 ],
320 263 ],
321 264 'reset_api_data' => [
322 - 'label' => esc_html__( 'Sync Library', 'elementor' ),
265 + 'label' => __( 'Sync Library', 'elementor' ),
323 266 'field_args' => [
324 267 'type' => 'raw_html',
325 - 'html' => sprintf( '<button data-nonce="%s" data-id="elementor-tools-general-button-sync-library" class="button elementor-button-spinner" id="elementor-library-sync-button">%s</button>', wp_create_nonce( 'elementor_reset_library' ), esc_html__( 'Sync Library', 'elementor' ) ),
326 - 'desc' => esc_html__( 'Elementor Library automatically updates on a daily basis. You can also manually update it by clicking on the sync button.', 'elementor' ),
268 + 'html' => sprintf( '<button data-nonce="%s" class="button elementor-button-spinner" id="elementor-library-sync-button">%s</button>', wp_create_nonce( 'elementor_reset_library' ), __( 'Sync Library', 'elementor' ) ),
269 + 'desc' => __( 'Elementor Library automatically updates on a daily basis. You can also manually update it by clicking on the sync button.', 'elementor' ),
327 270 ],
328 271 ],
329 272 ],
330 273 ],
@@ -330,31 +273,29 @@
330 273 ],
331 274 ],
332 275 ],
333 276 'replace_url' => [
334 - 'label' => esc_html__( 'Replace URL', 'elementor' ),
277 + 'label' => __( 'Replace URL', 'elementor' ),
335 278 'sections' => [
336 279 'replace_url' => [
337 280 'callback' => function() {
281 + $intro_text = sprintf(
282 + /* translators: %s: Codex URL */
283 + __( '<strong>Important:</strong> It is strongly recommended that you <a target="_blank" href="%s">backup your database</a> before using Replace URL.', 'elementor' ),
284 + 'http://go.elementor.com/wordpress-backups/'
285 + );
286 + $intro_text = '<div>' . $intro_text . '</div>';
287 +
338 288 echo '<h2>' . esc_html__( 'Replace URL', 'elementor' ) . '</h2>';
339 - printf(
340 - '<p><strong>%1$s</strong> %2$s</p>',
341 - esc_html__( 'Important:', 'elementor' ),
342 - sprintf(
343 - /* translators: 1: Link open tag, 2: Link close tag. */
344 - esc_html__( 'It is strongly recommended to %1$sbackup the database%2$s before using replacing URLs.', 'elementor' ),
345 - '<a href="https://go.elementor.com/wordpress-backups/" target="_blank">',
346 - '</a>'
347 - )
348 - );
289 + echo $intro_text;
349 290 },
350 291 'fields' => [
351 292 'replace_url' => [
352 - 'label' => esc_html__( 'Update Site Address (URL)', 'elementor' ),
293 + 'label' => __( 'Update Site Address (URL)', 'elementor' ),
353 294 'field_args' => [
354 295 'type' => 'raw_html',
355 - 'html' => sprintf( '<input type="text" name="from" placeholder="https://old.example.com" class="large-text"><input type="text" name="to" placeholder="https://new.example.com" class="large-text"><button data-nonce="%s" data-id="elementor-tools-replace_url-button-replace-url" class="button elementor-button-spinner" id="elementor-replace-url-button">%s</button>', wp_create_nonce( 'elementor_replace_url' ), esc_html__( 'Replace URL', 'elementor' ) ),
356 - 'desc' => esc_html__( 'Enter your old and new URLs for your WordPress installation, to update all Elementor data (Relevant for domain transfers or move to \'HTTPS\').', 'elementor' ),
296 + 'html' => sprintf( '<input type="text" name="from" placeholder="http://old-url.com" class="medium-text"><input type="text" name="to" placeholder="http://new-url.com" class="medium-text"><button data-nonce="%s" class="button elementor-button-spinner" id="elementor-replace-url-button">%s</button>', wp_create_nonce( 'elementor_replace_url' ), __( 'Replace URL', 'elementor' ) ),
297 + 'desc' => __( 'Enter your old and new URLs for your WordPress installation, to update all Elementor data (Relevant for domain transfers or move to \'HTTPS\').', 'elementor' ),
357 298 ],
358 299 ],
359 300 ],
360 301 ],
@@ -360,65 +301,58 @@
360 301 ],
361 302 ],
362 303 ],
363 304 'versions' => [
364 - 'show_if' => static::can_user_rollback_versions(),
365 - 'label' => esc_html__( 'Version Control', 'elementor' ),
305 + 'label' => __( 'Version Control', 'elementor' ),
366 306 'sections' => [
367 307 'rollback' => [
368 - 'label' => esc_html__( 'Rollback to Previous Version', 'elementor' ),
308 + 'label' => __( 'Rollback to Previous Version', 'elementor' ),
369 309 'callback' => function() {
370 310 $intro_text = sprintf(
371 - /* translators: %s: Elementor version. */
372 - esc_html__( 'Experiencing an issue with Elementor version %s? Rollback to a previous version before the issue appeared.', 'elementor' ),
311 + /* translators: %s: Elementor version */
312 + __( 'Experiencing an issue with Elementor version %s? Rollback to a previous version before the issue appeared.', 'elementor' ),
373 313 ELEMENTOR_VERSION
374 314 );
375 315 $intro_text = '<p>' . $intro_text . '</p>';
376 316
377 - Utils::print_unescaped_internal_string( $intro_text );
317 + echo $intro_text;
378 318 },
379 319 'fields' => [
380 320 'rollback' => [
381 - 'label' => esc_html__( 'Rollback Version', 'elementor' ),
321 + 'label' => __( 'Rollback Version', 'elementor' ),
382 322 'field_args' => [
383 323 'type' => 'raw_html',
384 324 'html' => sprintf(
385 - $rollback_html . '<button data-placeholder-text="%1$s v{VERSION}" data-placeholder-url="%2$s" class="button elementor-button-spinner elementor-rollback-button">%1$s</button>',
386 - esc_html__( 'Reinstall', 'elementor' ),
387 - wp_nonce_url( admin_url( 'admin-post.php?action=elementor_rollback&version=VERSION' ), 'elementor_rollback' )
325 + $rollback_html . '<a data-placeholder-text="' . __( 'Reinstall', 'elementor' ) . ' v{VERSION}" href="#" data-placeholder-url="%s" class="button elementor-button-spinner elementor-rollback-button">%s</a>',
326 + wp_nonce_url( admin_url( 'admin-post.php?action=elementor_rollback&version=VERSION' ), 'elementor_rollback' ),
327 + __( 'Reinstall', 'elementor' )
388 328 ),
389 - 'desc' => $this->get_warning_span( esc_html__( 'Warning: Please backup your database before making the rollback.', 'elementor' ) ),
329 + 'desc' => '<span style="color: red;">' . __( 'Warning: Please backup your database before making the rollback.', 'elementor' ) . '</span>',
390 330 ],
391 331 ],
392 332 ],
393 333 ],
394 334 'beta' => [
395 - 'show_if' => $this->display_beta_tester(),
396 - 'label' => esc_html__( 'Become a Beta Tester', 'elementor' ),
335 + 'label' => __( 'Become a Beta Tester', 'elementor' ),
397 336 'callback' => function() {
398 - echo '<p>' .
399 - esc_html__( 'Turn-on Beta Tester, to get notified when a new beta version of Elementor or Elementor Pro is available. The Beta version will not install automatically. You always have the option to ignore it.', 'elementor' ) .
400 - '</p>';
401 - echo '<p>' . sprintf(
402 - /* translators: 1: Link open tag, 2: Link close tag. */
403 - esc_html__( '%1$sClick here%2$s %3$sto join our first-to-know email updates.%4$s', 'elementor' ),
404 - '<a id="beta-tester-first-to-know" class="elementor-become-a-beta-tester" href="#">',
405 - '</a>',
406 - '<span class="elementor-become-a-beta-tester">',
407 - '</span>',
408 - ) . '</p>';
337 + $intro_text = __( 'Turn-on Beta Tester, to get notified when a new beta version of Elementor or Elementor Pro is available. The Beta version will not install automatically. You always have the option to ignore it.', 'elementor' );
338 + $intro_text = '<p>' . $intro_text . '</p>';
339 + $newsletter_opt_in_text = sprintf( __( '<a id="beta-tester-first-to-know" href="%s">Click here</a> to join our first-to-know email updates.', 'elementor' ), '#' );
340 +
341 + echo $intro_text;
342 + echo $newsletter_opt_in_text;
409 343 },
410 344 'fields' => [
411 345 'beta' => [
412 - 'label' => esc_html__( 'Beta Tester', 'elementor' ),
346 + 'label' => __( 'Beta Tester', 'elementor' ),
413 347 'field_args' => [
414 348 'type' => 'select',
415 - 'std' => 'no',
349 + 'default' => 'no',
416 350 'options' => [
417 - 'no' => esc_html__( 'Disable', 'elementor' ),
418 - 'yes' => esc_html__( 'Enable', 'elementor' ),
351 + 'no' => __( 'Disable', 'elementor' ),
352 + 'yes' => __( 'Enable', 'elementor' ),
419 353 ],
420 - 'desc' => $this->get_warning_span( esc_html__( 'Please Note: We do not recommend updating to a beta version on production sites.', 'elementor' ) ),
354 + 'desc' => '<span style="color: red;">' . __( 'Please Note: We do not recommend updating to a beta version on production sites.', 'elementor' ) . '</span>',
421 355 ],
422 356 ],
423 357 ],
424 358 ],
@@ -427,13 +361,13 @@
427 361 ];
428 362
429 363 if ( ! Plugin::$instance->kits_manager->get_active_kit()->get_id() ) {
430 364 $tabs['general']['sections']['tools']['fields']['recreate_kit'] = [
431 - 'label' => esc_html__( 'Recreate Kit', 'elementor' ),
365 + 'label' => __( 'Recreate Kit', 'elementor' ),
432 366 'field_args' => [
433 367 'type' => 'raw_html',
434 - 'html' => sprintf( '<button data-nonce="%s" class="button elementor-button-spinner" id="elementor-recreate-kit-button">%s</button>', wp_create_nonce( 'elementor_recreate_kit' ), esc_html__( 'Recreate Kit', 'elementor' ) ),
435 - 'desc' => esc_html__( 'It seems like your site doesn\'t have any active Kit. The active Kit includes all of your Site Settings. By recreating your Kit you will able to start edit your Site Settings again.', 'elementor' ),
368 + 'html' => sprintf( '<button data-nonce="%s" class="button elementor-button-spinner" id="elementor-recreate-kit-button">%s</button>', wp_create_nonce( 'elementor_recreate_kit' ), __( 'Recreate Kit', 'elementor' ) ),
369 + 'desc' => __( 'It seems like your site doesn\'t have any active Kit. The active Kit includes all of your Site Settings. By recreating your Kit you will able to start edit your Site Settings again.', 'elementor' ),
436 370 ],
437 371 ];
438 372 }
439 373 return $tabs;
@@ -449,37 +383,7 @@
449 383 *
450 384 * @return string Tools page title.
451 385 */
452 386 protected function get_page_title() {
453 - return esc_html__( 'Tools', 'elementor' );
454 - }
455 -
456 - /**
457 - * Check if the current user can access the version control tab and rollback versions.
458 - *
459 - * @return bool
460 - */
461 - public static function can_user_rollback_versions() {
462 - return current_user_can( 'activate_plugins' ) && current_user_can( 'update_plugins' );
463 - }
464 -
465 - /**
466 - * Check if the beta tester should be displayed.
467 - *
468 - * @since 3.19.0
469 - *
470 - * @return bool
471 - */
472 - public function display_beta_tester(): bool {
473 - $display_beta_tester = true;
474 - /**
475 - * Filter to allow override the display of the beta tester.
476 - *
477 - * @param bool $display_beta_tester Whether to display the beta tester.
478 - *
479 - * @since 3.19.0
480 - *
481 - * return bool
482 - */
483 - return apply_filters( 'elementor/admin/show_beta_tester', $display_beta_tester );
387 + return __( 'Tools', 'elementor' );
484 388 }
485 389 }