PluginProbe
Elementor Website Builder – more than just a page builder / 3.5.2
Elementor Website Builder – more than just a page builder v3.5.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 +120 -646 4.1.23.5.2 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,20 @@
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';
20 + const EXCLUDE_PAGES = [ 'plugins.php', 'plugin-install.php', 'plugin-editor.php' ];
26 21
27 - const EXIT_EARLY_FOR_BACKWARD_COMPATIBILITY = false;
28 -
29 22 private $plain_notices = [
30 23 'api_notice',
31 24 'api_upgrade_plugin',
32 25 'tracker',
33 - 'tracker_last_update',
34 26 'rate_us_feedback',
27 + 'woocommerce_promote',
28 + 'cf7_promote',
29 + 'mc4wp_promote',
30 + 'popup_maker_promote',
35 31 '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 32 ];
42 33
43 34 private $elementor_pages_count = null;
44 35
@@ -46,8 +37,12 @@
46 37
47 38 private $current_screen_id = null;
48 39
49 40 private function get_notices() {
41 + $notices = [
42 + new Elementor_Dev_Notice(),
43 + ];
44 +
50 45 /**
51 46 * Admin notices.
52 47 *
53 48 * Filters Elementor admin notices.
@@ -52,13 +47,13 @@
52 47 *
53 48 * Filters Elementor admin notices.
54 49 *
55 50 * This hook can be used by external developers to manage existing
56 - * admin notice or to add new notices for Elementor add-ons.
51 + * admin notice or to add new notices for Elementor addons.
57 52 *
58 53 * @param array $notices A list of notice classes.
59 54 */
60 - $notices = apply_filters( 'elementor/core/admin/notices', [] );
55 + $notices = apply_filters( 'elementor/core/admin/notices', $notices );
61 56
62 57 return $notices;
63 58 }
64 59
@@ -98,13 +93,13 @@
98 93 if ( ! current_user_can( 'update_plugins' ) ) {
99 94 return false;
100 95 }
101 96
102 - 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 ) ) {
103 98 return false;
104 99 }
105 100
106 - // Check for upgrades.
101 + // Check if have any upgrades.
107 102 $update_plugins = get_site_transient( 'update_plugins' );
108 103
109 104 $has_remote_update_package = ! ( empty( $update_plugins ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ] ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ]->package ) );
110 105
@@ -124,9 +119,9 @@
124 119
125 120 $new_version = $upgrade_notice['version'];
126 121 }
127 122
128 - // Check if upgrade messages should be shown.
123 + // Check if have upgrade notices to show.
129 124 if ( version_compare( ELEMENTOR_VERSION, $upgrade_notice['version'], '>=' ) ) {
130 125 return false;
131 126 }
132 127
@@ -138,16 +133,16 @@
138 133 $message = sprintf(
139 134 /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text. */
140 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' ),
141 136 esc_url( $details_url ),
142 - sprintf(
137 + esc_attr( sprintf(
143 138 /* translators: %s: Elementor version. */
144 - esc_attr__( 'View Elementor version %s details', 'elementor' ),
139 + __( 'View Elementor version %s details', 'elementor' ),
145 140 $new_version
146 - ),
141 + ) ),
147 142 $new_version,
148 143 esc_url( $upgrade_url ),
149 - esc_attr__( 'Update Now', 'elementor' )
144 + esc_attr( esc_html__( 'Update Elementor Now', 'elementor' ) )
150 145 );
151 146
152 147 $options = [
153 148 'title' => esc_html__( 'Update Notification', 'elementor' ),
@@ -174,9 +169,9 @@
174 169 if ( ! current_user_can( 'manage_options' ) ) {
175 170 return false;
176 171 }
177 172
178 - 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 ) ) {
179 174 return false;
180 175 }
181 176
182 177 $notice_id = 'admin_notice_api_' . $admin_notice['notice_id'];
@@ -220,9 +215,9 @@
220 215 // TODO: Skip for development env.
221 216 $optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' );
222 217 $optout_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_out' ), 'opt_out' );
223 218
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' );
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' );
225 220
226 221 /**
227 222 * Tracker admin description text.
228 223 *
@@ -236,11 +231,10 @@
236 231
237 232 $message = esc_html( $tracker_description_text ) . ' <a href="https://go.elementor.com/usage-data-tracking/" target="_blank">' . esc_html__( 'Learn more.', 'elementor' ) . '</a>';
238 233
239 234 $options = [
240 - 'title' => esc_html__( 'Want to shape the future of web creation?', 'elementor' ),
235 + 'title' => esc_html__( 'Love using Elementor?', 'elementor' ),
241 236 'description' => $message,
242 - 'dismissible' => false,
243 237 'button' => [
244 238 'text' => esc_html__( 'Sure! I\'d love to help', 'elementor' ),
245 239 'url' => $optin_url,
246 240 'type' => 'cta',
@@ -257,49 +251,8 @@
257 251
258 252 return true;
259 253 }
260 254
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 255 private function notice_rate_us_feedback() {
303 256 $notice_id = 'rate_us_feedback';
304 257
305 258 if ( ! current_user_can( 'manage_options' ) ) {
@@ -316,14 +269,14 @@
316 269
317 270 $dismiss_url = add_query_arg( [
318 271 'action' => 'elementor_set_admin_notice_viewed',
319 272 'notice_id' => esc_attr( $notice_id ),
320 - '_wpnonce' => wp_create_nonce( 'elementor_set_admin_notice_viewed' ),
321 273 ], admin_url( 'admin-post.php' ) );
322 274
323 275 $options = [
324 276 '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' ),
277 + 'description' => esc_html__( 'You created over 10 pages with Elementor. Great job! If you can spare a minute,
278 + please help us by leaving a five star review on WordPress.org.', 'elementor' ),
326 279 'id' => $notice_id,
327 280 'button' => [
328 281 'text' => esc_html__( 'Happy To Help', 'elementor' ),
329 282 'url' => 'https://go.elementor.com/admin-review/',
@@ -343,168 +296,80 @@
343 296
344 297 return true;
345 298 }
346 299
347 - private function notice_role_manager_promote() {
348 - $notice_id = 'role_manager_promote';
300 + private function notice_woocommerce_promote() {
301 + $notice_id = 'woocommerce_promote';
349 302
350 - if ( Utils::has_pro() ) {
303 + if ( Utils::has_pro() || ! function_exists( 'WC' ) ) {
351 304 return false;
352 305 }
353 306
354 - if ( ! current_user_can( 'manage_options' ) ) {
307 + if ( ! current_user_can( 'install_plugins' ) ) {
355 308 return false;
356 309 }
357 310
358 - if ( 'elementor_page_elementor-role-manager' !== $this->current_screen_id || User::is_user_notice_viewed( $notice_id ) ) {
311 + if ( ! in_array( $this->current_screen_id, [ 'edit-product', 'woocommerce_page_wc-settings' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
359 312 return false;
360 313 }
361 314
362 - $users = new \WP_User_Query( [
363 - 'fields' => 'ID',
364 - 'number' => 10,
365 - ] );
315 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
316 + return false;
317 + }
366 318
367 - if ( 5 > $users->get_total() ) {
319 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
368 320 return false;
369 321 }
370 322
371 323 $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' ),
324 + 'title' => esc_html__( 'Using WooCommerce?', 'elementor' ),
325 + 'description' => esc_html__( 'With Elementor Pro’s WooCommerce Builder, you’ll be able to design your store without coding!', 'elementor' ),
374 326 'id' => $notice_id,
375 327
376 328 'button' => [
377 329 'text' => esc_html__( 'Learn More', 'elementor' ),
378 - 'url' => 'https://go.elementor.com/plugin-promotion-role-manager/',
330 + 'url' => 'https://go.elementor.com/plugin-promotion-woocommerce/',
379 331 'new_tab' => true,
380 332 'type' => 'cta',
381 333 ],
382 334 ];
383 335
384 - $options = Filtered_Promotions_Manager::get_filtered_promotion_data( $options, 'core/admin/notice_role_manager_promote', 'button', 'url' );
385 -
386 336 $this->print_admin_notice( $options );
387 337
388 338 return true;
389 339 }
390 340
391 - private function notice_experiment_promotion() {
392 - $notice_id = 'experiment_promotion';
341 + private function notice_cf7_promote() {
342 + $notice_id = 'cf7_promote';
393 343
394 - if ( ! current_user_can( 'manage_options' ) || User::is_user_notice_viewed( $notice_id ) ) {
344 + if ( Utils::has_pro() || ! defined( 'WPCF7_VERSION' ) ) {
395 345 return false;
396 346 }
397 347
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 ) {
348 + if ( ! current_user_can( 'install_plugins' ) ) {
405 349 return false;
406 350 }
407 351
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() ) {
352 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_wpcf7', 'contact_page_wpcf7-integration' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
476 353 return false;
477 354 }
478 355
479 - if ( ! Manager::had_install_prior_to( self::LOCAL_GOOGLE_FONTS_NOTICE_MIN_VERSION ) ) {
356 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
480 357 return false;
481 358 }
482 359
483 - if ( User::is_user_notice_viewed( self::LOCAL_GOOGLE_FONTS_DISABLED_NOTICE_ID ) ) {
360 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
484 361 return false;
485 362 }
486 363
487 - $is_local_gf_enabled = (bool) get_option( 'elementor_local_google_fonts', '0' );
364 + $options = [
365 + 'title' => esc_html__( 'Using Elementor & Contact Form 7?', 'elementor' ),
366 + 'description' => esc_html__( 'Try out Elementor Pro and design your forms visually with one powerful tool.', 'elementor' ),
488 367
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' => '',
368 + 'id' => $notice_id,
498 369 '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/',
370 + 'text' => esc_html__( 'Learn More', 'elementor' ),
371 + 'url' => 'https://go.elementor.com/plugin-promotion-contactform7/',
507 372 'new_tab' => true,
508 373 'type' => 'cta',
509 374 ],
510 375 ];
@@ -513,97 +378,40 @@
513 378
514 379 return true;
515 380 }
516 381
517 - private function notice_ally_pages_promotion() {
518 - global $pagenow;
519 - $notice_id = 'ally_pages_promotion';
382 + private function notice_mc4wp_promote() {
383 + $notice_id = 'mc4wp_promote';
520 384
521 - if ( 'edit.php' !== $pagenow || empty( $_GET['post_type'] ) || 'page' !== $_GET['post_type'] ) {
385 + if ( Utils::has_pro() || ! defined( 'MC4WP_VERSION' ) ) {
522 386 return false;
523 387 }
524 388
525 - if ( ! current_user_can( 'manage_options' ) ) {
389 + if ( ! current_user_can( 'install_plugins' ) ) {
526 390 return false;
527 391 }
528 392
529 - if ( User::is_user_notice_viewed( $notice_id ) ) {
393 + 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 394 return false;
531 395 }
532 396
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 ) {
397 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
541 398 return false;
542 399 }
543 400
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 - }
401 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
402 + return false;
591 403 }
592 404
593 405 $options = [
594 - 'title' => esc_html__( 'Make sure your site has an accessibility statement page', 'elementor' ),
595 - 'description' => $description,
406 + 'title' => esc_html__( 'Want to design better MailChimp forms?', 'elementor' ),
407 + 'description' => esc_html__( 'Use Elementor Pro and enjoy unlimited integrations, visual design, templates and more.', 'elementor' ),
408 + 'dismissible' => true,
596 409 'id' => $notice_id,
597 - 'type' => 'cta',
410 +
598 411 '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,
412 + 'text' => esc_html__( 'Learn More', 'elementor' ),
413 + 'url' => 'https://go.elementor.com/plugin-promotion-mc4wp/',
606 414 'new_tab' => true,
607 415 'type' => 'cta',
608 416 ],
609 417 ];
@@ -612,341 +420,84 @@
612 420
613 421 return true;
614 422 }
615 423
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();
424 + private function notice_popup_maker_promote() {
425 + $notice_id = 'popup_maker_promote';
620 426
621 - if ( ! $has_forms && ! $has_woocommerce ) {
427 + if ( Utils::has_pro() || ! class_exists( 'Popup_Maker' ) ) {
622 428 return false;
623 429 }
624 430
625 - if ( ! $this->is_elementor_page() && ! $this->is_elementor_admin_screen() ) {
431 + if ( ! current_user_can( 'install_plugins' ) ) {
626 432 return false;
627 433 }
628 434
629 - if ( ( Utils::has_pro() && ! $has_woocommerce ) || ! current_user_can( 'install_plugins' ) || User::is_user_notice_viewed( $notice_id ) ) {
435 + if ( ! in_array( $this->current_screen_id, [ 'edit-popup', 'popup_page_pum-settings' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
630 436 return false;
631 437 }
632 438
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 ) {
439 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
642 440 return false;
643 441 }
644 442
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 - }
443 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
444 + return false;
744 445 }
745 446
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 447 $options = [
751 - 'title' => $title,
752 - 'description' => $description,
448 + 'title' => esc_html__( 'Using popups on your site?', 'elementor' ),
449 + 'description' => esc_html__( 'Build outstanding popups using Elementor Pro and get more leads, sales and subscribers.', 'elementor' ),
450 + 'dismissible' => true,
753 451 'id' => $notice_id,
754 - 'type' => 'cta',
452 +
755 453 '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,
454 + 'text' => esc_html__( 'Learn More', 'elementor' ),
455 + 'url' => 'https://go.elementor.com/plugin-promotion-popupmaker/',
768 456 'new_tab' => true,
769 457 'type' => 'cta',
770 458 ],
771 459 ];
772 460
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 461 $this->print_admin_notice( $options );
780 462
781 463 return true;
782 464 }
783 465
784 - private function should_render_woocommerce_hint( $has_forms, $has_woocommerce ): bool {
785 - if ( ! $has_forms && ! $has_woocommerce ) {
786 - return false;
787 - }
466 + private function notice_role_manager_promote() {
467 + $notice_id = 'role_manager_promote';
788 468
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 ) {
469 + if ( Utils::has_pro() ) {
798 470 return false;
799 471 }
800 472
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 473 if ( ! current_user_can( 'manage_options' ) ) {
861 474 return false;
862 475 }
863 476
864 - if ( User::is_user_notice_viewed( $notice_id ) ) {
477 + if ( 'elementor_page_elementor-role-manager' !== $this->current_screen_id || User::is_user_notice_viewed( $notice_id ) ) {
865 478 return false;
866 479 }
867 480
868 - $attachments = new \WP_Query( [
869 - 'post_type' => 'attachment',
870 - 'post_status' => 'any',
871 - 'fields' => 'ids',
481 + $users = new \WP_User_Query( [
482 + 'fields' => 'ID',
483 + 'number' => 10,
872 484 ] );
873 485
874 - if ( 1 > $attachments->found_posts ) {
486 + if ( 5 > $users->get_total() ) {
875 487 return false;
876 488 }
877 489
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 490 $options = [
936 - 'title' => esc_html__( 'Speed up your website with Image Optimizer', 'elementor' ),
937 - 'description' => $description,
491 + 'title' => esc_html__( 'Managing a multi-user site?', 'elementor' ),
492 + 'description' => esc_html__( 'With Elementor Pro, you can control user access and make sure no one messes up your design.', 'elementor' ),
938 493 'id' => $notice_id,
939 - 'type' => 'cta',
494 +
940 495 'button' => [
941 - 'text' => $button_text,
942 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
496 + 'text' => esc_html__( 'Learn More', 'elementor' ),
497 + 'url' => 'https://go.elementor.com/plugin-promotion-role-manager/',
498 + 'new_tab' => true,
943 499 'type' => 'cta',
944 - 'data' => [
945 - 'campaign' => $campaign_data['campaign'],
946 - 'source' => $campaign_data['source'],
947 - 'medium' => $campaign_data['medium'],
948 - ],
949 500 ],
950 501 ];
951 502
952 503 $this->print_admin_notice( $options );
@@ -953,12 +504,12 @@
953 504
954 505 return true;
955 506 }
956 507
957 - public function print_admin_notice( array $options, $exclude_pages = self::DEFAULT_EXCLUDED_PAGES ) {
508 + public function print_admin_notice( array $options ) {
958 509 global $pagenow;
959 510
960 - if ( in_array( $pagenow, $exclude_pages, true ) ) {
511 + if ( in_array( $pagenow, self::EXCLUDE_PAGES ) ) {
961 512 return;
962 513 }
963 514
964 515 $default_options = [
@@ -967,9 +518,9 @@
967 518 'description' => '',
968 519 'classes' => [ 'notice', 'e-notice' ], // We include WP's default notice class so it will be properly handled by WP's js handler
969 520 'type' => '',
970 521 'dismissible' => true,
971 - 'icon' => 'eicon-elementor-circle',
522 + 'icon' => 'eicon-elementor',
972 523 'button' => [],
973 524 'button_secondary' => [],
974 525 ];
975 526
@@ -982,19 +533,12 @@
982 533 if ( $options['type'] ) {
983 534 $notice_classes[] = 'e-notice--' . $options['type'];
984 535 }
985 536
986 - $wrapper_attributes = [
987 - 'role' => 'region',
988 - 'aria-label' => esc_html__( 'Elementor notice', 'elementor' ),
989 - ];
990 -
991 537 if ( $options['dismissible'] ) {
992 - $label = esc_html__( 'Dismiss this notice.', 'elementor' );
538 + $label = esc_html__( 'Dismiss', 'elementor' );
993 539 $notice_classes[] = 'e-notice--dismissible';
994 540 $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 541 }
998 542
999 543 if ( $options['icon'] ) {
1000 544 $notice_classes[] = 'e-notice--extended';
@@ -1000,17 +544,15 @@
1000 544 $notice_classes[] = 'e-notice--extended';
1001 545 $icon = '<div class="e-notice__icon-wrapper"><i class="' . esc_attr( $options['icon'] ) . '" aria-hidden="true"></i></div>';
1002 546 }
1003 547
1004 - $wrapper_attributes['class'] = $notice_classes;
548 + $wrapper_attributes = [
549 + 'class' => $notice_classes,
550 + ];
1005 551
1006 552 if ( $options['id'] ) {
1007 553 $wrapper_attributes['data-notice_id'] = $options['id'];
1008 554 }
1009 -
1010 - if ( ! empty( $options['source'] ) ) {
1011 - $wrapper_attributes['data-source'] = $options['source'];
1012 - }
1013 555 ?>
1014 556 <div <?php Utils::print_html_attributes( $wrapper_attributes ); ?>>
1015 557 <?php echo $dismiss_button; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
1016 558 <div class="e-notice__aside">
@@ -1016,49 +558,36 @@
1016 558 <div class="e-notice__aside">
1017 559 <?php echo $icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
1018 560 </div>
1019 561 <div class="e-notice__content">
1020 - <?php if ( $options['title'] ) { ?>
1021 - <h3><?php echo wp_kses_post( $options['title'] ); ?></h3>
1022 - <?php } ?>
562 + <?php if ( $options['title'] ) { ?>
563 + <h3><?php echo wp_kses_post( $options['title'] ); ?></h3>
564 + <?php } ?>
1023 565
1024 - <?php if ( $options['description'] ) { ?>
1025 - <p><?php echo wp_kses_post( $options['description'] ); ?></p>
1026 - <?php } ?>
566 + <?php if ( $options['description'] ) { ?>
567 + <p><?php echo wp_kses_post( $options['description'] ); ?></p>
568 + <?php } ?>
1027 569
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 - }
570 + <?php if ( ! empty( $options['button']['text'] ) || ! empty( $options['button_secondary']['text'] ) ) { ?>
571 + <div class="e-notice__actions">
572 + <?php
573 + foreach ( [ $options['button'], $options['button_secondary'] ] as $index => $button_settings ) {
574 + if ( empty( $button_settings['variant'] ) && $index ) {
575 + $button_settings['variant'] = 'outline';
576 + }
1036 577
1037 - if ( empty( $button_settings['text'] ) ) {
1038 - continue;
1039 - }
578 + if ( empty( $button_settings['text'] ) ) {
579 + continue;
580 + }
1040 581
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 } ?>
582 + $button = new Button( $button_settings );
583 + $button->print_button();
584 + } ?>
585 + </div>
586 + <?php } ?>
1058 587 </div>
1059 588 </div>
1060 - <?php }
589 + <?php }
1061 590
1062 591 public function admin_notices() {
1063 592 $this->install_time = Plugin::$instance->get_install_time();
1064 593 $this->current_screen_id = get_current_screen()->id;
@@ -1082,61 +611,8 @@
1082 611 return;
1083 612 }
1084 613 }
1085 614
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 615 /**
1140 616 * @since 2.9.0
1141 617 * @access public
1142 618 */
@@ -1141,10 +617,8 @@
1141 617 * @access public
1142 618 */
1143 619 public function __construct() {
1144 620 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 621 }
1148 622
1149 623 /**
1150 624 * Get module name.