PluginProbe
Elementor Website Builder – more than just a page builder / 3.5.0-dev9
Elementor Website Builder – more than just a page builder v3.5.0-dev9
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 +118 -664 4.1.0-beta23.5.0-dev9 View file →
@@ -3,17 +3,14 @@
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 -use Elementor\Core\Utils\Promotions\Filtered_Promotions_Manager;
10 7 use Elementor\Plugin;
11 -use Elementor\Settings;
12 8 use Elementor\Tracker;
13 9 use Elementor\User;
14 10 use Elementor\Utils;
15 11 use Elementor\Core\Admin\Notices\Base_Notice;
12 +use Elementor\Core\Admin\Notices\Elementor_Dev_Notice;
16 13
17 14 if ( ! defined( 'ABSPATH' ) ) {
18 15 exit; // Exit if accessed directly.
19 16 }
@@ -19,26 +16,18 @@
19 16 }
20 17
21 18 class Admin_Notices extends Module {
22 19
23 - 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 -
27 - const EXIT_EARLY_FOR_BACKWARD_COMPATIBILITY = false;
28 -
29 20 private $plain_notices = [
30 21 'api_notice',
31 22 'api_upgrade_plugin',
32 23 'tracker',
33 - 'tracker_last_update',
34 24 'rate_us_feedback',
25 + 'woocommerce_promote',
26 + 'cf7_promote',
27 + 'mc4wp_promote',
28 + 'popup_maker_promote',
35 29 'role_manager_promote',
36 - 'experiment_promotion',
37 - 'site_mailer_promotion',
38 - 'plugin_image_optimization',
39 - 'ally_pages_promotion',
40 - self::LOCAL_GOOGLE_FONTS_DISABLED_NOTICE_ID,
41 30 ];
42 31
43 32 private $elementor_pages_count = null;
44 33
@@ -46,21 +35,13 @@
46 35
47 36 private $current_screen_id = null;
48 37
49 38 private function get_notices() {
50 - /**
51 - * Admin notices.
52 - *
53 - * Filters Elementor admin notices.
54 - *
55 - * This hook can be used by external developers to manage existing
56 - * admin notice or to add new notices for Elementor add-ons.
57 - *
58 - * @param array $notices A list of notice classes.
59 - */
60 - $notices = apply_filters( 'elementor/core/admin/notices', [] );
39 + $notices = [
40 + new Elementor_Dev_Notice(),
41 + ];
61 42
62 - return $notices;
43 + return apply_filters( 'elementor/core/admin/notices', $notices );
63 44 }
64 45
65 46 private function get_install_time() {
66 47 if ( null === $this->install_time ) {
@@ -98,13 +79,13 @@
98 79 if ( ! current_user_can( 'update_plugins' ) ) {
99 80 return false;
100 81 }
101 82
102 - if ( ! $this->is_elementor_admin_screen_with_system_info() ) {
83 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
103 84 return false;
104 85 }
105 86
106 - // Check for upgrades.
87 + // Check if have any upgrades.
107 88 $update_plugins = get_site_transient( 'update_plugins' );
108 89
109 90 $has_remote_update_package = ! ( empty( $update_plugins ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ] ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ]->package ) );
110 91
@@ -124,9 +105,9 @@
124 105
125 106 $new_version = $upgrade_notice['version'];
126 107 }
127 108
128 - // Check if upgrade messages should be shown.
109 + // Check if have upgrade notices to show.
129 110 if ( version_compare( ELEMENTOR_VERSION, $upgrade_notice['version'], '>=' ) ) {
130 111 return false;
131 112 }
132 113
@@ -135,19 +116,19 @@
135 116 return false;
136 117 }
137 118
138 119 $message = sprintf(
139 - /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text. */
120 + /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text */
140 121 __( '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 122 esc_url( $details_url ),
142 - sprintf(
143 - /* translators: %s: Elementor version. */
144 - esc_attr__( 'View Elementor version %s details', 'elementor' ),
123 + esc_attr( sprintf(
124 + /* translators: %s: Elementor version */
125 + __( 'View Elementor version %s details', 'elementor' ),
145 126 $new_version
146 - ),
127 + ) ),
147 128 $new_version,
148 129 esc_url( $upgrade_url ),
149 - esc_attr__( 'Update Now', 'elementor' )
130 + esc_attr( esc_html__( 'Update Elementor Now', 'elementor' ) )
150 131 );
151 132
152 133 $options = [
153 134 'title' => esc_html__( 'Update Notification', 'elementor' ),
@@ -174,9 +155,9 @@
174 155 if ( ! current_user_can( 'manage_options' ) ) {
175 156 return false;
176 157 }
177 158
178 - if ( ! $this->is_elementor_admin_screen_with_system_info() ) {
159 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
179 160 return false;
180 161 }
181 162
182 163 $notice_id = 'admin_notice_api_' . $admin_notice['notice_id'];
@@ -220,9 +201,9 @@
220 201 // TODO: Skip for development env.
221 202 $optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' );
222 203 $optout_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_out' ), 'opt_out' );
223 204
224 - $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' );
205 + $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' );
225 206
226 207 /**
227 208 * Tracker admin description text.
228 209 *
@@ -236,11 +217,10 @@
236 217
237 218 $message = esc_html( $tracker_description_text ) . ' <a href="https://go.elementor.com/usage-data-tracking/" target="_blank">' . esc_html__( 'Learn more.', 'elementor' ) . '</a>';
238 219
239 220 $options = [
240 - 'title' => esc_html__( 'Want to shape the future of web creation?', 'elementor' ),
221 + 'title' => esc_html__( 'Love using Elementor?', 'elementor' ),
241 222 'description' => $message,
242 - 'dismissible' => false,
243 223 'button' => [
244 224 'text' => esc_html__( 'Sure! I\'d love to help', 'elementor' ),
245 225 'url' => $optin_url,
246 226 'type' => 'cta',
@@ -257,49 +237,8 @@
257 237
258 238 return true;
259 239 }
260 240
261 - private function notice_tracker_last_update() {
262 - if ( ! current_user_can( 'manage_options' ) ) {
263 - return false;
264 - }
265 -
266 - if ( ! Tracker::has_terms_changed() ) {
267 - return false;
268 - }
269 -
270 - $notice_id = 'tracker_last_update_' . Tracker::LAST_TERMS_UPDATED;
271 -
272 - if ( User::is_user_notice_viewed( $notice_id ) ) {
273 - return false;
274 - }
275 -
276 - $optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' );
277 -
278 - $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' );
279 -
280 - $options = [
281 - 'id' => $notice_id,
282 - 'title' => esc_html__( 'Update regarding usage data collection', 'elementor' ),
283 - 'description' => $message,
284 - 'button' => [
285 - 'text' => esc_html__( 'Opt in', 'elementor' ),
286 - 'url' => $optin_url,
287 - 'type' => 'cta',
288 - ],
289 - 'button_secondary' => [
290 - 'text' => esc_html__( 'Learn more', 'elementor' ),
291 - 'url' => 'https://go.elementor.com/wp-dash-update-usage-notice/',
292 - 'new_tab' => true,
293 - 'type' => 'cta',
294 - ],
295 - ];
296 -
297 - $this->print_admin_notice( $options );
298 -
299 - return true;
300 - }
301 -
302 241 private function notice_rate_us_feedback() {
303 242 $notice_id = 'rate_us_feedback';
304 243
305 244 if ( ! current_user_can( 'manage_options' ) ) {
@@ -316,14 +255,14 @@
316 255
317 256 $dismiss_url = add_query_arg( [
318 257 'action' => 'elementor_set_admin_notice_viewed',
319 258 'notice_id' => esc_attr( $notice_id ),
320 - '_wpnonce' => wp_create_nonce( 'elementor_set_admin_notice_viewed' ),
321 259 ], admin_url( 'admin-post.php' ) );
322 260
323 261 $options = [
324 262 'title' => esc_html__( 'Congrats!', 'elementor' ),
325 - 'description' => esc_html__( 'You created over 10 pages with Elementor. Great job! If you can spare a minute, please help us by leaving a five star review on WordPress.org.', 'elementor' ),
263 + 'description' => esc_html__( 'You created over 10 pages with Elementor. Great job! If you can spare a minute,
264 + please help us by leaving a five star review on WordPress.org.', 'elementor' ),
326 265 'id' => $notice_id,
327 266 'button' => [
328 267 'text' => esc_html__( 'Happy To Help', 'elementor' ),
329 268 'url' => 'https://go.elementor.com/admin-review/',
@@ -343,168 +282,80 @@
343 282
344 283 return true;
345 284 }
346 285
347 - private function notice_role_manager_promote() {
348 - $notice_id = 'role_manager_promote';
286 + private function notice_woocommerce_promote() {
287 + $notice_id = 'woocommerce_promote';
349 288
350 - if ( Utils::has_pro() ) {
289 + if ( Utils::has_pro() || ! function_exists( 'WC' ) ) {
351 290 return false;
352 291 }
353 292
354 - if ( ! current_user_can( 'manage_options' ) ) {
293 + if ( ! current_user_can( 'install_plugins' ) ) {
355 294 return false;
356 295 }
357 296
358 - if ( 'elementor_page_elementor-role-manager' !== $this->current_screen_id || User::is_user_notice_viewed( $notice_id ) ) {
297 + if ( ! in_array( $this->current_screen_id, [ 'edit-product', 'woocommerce_page_wc-settings' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
359 298 return false;
360 299 }
361 300
362 - $users = new \WP_User_Query( [
363 - 'fields' => 'ID',
364 - 'number' => 10,
365 - ] );
301 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
302 + return false;
303 + }
366 304
367 - if ( 5 > $users->get_total() ) {
305 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
368 306 return false;
369 307 }
370 308
371 309 $options = [
372 - 'title' => esc_html__( 'Managing a multi-user site?', 'elementor' ),
373 - 'description' => esc_html__( 'With Elementor Pro, you can control user access and make sure no one messes up your design.', 'elementor' ),
310 + 'title' => esc_html__( 'Using WooCommerce?', 'elementor' ),
311 + 'description' => esc_html__( 'With Elementor Pro’s WooCommerce Builder, you’ll be able to design your store without coding!', 'elementor' ),
374 312 'id' => $notice_id,
375 313
376 314 'button' => [
377 315 'text' => esc_html__( 'Learn More', 'elementor' ),
378 - 'url' => 'https://go.elementor.com/plugin-promotion-role-manager/',
316 + 'url' => 'https://go.elementor.com/plugin-promotion-woocommerce/',
379 317 'new_tab' => true,
380 318 'type' => 'cta',
381 319 ],
382 320 ];
383 321
384 - $options = Filtered_Promotions_Manager::get_filtered_promotion_data( $options, 'core/admin/notice_role_manager_promote', 'button', 'url' );
385 -
386 322 $this->print_admin_notice( $options );
387 323
388 324 return true;
389 325 }
390 326
391 - private function notice_experiment_promotion() {
392 - $notice_id = 'experiment_promotion';
327 + private function notice_cf7_promote() {
328 + $notice_id = 'cf7_promote';
393 329
394 - if ( ! current_user_can( 'manage_options' ) || User::is_user_notice_viewed( $notice_id ) ) {
330 + if ( Utils::has_pro() || ! defined( 'WPCF7_VERSION' ) ) {
395 331 return false;
396 332 }
397 333
398 - $experiments = Plugin::$instance->experiments;
399 - $is_all_performance_features_active = (
400 - $experiments->is_feature_active( 'e_font_icon_svg' ) &&
401 - $experiments->is_feature_active( 'e_optimized_markup' )
402 - );
403 -
404 - if ( $is_all_performance_features_active ) {
334 + if ( ! current_user_can( 'install_plugins' ) ) {
405 335 return false;
406 336 }
407 337
408 - $options = [
409 - 'title' => esc_html__( 'Improve your site’s performance score.', 'elementor' ),
410 - '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' ),
411 - 'id' => $notice_id,
412 - 'button' => [
413 - 'text' => esc_html__( 'Try it out', 'elementor' ),
414 - 'url' => Settings::get_settings_tab_url( 'experiments' ),
415 - 'type' => 'cta',
416 - ],
417 - 'button_secondary' => [
418 - 'text' => esc_html__( 'Learn more', 'elementor' ),
419 - 'url' => 'https://go.elementor.com/wp-dash-experiment-promotion/',
420 - 'new_tab' => true,
421 - 'type' => 'cta',
422 - ],
423 - ];
424 -
425 - $this->print_admin_notice( $options );
426 -
427 - return true;
428 - }
429 -
430 - private function site_has_forms_plugins() {
431 - return defined( 'WPFORMS_VERSION' ) || defined( 'WPCF7_VERSION' ) || defined( 'FLUENTFORM_VERSION' ) || class_exists( '\GFCommon' ) || class_exists( '\Ninja_Forms' ) || function_exists( 'load_formidable_forms' ) || did_action( 'metform/after_load' ) || defined( 'FORMINATOR_PLUGIN_BASENAME' );
432 - }
433 -
434 - private function site_has_woocommerce() {
435 - return class_exists( 'WooCommerce' );
436 - }
437 -
438 - private function get_installed_form_plugin_name() {
439 - static $detected_form_plugin = null;
440 -
441 - if ( null !== $detected_form_plugin ) {
442 - return $detected_form_plugin;
443 - }
444 -
445 - $form_plugins_constants_to_name_mapper = [
446 - 'WPFORMS_VERSION' => 'WPForms',
447 - 'WPCF7_VERSION' => 'Contact Form 7',
448 - ];
449 -
450 - foreach ( $form_plugins_constants_to_name_mapper as $constant => $name ) {
451 - if ( defined( $constant ) ) {
452 - $detected_form_plugin = $name;
453 - return $detected_form_plugin;
454 - }
455 - }
456 -
457 - $form_plugins_classes_to_name_mapper = [
458 - '\GFCommon' => 'Gravity Forms',
459 - '\Ninja_Forms' => 'Ninja Forms',
460 - ];
461 -
462 - foreach ( $form_plugins_classes_to_name_mapper as $class => $name ) {
463 - if ( class_exists( $class ) ) {
464 - $detected_form_plugin = $name;
465 - return $detected_form_plugin;
466 - }
467 - }
468 -
469 - $detected_form_plugin = false;
470 - return $detected_form_plugin;
471 - }
472 -
473 - private function notice_local_google_fonts_disabled() {
474 -
475 - if ( ! $this->is_elementor_page() && ! $this->is_elementor_admin_screen() ) {
338 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_wpcf7', 'contact_page_wpcf7-integration' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
476 339 return false;
477 340 }
478 341
479 - if ( ! Manager::had_install_prior_to( self::LOCAL_GOOGLE_FONTS_NOTICE_MIN_VERSION ) ) {
342 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
480 343 return false;
481 344 }
482 345
483 - if ( User::is_user_notice_viewed( self::LOCAL_GOOGLE_FONTS_DISABLED_NOTICE_ID ) ) {
346 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
484 347 return false;
485 348 }
486 349
487 - $is_local_gf_enabled = (bool) get_option( 'elementor_local_google_fonts', '0' );
350 + $options = [
351 + 'title' => esc_html__( 'Using Elementor & Contact Form 7?', 'elementor' ),
352 + 'description' => esc_html__( 'Try out Elementor Pro and design your forms visually with one powerful tool.', 'elementor' ),
488 353
489 - if ( $is_local_gf_enabled ) {
490 - return false;
491 - }
492 -
493 - $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' => '',
354 + 'id' => $notice_id,
498 355 'button' => [
499 - 'text' => esc_html__( 'Take me there', 'elementor' ),
500 - 'url' => '../wp-admin/admin.php?page=elementor-settings#tab-performance',
501 - 'new_tab' => false,
502 - 'type' => 'cta',
503 - ],
504 - 'button_secondary' => [
505 - 'text' => esc_html__( 'Learn more', 'elementor' ),
506 - 'url' => 'https://go.elementor.com/wp-dash-google-fonts-locally-notice/',
356 + 'text' => esc_html__( 'Learn More', 'elementor' ),
357 + 'url' => 'https://go.elementor.com/plugin-promotion-contactform7/',
507 358 'new_tab' => true,
508 359 'type' => 'cta',
509 360 ],
510 361 ];
@@ -513,97 +364,40 @@
513 364
514 365 return true;
515 366 }
516 367
517 - private function notice_ally_pages_promotion() {
518 - global $pagenow;
519 - $notice_id = 'ally_pages_promotion';
368 + private function notice_mc4wp_promote() {
369 + $notice_id = 'mc4wp_promote';
520 370
521 - if ( 'edit.php' !== $pagenow || empty( $_GET['post_type'] ) || 'page' !== $_GET['post_type'] ) {
371 + if ( Utils::has_pro() || ! defined( 'MC4WP_VERSION' ) ) {
522 372 return false;
523 373 }
524 374
525 - if ( ! current_user_can( 'manage_options' ) ) {
375 + if ( ! current_user_can( 'install_plugins' ) ) {
526 376 return false;
527 377 }
528 378
529 - if ( User::is_user_notice_viewed( $notice_id ) ) {
379 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_mailchimp-for-wp', 'mc4wp_page_mailchimp-for-wp-forms', 'mc4wp_page_mailchimp-for-wp-integrations', 'mc4wp_page_mailchimp-for-wp-other', 'mc4wp_page_mailchimp-for-wp-extensions' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
530 380 return false;
531 381 }
532 382
533 - $plugin_slug = 'pojo-accessibility';
534 - $plugin_file_path = 'pojo-accessibility/pojo-accessibility.php';
535 -
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 ) {
383 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
541 384 return false;
542 385 }
543 386
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 - }
387 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
388 + return false;
591 389 }
592 390
593 391 $options = [
594 - 'title' => esc_html__( 'Make sure your site has an accessibility statement page', 'elementor' ),
595 - 'description' => $description,
392 + 'title' => esc_html__( 'Want to design better MailChimp forms?', 'elementor' ),
393 + 'description' => esc_html__( 'Use Elementor Pro and enjoy unlimited integrations, visual design, templates and more.', 'elementor' ),
394 + 'dismissible' => true,
596 395 'id' => $notice_id,
597 - 'type' => 'cta',
396 +
598 397 'button' => [
599 - 'text' => $button_text,
600 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
601 - 'type' => 'cta',
602 - ],
603 - 'button_secondary' => [
604 - 'text' => esc_html__( 'Learn more', 'elementor' ),
605 - 'url' => $learn_more_url,
398 + 'text' => esc_html__( 'Learn More', 'elementor' ),
399 + 'url' => 'https://go.elementor.com/plugin-promotion-mc4wp/',
606 400 'new_tab' => true,
607 401 'type' => 'cta',
608 402 ],
609 403 ];
@@ -612,341 +406,84 @@
612 406
613 407 return true;
614 408 }
615 409
616 - private function notice_site_mailer_promotion() {
617 - $notice_id = 'site_mailer_promotion';
618 - $has_forms = $this->site_has_forms_plugins();
619 - $has_woocommerce = $this->site_has_woocommerce();
410 + private function notice_popup_maker_promote() {
411 + $notice_id = 'popup_maker_promote';
620 412
621 - if ( ! $has_forms && ! $has_woocommerce ) {
413 + if ( Utils::has_pro() || ! class_exists( 'Popup_Maker' ) ) {
622 414 return false;
623 415 }
624 416
625 - if ( ! $this->is_elementor_page() && ! $this->is_elementor_admin_screen() ) {
417 + if ( ! current_user_can( 'install_plugins' ) ) {
626 418 return false;
627 419 }
628 420
629 - if ( ( Utils::has_pro() && ! $has_woocommerce ) || ! current_user_can( 'install_plugins' ) || User::is_user_notice_viewed( $notice_id ) ) {
421 + if ( ! in_array( $this->current_screen_id, [ 'edit-popup', 'popup_page_pum-settings' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
630 422 return false;
631 423 }
632 424
633 - $plugin_slug = 'site-mailer';
634 - $plugin_file_path = 'site-mailer/site-mailer.php';
635 -
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 ) {
425 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
642 426 return false;
643 427 }
644 428
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 - }
429 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
430 + return false;
744 431 }
745 432
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 433 $options = [
751 - 'title' => $title,
752 - 'description' => $description,
434 + 'title' => esc_html__( 'Using popups on your site?', 'elementor' ),
435 + 'description' => esc_html__( 'Build outstanding popups using Elementor Pro and get more leads, sales and subscribers.', 'elementor' ),
436 + 'dismissible' => true,
753 437 'id' => $notice_id,
754 - 'type' => 'cta',
438 +
755 439 'button' => [
756 - 'text' => $button_text,
757 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
758 - 'type' => 'cta',
759 - 'data' => [
760 - 'campaign' => $campaign_data['campaign'],
761 - 'source' => $campaign_data['source'],
762 - 'medium' => $campaign_data['medium'],
763 - ],
764 - ],
765 - 'button_secondary' => [
766 - 'text' => esc_html__( 'Learn more', 'elementor' ),
767 - 'url' => $learn_more_url,
440 + 'text' => esc_html__( 'Learn More', 'elementor' ),
441 + 'url' => 'https://go.elementor.com/plugin-promotion-popupmaker/',
768 442 'new_tab' => true,
769 443 'type' => 'cta',
770 444 ],
771 445 ];
772 446
773 - if ( $is_woocommerce ) {
774 - // We include WP's default notice class so it will be properly handled by WP's js handler
775 - // And add a new one to distinguish between the two types of notices
776 - $options['classes'] = [ 'notice', 'e-notice', 'sm-notice-wc' ];
777 - }
778 -
779 447 $this->print_admin_notice( $options );
780 448
781 449 return true;
782 450 }
783 451
784 - private function should_render_woocommerce_hint( $has_forms, $has_woocommerce ): bool {
785 - if ( ! $has_forms && ! $has_woocommerce ) {
786 - return false;
787 - }
452 + private function notice_role_manager_promote() {
453 + $notice_id = 'role_manager_promote';
788 454
789 - if ( ! $has_forms && $has_woocommerce ) {
790 - return true;
791 - }
792 -
793 - if ( $has_forms && $has_woocommerce && Utils::has_pro() ) {
794 - return true;
795 - }
796 -
797 - if ( ! $has_woocommerce ) {
455 + if ( Utils::has_pro() ) {
798 456 return false;
799 457 }
800 458
801 - return (bool) wp_rand( 0, 1 );
802 - }
803 -
804 - private function is_elementor_page(): bool {
805 - return 0 === strpos( $this->current_screen_id, 'elementor_page' );
806 - }
807 -
808 - private function is_elementor_admin_screen(): bool {
809 - return in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library' ], true );
810 - }
811 -
812 - private function is_elementor_admin_screen_with_system_info(): bool {
813 - return in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true );
814 - }
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 -
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 - private function get_plugin_cta_data( $plugin_slug, $plugin_file_path ) {
828 - if ( Hints::is_plugin_active( $plugin_slug ) ) {
829 - return false;
830 - }
831 -
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' );
835 - } else {
836 - $url = $this->get_plugin_button_install_url( $plugin_slug );
837 - $cta_text = esc_html__( 'Install now', 'elementor' );
838 - }
839 -
840 - return [
841 - 'url' => $url,
842 - 'text' => $cta_text,
843 - ];
844 - }
845 -
846 - /**
847 - * For testing purposes
848 - */
849 - public function get_elementor_version() {
850 - return ELEMENTOR_VERSION;
851 - }
852 -
853 - private function notice_plugin_image_optimization() {
854 - $notice_id = 'plugin_image_optimization';
855 -
856 - if ( 'upload' !== $this->current_screen_id ) {
857 - return false;
858 - }
859 -
860 459 if ( ! current_user_can( 'manage_options' ) ) {
861 460 return false;
862 461 }
863 462
864 - if ( User::is_user_notice_viewed( $notice_id ) ) {
463 + if ( 'elementor_page_elementor-role-manager' !== $this->current_screen_id || User::is_user_notice_viewed( $notice_id ) ) {
865 464 return false;
866 465 }
867 466
868 - $attachments = new \WP_Query( [
869 - 'post_type' => 'attachment',
870 - 'post_status' => 'any',
871 - 'fields' => 'ids',
467 + $users = new \WP_User_Query( [
468 + 'fields' => 'ID',
469 + 'number' => 10,
872 470 ] );
873 471
874 - if ( 1 > $attachments->found_posts ) {
472 + if ( 5 > $users->get_total() ) {
875 473 return false;
876 474 }
877 475
878 - $plugin_slug = 'image-optimization';
879 - $plugin_file_path = 'image-optimization/image-optimization.php';
880 -
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 );
884 -
885 - if ( $is_active ) {
886 - return false;
887 - }
888 -
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 476 $options = [
936 - 'title' => esc_html__( 'Speed up your website with Image Optimizer', 'elementor' ),
937 - 'description' => $description,
477 + 'title' => esc_html__( 'Managing a multi-user site?', 'elementor' ),
478 + 'description' => esc_html__( 'With Elementor Pro, you can control user access and make sure no one messes up your design.', 'elementor' ),
938 479 'id' => $notice_id,
939 - 'type' => 'cta',
480 +
940 481 'button' => [
941 - 'text' => $button_text,
942 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
482 + 'text' => esc_html__( 'Learn More', 'elementor' ),
483 + 'url' => 'https://go.elementor.com/plugin-promotion-role-manager/',
484 + 'new_tab' => true,
943 485 'type' => 'cta',
944 - 'data' => [
945 - 'campaign' => $campaign_data['campaign'],
946 - 'source' => $campaign_data['source'],
947 - 'medium' => $campaign_data['medium'],
948 - ],
949 486 ],
950 487 ];
951 488
952 489 $this->print_admin_notice( $options );
@@ -953,15 +490,9 @@
953 490
954 491 return true;
955 492 }
956 493
957 - public function print_admin_notice( array $options, $exclude_pages = self::DEFAULT_EXCLUDED_PAGES ) {
958 - global $pagenow;
959 -
960 - if ( in_array( $pagenow, $exclude_pages, true ) ) {
961 - return;
962 - }
963 -
494 + public function print_admin_notice( array $options ) {
964 495 $default_options = [
965 496 'id' => null,
966 497 'title' => '',
967 498 'description' => '',
@@ -967,9 +498,9 @@
967 498 'description' => '',
968 499 'classes' => [ 'notice', 'e-notice' ], // We include WP's default notice class so it will be properly handled by WP's js handler
969 500 'type' => '',
970 501 'dismissible' => true,
971 - 'icon' => 'eicon-elementor-circle',
502 + 'icon' => 'eicon-elementor',
972 503 'button' => [],
973 504 'button_secondary' => [],
974 505 ];
975 506
@@ -982,19 +513,12 @@
982 513 if ( $options['type'] ) {
983 514 $notice_classes[] = 'e-notice--' . $options['type'];
984 515 }
985 516
986 - $wrapper_attributes = [
987 - 'role' => 'region',
988 - 'aria-label' => esc_html__( 'Elementor notice', 'elementor' ),
989 - ];
990 -
991 517 if ( $options['dismissible'] ) {
992 - $label = esc_html__( 'Dismiss this notice.', 'elementor' );
518 + $label = esc_html__( 'Dismiss', 'elementor' );
993 519 $notice_classes[] = 'e-notice--dismissible';
994 520 $dismiss_button = '<i class="e-notice__dismiss" role="button" aria-label="' . $label . '" tabindex="0"></i>';
995 -
996 - $wrapper_attributes['data-nonce'] = wp_create_nonce( 'elementor_set_admin_notice_viewed' );
997 521 }
998 522
999 523 if ( $options['icon'] ) {
1000 524 $notice_classes[] = 'e-notice--extended';
@@ -1000,17 +524,15 @@
1000 524 $notice_classes[] = 'e-notice--extended';
1001 525 $icon = '<div class="e-notice__icon-wrapper"><i class="' . esc_attr( $options['icon'] ) . '" aria-hidden="true"></i></div>';
1002 526 }
1003 527
1004 - $wrapper_attributes['class'] = $notice_classes;
528 + $wrapper_attributes = [
529 + 'class' => $notice_classes,
530 + ];
1005 531
1006 532 if ( $options['id'] ) {
1007 533 $wrapper_attributes['data-notice_id'] = $options['id'];
1008 534 }
1009 -
1010 - if ( ! empty( $options['source'] ) ) {
1011 - $wrapper_attributes['data-source'] = $options['source'];
1012 - }
1013 535 ?>
1014 536 <div <?php Utils::print_html_attributes( $wrapper_attributes ); ?>>
1015 537 <?php echo $dismiss_button; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
1016 538 <div class="e-notice__aside">
@@ -1016,49 +538,36 @@
1016 538 <div class="e-notice__aside">
1017 539 <?php echo $icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
1018 540 </div>
1019 541 <div class="e-notice__content">
1020 - <?php if ( $options['title'] ) { ?>
1021 - <h3><?php echo wp_kses_post( $options['title'] ); ?></h3>
1022 - <?php } ?>
542 + <?php if ( $options['title'] ) { ?>
543 + <h3><?php echo wp_kses_post( $options['title'] ); ?></h3>
544 + <?php } ?>
1023 545
1024 - <?php if ( $options['description'] ) { ?>
1025 - <p><?php echo wp_kses_post( $options['description'] ); ?></p>
1026 - <?php } ?>
546 + <?php if ( $options['description'] ) { ?>
547 + <p><?php echo wp_kses_post( $options['description'] ); ?></p>
548 + <?php } ?>
1027 549
1028 - <?php if ( ! empty( $options['button']['text'] ) || ! empty( $options['button_secondary']['text'] ) ) { ?>
1029 - <div class="e-notice__actions">
1030 - <?php
1031 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
1032 - foreach ( [ $options['button'], $options['button_secondary'] ] as $index => $button_settings ) {
1033 - if ( empty( $button_settings['variant'] ) && $index ) {
1034 - $button_settings['variant'] = 'outline';
1035 - }
550 + <?php if ( ! empty( $options['button']['text'] ) || ! empty( $options['button_secondary']['text'] ) ) { ?>
551 + <div class="e-notice__actions">
552 + <?php
553 + foreach ( [ $options['button'], $options['button_secondary'] ] as $index => $button_settings ) {
554 + if ( empty( $button_settings['variant'] ) && $index ) {
555 + $button_settings['variant'] = 'outline';
556 + }
1036 557
1037 - if ( empty( $button_settings['text'] ) ) {
1038 - continue;
1039 - }
558 + if ( empty( $button_settings['text'] ) ) {
559 + continue;
560 + }
1040 561
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 - $button = new Button( $button_settings );
1054 - $button->print_button();
1055 - } ?>
1056 - </div>
1057 - <?php } ?>
562 + $button = new Button( $button_settings );
563 + $button->print_button();
564 + } ?>
565 + </div>
566 + <?php } ?>
1058 567 </div>
1059 568 </div>
1060 - <?php }
569 + <?php }
1061 570
1062 571 public function admin_notices() {
1063 572 $this->install_time = Plugin::$instance->get_install_time();
1064 573 $this->current_screen_id = get_current_screen()->id;
@@ -1082,61 +591,8 @@
1082 591 return;
1083 592 }
1084 593 }
1085 594
1086 - public function maybe_log_campaign() {
1087 - if ( empty( $_GET['plg_campaign'] ) || empty( $_GET['plg_campaign_name'] ) ) {
1088 - return;
1089 - }
1090 -
1091 - $allowed_plgs = [
1092 - 'elementor_image_optimization_campaign',
1093 - 'elementor_ea11y_campaign',
1094 - 'elementor_site_mailer_campaign',
1095 - ];
1096 -
1097 - if ( ! in_array( $_GET['plg_campaign_name'], $allowed_plgs, true ) ) {
1098 - return;
1099 - }
1100 -
1101 - if ( ! isset( $_GET['plg_campaign_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_GET['plg_campaign_nonce'] ), sanitize_key( $_GET['plg_campaign_name'] ) ) ) {
1102 - return;
1103 - }
1104 -
1105 - if ( ! current_user_can( 'manage_options' ) ) {
1106 - return;
1107 - }
1108 -
1109 - if ( empty( $_GET['plg_source'] ) || empty( $_GET['plg_medium'] ) ) {
1110 - return;
1111 - }
1112 -
1113 - $campaign_data = [
1114 - 'source' => sanitize_key( $_GET['plg_source'] ),
1115 - 'campaign' => sanitize_key( $_GET['plg_campaign'] ),
1116 - 'medium' => sanitize_key( $_GET['plg_medium'] ),
1117 - ];
1118 -
1119 - set_transient( sanitize_key( $_GET['plg_campaign_name'] ), $campaign_data, 30 * DAY_IN_SECONDS );
1120 - }
1121 -
1122 - public static function add_plg_campaign_data( $url, $campaign_data ) {
1123 -
1124 - foreach ( [ 'name', 'campaign' ] as $key ) {
1125 - if ( empty( $campaign_data[ $key ] ) ) {
1126 - return $url;
1127 - }
1128 - }
1129 -
1130 - return add_query_arg( [
1131 - 'plg_campaign_name' => $campaign_data['name'],
1132 - 'plg_campaign' => $campaign_data['campaign'],
1133 - 'plg_source' => empty( $campaign_data['source'] ) ? '' : $campaign_data['source'],
1134 - 'plg_medium' => empty( $campaign_data['medium'] ) ? '' : $campaign_data['medium'],
1135 - 'plg_campaign_nonce' => wp_create_nonce( $campaign_data['name'] ),
1136 - ], $url );
1137 - }
1138 -
1139 595 /**
1140 596 * @since 2.9.0
1141 597 * @access public
1142 598 */
@@ -1141,10 +597,8 @@
1141 597 * @access public
1142 598 */
1143 599 public function __construct() {
1144 600 add_action( 'admin_notices', [ $this, 'admin_notices' ], 20 );
1145 - add_action( 'admin_action_install-plugin', [ $this, 'maybe_log_campaign' ] );
1146 - add_action( 'admin_action_activate', [ $this, 'maybe_log_campaign' ] );
1147 601 }
1148 602
1149 603 /**
1150 604 * Get module name.