PluginProbe
Elementor Website Builder – more than just a page builder / 3.31.2
Elementor Website Builder – more than just a page builder v3.31.2
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 | core/admin/admin-notices.php +72 -320 4.1.43.31.2 View file →
@@ -3,10 +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\Upgrade\Manager;
8 -use Elementor\Core\Utils\Hints;
9 7 use Elementor\Core\Utils\Promotions\Filtered_Promotions_Manager;
10 8 use Elementor\Plugin;
11 9 use Elementor\Settings;
12 10 use Elementor\Tracker;
@@ -20,13 +18,9 @@
20 18
21 19 class Admin_Notices extends Module {
22 20
23 21 const DEFAULT_EXCLUDED_PAGES = [ 'plugins.php', 'plugin-install.php', 'plugin-editor.php' ];
24 - const LOCAL_GOOGLE_FONTS_DISABLED_NOTICE_ID = 'local_google_fonts_disabled';
25 - const LOCAL_GOOGLE_FONTS_NOTICE_MIN_VERSION = '3.33.3';
26 22
27 - const EXIT_EARLY_FOR_BACKWARD_COMPATIBILITY = false;
28 -
29 23 private $plain_notices = [
30 24 'api_notice',
31 25 'api_upgrade_plugin',
32 26 'tracker',
@@ -33,12 +27,12 @@
33 27 'tracker_last_update',
34 28 'rate_us_feedback',
35 29 'role_manager_promote',
36 30 'experiment_promotion',
31 + 'send_app_promotion',
37 32 'site_mailer_promotion',
38 33 'plugin_image_optimization',
39 34 'ally_pages_promotion',
40 - self::LOCAL_GOOGLE_FONTS_DISABLED_NOTICE_ID,
41 35 ];
42 36
43 37 private $elementor_pages_count = null;
44 38
@@ -138,16 +132,16 @@
138 132 $message = sprintf(
139 133 /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text. */
140 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' ),
141 135 esc_url( $details_url ),
142 - sprintf(
136 + esc_attr( sprintf(
143 137 /* translators: %s: Elementor version. */
144 - esc_attr__( 'View Elementor version %s details', 'elementor' ),
138 + __( 'View Elementor version %s details', 'elementor' ),
145 139 $new_version
146 - ),
140 + ) ),
147 141 $new_version,
148 142 esc_url( $upgrade_url ),
149 - esc_attr__( 'Update Now', 'elementor' )
143 + esc_attr( esc_html__( 'Update Now', 'elementor' ) )
150 144 );
151 145
152 146 $options = [
153 147 'title' => esc_html__( 'Update Notification', 'elementor' ),
@@ -396,10 +390,10 @@
396 390 }
397 391
398 392 $experiments = Plugin::$instance->experiments;
399 393 $is_all_performance_features_active = (
400 - $experiments->is_feature_active( 'e_font_icon_svg' ) &&
401 - $experiments->is_feature_active( 'e_optimized_markup' )
394 + $experiments->is_feature_active( 'e_element_cache' ) &&
395 + $experiments->is_feature_active( 'e_font_icon_svg' )
402 396 );
403 397
404 398 if ( $is_all_performance_features_active ) {
405 399 return false;
@@ -469,42 +463,46 @@
469 463 $detected_form_plugin = false;
470 464 return $detected_form_plugin;
471 465 }
472 466
473 - private function notice_local_google_fonts_disabled() {
467 + private function notice_send_app_promotion() {
468 + $notice_id = 'send_app_promotion';
474 469
475 470 if ( ! $this->is_elementor_page() && ! $this->is_elementor_admin_screen() ) {
476 471 return false;
477 472 }
478 473
479 - if ( ! Manager::had_install_prior_to( self::LOCAL_GOOGLE_FONTS_NOTICE_MIN_VERSION ) ) {
474 + if ( time() < $this->get_install_time() + ( 60 * DAY_IN_SECONDS ) ) {
480 475 return false;
481 476 }
482 477
483 - if ( User::is_user_notice_viewed( self::LOCAL_GOOGLE_FONTS_DISABLED_NOTICE_ID ) ) {
478 + if ( ! current_user_can( 'install_plugins' ) || User::is_user_notice_viewed( $notice_id ) ) {
484 479 return false;
485 480 }
486 481
487 - $is_local_gf_enabled = (bool) get_option( 'elementor_local_google_fonts', '0' );
482 + $plugin_file_path = 'send/send-app.php';
483 + $plugin_slug = 'send-app';
488 484
489 - if ( $is_local_gf_enabled ) {
485 + $cta_data = $this->get_plugin_cta_data( $plugin_slug, $plugin_file_path );
486 + if ( empty( $cta_data ) ) {
490 487 return false;
491 488 }
492 489
490 + $title = sprintf( esc_html__( 'Turn leads into loyal shoppers', 'elementor' ) );
491 +
493 492 $options = [
494 - 'title' => esc_html__( 'Important: Local Google Fonts Settings in Elementor', 'elementor' ),
495 - 'description' => esc_html__( 'Please note: The "Load Google Fonts Locally" feature has been disabled by default on all websites. To turn it back on, go to Elementor → Settings → Performance → Enable Load Google Fonts Locally.', 'elementor' ),
496 - 'id' => self::LOCAL_GOOGLE_FONTS_DISABLED_NOTICE_ID,
497 - 'type' => '',
493 + 'title' => $title,
494 + 'description' => esc_html__( 'Collecting leads is just the beginning. With Send by Elementor, you can manage contacts, launch automations, and turn form submissions into sales.', 'elementor' ),
495 + 'id' => $notice_id,
496 + 'type' => 'cta',
498 497 'button' => [
499 - 'text' => esc_html__( 'Take me there', 'elementor' ),
500 - 'url' => '../wp-admin/admin.php?page=elementor-settings#tab-performance',
501 - 'new_tab' => false,
498 + 'text' => $cta_data['text'],
499 + 'url' => $cta_data['url'],
502 500 'type' => 'cta',
503 501 ],
504 502 'button_secondary' => [
505 503 'text' => esc_html__( 'Learn more', 'elementor' ),
506 - 'url' => 'https://go.elementor.com/wp-dash-google-fonts-locally-notice/',
504 + 'url' => 'https://go.elementor.com/Formslearnmore',
507 505 'new_tab' => true,
508 506 'type' => 'cta',
509 507 ],
510 508 ];
@@ -521,89 +519,38 @@
521 519 if ( 'edit.php' !== $pagenow || empty( $_GET['post_type'] ) || 'page' !== $_GET['post_type'] ) {
522 520 return false;
523 521 }
524 522
525 - if ( ! current_user_can( 'manage_options' ) ) {
523 + if ( ! current_user_can( 'manage_options' ) || User::is_user_notice_viewed( $notice_id ) ) {
526 524 return false;
527 525 }
528 526
529 - if ( User::is_user_notice_viewed( $notice_id ) ) {
530 - return false;
531 - }
532 -
527 + $plugin_file_path = 'pojo-accessibility/pojo-accessibility.php';
533 528 $plugin_slug = 'pojo-accessibility';
534 - $plugin_file_path = 'pojo-accessibility/pojo-accessibility.php';
535 529
536 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
537 - $is_installed = Hints::is_plugin_installed( $plugin_slug );
538 - $is_active = Hints::is_plugin_active( $plugin_slug );
539 -
540 - if ( $is_active ) {
530 + $cta_data = $this->get_plugin_cta_data( $plugin_slug, $plugin_file_path );
531 + if ( empty( $cta_data ) ) {
541 532 return false;
542 533 }
543 534
544 - if ( $one_subscription ) {
545 - $learn_more_url = 'https://go.elementor.com/acc-plg-learn-more-one';
546 -
547 - if ( ! $is_installed ) {
548 - $description = esc_html__( 'Make sure your site has an accessibility statement page. Install Ally, included in ONE, to create it in a few clicks.', 'elementor' );
549 - $button_text = esc_html__( 'Install now', 'elementor' );
550 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
551 - $campaign_data = [
552 - 'name' => 'elementor_ea11y_campaign',
553 - 'campaign' => 'acc-statement-plg-pages-one-install',
554 - 'source' => 'wp-pages-one-install',
555 - 'medium' => 'wp-dash-one',
556 - ];
557 - } elseif ( ! $is_active ) {
558 - $description = esc_html__( 'Your ONE subscription includes Ally. Activate it to create your accessibility statement page quickly.', 'elementor' );
559 - $button_text = esc_html__( 'Activate now', 'elementor' );
560 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
561 - $campaign_data = [
562 - 'name' => 'elementor_ea11y_campaign',
563 - 'campaign' => 'acc-statement-plg-pages-one-activate',
564 - 'source' => 'wp-pages-one-activate',
565 - 'medium' => 'wp-dash-one',
566 - ];
567 - }
568 - } else {
569 - $description = esc_html__( "Create a more inclusive site experience for all your visitors. With Ally, it's easy to add your statement page in just a few clicks.", 'elementor' );
570 - $learn_more_url = 'https://go.elementor.com/acc-plg-learn-more';
571 -
572 - if ( ! $is_installed ) {
573 - $button_text = esc_html__( 'Install now', 'elementor' );
574 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
575 - $campaign_data = [
576 - 'name' => 'elementor_ea11y_campaign',
577 - 'campaign' => 'acc-statement-plg-pages-install',
578 - 'source' => 'wp-pages-install',
579 - 'medium' => 'wp-dash',
580 - ];
581 - } elseif ( ! $is_active ) {
582 - $button_text = esc_html__( 'Activate now', 'elementor' );
583 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
584 - $campaign_data = [
585 - 'name' => 'elementor_ea11y_campaign',
586 - 'campaign' => 'acc-statement-plg-pages-activate',
587 - 'source' => 'wp-pages-activate',
588 - 'medium' => 'wp-dash',
589 - ];
590 - }
591 - }
592 -
593 535 $options = [
594 536 'title' => esc_html__( 'Make sure your site has an accessibility statement page', 'elementor' ),
595 - 'description' => $description,
537 + 'description' => esc_html__( 'Create a more inclusive site experience for all your visitors. With Ally, it\'s easy to add your statement page in just a few clicks.', 'elementor' ),
596 538 'id' => $notice_id,
597 539 'type' => 'cta',
598 540 'button' => [
599 - 'text' => $button_text,
600 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
541 + 'text' => $cta_data['text'],
542 + 'url' => self::add_plg_campaign_data( $cta_data['url'], [
543 + 'name' => 'elementor_ea11y_campaign',
544 + 'campaign' => 'acc-statement-plg-pages',
545 + 'source' => 'wp-pages',
546 + 'medium' => 'wp-dash',
547 + ] ),
601 548 'type' => 'cta',
602 549 ],
603 550 'button_secondary' => [
604 551 'text' => esc_html__( 'Learn more', 'elementor' ),
605 - 'url' => $learn_more_url,
552 + 'url' => 'https://go.elementor.com/acc-plg-learn-more',
606 553 'new_tab' => true,
607 554 'type' => 'cta',
608 555 ],
609 556 ];
@@ -629,152 +576,40 @@
629 576 if ( ( Utils::has_pro() && ! $has_woocommerce ) || ! current_user_can( 'install_plugins' ) || User::is_user_notice_viewed( $notice_id ) ) {
630 577 return false;
631 578 }
632 579
580 + $plugin_file_path = 'site-mailer/site-mailer.php';
633 581 $plugin_slug = 'site-mailer';
634 - $plugin_file_path = 'site-mailer/site-mailer.php';
635 582
636 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
637 - $is_woocommerce = $this->should_render_woocommerce_hint( $has_forms, $has_woocommerce );
638 - $is_installed = Hints::is_plugin_installed( $plugin_slug );
639 - $is_active = Hints::is_plugin_active( $plugin_slug );
640 -
641 - if ( $is_active ) {
583 + $cta_data = $this->get_plugin_cta_data( $plugin_slug, $plugin_file_path );
584 + if ( empty( $cta_data ) ) {
642 585 return false;
643 586 }
644 587
645 - if ( $one_subscription ) {
646 - if ( $is_woocommerce ) {
647 - $title = esc_html__( 'Improve transactional email deliverability', 'elementor' );
648 -
649 - if ( ! $is_installed ) {
650 - $description = esc_html__( 'Use Site Mailer to ensure store emails like purchase confirmations and shipping updates reach the inbox every time. Included in your ONE subscription.', 'elementor' );
651 - $button_text = esc_html__( 'Install now', 'elementor' );
652 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
653 - $campaign_data = [
654 - 'name' => 'elementor_site_mailer_campaign',
655 - 'campaign' => 'sm-plg-one',
656 - 'source' => 'sm-core-woo-one-install',
657 - 'medium' => 'wp-dash',
658 - ];
659 - } elseif ( ! $is_active ) {
660 - $description = esc_html__( 'Site Mailer is installed and included in your ONE subscription. Activate it to ensure store emails like purchase confirmations and shipping updates reach the inbox every time.', 'elementor' );
661 - $button_text = esc_html__( 'Activate now', 'elementor' );
662 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
663 - $campaign_data = [
664 - 'name' => 'elementor_site_mailer_campaign',
665 - 'campaign' => 'sm-plg-one',
666 - 'source' => 'sm-core-woo-one-activate',
667 - 'medium' => 'wp-dash',
668 - ];
669 - }
670 - } else {
671 - $title = esc_html__( 'Keep your form emails out of the spam folder', 'elementor' );
672 -
673 - if ( ! $is_installed ) {
674 - $description = esc_html__( 'Use Site Mailer to ensure emails reach the inbox and track delivery with built-in logs. Included in your ONE subscription.', 'elementor' );
675 - $button_text = esc_html__( 'Install now', 'elementor' );
676 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
677 - $campaign_data = [
678 - 'name' => 'elementor_site_mailer_campaign',
679 - 'campaign' => 'sm-plg-one',
680 - 'source' => 'sm-core-form-one-install',
681 - 'medium' => 'wp-dash',
682 - ];
683 - } elseif ( ! $is_active ) {
684 - $description = esc_html__( 'Use Site Mailer to ensure emails reach the inbox and track delivery with built-in logs. Site Mailer is included in your ONE subscription. Activate it to continue.', 'elementor' );
685 - $button_text = esc_html__( 'Activate now', 'elementor' );
686 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
687 - $campaign_data = [
688 - 'name' => 'elementor_site_mailer_campaign',
689 - 'campaign' => 'sm-plg-one',
690 - 'source' => 'sm-core-form-one-activate',
691 - 'medium' => 'wp-dash',
692 - ];
693 - }
694 - }
695 - // phpcs:ignore Universal.ControlStructures.DisallowLonelyIf.Found
696 - } else {
697 - if ( $is_woocommerce ) {
698 - $title = esc_html__( 'Improve Transactional Email Deliverability', 'elementor' );
699 - $description = esc_html__( "Use Elementor's Site Mailer to ensure your store emails like purchase confirmations, shipping updates and more are reliably delivered.", 'elementor' );
700 -
701 - if ( ! $is_installed ) {
702 - $button_text = esc_html__( 'Install now', 'elementor' );
703 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
704 - $campaign_data = [
705 - 'name' => 'elementor_site_mailer_campaign',
706 - 'campaign' => 'sm-plg',
707 - 'source' => 'sm-core-woo-install',
708 - 'medium' => 'wp-dash',
709 - ];
710 - } elseif ( ! $is_active ) {
711 - $button_text = esc_html__( 'Activate now', 'elementor' );
712 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
713 - $campaign_data = [
714 - 'name' => 'elementor_site_mailer_campaign',
715 - 'campaign' => 'sm-plg',
716 - 'source' => 'sm-core-woo-activate',
717 - 'medium' => 'wp-dash',
718 - ];
719 - }
720 - } else {
721 - $title = esc_html__( 'Ensure your form emails avoid the spam folder!', 'elementor' );
722 - $description = esc_html__( 'Use Site Mailer for improved email deliverability, detailed email logs, and an easy setup.', 'elementor' );
723 -
724 - if ( ! $is_installed ) {
725 - $button_text = esc_html__( 'Install now', 'elementor' );
726 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
727 - $campaign_data = [
728 - 'name' => 'elementor_site_mailer_campaign',
729 - 'campaign' => 'sm-plg',
730 - 'source' => 'sm-core-form-install',
731 - 'medium' => 'wp-dash',
732 - ];
733 - } elseif ( ! $is_active ) {
734 - $button_text = esc_html__( 'Activate now', 'elementor' );
735 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
736 - $campaign_data = [
737 - 'name' => 'elementor_site_mailer_campaign',
738 - 'campaign' => 'sm-plg',
739 - 'source' => 'sm-core-form-activate',
740 - 'medium' => 'wp-dash',
741 - ];
742 - }
743 - }
744 - }
745 -
746 - $learn_more_url = $one_subscription && $is_woocommerce
747 - ? 'https://go.elementor.com/sm-woo-learn-more-one'
748 - : 'https://go.elementor.com/sm-core-form/';
749 -
750 588 $options = [
751 - 'title' => $title,
752 - 'description' => $description,
589 + 'title' => esc_html__( 'Ensure your form emails avoid the spam folder!', 'elementor' ),
590 + 'description' => esc_html__( 'Use Site Mailer for improved email deliverability, detailed email logs, and an easy setup.', 'elementor' ),
753 591 'id' => $notice_id,
754 592 'type' => 'cta',
755 593 'button' => [
756 - 'text' => $button_text,
757 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
594 + 'text' => $cta_data['text'],
595 + 'url' => $cta_data['url'],
758 596 'type' => 'cta',
759 - 'data' => [
760 - 'campaign' => $campaign_data['campaign'],
761 - 'source' => $campaign_data['source'],
762 - 'medium' => $campaign_data['medium'],
763 - ],
764 597 ],
765 598 'button_secondary' => [
766 599 'text' => esc_html__( 'Learn more', 'elementor' ),
767 - 'url' => $learn_more_url,
600 + 'url' => 'https://go.elementor.com/sm-core-form/',
768 601 'new_tab' => true,
769 602 'type' => 'cta',
770 603 ],
771 604 ];
772 605
773 - if ( $is_woocommerce ) {
606 + if ( $this->should_render_woocommerce_hint( $has_forms, $has_woocommerce ) ) {
774 607 // We include WP's default notice class so it will be properly handled by WP's js handler
775 608 // And add a new one to distinguish between the two types of notices
776 609 $options['classes'] = [ 'notice', 'e-notice', 'sm-notice-wc' ];
610 + $options['title'] = esc_html__( 'Improve Transactional Email Deliverability', 'elementor' );
611 + $options['description'] = esc_html__( 'Use Elementor\'s Site Mailer to ensure your store emails like purchase confirmations, shipping updates and more are reliably delivered.', 'elementor' );
777 612 }
778 613
779 614 $this->print_admin_notice( $options );
780 615
@@ -811,31 +646,20 @@
811 646
812 647 private function is_elementor_admin_screen_with_system_info(): bool {
813 648 return in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true );
814 649 }
815 - private function get_plugin_button_install_url( $plugin_slug ) {
816 - return wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $plugin_slug ), 'install-plugin_' . $plugin_slug );
817 - }
818 650
819 - private function get_plugin_button_activate_url( $plugin_file_path ) {
820 - 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 );
821 - }
822 -
823 - private function get_plugin_button_connect_url( $plugin_settings_page ) {
824 - return self_admin_url( $plugin_settings_page );
825 - }
826 -
827 651 private function get_plugin_cta_data( $plugin_slug, $plugin_file_path ) {
828 - if ( Hints::is_plugin_active( $plugin_slug ) ) {
652 + if ( is_plugin_active( $plugin_file_path ) ) {
829 653 return false;
830 654 }
831 655
832 - if ( Hints::is_plugin_installed( $plugin_slug ) ) {
833 - $url = $this->get_plugin_button_activate_url( $plugin_file_path );
834 - $cta_text = esc_html__( 'Activate now', 'elementor' );
656 + if ( $this->is_plugin_installed( $plugin_file_path ) ) {
657 + $url = 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 );
658 + $cta_text = esc_html__( 'Activate Plugin', 'elementor' );
835 659 } else {
836 - $url = $this->get_plugin_button_install_url( $plugin_slug );
837 - $cta_text = esc_html__( 'Install now', 'elementor' );
660 + $url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $plugin_slug ), 'install-plugin_' . $plugin_slug );
661 + $cta_text = esc_html__( 'Install Plugin', 'elementor' );
838 662 }
839 663
840 664 return [
841 665 'url' => $url,
@@ -856,16 +680,12 @@
856 680 if ( 'upload' !== $this->current_screen_id ) {
857 681 return false;
858 682 }
859 683
860 - if ( ! current_user_can( 'manage_options' ) ) {
684 + if ( ! current_user_can( 'manage_options' ) || User::is_user_notice_viewed( $notice_id ) ) {
861 685 return false;
862 686 }
863 687
864 - if ( User::is_user_notice_viewed( $notice_id ) ) {
865 - return false;
866 - }
867 -
868 688 $attachments = new \WP_Query( [
869 689 'post_type' => 'attachment',
870 690 'post_status' => 'any',
871 691 'fields' => 'ids',
@@ -874,79 +694,26 @@
874 694 if ( 1 > $attachments->found_posts ) {
875 695 return false;
876 696 }
877 697
698 + $plugin_file_path = 'image-optimization/image-optimization.php';
878 699 $plugin_slug = 'image-optimization';
879 - $plugin_file_path = 'image-optimization/image-optimization.php';
880 700
881 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
882 - $is_installed = Hints::is_plugin_installed( $plugin_slug );
883 - $is_active = Hints::is_plugin_active( $plugin_slug );
701 + $cta_data = $this->get_plugin_cta_data( $plugin_slug, $plugin_file_path );
884 702
885 - if ( $is_active ) {
703 + if ( empty( $cta_data ) ) {
886 704 return false;
887 705 }
888 706
889 - if ( $one_subscription ) {
890 - if ( ! $is_installed ) {
891 - $description = esc_html__( 'Automatically optimize images to improve site speed and performance. Included with your ONE subscription.', 'elementor' );
892 - $button_text = esc_html__( 'Install now', 'elementor' );
893 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
894 - $campaign_data = [
895 - 'name' => 'elementor_image_optimization_campaign',
896 - 'campaign' => 'io-plg-one',
897 - 'source' => 'io-wp-media-library-one-install',
898 - 'medium' => 'wp-dash-one',
899 - ];
900 - } elseif ( ! $is_active ) {
901 - $description = esc_html__( 'Your ONE subscription includes Image Optimizer. Activate it to optimize images and improve site performance.', 'elementor' );
902 - $button_text = esc_html__( 'Activate now', 'elementor' );
903 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
904 - $campaign_data = [
905 - 'name' => 'elementor_image_optimization_campaign',
906 - 'campaign' => 'io-plg-one',
907 - 'source' => 'io-wp-media-library-one-activate',
908 - 'medium' => 'wp-dash-one',
909 - ];
910 - }
911 - } else {
912 - $description = esc_html__( 'Automatically compress and optimize images, resize larger files, or convert to WebP. Optimize images individually, in bulk, or on upload.', 'elementor' );
913 -
914 - if ( ! $is_installed ) {
915 - $button_text = esc_html__( 'Install now', 'elementor' );
916 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
917 - $campaign_data = [
918 - 'name' => 'elementor_image_optimization_campaign',
919 - 'campaign' => 'io-plg',
920 - 'source' => 'io-wp-media-library-install',
921 - 'medium' => 'wp-dash',
922 - ];
923 - } elseif ( ! $is_active ) {
924 - $button_text = esc_html__( 'Activate now', 'elementor' );
925 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
926 - $campaign_data = [
927 - 'name' => 'elementor_image_optimization_campaign',
928 - 'campaign' => 'io-plg',
929 - 'source' => 'io-wp-media-library-activate',
930 - 'medium' => 'wp-dash',
931 - ];
932 - }
933 - }
934 -
935 707 $options = [
936 - 'title' => esc_html__( 'Speed up your website with Image Optimizer', 'elementor' ),
937 - 'description' => $description,
708 + 'title' => esc_html__( 'Speed up your website with Image Optimizer by Elementor', 'elementor' ),
709 + 'description' => esc_html__( 'Automatically compress and optimize images, resize larger files, or convert to WebP. Optimize images individually, in bulk, or on upload.', 'elementor' ),
938 710 'id' => $notice_id,
939 711 'type' => 'cta',
940 - 'button' => [
941 - 'text' => $button_text,
942 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
712 + 'button_secondary' => [
713 + 'text' => $cta_data['text'],
714 + 'url' => $cta_data['url'],
943 715 'type' => 'cta',
944 - 'data' => [
945 - 'campaign' => $campaign_data['campaign'],
946 - 'source' => $campaign_data['source'],
947 - 'medium' => $campaign_data['medium'],
948 - ],
949 716 ],
950 717 ];
951 718
952 719 $this->print_admin_notice( $options );
@@ -953,8 +720,14 @@
953 720
954 721 return true;
955 722 }
956 723
724 + private function is_plugin_installed( $file_path ): bool {
725 + $installed_plugins = get_plugins();
726 +
727 + return isset( $installed_plugins[ $file_path ] );
728 + }
729 +
957 730 public function print_admin_notice( array $options, $exclude_pages = self::DEFAULT_EXCLUDED_PAGES ) {
958 731 global $pagenow;
959 732
960 733 if ( in_array( $pagenow, $exclude_pages, true ) ) {
@@ -967,9 +740,9 @@
967 740 'description' => '',
968 741 'classes' => [ 'notice', 'e-notice' ], // We include WP's default notice class so it will be properly handled by WP's js handler
969 742 'type' => '',
970 743 'dismissible' => true,
971 - 'icon' => 'eicon-elementor-circle',
744 + 'icon' => 'eicon-elementor',
972 745 'button' => [],
973 746 'button_secondary' => [],
974 747 ];
975 748
@@ -982,12 +755,9 @@
982 755 if ( $options['type'] ) {
983 756 $notice_classes[] = 'e-notice--' . $options['type'];
984 757 }
985 758
986 - $wrapper_attributes = [
987 - 'role' => 'region',
988 - 'aria-label' => esc_html__( 'Elementor notice', 'elementor' ),
989 - ];
759 + $wrapper_attributes = [];
990 760
991 761 if ( $options['dismissible'] ) {
992 762 $label = esc_html__( 'Dismiss this notice.', 'elementor' );
993 763 $notice_classes[] = 'e-notice--dismissible';
@@ -1005,12 +775,8 @@
1005 775
1006 776 if ( $options['id'] ) {
1007 777 $wrapper_attributes['data-notice_id'] = $options['id'];
1008 778 }
1009 -
1010 - if ( ! empty( $options['source'] ) ) {
1011 - $wrapper_attributes['data-source'] = $options['source'];
1012 - }
1013 779 ?>
1014 780 <div <?php Utils::print_html_attributes( $wrapper_attributes ); ?>>
1015 781 <?php echo $dismiss_button; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
1016 782 <div class="e-notice__aside">
@@ -1027,9 +793,8 @@
1027 793
1028 794 <?php if ( ! empty( $options['button']['text'] ) || ! empty( $options['button_secondary']['text'] ) ) { ?>
1029 795 <div class="e-notice__actions">
1030 796 <?php
1031 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
1032 797 foreach ( [ $options['button'], $options['button_secondary'] ] as $index => $button_settings ) {
1033 798 if ( empty( $button_settings['variant'] ) && $index ) {
1034 799 $button_settings['variant'] = 'outline';
1035 800 }
@@ -1037,20 +802,8 @@
1037 802 if ( empty( $button_settings['text'] ) ) {
1038 803 continue;
1039 804 }
1040 805
1041 - if ( $one_subscription ) {
1042 - if ( ! isset( $button_settings['classes'] ) ) {
1043 - $button_settings['classes'] = [];
1044 - }
1045 - if ( ! is_array( $button_settings['classes'] ) ) {
1046 - $button_settings['classes'] = [ $button_settings['classes'] ];
1047 - }
1048 - // index 0 = button, index 1 = button_secondary
1049 - $button_class = ( 0 === $index ) ? 'button-primary' : 'button-secondary';
1050 - $button_settings['classes'][] = $button_class;
1051 - }
1052 -
1053 806 $button = new Button( $button_settings );
1054 807 $button->print_button();
1055 808 } ?>
1056 809 </div>
@@ -1118,9 +871,9 @@
1118 871
1119 872 set_transient( sanitize_key( $_GET['plg_campaign_name'] ), $campaign_data, 30 * DAY_IN_SECONDS );
1120 873 }
1121 874
1122 - public static function add_plg_campaign_data( $url, $campaign_data ) {
875 + private static function add_plg_campaign_data( $url, $campaign_data ) {
1123 876
1124 877 foreach ( [ 'name', 'campaign' ] as $key ) {
1125 878 if ( empty( $campaign_data[ $key ] ) ) {
1126 879 return $url;
@@ -1142,9 +895,8 @@
1142 895 */
1143 896 public function __construct() {
1144 897 add_action( 'admin_notices', [ $this, 'admin_notices' ], 20 );
1145 898 add_action( 'admin_action_install-plugin', [ $this, 'maybe_log_campaign' ] );
1146 - add_action( 'admin_action_activate', [ $this, 'maybe_log_campaign' ] );
1147 899 }
1148 900
1149 901 /**
1150 902 * Get module name.