PluginProbe
Elementor Website Builder – more than just a page builder / 3.5.0-beta1
Elementor Website Builder – more than just a page builder v3.5.0-beta1
4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 All 457 releases
← All changes | core/admin/admin-notices.php +150 -397 4.3.1 → 3.5.0-beta1 View file →
@@ -3,15 +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\Utils\Hints;
8 -use Elementor\Core\Utils\Promotions\Filtered_Promotions_Manager;
9 7 use Elementor\Plugin;
10 8 use Elementor\Tracker;
11 9 use Elementor\User;
12 10 use Elementor\Utils;
13 11 use Elementor\Core\Admin\Notices\Base_Notice;
12 +use Elementor\Core\Admin\Notices\Elementor_Dev_Notice;
14 13
15 14 if ( ! defined( 'ABSPATH' ) ) {
16 15 exit; // Exit if accessed directly.
17 16 }
@@ -17,21 +16,18 @@
17 16 }
18 17
19 18 class Admin_Notices extends Module {
20 19
21 - const DEFAULT_EXCLUDED_PAGES = [ 'plugins.php', 'plugin-install.php', 'plugin-editor.php' ];
22 -
23 - const EXIT_EARLY_FOR_BACKWARD_COMPATIBILITY = false;
24 -
25 20 private $plain_notices = [
26 21 'api_notice',
27 22 'api_upgrade_plugin',
28 23 'tracker',
29 - 'tracker_last_update',
30 24 'rate_us_feedback',
25 + 'woocommerce_promote',
26 + 'cf7_promote',
27 + 'mc4wp_promote',
28 + 'popup_maker_promote',
31 29 'role_manager_promote',
32 - 'plugin_image_optimization',
33 - 'ally_pages_promotion',
34 30 ];
35 31
36 32 private $elementor_pages_count = null;
37 33
@@ -39,8 +35,12 @@
39 35
40 36 private $current_screen_id = null;
41 37
42 38 private function get_notices() {
39 + $notices = [
40 + new Elementor_Dev_Notice(),
41 + ];
42 +
43 43 /**
44 44 * Admin notices.
45 45 *
46 46 * Filters Elementor admin notices.
@@ -45,13 +45,13 @@
45 45 *
46 46 * Filters Elementor admin notices.
47 47 *
48 48 * This hook can be used by external developers to manage existing
49 - * admin notice or to add new notices for Elementor add-ons.
49 + * admin notice or to add new notices for Elementor addons.
50 50 *
51 51 * @param array $notices A list of notice classes.
52 52 */
53 - $notices = apply_filters( 'elementor/core/admin/notices', [] );
53 + $notices = apply_filters( 'elementor/core/admin/notices', $notices );
54 54
55 55 return $notices;
56 56 }
57 57
@@ -91,13 +91,13 @@
91 91 if ( ! current_user_can( 'update_plugins' ) ) {
92 92 return false;
93 93 }
94 94
95 - if ( ! $this->is_elementor_admin_screen_with_system_info() ) {
95 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
96 96 return false;
97 97 }
98 98
99 - // Check for upgrades.
99 + // Check if have any upgrades.
100 100 $update_plugins = get_site_transient( 'update_plugins' );
101 101
102 102 $has_remote_update_package = ! ( empty( $update_plugins ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ] ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ]->package ) );
103 103
@@ -117,9 +117,9 @@
117 117
118 118 $new_version = $upgrade_notice['version'];
119 119 }
120 120
121 - // Check if upgrade messages should be shown.
121 + // Check if have upgrade notices to show.
122 122 if ( version_compare( ELEMENTOR_VERSION, $upgrade_notice['version'], '>=' ) ) {
123 123 return false;
124 124 }
125 125
@@ -131,16 +131,16 @@
131 131 $message = sprintf(
132 132 /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text. */
133 133 __( 'There is a new version of Elementor Page Builder available. <a href="%1$s" class="thickbox open-plugin-details-modal" aria-label="%2$s">View version %3$s details</a> or <a href="%4$s" class="update-link" aria-label="%5$s">update now</a>.', 'elementor' ),
134 134 esc_url( $details_url ),
135 - sprintf(
135 + esc_attr( sprintf(
136 136 /* translators: %s: Elementor version. */
137 - esc_attr__( 'View Elementor version %s details', 'elementor' ),
137 + __( 'View Elementor version %s details', 'elementor' ),
138 138 $new_version
139 - ),
139 + ) ),
140 140 $new_version,
141 141 esc_url( $upgrade_url ),
142 - esc_attr__( 'Update Now', 'elementor' )
142 + esc_attr( esc_html__( 'Update Elementor Now', 'elementor' ) )
143 143 );
144 144
145 145 $options = [
146 146 'title' => esc_html__( 'Update Notification', 'elementor' ),
@@ -167,9 +167,9 @@
167 167 if ( ! current_user_can( 'manage_options' ) ) {
168 168 return false;
169 169 }
170 170
171 - if ( ! $this->is_elementor_admin_screen_with_system_info() ) {
171 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
172 172 return false;
173 173 }
174 174
175 175 $notice_id = 'admin_notice_api_' . $admin_notice['notice_id'];
@@ -213,9 +213,9 @@
213 213 // TODO: Skip for development env.
214 214 $optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' );
215 215 $optout_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_out' ), 'opt_out' );
216 216
217 - $tracker_description_text = esc_html__( 'Become a super contributor by helping us understand how you use our service to enhance your experience and improve our product.', 'elementor' );
217 + $tracker_description_text = esc_html__( 'Become a super contributor by opting in to share non-sensitive plugin data and to receive periodic email updates from us.', 'elementor' );
218 218
219 219 /**
220 220 * Tracker admin description text.
221 221 *
@@ -229,11 +229,10 @@
229 229
230 230 $message = esc_html( $tracker_description_text ) . ' <a href="https://go.elementor.com/usage-data-tracking/" target="_blank">' . esc_html__( 'Learn more.', 'elementor' ) . '</a>';
231 231
232 232 $options = [
233 - 'title' => esc_html__( 'Want to shape the future of web creation?', 'elementor' ),
233 + 'title' => esc_html__( 'Love using Elementor?', 'elementor' ),
234 234 'description' => $message,
235 - 'dismissible' => false,
236 235 'button' => [
237 236 'text' => esc_html__( 'Sure! I\'d love to help', 'elementor' ),
238 237 'url' => $optin_url,
239 238 'type' => 'cta',
@@ -250,49 +249,8 @@
250 249
251 250 return true;
252 251 }
253 252
254 - private function notice_tracker_last_update() {
255 - if ( ! current_user_can( 'manage_options' ) ) {
256 - return false;
257 - }
258 -
259 - if ( ! Tracker::has_terms_changed() ) {
260 - return false;
261 - }
262 -
263 - $notice_id = 'tracker_last_update_' . Tracker::LAST_TERMS_UPDATED;
264 -
265 - if ( User::is_user_notice_viewed( $notice_id ) ) {
266 - return false;
267 - }
268 -
269 - $optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' );
270 -
271 - $message = esc_html__( 'We\'re updating our Terms and Conditions to include the collection of usage and behavioral data. This information helps us understand how you use Elementor so we can make informed improvements to the product.', 'elementor' );
272 -
273 - $options = [
274 - 'id' => $notice_id,
275 - 'title' => esc_html__( 'Update regarding usage data collection', 'elementor' ),
276 - 'description' => $message,
277 - 'button' => [
278 - 'text' => esc_html__( 'Opt in', 'elementor' ),
279 - 'url' => $optin_url,
280 - 'type' => 'cta',
281 - ],
282 - 'button_secondary' => [
283 - 'text' => esc_html__( 'Learn more', 'elementor' ),
284 - 'url' => 'https://go.elementor.com/wp-dash-update-usage-notice/',
285 - 'new_tab' => true,
286 - 'type' => 'cta',
287 - ],
288 - ];
289 -
290 - $this->print_admin_notice( $options );
291 -
292 - return true;
293 - }
294 -
295 253 private function notice_rate_us_feedback() {
296 254 $notice_id = 'rate_us_feedback';
297 255
298 256 if ( ! current_user_can( 'manage_options' ) ) {
@@ -309,14 +267,14 @@
309 267
310 268 $dismiss_url = add_query_arg( [
311 269 'action' => 'elementor_set_admin_notice_viewed',
312 270 'notice_id' => esc_attr( $notice_id ),
313 - '_wpnonce' => wp_create_nonce( 'elementor_set_admin_notice_viewed' ),
314 271 ], admin_url( 'admin-post.php' ) );
315 272
316 273 $options = [
317 274 'title' => esc_html__( 'Congrats!', 'elementor' ),
318 - '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' ),
275 + 'description' => esc_html__( 'You created over 10 pages with Elementor. Great job! If you can spare a minute,
276 + please help us by leaving a five star review on WordPress.org.', 'elementor' ),
319 277 'id' => $notice_id,
320 278 'button' => [
321 279 'text' => esc_html__( 'Happy To Help', 'elementor' ),
322 280 'url' => 'https://go.elementor.com/admin-review/',
@@ -336,176 +294,122 @@
336 294
337 295 return true;
338 296 }
339 297
340 - private function notice_role_manager_promote() {
341 - $notice_id = 'role_manager_promote';
298 + private function notice_woocommerce_promote() {
299 + $notice_id = 'woocommerce_promote';
342 300
343 - if ( Utils::has_pro() ) {
301 + if ( Utils::has_pro() || ! function_exists( 'WC' ) ) {
344 302 return false;
345 303 }
346 304
347 - if ( ! current_user_can( 'manage_options' ) ) {
305 + if ( ! current_user_can( 'install_plugins' ) ) {
348 306 return false;
349 307 }
350 308
351 - if ( 'elementor_page_elementor-role-manager' !== $this->current_screen_id || User::is_user_notice_viewed( $notice_id ) ) {
309 + if ( ! in_array( $this->current_screen_id, [ 'edit-product', 'woocommerce_page_wc-settings' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
352 310 return false;
353 311 }
354 312
355 - $users = new \WP_User_Query( [
356 - 'fields' => 'ID',
357 - 'number' => 10,
358 - ] );
313 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
314 + return false;
315 + }
359 316
360 - if ( 5 > $users->get_total() ) {
317 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
361 318 return false;
362 319 }
363 320
364 321 $options = [
365 - 'title' => esc_html__( 'Managing a multi-user site?', 'elementor' ),
366 - 'description' => esc_html__( 'With Elementor Pro, you can control user access and make sure no one messes up your design.', 'elementor' ),
322 + 'title' => esc_html__( 'Using WooCommerce?', 'elementor' ),
323 + 'description' => esc_html__( 'With Elementor Pro’s WooCommerce Builder, you’ll be able to design your store without coding!', 'elementor' ),
367 324 'id' => $notice_id,
368 325
369 326 'button' => [
370 327 'text' => esc_html__( 'Learn More', 'elementor' ),
371 - 'url' => 'https://go.elementor.com/plugin-promotion-role-manager/',
328 + 'url' => 'https://go.elementor.com/plugin-promotion-woocommerce/',
372 329 'new_tab' => true,
373 330 'type' => 'cta',
374 331 ],
375 332 ];
376 333
377 - $options = Filtered_Promotions_Manager::get_filtered_promotion_data( $options, 'core/admin/notice_role_manager_promote', 'button', 'url' );
378 -
379 334 $this->print_admin_notice( $options );
380 335
381 336 return true;
382 337 }
383 338
384 - private function get_installed_form_plugin_name() {
385 - static $detected_form_plugin = null;
339 + private function notice_cf7_promote() {
340 + $notice_id = 'cf7_promote';
386 341
387 - if ( null !== $detected_form_plugin ) {
388 - return $detected_form_plugin;
342 + if ( Utils::has_pro() || ! defined( 'WPCF7_VERSION' ) ) {
343 + return false;
389 344 }
390 345
391 - $form_plugins_constants_to_name_mapper = [
392 - 'WPFORMS_VERSION' => 'WPForms',
393 - 'WPCF7_VERSION' => 'Contact Form 7',
394 - ];
346 + if ( ! current_user_can( 'install_plugins' ) ) {
347 + return false;
348 + }
395 349
396 - foreach ( $form_plugins_constants_to_name_mapper as $constant => $name ) {
397 - if ( defined( $constant ) ) {
398 - $detected_form_plugin = $name;
399 - return $detected_form_plugin;
400 - }
350 + if ( ! in_array( $this->current_screen_id, [ 'toplevel_page_wpcf7', 'contact_page_wpcf7-integration' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
351 + return false;
401 352 }
402 353
403 - $form_plugins_classes_to_name_mapper = [
404 - '\GFCommon' => 'Gravity Forms',
405 - '\Ninja_Forms' => 'Ninja Forms',
354 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
355 + return false;
356 + }
357 +
358 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
359 + return false;
360 + }
361 +
362 + $options = [
363 + 'title' => esc_html__( 'Using Elementor & Contact Form 7?', 'elementor' ),
364 + 'description' => esc_html__( 'Try out Elementor Pro and design your forms visually with one powerful tool.', 'elementor' ),
365 +
366 + 'id' => $notice_id,
367 + 'button' => [
368 + 'text' => esc_html__( 'Learn More', 'elementor' ),
369 + 'url' => 'https://go.elementor.com/plugin-promotion-contactform7/',
370 + 'new_tab' => true,
371 + 'type' => 'cta',
372 + ],
406 373 ];
407 374
408 - foreach ( $form_plugins_classes_to_name_mapper as $class => $name ) {
409 - if ( class_exists( $class ) ) {
410 - $detected_form_plugin = $name;
411 - return $detected_form_plugin;
412 - }
413 - }
375 + $this->print_admin_notice( $options );
414 376
415 - $detected_form_plugin = false;
416 - return $detected_form_plugin;
377 + return true;
417 378 }
418 379
419 - private function notice_ally_pages_promotion() {
420 - global $pagenow;
421 - $notice_id = 'ally_pages_promotion';
380 + private function notice_mc4wp_promote() {
381 + $notice_id = 'mc4wp_promote';
422 382
423 - if ( 'edit.php' !== $pagenow || empty( $_GET['post_type'] ) || 'page' !== $_GET['post_type'] ) {
383 + if ( Utils::has_pro() || ! defined( 'MC4WP_VERSION' ) ) {
424 384 return false;
425 385 }
426 386
427 - if ( ! current_user_can( 'manage_options' ) ) {
387 + if ( ! current_user_can( 'install_plugins' ) ) {
428 388 return false;
429 389 }
430 390
431 - if ( User::is_user_notice_viewed( $notice_id ) ) {
391 + 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 ) ) {
432 392 return false;
433 393 }
434 394
435 - $plugin_slug = 'pojo-accessibility';
436 - $plugin_file_path = 'pojo-accessibility/pojo-accessibility.php';
437 -
438 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
439 - $is_installed = Hints::is_plugin_installed( $plugin_slug );
440 - $is_active = Hints::is_plugin_active( $plugin_slug );
441 -
442 - if ( $is_active ) {
395 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
443 396 return false;
444 397 }
445 398
446 - if ( $one_subscription ) {
447 - $learn_more_url = 'https://go.elementor.com/acc-plg-learn-more-one';
448 -
449 - if ( ! $is_installed ) {
450 - $description = esc_html__( 'Make sure your site has an accessibility statement page. Install Web Accessibility, included in ONE, to create it in a few clicks.', 'elementor' );
451 - $button_text = esc_html__( 'Install now', 'elementor' );
452 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
453 - $campaign_data = [
454 - 'name' => 'elementor_ea11y_campaign',
455 - 'campaign' => 'acc-statement-plg-pages-one-install',
456 - 'source' => 'wp-pages-one-install',
457 - 'medium' => 'wp-dash-one',
458 - ];
459 - } elseif ( ! $is_active ) {
460 - $description = esc_html__( 'Your ONE subscription includes Web Accessibility. Activate it to create your accessibility statement page quickly.', 'elementor' );
461 - $button_text = esc_html__( 'Activate now', 'elementor' );
462 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
463 - $campaign_data = [
464 - 'name' => 'elementor_ea11y_campaign',
465 - 'campaign' => 'acc-statement-plg-pages-one-activate',
466 - 'source' => 'wp-pages-one-activate',
467 - 'medium' => 'wp-dash-one',
468 - ];
469 - }
470 - } else {
471 - $description = esc_html__( "Create a more inclusive site experience for all your visitors. With Web Accessibility, it's easy to add your statement page in just a few clicks.", 'elementor' );
472 - $learn_more_url = 'https://go.elementor.com/acc-plg-learn-more';
473 -
474 - if ( ! $is_installed ) {
475 - $button_text = esc_html__( 'Install now', 'elementor' );
476 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
477 - $campaign_data = [
478 - 'name' => 'elementor_ea11y_campaign',
479 - 'campaign' => 'acc-statement-plg-pages-install',
480 - 'source' => 'wp-pages-install',
481 - 'medium' => 'wp-dash',
482 - ];
483 - } elseif ( ! $is_active ) {
484 - $button_text = esc_html__( 'Activate now', 'elementor' );
485 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
486 - $campaign_data = [
487 - 'name' => 'elementor_ea11y_campaign',
488 - 'campaign' => 'acc-statement-plg-pages-activate',
489 - 'source' => 'wp-pages-activate',
490 - 'medium' => 'wp-dash',
491 - ];
492 - }
399 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
400 + return false;
493 401 }
494 402
495 403 $options = [
496 - 'title' => esc_html__( 'Make sure your site has an accessibility statement page', 'elementor' ),
497 - 'description' => $description,
404 + 'title' => esc_html__( 'Want to design better MailChimp forms?', 'elementor' ),
405 + 'description' => esc_html__( 'Use Elementor Pro and enjoy unlimited integrations, visual design, templates and more.', 'elementor' ),
406 + 'dismissible' => true,
498 407 'id' => $notice_id,
499 - 'type' => 'cta',
408 +
500 409 'button' => [
501 - 'text' => $button_text,
502 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
503 - 'type' => 'cta',
504 - ],
505 - 'button_secondary' => [
506 - 'text' => esc_html__( 'Learn more', 'elementor' ),
507 - 'url' => $learn_more_url,
410 + 'text' => esc_html__( 'Learn More', 'elementor' ),
411 + 'url' => 'https://go.elementor.com/plugin-promotion-mc4wp/',
508 412 'new_tab' => true,
509 413 'type' => 'cta',
510 414 ],
511 415 ];
@@ -514,61 +418,54 @@
514 418
515 419 return true;
516 420 }
517 421
518 - private function is_elementor_page(): bool {
519 - return 0 === strpos( $this->current_screen_id, 'elementor_page' );
520 - }
422 + private function notice_popup_maker_promote() {
423 + $notice_id = 'popup_maker_promote';
521 424
522 - private function is_elementor_admin_screen(): bool {
523 - return in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library' ], true );
524 - }
425 + if ( Utils::has_pro() || ! class_exists( 'Popup_Maker' ) ) {
426 + return false;
427 + }
525 428
526 - private function is_elementor_admin_screen_with_system_info(): bool {
527 - return in_array( $this->current_screen_id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true );
528 - }
529 - private function get_plugin_button_install_url( $plugin_slug ) {
530 - return wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $plugin_slug ), 'install-plugin_' . $plugin_slug );
531 - }
429 + if ( ! current_user_can( 'install_plugins' ) ) {
430 + return false;
431 + }
532 432
533 - private function get_plugin_button_activate_url( $plugin_file_path ) {
534 - return wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $plugin_file_path . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin_file_path );
535 - }
433 + if ( ! in_array( $this->current_screen_id, [ 'edit-popup', 'popup_page_pum-settings' ], true ) || User::is_user_notice_viewed( $notice_id ) ) {
434 + return false;
435 + }
536 436
537 - private function get_plugin_button_connect_url( $plugin_settings_page ) {
538 - return self_admin_url( $plugin_settings_page );
539 - }
437 + if ( strtotime( '2019-08-01' ) > $this->get_install_time() ) {
438 + return false;
439 + }
540 440
541 - private function get_plugin_cta_data( $plugin_slug, $plugin_file_path ) {
542 - if ( Hints::is_plugin_active( $plugin_slug ) ) {
441 + if ( strtotime( '+24 hours', $this->get_install_time() ) > time() ) {
543 442 return false;
544 443 }
545 444
546 - if ( Hints::is_plugin_installed( $plugin_slug ) ) {
547 - $url = $this->get_plugin_button_activate_url( $plugin_file_path );
548 - $cta_text = esc_html__( 'Activate now', 'elementor' );
549 - } else {
550 - $url = $this->get_plugin_button_install_url( $plugin_slug );
551 - $cta_text = esc_html__( 'Install now', 'elementor' );
552 - }
445 + $options = [
446 + 'title' => esc_html__( 'Using popups on your site?', 'elementor' ),
447 + 'description' => esc_html__( 'Build outstanding popups using Elementor Pro and get more leads, sales and subscribers.', 'elementor' ),
448 + 'dismissible' => true,
449 + 'id' => $notice_id,
553 450
554 - return [
555 - 'url' => $url,
556 - 'text' => $cta_text,
451 + 'button' => [
452 + 'text' => esc_html__( 'Learn More', 'elementor' ),
453 + 'url' => 'https://go.elementor.com/plugin-promotion-popupmaker/',
454 + 'new_tab' => true,
455 + 'type' => 'cta',
456 + ],
557 457 ];
558 - }
559 458
560 - /**
561 - * For testing purposes
562 - */
563 - public function get_elementor_version() {
564 - return ELEMENTOR_VERSION;
459 + $this->print_admin_notice( $options );
460 +
461 + return true;
565 462 }
566 463
567 - private function notice_plugin_image_optimization() {
568 - $notice_id = 'plugin_image_optimization';
464 + private function notice_role_manager_promote() {
465 + $notice_id = 'role_manager_promote';
569 466
570 - if ( 'upload' !== $this->current_screen_id ) {
467 + if ( Utils::has_pro() ) {
571 468 return false;
572 469 }
573 470
574 471 if ( ! current_user_can( 'manage_options' ) ) {
@@ -574,93 +471,31 @@
574 471 if ( ! current_user_can( 'manage_options' ) ) {
575 472 return false;
576 473 }
577 474
578 - if ( User::is_user_notice_viewed( $notice_id ) ) {
475 + if ( 'elementor_page_elementor-role-manager' !== $this->current_screen_id || User::is_user_notice_viewed( $notice_id ) ) {
579 476 return false;
580 477 }
581 478
582 - $attachments = new \WP_Query( [
583 - 'post_type' => 'attachment',
584 - 'post_status' => 'any',
585 - 'fields' => 'ids',
479 + $users = new \WP_User_Query( [
480 + 'fields' => 'ID',
481 + 'number' => 10,
586 482 ] );
587 483
588 - if ( 1 > $attachments->found_posts ) {
484 + if ( 5 > $users->get_total() ) {
589 485 return false;
590 486 }
591 487
592 - $plugin_slug = 'image-optimization';
593 - $plugin_file_path = 'image-optimization/image-optimization.php';
594 -
595 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
596 - $is_installed = Hints::is_plugin_installed( $plugin_slug );
597 - $is_active = Hints::is_plugin_active( $plugin_slug );
598 -
599 - if ( $is_active ) {
600 - return false;
601 - }
602 -
603 - if ( $one_subscription ) {
604 - if ( ! $is_installed ) {
605 - $description = esc_html__( 'Automatically optimize images to improve site speed and performance. Included with your ONE subscription.', 'elementor' );
606 - $button_text = esc_html__( 'Install now', 'elementor' );
607 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
608 - $campaign_data = [
609 - 'name' => 'elementor_image_optimization_campaign',
610 - 'campaign' => 'io-plg-one',
611 - 'source' => 'io-wp-media-library-one-install',
612 - 'medium' => 'wp-dash-one',
613 - ];
614 - } elseif ( ! $is_active ) {
615 - $description = esc_html__( 'Your ONE subscription includes Image Optimization. Activate it to optimize images and improve site performance.', 'elementor' );
616 - $button_text = esc_html__( 'Activate now', 'elementor' );
617 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
618 - $campaign_data = [
619 - 'name' => 'elementor_image_optimization_campaign',
620 - 'campaign' => 'io-plg-one',
621 - 'source' => 'io-wp-media-library-one-activate',
622 - 'medium' => 'wp-dash-one',
623 - ];
624 - }
625 - } else {
626 - $description = esc_html__( 'Automatically compress and optimize images, resize larger files, or convert to WebP. Optimize images individually, in bulk, or on upload.', 'elementor' );
627 -
628 - if ( ! $is_installed ) {
629 - $button_text = esc_html__( 'Install now', 'elementor' );
630 - $button_url = $this->get_plugin_button_install_url( $plugin_slug );
631 - $campaign_data = [
632 - 'name' => 'elementor_image_optimization_campaign',
633 - 'campaign' => 'io-plg',
634 - 'source' => 'io-wp-media-library-install',
635 - 'medium' => 'wp-dash',
636 - ];
637 - } elseif ( ! $is_active ) {
638 - $button_text = esc_html__( 'Activate now', 'elementor' );
639 - $button_url = $this->get_plugin_button_activate_url( $plugin_file_path );
640 - $campaign_data = [
641 - 'name' => 'elementor_image_optimization_campaign',
642 - 'campaign' => 'io-plg',
643 - 'source' => 'io-wp-media-library-activate',
644 - 'medium' => 'wp-dash',
645 - ];
646 - }
647 - }
648 -
649 488 $options = [
650 - 'title' => esc_html__( 'Speed up your website with Image Optimization', 'elementor' ),
651 - 'description' => $description,
489 + 'title' => esc_html__( 'Managing a multi-user site?', 'elementor' ),
490 + 'description' => esc_html__( 'With Elementor Pro, you can control user access and make sure no one messes up your design.', 'elementor' ),
652 491 'id' => $notice_id,
653 - 'type' => 'cta',
492 +
654 493 'button' => [
655 - 'text' => $button_text,
656 - 'url' => self::add_plg_campaign_data( $button_url, $campaign_data ),
494 + 'text' => esc_html__( 'Learn More', 'elementor' ),
495 + 'url' => 'https://go.elementor.com/plugin-promotion-role-manager/',
496 + 'new_tab' => true,
657 497 'type' => 'cta',
658 - 'data' => [
659 - 'campaign' => $campaign_data['campaign'],
660 - 'source' => $campaign_data['source'],
661 - 'medium' => $campaign_data['medium'],
662 - ],
663 498 ],
664 499 ];
665 500
666 501 $this->print_admin_notice( $options );
@@ -667,15 +502,9 @@
667 502
668 503 return true;
669 504 }
670 505
671 - public function print_admin_notice( array $options, $exclude_pages = self::DEFAULT_EXCLUDED_PAGES ) {
672 - global $pagenow;
673 -
674 - if ( in_array( $pagenow, $exclude_pages, true ) ) {
675 - return;
676 - }
677 -
506 + public function print_admin_notice( array $options ) {
678 507 $default_options = [
679 508 'id' => null,
680 509 'title' => '',
681 510 'description' => '',
@@ -681,9 +510,9 @@
681 510 'description' => '',
682 511 'classes' => [ 'notice', 'e-notice' ], // We include WP's default notice class so it will be properly handled by WP's js handler
683 512 'type' => '',
684 513 'dismissible' => true,
685 - 'icon' => 'eicon-elementor-circle',
514 + 'icon' => 'eicon-elementor',
686 515 'button' => [],
687 516 'button_secondary' => [],
688 517 ];
689 518
@@ -696,19 +525,12 @@
696 525 if ( $options['type'] ) {
697 526 $notice_classes[] = 'e-notice--' . $options['type'];
698 527 }
699 528
700 - $wrapper_attributes = [
701 - 'role' => 'region',
702 - 'aria-label' => esc_html__( 'Elementor notice', 'elementor' ),
703 - ];
704 -
705 529 if ( $options['dismissible'] ) {
706 - $label = esc_html__( 'Dismiss this notice.', 'elementor' );
530 + $label = esc_html__( 'Dismiss', 'elementor' );
707 531 $notice_classes[] = 'e-notice--dismissible';
708 532 $dismiss_button = '<i class="e-notice__dismiss" role="button" aria-label="' . $label . '" tabindex="0"></i>';
709 -
710 - $wrapper_attributes['data-nonce'] = wp_create_nonce( 'elementor_set_admin_notice_viewed' );
711 533 }
712 534
713 535 if ( $options['icon'] ) {
714 536 $notice_classes[] = 'e-notice--extended';
@@ -714,17 +536,15 @@
714 536 $notice_classes[] = 'e-notice--extended';
715 537 $icon = '<div class="e-notice__icon-wrapper"><i class="' . esc_attr( $options['icon'] ) . '" aria-hidden="true"></i></div>';
716 538 }
717 539
718 - $wrapper_attributes['class'] = $notice_classes;
540 + $wrapper_attributes = [
541 + 'class' => $notice_classes,
542 + ];
719 543
720 544 if ( $options['id'] ) {
721 545 $wrapper_attributes['data-notice_id'] = $options['id'];
722 546 }
723 -
724 - if ( ! empty( $options['source'] ) ) {
725 - $wrapper_attributes['data-source'] = $options['source'];
726 - }
727 547 ?>
728 548 <div <?php Utils::print_html_attributes( $wrapper_attributes ); ?>>
729 549 <?php echo $dismiss_button; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
730 550 <div class="e-notice__aside">
@@ -730,49 +550,36 @@
730 550 <div class="e-notice__aside">
731 551 <?php echo $icon; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
732 552 </div>
733 553 <div class="e-notice__content">
734 - <?php if ( $options['title'] ) { ?>
735 - <h3><?php echo wp_kses_post( $options['title'] ); ?></h3>
736 - <?php } ?>
554 + <?php if ( $options['title'] ) { ?>
555 + <h3><?php echo wp_kses_post( $options['title'] ); ?></h3>
556 + <?php } ?>
737 557
738 - <?php if ( $options['description'] ) { ?>
739 - <p><?php echo wp_kses_post( $options['description'] ); ?></p>
740 - <?php } ?>
558 + <?php if ( $options['description'] ) { ?>
559 + <p><?php echo wp_kses_post( $options['description'] ); ?></p>
560 + <?php } ?>
741 561
742 - <?php if ( ! empty( $options['button']['text'] ) || ! empty( $options['button_secondary']['text'] ) ) { ?>
743 - <div class="e-notice__actions">
744 - <?php
745 - $one_subscription = Hints::is_plugin_connected_to_one_subscription();
746 - foreach ( [ $options['button'], $options['button_secondary'] ] as $index => $button_settings ) {
747 - if ( empty( $button_settings['variant'] ) && $index ) {
748 - $button_settings['variant'] = 'outline';
749 - }
562 + <?php if ( ! empty( $options['button']['text'] ) || ! empty( $options['button_secondary']['text'] ) ) { ?>
563 + <div class="e-notice__actions">
564 + <?php
565 + foreach ( [ $options['button'], $options['button_secondary'] ] as $index => $button_settings ) {
566 + if ( empty( $button_settings['variant'] ) && $index ) {
567 + $button_settings['variant'] = 'outline';
568 + }
750 569
751 - if ( empty( $button_settings['text'] ) ) {
752 - continue;
753 - }
570 + if ( empty( $button_settings['text'] ) ) {
571 + continue;
572 + }
754 573
755 - if ( $one_subscription ) {
756 - if ( ! isset( $button_settings['classes'] ) ) {
757 - $button_settings['classes'] = [];
758 - }
759 - if ( ! is_array( $button_settings['classes'] ) ) {
760 - $button_settings['classes'] = [ $button_settings['classes'] ];
761 - }
762 - // index 0 = button, index 1 = button_secondary
763 - $button_class = ( 0 === $index ) ? 'button-primary' : 'button-secondary';
764 - $button_settings['classes'][] = $button_class;
765 - }
766 -
767 - $button = new Button( $button_settings );
768 - $button->print_button();
769 - } ?>
770 - </div>
771 - <?php } ?>
574 + $button = new Button( $button_settings );
575 + $button->print_button();
576 + } ?>
577 + </div>
578 + <?php } ?>
772 579 </div>
773 580 </div>
774 - <?php }
581 + <?php }
775 582
776 583 public function admin_notices() {
777 584 $this->install_time = Plugin::$instance->get_install_time();
778 585 $this->current_screen_id = get_current_screen()->id;
@@ -796,60 +603,8 @@
796 603 return;
797 604 }
798 605 }
799 606
800 - public function maybe_log_campaign() {
801 - if ( empty( $_GET['plg_campaign'] ) || empty( $_GET['plg_campaign_name'] ) ) {
802 - return;
803 - }
804 -
805 - $allowed_plgs = [
806 - 'elementor_image_optimization_campaign',
807 - 'elementor_ea11y_campaign',
808 - ];
809 -
810 - if ( ! in_array( $_GET['plg_campaign_name'], $allowed_plgs, true ) ) {
811 - return;
812 - }
813 -
814 - if ( ! isset( $_GET['plg_campaign_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_GET['plg_campaign_nonce'] ), sanitize_key( $_GET['plg_campaign_name'] ) ) ) {
815 - return;
816 - }
817 -
818 - if ( ! current_user_can( 'manage_options' ) ) {
819 - return;
820 - }
821 -
822 - if ( empty( $_GET['plg_source'] ) || empty( $_GET['plg_medium'] ) ) {
823 - return;
824 - }
825 -
826 - $campaign_data = [
827 - 'source' => sanitize_key( $_GET['plg_source'] ),
828 - 'campaign' => sanitize_key( $_GET['plg_campaign'] ),
829 - 'medium' => sanitize_key( $_GET['plg_medium'] ),
830 - ];
831 -
832 - set_transient( sanitize_key( $_GET['plg_campaign_name'] ), $campaign_data, 30 * DAY_IN_SECONDS );
833 - }
834 -
835 - public static function add_plg_campaign_data( $url, $campaign_data ) {
836 -
837 - foreach ( [ 'name', 'campaign' ] as $key ) {
838 - if ( empty( $campaign_data[ $key ] ) ) {
839 - return $url;
840 - }
841 - }
842 -
843 - return add_query_arg( [
844 - 'plg_campaign_name' => $campaign_data['name'],
845 - 'plg_campaign' => $campaign_data['campaign'],
846 - 'plg_source' => empty( $campaign_data['source'] ) ? '' : $campaign_data['source'],
847 - 'plg_medium' => empty( $campaign_data['medium'] ) ? '' : $campaign_data['medium'],
848 - 'plg_campaign_nonce' => wp_create_nonce( $campaign_data['name'] ),
849 - ], $url );
850 - }
851 -
852 607 /**
853 608 * @since 2.9.0
854 609 * @access public
855 610 */
@@ -854,10 +609,8 @@
854 609 * @access public
855 610 */
856 611 public function __construct() {
857 612 add_action( 'admin_notices', [ $this, 'admin_notices' ], 20 );
858 - add_action( 'admin_action_install-plugin', [ $this, 'maybe_log_campaign' ] );
859 - add_action( 'admin_action_activate', [ $this, 'maybe_log_campaign' ] );
860 613 }
861 614
862 615 /**
863 616 * Get module name.