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