PluginProbe
Elementor Website Builder – more than just a page builder / 3.4.8
Elementor Website Builder – more than just a page builder v3.4.8
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 +76 -148 4.2.43.4.8 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 ) {
@@ -149,35 +134,22 @@
149 134 wp_die( esc_html__( 'Not allowed to rollback versions', 'elementor' ) );
150 135 }
151 136
152 137 $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' ) );
138 + if ( empty( $_GET['version'] ) || ! in_array( $_GET['version'], $rollback_versions ) ) {
139 + wp_die( esc_html__( 'Error occurred, The version selected is invalid. Try selecting different version.', 'elementor' ) );
157 140 }
158 141
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 );
142 + $plugin_slug = basename( ELEMENTOR__FILE__, '.php' );
169 143
170 - if ( ! ( $rollback instanceof Rollback ) ) {
171 - $plugin_slug = basename( ELEMENTOR__FILE__, '.php' );
172 -
173 - $rollback = new Rollback( [
174 - 'version' => $version,
144 + $rollback = new Rollback(
145 + [
146 + 'version' => $_GET['version'],
175 147 'plugin_name' => ELEMENTOR_PLUGIN_BASE,
176 148 'plugin_slug' => $plugin_slug,
177 - 'package_url' => sprintf( 'https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, $version ),
178 - ] );
179 - }
149 + 'package_url' => sprintf( 'https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, $_GET['version'] ),
150 + ]
151 + );
180 152
181 153 $rollback->run();
182 154
183 155 wp_die(
@@ -197,14 +169,11 @@
197 169 */
198 170 public function __construct() {
199 171 parent::__construct();
200 172
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 - } );
173 + add_action( 'admin_menu', [ $this, 'register_admin_menu' ], 205 );
204 174
205 175 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 176 add_action( 'wp_ajax_elementor_replace_url', [ $this, 'ajax_elementor_replace_url' ] );
208 177 add_action( 'wp_ajax_elementor_recreate_kit', [ $this, 'ajax_elementor_recreate_kit' ] );
209 178
210 179 add_action( 'admin_post_elementor_rollback', [ $this, 'post_elementor_rollback' ] );
@@ -209,46 +178,31 @@
209 178
210 179 add_action( 'admin_post_elementor_rollback', [ $this, 'post_elementor_rollback' ] );
211 180 }
212 181
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 182 private function get_rollback_versions() {
223 183 $rollback_versions = get_transient( 'elementor_rollback_versions_' . ELEMENTOR_VERSION );
224 -
225 184 if ( false === $rollback_versions ) {
226 185 $max_versions = 30;
227 186
228 - $versions = apply_filters( 'elementor/settings/rollback/versions', [] );
187 + require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
229 188
230 - if ( empty( $versions ) ) {
231 - require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
189 + $plugin_information = plugins_api(
190 + 'plugin_information', [
191 + 'slug' => 'elementor',
192 + ]
193 + );
232 194
233 - $plugin_information = plugins_api(
234 - 'plugin_information', [
235 - 'slug' => 'elementor',
236 - ]
237 - );
195 + if ( empty( $plugin_information->versions ) || ! is_array( $plugin_information->versions ) ) {
196 + return [];
197 + }
238 198
239 - if ( empty( $plugin_information->versions ) || ! is_array( $plugin_information->versions ) ) {
240 - return [];
241 - }
199 + krsort( $plugin_information->versions );
242 200
243 - uksort( $plugin_information->versions, 'version_compare' );
244 - $versions = array_keys( array_reverse( $plugin_information->versions ) );
245 - }
246 -
247 201 $rollback_versions = [];
248 202
249 203 $current_index = 0;
250 - foreach ( $versions as $version ) {
204 + foreach ( $plugin_information->versions as $version => $download_link ) {
251 205 if ( $max_versions <= $current_index ) {
252 206 break;
253 207 }
254 208
@@ -275,9 +229,9 @@
275 229 if ( version_compare( $version, ELEMENTOR_VERSION, '>=' ) ) {
276 230 continue;
277 231 }
278 232
279 - ++$current_index;
233 + $current_index++;
280 234 $rollback_versions[] = $version;
281 235 }
282 236
283 237 set_transient( 'elementor_rollback_versions_' . ELEMENTOR_VERSION, $rollback_versions, WEEK_IN_SECONDS );
@@ -310,13 +264,13 @@
310 264 'sections' => [
311 265 'tools' => [
312 266 'fields' => [
313 267 'clear_cache' => [
314 - 'label' => esc_html__( 'Elementor Cache', 'elementor' ),
268 + 'label' => esc_html__( 'Regenerate CSS & Data', 'elementor' ),
315 269 'field_args' => [
316 270 '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' ),
271 + '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' ) ),
272 + '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 273 ],
320 274 ],
321 275 'reset_api_data' => [
322 276 'label' => esc_html__( 'Sync Library', 'elementor' ),
@@ -321,9 +275,9 @@
321 275 'reset_api_data' => [
322 276 'label' => esc_html__( 'Sync Library', 'elementor' ),
323 277 'field_args' => [
324 278 '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' ) ),
279 + 'html' => sprintf( '<button data-nonce="%s" class="button elementor-button-spinner" id="elementor-library-sync-button">%s</button>', wp_create_nonce( 'elementor_reset_library' ), esc_html__( 'Sync Library', 'elementor' ) ),
326 280 'desc' => esc_html__( 'Elementor Library automatically updates on a daily basis. You can also manually update it by clicking on the sync button.', 'elementor' ),
327 281 ],
328 282 ],
329 283 ],
@@ -334,19 +288,17 @@
334 288 'label' => esc_html__( 'Replace URL', 'elementor' ),
335 289 'sections' => [
336 290 'replace_url' => [
337 291 'callback' => function() {
292 + $intro_text = sprintf(
293 + /* translators: %s: WordPress backups documentation. */
294 + __( '<strong>Important:</strong> It is strongly recommended that you <a target="_blank" href="%s">backup your database</a> before using Replace URL.', 'elementor' ),
295 + 'http://go.elementor.com/wordpress-backups/'
296 + );
297 + $intro_text = '<div>' . $intro_text . '</div>';
298 +
338 299 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 - );
300 + Utils::print_unescaped_internal_string( $intro_text );
349 301 },
350 302 'fields' => [
351 303 'replace_url' => [
352 304 'label' => esc_html__( 'Update Site Address (URL)', 'elementor' ),
@@ -351,9 +303,9 @@
351 303 'replace_url' => [
352 304 'label' => esc_html__( 'Update Site Address (URL)', 'elementor' ),
353 305 'field_args' => [
354 306 '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' ) ),
307 + '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' ), esc_html__( 'Replace URL', 'elementor' ) ),
356 308 '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' ),
357 309 ],
358 310 ],
359 311 ],
@@ -368,9 +320,9 @@
368 320 'label' => esc_html__( 'Rollback to Previous Version', 'elementor' ),
369 321 'callback' => function() {
370 322 $intro_text = sprintf(
371 323 /* translators: %s: Elementor version. */
372 - esc_html__( 'Experiencing an issue with Elementor version %s? Rollback to a previous version before the issue appeared.', 'elementor' ),
324 + __( 'Experiencing an issue with Elementor version %s? Rollback to a previous version before the issue appeared.', 'elementor' ),
373 325 ELEMENTOR_VERSION
374 326 );
375 327 $intro_text = '<p>' . $intro_text . '</p>';
376 328
@@ -381,32 +333,29 @@
381 333 'label' => esc_html__( 'Rollback Version', 'elementor' ),
382 334 'field_args' => [
383 335 'type' => 'raw_html',
384 336 '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' )
337 + $rollback_html . '<a data-placeholder-text="' . esc_html__( 'Reinstall', 'elementor' ) . ' v{VERSION}" href="#" data-placeholder-url="%s" class="button elementor-button-spinner elementor-rollback-button">%s</a>',
338 + wp_nonce_url( admin_url( 'admin-post.php?action=elementor_rollback&version=VERSION' ), 'elementor_rollback' ),
339 + __( 'Reinstall', 'elementor' )
388 340 ),
389 - 'desc' => $this->get_warning_span( esc_html__( 'Warning: Please back up your database before making the rollback.', 'elementor' ) ),
341 + 'desc' => '<span style="color: red;">' . esc_html__( 'Warning: Please backup your database before making the rollback.', 'elementor' ) . '</span>',
390 342 ],
391 343 ],
392 344 ],
393 345 ],
394 346 'beta' => [
395 - 'show_if' => $this->display_beta_tester(),
396 347 'label' => esc_html__( 'Become a Beta Tester', 'elementor' ),
397 348 'callback' => function() {
398 349 echo '<p>' .
399 350 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 351 '</p>';
401 - echo '<p>' . sprintf(
352 + echo sprintf(
402 353 /* 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>';
354 + esc_html__( '%1$sClick here%2$s to join our first-to-know email updates.', 'elementor' ),
355 + '<a id="beta-tester-first-to-know" href="#">',
356 + '</a>'
357 + );
409 358 },
410 359 'fields' => [
411 360 'beta' => [
412 361 'label' => esc_html__( 'Beta Tester', 'elementor' ),
@@ -416,9 +365,9 @@
416 365 'options' => [
417 366 'no' => esc_html__( 'Disable', 'elementor' ),
418 367 'yes' => esc_html__( 'Enable', 'elementor' ),
419 368 ],
420 - 'desc' => $this->get_warning_span( esc_html__( 'Please Note: We do not recommend updating to a beta version on production sites.', 'elementor' ) ),
369 + 'desc' => '<span style="color: red;">' . esc_html__( 'Please Note: We do not recommend updating to a beta version on production sites.', 'elementor' ) . '</span>',
421 370 ],
422 371 ],
423 372 ],
424 373 ],
@@ -427,13 +376,13 @@
427 376 ];
428 377
429 378 if ( ! Plugin::$instance->kits_manager->get_active_kit()->get_id() ) {
430 379 $tabs['general']['sections']['tools']['fields']['recreate_kit'] = [
431 - 'label' => esc_html__( 'Recreate Kit', 'elementor' ),
380 + 'label' => __( 'Recreate Kit', 'elementor' ),
432 381 'field_args' => [
433 382 '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' ),
383 + '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' ) ),
384 + '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 385 ],
437 386 ];
438 387 }
439 388 return $tabs;
@@ -449,9 +398,9 @@
449 398 *
450 399 * @return string Tools page title.
451 400 */
452 401 protected function get_page_title() {
453 - return esc_html__( 'Tools', 'elementor' );
402 + return __( 'Tools', 'elementor' );
454 403 }
455 404
456 405 /**
457 406 * Check if the current user can access the version control tab and rollback versions.
@@ -459,27 +408,6 @@
459 408 * @return bool
460 409 */
461 410 public static function can_user_rollback_versions() {
462 411 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 );
484 412 }
485 413 }