PluginProbe
Elementor Website Builder – more than just a page builder / 3.21.0-beta2
Elementor Website Builder – more than just a page builder v3.21.0-beta2
4.3.3 4.3.2 4.3.1 4.3.0 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 All 456 releases
← All changes | core/admin/admin-notices.php +58 -378 4.3.0-beta3 → 3.21.0-beta2 View file →
@@ -3,9 +3,8 @@
3 3
4 4 use Elementor\Api;
5 5 use Elementor\Core\Admin\UI\Components\Button;
6 6 use Elementor\Core\Base\Module;
7 -use Elementor\Core\Utils\Hints;
8 7 use Elementor\Core\Utils\Promotions\Filtered_Promotions_Manager;
9 8 use Elementor\Plugin;
10 9 use Elementor\Tracker;
11 10 use Elementor\User;
@@ -10,8 +9,9 @@
10 9 use Elementor\Tracker;
11 10 use Elementor\User;
12 11 use Elementor\Utils;
13 12 use Elementor\Core\Admin\Notices\Base_Notice;
13 +use Elementor\Core\Admin\Notices\Elementor_Dev_Notice;
14 14
15 15 if ( ! defined( 'ABSPATH' ) ) {
16 16 exit; // Exit if accessed directly.
17 17 }
@@ -19,19 +19,16 @@
19 19 class Admin_Notices extends Module {
20 20
21 21 const DEFAULT_EXCLUDED_PAGES = [ 'plugins.php', 'plugin-install.php', 'plugin-editor.php' ];
22 22
23 - const EXIT_EARLY_FOR_BACKWARD_COMPATIBILITY = false;
24 -
25 23 private $plain_notices = [
26 24 'api_notice',
27 25 'api_upgrade_plugin',
28 26 'tracker',
29 - 'tracker_last_update',
30 27 'rate_us_feedback',
31 28 'role_manager_promote',
32 - 'plugin_image_optimization',
33 - 'ally_pages_promotion',
29 + 'experiment_promotion',
30 + 'design_not_appearing',
34 31 ];
35 32
36 33 private $elementor_pages_count = null;
37 34
@@ -39,8 +36,12 @@
39 36
40 37 private $current_screen_id = null;
41 38
42 39 private function get_notices() {
40 + $notices = [
41 + new Elementor_Dev_Notice(),
42 + ];
43 +
43 44 /**
44 45 * Admin notices.
45 46 *
46 47 * Filters Elementor admin notices.
@@ -49,9 +50,9 @@
49 50 * admin notice or to add new notices for Elementor add-ons.
50 51 *
51 52 * @param array $notices A list of notice classes.
52 53 */
53 - $notices = apply_filters( 'elementor/core/admin/notices', [] );
54 + $notices = apply_filters( 'elementor/core/admin/notices', $notices );
54 55
55 56 return $notices;
56 57 }
57 58
@@ -91,9 +92,9 @@
91 92 if ( ! current_user_can( 'update_plugins' ) ) {
92 93 return false;
93 94 }
94 95
95 - if ( ! $this->is_elementor_admin_screen_with_system_info() ) {
96 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
96 97 return false;
97 98 }
98 99
99 100 // Check for upgrades.
@@ -131,16 +132,16 @@
131 132 $message = sprintf(
132 133 /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text. */
133 134 __( 'There is a new version of Elementor Page Builder available. <a href="%1$s" class="thickbox open-plugin-details-modal" aria-label="%2$s">View version %3$s details</a> or <a href="%4$s" class="update-link" aria-label="%5$s">update now</a>.', 'elementor' ),
134 135 esc_url( $details_url ),
135 - sprintf(
136 + esc_attr( sprintf(
136 137 /* translators: %s: Elementor version. */
137 - esc_attr__( 'View Elementor version %s details', 'elementor' ),
138 + __( 'View Elementor version %s details', 'elementor' ),
138 139 $new_version
139 - ),
140 + ) ),
140 141 $new_version,
141 142 esc_url( $upgrade_url ),
142 - esc_attr__( 'Update Now', 'elementor' )
143 + esc_attr( esc_html__( 'Update Now', 'elementor' ) )
143 144 );
144 145
145 146 $options = [
146 147 'title' => esc_html__( 'Update Notification', 'elementor' ),
@@ -167,9 +168,9 @@
167 168 if ( ! current_user_can( 'manage_options' ) ) {
168 169 return false;
169 170 }
170 171
171 - if ( ! $this->is_elementor_admin_screen_with_system_info() ) {
172 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
172 173 return false;
173 174 }
174 175
175 176 $notice_id = 'admin_notice_api_' . $admin_notice['notice_id'];
@@ -213,9 +214,9 @@
213 214 // TODO: Skip for development env.
214 215 $optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' );
215 216 $optout_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_out' ), 'opt_out' );
216 217
217 - $tracker_description_text = esc_html__( 'Become a super contributor by helping us understand how you use our service to enhance your experience and improve our product.', 'elementor' );
218 + $tracker_description_text = esc_html__( 'Become a super contributor by opting in to share non-sensitive plugin data and to receive periodic email updates from us.', 'elementor' );
218 219
219 220 /**
220 221 * Tracker admin description text.
221 222 *
@@ -229,11 +230,10 @@
229 230
230 231 $message = esc_html( $tracker_description_text ) . ' <a href="https://go.elementor.com/usage-data-tracking/" target="_blank">' . esc_html__( 'Learn more.', 'elementor' ) . '</a>';
231 232
232 233 $options = [
233 - 'title' => esc_html__( 'Want to shape the future of web creation?', 'elementor' ),
234 + 'title' => esc_html__( 'Love using Elementor?', 'elementor' ),
234 235 'description' => $message,
235 - 'dismissible' => false,
236 236 'button' => [
237 237 'text' => esc_html__( 'Sure! I\'d love to help', 'elementor' ),
238 238 'url' => $optin_url,
239 239 'type' => 'cta',
@@ -250,49 +250,8 @@
250 250
251 251 return true;
252 252 }
253 253
254 - private function notice_tracker_last_update() {
255 - if ( ! current_user_can( 'manage_options' ) ) {
256 - return false;
257 - }
258 -
259 - if ( ! Tracker::has_terms_changed() ) {
260 - return false;
261 - }
262 -
263 - $notice_id = 'tracker_last_update_' . Tracker::LAST_TERMS_UPDATED;
264 -
265 - if ( User::is_user_notice_viewed( $notice_id ) ) {
266 - return false;
267 - }
268 -
269 - $optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' );
270 -
271 - $message = esc_html__( 'We\'re updating our Terms and Conditions to include the collection of usage and behavioral data. This information helps us understand how you use Elementor so we can make informed improvements to the product.', 'elementor' );
272 -
273 - $options = [
274 - 'id' => $notice_id,
275 - 'title' => esc_html__( 'Update regarding usage data collection', 'elementor' ),
276 - 'description' => $message,
277 - 'button' => [
278 - 'text' => esc_html__( 'Opt in', 'elementor' ),
279 - 'url' => $optin_url,
280 - 'type' => 'cta',
281 - ],
282 - 'button_secondary' => [
283 - 'text' => esc_html__( 'Learn more', 'elementor' ),
284 - 'url' => 'https://go.elementor.com/wp-dash-update-usage-notice/',
285 - 'new_tab' => true,
286 - 'type' => 'cta',
287 - ],
288 - ];
289 -
290 - $this->print_admin_notice( $options );
291 -
292 - return true;
293 - }
294 -
295 254 private function notice_rate_us_feedback() {
296 255 $notice_id = 'rate_us_feedback';
297 256
298 257 if ( ! current_user_can( 'manage_options' ) ) {
@@ -309,9 +268,8 @@
309 268
310 269 $dismiss_url = add_query_arg( [
311 270 'action' => 'elementor_set_admin_notice_viewed',
312 271 'notice_id' => esc_attr( $notice_id ),
313 - '_wpnonce' => wp_create_nonce( 'elementor_set_admin_notice_viewed' ),
314 272 ], admin_url( 'admin-post.php' ) );
315 273
316 274 $options = [
317 275 'title' => esc_html__( 'Congrats!', 'elementor' ),
@@ -380,132 +338,37 @@
380 338
381 339 return true;
382 340 }
383 341
384 - private function get_installed_form_plugin_name() {
385 - static $detected_form_plugin = null;
342 + private function notice_experiment_promotion() {
343 + $notice_id = 'experiment_promotion';
386 344
387 - if ( null !== $detected_form_plugin ) {
388 - return $detected_form_plugin;
389 - }
390 -
391 - $form_plugins_constants_to_name_mapper = [
392 - 'WPFORMS_VERSION' => 'WPForms',
393 - 'WPCF7_VERSION' => 'Contact Form 7',
394 - ];
395 -
396 - foreach ( $form_plugins_constants_to_name_mapper as $constant => $name ) {
397 - if ( defined( $constant ) ) {
398 - $detected_form_plugin = $name;
399 - return $detected_form_plugin;
400 - }
401 - }
402 -
403 - $form_plugins_classes_to_name_mapper = [
404 - '\GFCommon' => 'Gravity Forms',
405 - '\Ninja_Forms' => 'Ninja Forms',
406 - ];
407 -
408 - foreach ( $form_plugins_classes_to_name_mapper as $class => $name ) {
409 - if ( class_exists( $class ) ) {
410 - $detected_form_plugin = $name;
411 - return $detected_form_plugin;
412 - }
413 - }
414 -
415 - $detected_form_plugin = false;
416 - return $detected_form_plugin;
417 - }
418 -
419 - private function notice_ally_pages_promotion() {
420 - global $pagenow;
421 - $notice_id = 'ally_pages_promotion';
422 -
423 - if ( 'edit.php' !== $pagenow || empty( $_GET['post_type'] ) || 'page' !== $_GET['post_type'] ) {
345 + if ( ! current_user_can( 'manage_options' ) || User::is_user_notice_viewed( $notice_id ) ) {
424 346 return false;
425 347 }
426 348
427 - if ( ! current_user_can( 'manage_options' ) ) {
428 - return false;
429 - }
349 + $experiments = Plugin::$instance->experiments;
350 + $is_all_performance_features_active = (
351 + $experiments->is_feature_active( 'additional_custom_breakpoints' ) &&
352 + $experiments->is_feature_active( 'e_optimized_css_loading' )
353 + );
430 354
431 - if ( User::is_user_notice_viewed( $notice_id ) ) {
355 + if ( $is_all_performance_features_active ) {
432 356 return false;
433 357 }
434 358
435 - $plugin_slug = 'pojo-accessibility';
436 - $plugin_file_path = 'pojo-accessibility/pojo-accessibility.php';
437 -
438 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
439 - $is_installed = Hints::is_plugin_installed( $plugin_slug );
440 - $is_active = Hints::is_plugin_active( $plugin_slug );
441 -
442 - if ( $is_active ) {
443 - return false;
444 - }
445 -
446 - if ( $one_subscription ) {
447 - $learn_more_url = 'https://go.elementor.com/acc-plg-learn-more-one';
448 -
449 - if ( ! $is_installed ) {
450 - $description = esc_html__( 'Make sure your site has an accessibility statement page. Install Web Accessibility, included in ONE, to create it in a few clicks.', 'elementor' );
451 - $button_text = esc_html__( 'Install now', 'elementor' );
452 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
453 - $campaign_data = [
454 - 'name' => 'elementor_ea11y_campaign',
455 - 'campaign' => 'acc-statement-plg-pages-one-install',
456 - 'source' => 'wp-pages-one-install',
457 - 'medium' => 'wp-dash-one',
458 - ];
459 - } elseif ( ! $is_active ) {
460 - $description = esc_html__( 'Your ONE subscription includes Web Accessibility. Activate it to create your accessibility statement page quickly.', 'elementor' );
461 - $button_text = esc_html__( 'Activate now', 'elementor' );
462 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
463 - $campaign_data = [
464 - 'name' => 'elementor_ea11y_campaign',
465 - 'campaign' => 'acc-statement-plg-pages-one-activate',
466 - 'source' => 'wp-pages-one-activate',
467 - 'medium' => 'wp-dash-one',
468 - ];
469 - }
470 - } else {
471 - $description = esc_html__( "Create a more inclusive site experience for all your visitors. With Web Accessibility, it's easy to add your statement page in just a few clicks.", 'elementor' );
472 - $learn_more_url = 'https://go.elementor.com/acc-plg-learn-more';
473 -
474 - if ( ! $is_installed ) {
475 - $button_text = esc_html__( 'Install now', 'elementor' );
476 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
477 - $campaign_data = [
478 - 'name' => 'elementor_ea11y_campaign',
479 - 'campaign' => 'acc-statement-plg-pages-install',
480 - 'source' => 'wp-pages-install',
481 - 'medium' => 'wp-dash',
482 - ];
483 - } elseif ( ! $is_active ) {
484 - $button_text = esc_html__( 'Activate now', 'elementor' );
485 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
486 - $campaign_data = [
487 - 'name' => 'elementor_ea11y_campaign',
488 - 'campaign' => 'acc-statement-plg-pages-activate',
489 - 'source' => 'wp-pages-activate',
490 - 'medium' => 'wp-dash',
491 - ];
492 - }
493 - }
494 -
495 359 $options = [
496 - 'title' => esc_html__( 'Make sure your site has an accessibility statement page', 'elementor' ),
497 - 'description' => $description,
360 + 'title' => esc_html__( 'Improve your site’s performance score.', 'elementor' ),
361 + 'description' => esc_html__( 'With our experimental speed boosting features you can go faster than ever before. Look for the Performance label on our Experiments page and activate those experiments to improve your site loading speed.', 'elementor' ),
498 362 'id' => $notice_id,
499 - 'type' => 'cta',
500 363 'button' => [
501 - 'text' => $button_text,
502 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
364 + 'text' => esc_html__( 'Try it out', 'elementor' ),
365 + 'url' => admin_url( 'admin.php?page=elementor#tab-experiments' ),
503 366 'type' => 'cta',
504 367 ],
505 368 'button_secondary' => [
506 369 'text' => esc_html__( 'Learn more', 'elementor' ),
507 - 'url' => $learn_more_url,
370 + 'url' => 'https://go.elementor.com/wp-dash-experiment-promotion/',
508 371 'new_tab' => true,
509 372 'type' => 'cta',
510 373 ],
511 374 ];
@@ -514,65 +377,26 @@
514 377
515 378 return true;
516 379 }
517 380
518 - private function is_elementor_page(): bool {
519 - return 0 === strpos( $this->current_screen_id, 'elementor_page' );
520 - }
381 + private function notice_design_not_appearing() {
382 + $installs_history = get_option( 'elementor_install_history', [] );
383 + $is_first_install = 1 === count( $installs_history );
521 384
522 - private function is_elementor_admin_screen(): bool {
523 - return in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library' ], true );
524 - }
525 -
526 - private function is_elementor_admin_screen_with_system_info(): bool {
527 - return in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true );
528 - }
529 - private function get_plugin_button_install_url( $plugin_slug ) {
530 - return wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $plugin_slug ), 'install-plugin_' . $plugin_slug );
531 - }
532 -
533 - private function get_plugin_button_activate_url( $plugin_file_path ) {
534 - return wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $plugin_file_path . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin_file_path );
535 - }
536 -
537 - private function get_plugin_button_connect_url( $plugin_settings_page ) {
538 - return self_admin_url( $plugin_settings_page );
539 - }
540 -
541 - private function get_plugin_cta_data( $plugin_slug, $plugin_file_path ) {
542 - if ( Hints::is_plugin_active( $plugin_slug ) ) {
385 + if ( $is_first_install || ! current_user_can( 'update_plugins' ) ) {
543 386 return false;
544 387 }
545 388
546 - if ( Hints::is_plugin_installed( $plugin_slug ) ) {
547 - $url = $this->get_plugin_button_activate_url( $plugin_file_path );
548 - $cta_text = esc_html__( 'Activate now', 'elementor' );
549 - } else {
550 - $url = $this->get_plugin_button_install_url( $plugin_slug );
551 - $cta_text = esc_html__( 'Install now', 'elementor' );
552 - }
389 + $notice_id = 'design_not_appearing';
390 + $notice = User::get_user_notices()[ $notice_id ] ?? [];
391 + $notice_version = $notice['meta']['version'] ?? null;
392 + $is_version_changed = $this->get_elementor_version() !== $notice_version;
553 393
554 - return [
555 - 'url' => $url,
556 - 'text' => $cta_text,
557 - ];
558 - }
559 -
560 - /**
561 - * For testing purposes
562 - */
563 - public function get_elementor_version() {
564 - return ELEMENTOR_VERSION;
565 - }
566 -
567 - private function notice_plugin_image_optimization() {
568 - $notice_id = 'plugin_image_optimization';
569 -
570 - if ( 'upload' !== $this->current_screen_id ) {
571 - return false;
394 + if ( $is_version_changed ) {
395 + User::set_user_notice( $notice_id, false, [ 'version' => $this->get_elementor_version() ] );
572 396 }
573 397
574 - if ( ! current_user_can( 'manage_options' ) ) {
398 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard', 'update-core', 'plugins' ], true ) ) {
575 399 return false;
576 400 }
577 401
578 402 if ( User::is_user_notice_viewed( $notice_id ) ) {
@@ -578,97 +402,29 @@
578 402 if ( User::is_user_notice_viewed( $notice_id ) ) {
579 403 return false;
580 404 }
581 405
582 - $attachments = new \WP_Query( [
583 - 'post_type' => 'attachment',
584 - 'post_status' => 'any',
585 - 'fields' => 'ids',
586 - ] );
587 -
588 - if ( 1 > $attachments->found_posts ) {
589 - return false;
590 - }
591 -
592 - $plugin_slug = 'image-optimization';
593 - $plugin_file_path = 'image-optimization/image-optimization.php';
594 -
595 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
596 - $is_installed = Hints::is_plugin_installed( $plugin_slug );
597 - $is_active = Hints::is_plugin_active( $plugin_slug );
598 -
599 - if ( $is_active ) {
600 - return false;
601 - }
602 -
603 - if ( $one_subscription ) {
604 - if ( ! $is_installed ) {
605 - $description = esc_html__( 'Automatically optimize images to improve site speed and performance. Included with your ONE subscription.', 'elementor' );
606 - $button_text = esc_html__( 'Install now', 'elementor' );
607 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
608 - $campaign_data = [
609 - 'name' => 'elementor_image_optimization_campaign',
610 - 'campaign' => 'io-plg-one',
611 - 'source' => 'io-wp-media-library-one-install',
612 - 'medium' => 'wp-dash-one',
613 - ];
614 - } elseif ( ! $is_active ) {
615 - $description = esc_html__( 'Your ONE subscription includes Image Optimization. Activate it to optimize images and improve site performance.', 'elementor' );
616 - $button_text = esc_html__( 'Activate now', 'elementor' );
617 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
618 - $campaign_data = [
619 - 'name' => 'elementor_image_optimization_campaign',
620 - 'campaign' => 'io-plg-one',
621 - 'source' => 'io-wp-media-library-one-activate',
622 - 'medium' => 'wp-dash-one',
623 - ];
624 - }
625 - } else {
626 - $description = esc_html__( 'Automatically compress and optimize images, resize larger files, or convert to WebP. Optimize images individually, in bulk, or on upload.', 'elementor' );
627 -
628 - if ( ! $is_installed ) {
629 - $button_text = esc_html__( 'Install now', 'elementor' );
630 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
631 - $campaign_data = [
632 - 'name' => 'elementor_image_optimization_campaign',
633 - 'campaign' => 'io-plg',
634 - 'source' => 'io-wp-media-library-install',
635 - 'medium' => 'wp-dash',
636 - ];
637 - } elseif ( ! $is_active ) {
638 - $button_text = esc_html__( 'Activate now', 'elementor' );
639 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
640 - $campaign_data = [
641 - 'name' => 'elementor_image_optimization_campaign',
642 - 'campaign' => 'io-plg',
643 - 'source' => 'io-wp-media-library-activate',
644 - 'medium' => 'wp-dash',
645 - ];
646 - }
647 - }
648 -
649 406 $options = [
650 - 'title' => esc_html__( 'Speed up your website with Image Optimization', 'elementor' ),
651 - 'description' => $description,
407 + 'title' => esc_html__( 'The version was updated successfully!', 'elementor' ),
408 + 'description' => sprintf(
409 + esc_html__( 'Encountering issues after updating the version? Don’t worry - we’ve collected all the fixes for troubleshooting common issues. %1$sFind a solution%2$s', 'elementor' ),
410 + '<a href="https://go.elementor.com/wp-dash-changes-do-not-appear-online/" target="_blank">',
411 + '</a>'
412 + ),
652 413 'id' => $notice_id,
653 - 'type' => 'cta',
654 - 'button' => [
655 - 'text' => $button_text,
656 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
657 - 'type' => 'cta',
658 - 'data' => [
659 - 'campaign' => $campaign_data['campaign'],
660 - 'source' => $campaign_data['source'],
661 - 'medium' => $campaign_data['medium'],
662 - ],
663 - ],
664 414 ];
665 415
666 - $this->print_admin_notice( $options );
416 + $excluded_pages = [];
417 + $this->print_admin_notice( $options, $excluded_pages );
667 418
668 419 return true;
669 420 }
670 421
422 + // For testing purposes
423 + public function get_elementor_version() {
424 + return ELEMENTOR_VERSION;
425 + }
426 +
671 427 public function print_admin_notice( array $options, $exclude_pages = self::DEFAULT_EXCLUDED_PAGES ) {
672 428 global $pagenow;
673 429
674 430 if ( in_array( $pagenow, $exclude_pages, true ) ) {
@@ -681,9 +437,9 @@
681 437 'description' => '',
682 438 'classes' => [ 'notice', 'e-notice' ], // We include WP's default notice class so it will be properly handled by WP's js handler
683 439 'type' => '',
684 440 'dismissible' => true,
685 - 'icon' => 'eicon-elementor-circle',
441 + 'icon' => 'eicon-elementor',
686 442 'button' => [],
687 443 'button_secondary' => [],
688 444 ];
689 445
@@ -696,19 +452,12 @@
696 452 if ( $options['type'] ) {
697 453 $notice_classes[] = 'e-notice--' . $options['type'];
698 454 }
699 455
700 - $wrapper_attributes = [
701 - 'role' => 'region',
702 - 'aria-label' => esc_html__( 'Elementor notice', 'elementor' ),
703 - ];
704 -
705 456 if ( $options['dismissible'] ) {
706 457 $label = esc_html__( 'Dismiss this notice.', 'elementor' );
707 458 $notice_classes[] = 'e-notice--dismissible';
708 459 $dismiss_button = '<i class="e-notice__dismiss" role="button" aria-label="' . $label . '" tabindex="0"></i>';
709 -
710 - $wrapper_attributes['data-nonce'] = wp_create_nonce( 'elementor_set_admin_notice_viewed' );
711 460 }
712 461
713 462 if ( $options['icon'] ) {
714 463 $notice_classes[] = 'e-notice--extended';
@@ -714,17 +463,15 @@
714 463 $notice_classes[] = 'e-notice--extended';
715 464 $icon = '<div class="e-notice__icon-wrapper"><i class="' . esc_attr( $options['icon'] ) . '" aria-hidden="true"></i></div>';
716 465 }
717 466
718 - $wrapper_attributes['class'] = $notice_classes;
467 + $wrapper_attributes = [
468 + 'class' => $notice_classes,
469 + ];
719 470
720 471 if ( $options['id'] ) {
721 472 $wrapper_attributes['data-notice_id'] = $options['id'];
722 473 }
723 -
724 - if ( ! empty( $options['source'] ) ) {
725 - $wrapper_attributes['data-source'] = $options['source'];
726 - }
727 474 ?>
728 475 <div <?php Utils::print_html_attributes( $wrapper_attributes ); ?>>
729 476 <?php echo $dismiss_button; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
730 477 <div class="e-notice__aside">
@@ -741,9 +488,8 @@
741 488
742 489 <?php if ( ! empty( $options['button']['text'] ) || ! empty( $options['button_secondary']['text'] ) ) { ?>
743 490 <div class="e-notice__actions">
744 491 <?php
745 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
746 492 foreach ( [ $options['button'], $options['button_secondary'] ] as $index => $button_settings ) {
747 493 if ( empty( $button_settings['variant'] ) && $index ) {
748 494 $button_settings['variant'] = 'outline';
749 495 }
@@ -751,20 +497,8 @@
751 497 if ( empty( $button_settings['text'] ) ) {
752 498 continue;
753 499 }
754 500
755 - if ( $one_subscription ) {
756 - if ( ! isset( $button_settings['classes'] ) ) {
757 - $button_settings['classes'] = [];
758 - }
759 - if ( ! is_array( $button_settings['classes'] ) ) {
760 - $button_settings['classes'] = [ $button_settings['classes'] ];
761 - }
762 - // index 0 = button, index 1 = button_secondary
763 - $button_class = ( 0 === $index ) ? 'button-primary' : 'button-secondary';
764 - $button_settings['classes'][] = $button_class;
765 - }
766 -
767 501 $button = new Button( $button_settings );
768 502 $button->print_button();
769 503 } ?>
770 504 </div>
@@ -796,60 +530,8 @@
796 530 return;
797 531 }
798 532 }
799 533
800 - public function maybe_log_campaign() {
801 - if ( empty( $_GET['plg_campaign'] ) || empty( $_GET['plg_campaign_name'] ) ) {
802 - return;
803 - }
804 -
805 - $allowed_plgs = [
806 - 'elementor_image_optimization_campaign',
807 - 'elementor_ea11y_campaign',
808 - ];
809 -
810 - if ( ! in_array( $_GET['plg_campaign_name'], $allowed_plgs, true ) ) {
811 - return;
812 - }
813 -
814 - if ( ! isset( $_GET['plg_campaign_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_GET['plg_campaign_nonce'] ), sanitize_key( $_GET['plg_campaign_name'] ) ) ) {
815 - return;
816 - }
817 -
818 - if ( ! current_user_can( 'manage_options' ) ) {
819 - return;
820 - }
821 -
822 - if ( empty( $_GET['plg_source'] ) || empty( $_GET['plg_medium'] ) ) {
823 - return;
824 - }
825 -
826 - $campaign_data = [
827 - 'source' => sanitize_key( $_GET['plg_source'] ),
828 - 'campaign' => sanitize_key( $_GET['plg_campaign'] ),
829 - 'medium' => sanitize_key( $_GET['plg_medium'] ),
830 - ];
831 -
832 - set_transient( sanitize_key( $_GET['plg_campaign_name'] ), $campaign_data, 30 * DAY_IN_SECONDS );
833 - }
834 -
835 - public static function add_plg_campaign_data( $url, $campaign_data ) {
836 -
837 - foreach ( [ 'name', 'campaign' ] as $key ) {
838 - if ( empty( $campaign_data[ $key ] ) ) {
839 - return $url;
840 - }
841 - }
842 -
843 - return add_query_arg( [
844 - 'plg_campaign_name' => $campaign_data['name'],
845 - 'plg_campaign' => $campaign_data['campaign'],
846 - 'plg_source' => empty( $campaign_data['source'] ) ? '' : $campaign_data['source'],
847 - 'plg_medium' => empty( $campaign_data['medium'] ) ? '' : $campaign_data['medium'],
848 - 'plg_campaign_nonce' => wp_create_nonce( $campaign_data['name'] ),
849 - ], $url );
850 - }
851 -
852 534 /**
853 535 * @since 2.9.0
854 536 * @access public
855 537 */
@@ -854,10 +536,8 @@
854 536 * @access public
855 537 */
856 538 public function __construct() {
857 539 add_action( 'admin_notices', [ $this, 'admin_notices' ], 20 );
858 - add_action( 'admin_action_install-plugin', [ $this, 'maybe_log_campaign' ] );
859 - add_action( 'admin_action_activate', [ $this, 'maybe_log_campaign' ] );
860 540 }
861 541
862 542 /**
863 543 * Get module name.