PluginProbe
Elementor Website Builder – more than just a page builder / 3.22.0-beta1
Elementor Website Builder – more than just a page builder v3.22.0-beta1
4.3.4 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 All 457 releases
← All changes | core/admin/admin-notices.php +83 -343 4.3.2 → 3.22.0-beta1 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,17 @@
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',
29 + 'experiment_promotion',
30 + 'design_not_appearing',
32 31 'plugin_image_optimization',
33 - 'ally_pages_promotion',
34 32 ];
35 33
36 34 private $elementor_pages_count = null;
37 35
@@ -39,8 +37,12 @@
39 37
40 38 private $current_screen_id = null;
41 39
42 40 private function get_notices() {
41 + $notices = [
42 + new Elementor_Dev_Notice(),
43 + ];
44 +
43 45 /**
44 46 * Admin notices.
45 47 *
46 48 * Filters Elementor admin notices.
@@ -49,9 +51,9 @@
49 51 * admin notice or to add new notices for Elementor add-ons.
50 52 *
51 53 * @param array $notices A list of notice classes.
52 54 */
53 - $notices = apply_filters( 'elementor/core/admin/notices', [] );
55 + $notices = apply_filters( 'elementor/core/admin/notices', $notices );
54 56
55 57 return $notices;
56 58 }
57 59
@@ -91,9 +93,9 @@
91 93 if ( ! current_user_can( 'update_plugins' ) ) {
92 94 return false;
93 95 }
94 96
95 - if ( ! $this->is_elementor_admin_screen_with_system_info() ) {
97 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
96 98 return false;
97 99 }
98 100
99 101 // Check for upgrades.
@@ -131,16 +133,16 @@
131 133 $message = sprintf(
132 134 /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text. */
133 135 __( '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 136 esc_url( $details_url ),
135 - sprintf(
137 + esc_attr( sprintf(
136 138 /* translators: %s: Elementor version. */
137 - esc_attr__( 'View Elementor version %s details', 'elementor' ),
139 + __( 'View Elementor version %s details', 'elementor' ),
138 140 $new_version
139 - ),
141 + ) ),
140 142 $new_version,
141 143 esc_url( $upgrade_url ),
142 - esc_attr__( 'Update Now', 'elementor' )
144 + esc_attr( esc_html__( 'Update Now', 'elementor' ) )
143 145 );
144 146
145 147 $options = [
146 148 'title' => esc_html__( 'Update Notification', 'elementor' ),
@@ -167,9 +169,9 @@
167 169 if ( ! current_user_can( 'manage_options' ) ) {
168 170 return false;
169 171 }
170 172
171 - if ( ! $this->is_elementor_admin_screen_with_system_info() ) {
173 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
172 174 return false;
173 175 }
174 176
175 177 $notice_id = 'admin_notice_api_' . $admin_notice['notice_id'];
@@ -213,9 +215,9 @@
213 215 // TODO: Skip for development env.
214 216 $optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' );
215 217 $optout_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_out' ), 'opt_out' );
216 218
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' );
219 + $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 220
219 221 /**
220 222 * Tracker admin description text.
221 223 *
@@ -229,11 +231,10 @@
229 231
230 232 $message = esc_html( $tracker_description_text ) . ' <a href="https://go.elementor.com/usage-data-tracking/" target="_blank">' . esc_html__( 'Learn more.', 'elementor' ) . '</a>';
231 233
232 234 $options = [
233 - 'title' => esc_html__( 'Want to shape the future of web creation?', 'elementor' ),
235 + 'title' => esc_html__( 'Love using Elementor?', 'elementor' ),
234 236 'description' => $message,
235 - 'dismissible' => false,
236 237 'button' => [
237 238 'text' => esc_html__( 'Sure! I\'d love to help', 'elementor' ),
238 239 'url' => $optin_url,
239 240 'type' => 'cta',
@@ -250,49 +251,8 @@
250 251
251 252 return true;
252 253 }
253 254
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 255 private function notice_rate_us_feedback() {
296 256 $notice_id = 'rate_us_feedback';
297 257
298 258 if ( ! current_user_can( 'manage_options' ) ) {
@@ -309,9 +269,8 @@
309 269
310 270 $dismiss_url = add_query_arg( [
311 271 'action' => 'elementor_set_admin_notice_viewed',
312 272 'notice_id' => esc_attr( $notice_id ),
313 - '_wpnonce' => wp_create_nonce( 'elementor_set_admin_notice_viewed' ),
314 273 ], admin_url( 'admin-post.php' ) );
315 274
316 275 $options = [
317 276 'title' => esc_html__( 'Congrats!', 'elementor' ),
@@ -380,132 +339,37 @@
380 339
381 340 return true;
382 341 }
383 342
384 - private function get_installed_form_plugin_name() {
385 - static $detected_form_plugin = null;
343 + private function notice_experiment_promotion() {
344 + $notice_id = 'experiment_promotion';
386 345
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'] ) {
346 + if ( ! current_user_can( 'manage_options' ) || User::is_user_notice_viewed( $notice_id ) ) {
424 347 return false;
425 348 }
426 349
427 - if ( ! current_user_can( 'manage_options' ) ) {
428 - return false;
429 - }
350 + $experiments = Plugin::$instance->experiments;
351 + $is_all_performance_features_active = (
352 + $experiments->is_feature_active( 'additional_custom_breakpoints' ) &&
353 + $experiments->is_feature_active( 'e_optimized_css_loading' )
354 + );
430 355
431 - if ( User::is_user_notice_viewed( $notice_id ) ) {
356 + if ( $is_all_performance_features_active ) {
432 357 return false;
433 358 }
434 359
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 360 $options = [
496 - 'title' => esc_html__( 'Make sure your site has an accessibility statement page', 'elementor' ),
497 - 'description' => $description,
361 + 'title' => esc_html__( 'Improve your site’s performance score.', 'elementor' ),
362 + '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 363 'id' => $notice_id,
499 - 'type' => 'cta',
500 364 'button' => [
501 - 'text' => $button_text,
502 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
365 + 'text' => esc_html__( 'Try it out', 'elementor' ),
366 + 'url' => admin_url( 'admin.php?page=elementor#tab-experiments' ),
503 367 'type' => 'cta',
504 368 ],
505 369 'button_secondary' => [
506 370 'text' => esc_html__( 'Learn more', 'elementor' ),
507 - 'url' => $learn_more_url,
371 + 'url' => 'https://go.elementor.com/wp-dash-experiment-promotion/',
508 372 'new_tab' => true,
509 373 'type' => 'cta',
510 374 ],
511 375 ];
@@ -514,53 +378,50 @@
514 378
515 379 return true;
516 380 }
517 381
518 - private function is_elementor_page(): bool {
519 - return 0 === strpos( $this->current_screen_id, 'elementor_page' );
520 - }
382 + private function notice_design_not_appearing() {
383 + $installs_history = get_option( 'elementor_install_history', [] );
384 + $is_first_install = 1 === count( $installs_history );
521 385
522 - private function is_elementor_admin_screen(): bool {
523 - return in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library' ], true );
524 - }
386 + if ( $is_first_install || ! current_user_can( 'update_plugins' ) ) {
387 + return false;
388 + }
525 389
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 - }
390 + $notice_id = 'design_not_appearing';
391 + $notice = User::get_user_notices()[ $notice_id ] ?? [];
392 + $notice_version = $notice['meta']['version'] ?? null;
393 + $is_version_changed = $this->get_elementor_version() !== $notice_version;
532 394
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 - }
395 + if ( $is_version_changed ) {
396 + User::set_user_notice( $notice_id, false, [ 'version' => $this->get_elementor_version() ] );
397 + }
536 398
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 ) ) {
399 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard', 'update-core', 'plugins' ], true ) ) {
543 400 return false;
544 401 }
545 402
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' );
403 + if ( User::is_user_notice_viewed( $notice_id ) ) {
404 + return false;
552 405 }
553 406
554 - return [
555 - 'url' => $url,
556 - 'text' => $cta_text,
407 + $options = [
408 + 'title' => esc_html__( 'The version was updated successfully!', 'elementor' ),
409 + 'description' => sprintf(
410 + 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' ),
411 + '<a href="https://go.elementor.com/wp-dash-changes-do-not-appear-online/" target="_blank">',
412 + '</a>'
413 + ),
414 + 'id' => $notice_id,
557 415 ];
416 +
417 + $excluded_pages = [];
418 + $this->print_admin_notice( $options, $excluded_pages );
419 +
420 + return true;
558 421 }
559 422
560 - /**
561 - * For testing purposes
562 - */
423 + // For testing purposes
563 424 public function get_elementor_version() {
564 425 return ELEMENTOR_VERSION;
565 426 }
566 427
@@ -570,16 +431,12 @@
570 431 if ( 'upload' !== $this->current_screen_id ) {
571 432 return false;
572 433 }
573 434
574 - if ( ! current_user_can( 'manage_options' ) ) {
435 + if ( ! current_user_can( 'manage_options' ) || User::is_user_notice_viewed( $notice_id ) ) {
575 436 return false;
576 437 }
577 438
578 - if ( User::is_user_notice_viewed( $notice_id ) ) {
579 - return false;
580 - }
581 -
582 439 $attachments = new \WP_Query( [
583 440 'post_type' => 'attachment',
584 441 'post_status' => 'any',
585 442 'fields' => 'ids',
@@ -588,79 +445,32 @@
588 445 if ( 1 > $attachments->found_posts ) {
589 446 return false;
590 447 }
591 448
449 + $plugin_file_path = 'image-optimization/image-optimization.php';
592 450 $plugin_slug = 'image-optimization';
593 - $plugin_file_path = 'image-optimization/image-optimization.php';
594 451
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 ) {
452 + if ( is_plugin_active( $plugin_file_path ) ) {
600 453 return false;
601 454 }
602 455
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 - }
456 + if ( $this->is_plugin_installed( $plugin_file_path ) ) {
457 + $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 );
458 + $cta_text = esc_html__( 'Activate Plugin', 'elementor' );
625 459 } 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 - }
460 + $url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $plugin_slug ), 'install-plugin_' . $plugin_slug );
461 + $cta_text = esc_html__( 'Install Plugin', 'elementor' );
647 462 }
648 463
649 464 $options = [
650 - 'title' => esc_html__( 'Speed up your website with Image Optimization', 'elementor' ),
651 - 'description' => $description,
465 + 'title' => esc_html__( 'Speed up your website with Image Optimizer by Elementor', 'elementor' ),
466 + 'description' => esc_html__( 'Automatically compress and optimize images, resize larger files, or convert to WebP. Optimize images individually, in bulk, or on upload.', 'elementor' ),
652 467 'id' => $notice_id,
653 468 'type' => 'cta',
654 - 'button' => [
655 - 'text' => $button_text,
656 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
469 + 'button_secondary' => [
470 + 'text' => $cta_text,
471 + 'url' => $url,
657 472 'type' => 'cta',
658 - 'data' => [
659 - 'campaign' => $campaign_data['campaign'],
660 - 'source' => $campaign_data['source'],
661 - 'medium' => $campaign_data['medium'],
662 - ],
663 473 ],
664 474 ];
665 475
666 476 $this->print_admin_notice( $options );
@@ -667,8 +477,14 @@
667 477
668 478 return true;
669 479 }
670 480
481 + private function is_plugin_installed( $file_path ): bool {
482 + $installed_plugins = get_plugins();
483 +
484 + return isset( $installed_plugins[ $file_path ] );
485 + }
486 +
671 487 public function print_admin_notice( array $options, $exclude_pages = self::DEFAULT_EXCLUDED_PAGES ) {
672 488 global $pagenow;
673 489
674 490 if ( in_array( $pagenow, $exclude_pages, true ) ) {
@@ -681,9 +497,9 @@
681 497 'description' => '',
682 498 'classes' => [ 'notice', 'e-notice' ], // We include WP's default notice class so it will be properly handled by WP's js handler
683 499 'type' => '',
684 500 'dismissible' => true,
685 - 'icon' => 'eicon-elementor-circle',
501 + 'icon' => 'eicon-elementor',
686 502 'button' => [],
687 503 'button_secondary' => [],
688 504 ];
689 505
@@ -696,19 +512,12 @@
696 512 if ( $options['type'] ) {
697 513 $notice_classes[] = 'e-notice--' . $options['type'];
698 514 }
699 515
700 - $wrapper_attributes = [
701 - 'role' => 'region',
702 - 'aria-label' => esc_html__( 'Elementor notice', 'elementor' ),
703 - ];
704 -
705 516 if ( $options['dismissible'] ) {
706 517 $label = esc_html__( 'Dismiss this notice.', 'elementor' );
707 518 $notice_classes[] = 'e-notice--dismissible';
708 519 $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 520 }
712 521
713 522 if ( $options['icon'] ) {
714 523 $notice_classes[] = 'e-notice--extended';
@@ -714,17 +523,15 @@
714 523 $notice_classes[] = 'e-notice--extended';
715 524 $icon = '<div class="e-notice__icon-wrapper"><i class="' . esc_attr( $options['icon'] ) . '" aria-hidden="true"></i></div>';
716 525 }
717 526
718 - $wrapper_attributes['class'] = $notice_classes;
527 + $wrapper_attributes = [
528 + 'class' => $notice_classes,
529 + ];
719 530
720 531 if ( $options['id'] ) {
721 532 $wrapper_attributes['data-notice_id'] = $options['id'];
722 533 }
723 -
724 - if ( ! empty( $options['source'] ) ) {
725 - $wrapper_attributes['data-source'] = $options['source'];
726 - }
727 534 ?>
728 535 <div <?php Utils::print_html_attributes( $wrapper_attributes ); ?>>
729 536 <?php echo $dismiss_button; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
730 537 <div class="e-notice__aside">
@@ -741,9 +548,8 @@
741 548
742 549 <?php if ( ! empty( $options['button']['text'] ) || ! empty( $options['button_secondary']['text'] ) ) { ?>
743 550 <div class="e-notice__actions">
744 551 <?php
745 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
746 552 foreach ( [ $options['button'], $options['button_secondary'] ] as $index => $button_settings ) {
747 553 if ( empty( $button_settings['variant'] ) && $index ) {
748 554 $button_settings['variant'] = 'outline';
749 555 }
@@ -751,20 +557,8 @@
751 557 if ( empty( $button_settings['text'] ) ) {
752 558 continue;
753 559 }
754 560
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 561 $button = new Button( $button_settings );
768 562 $button->print_button();
769 563 } ?>
770 564 </div>
@@ -796,60 +590,8 @@
796 590 return;
797 591 }
798 592 }
799 593
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 594 /**
853 595 * @since 2.9.0
854 596 * @access public
855 597 */
@@ -854,10 +596,8 @@
854 596 * @access public
855 597 */
856 598 public function __construct() {
857 599 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 600 }
861 601
862 602 /**
863 603 * Get module name.