Aucune description

load.php 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. /**
  3. * Admin Menu loader.
  4. *
  5. * @package Jetpack
  6. */
  7. namespace Automattic\Jetpack\Dashboard_Customizations;
  8. use Automattic\Jetpack\Tracking;
  9. /**
  10. * Checks whether the navigation customizations should be performed for the given class.
  11. *
  12. * @param string $admin_menu_class Class name.
  13. *
  14. * @return bool
  15. */
  16. function should_customize_nav( $admin_menu_class ) {
  17. // Make sure the class extends the base admin menu class.
  18. if ( ! is_subclass_of( $admin_menu_class, Base_Admin_Menu::class ) ) {
  19. return false;
  20. }
  21. $is_api_request = defined( 'REST_REQUEST' ) && REST_REQUEST || 0 === strpos( $_SERVER['REQUEST_URI'], '/?rest_route=%2Fwpcom%2Fv2%2Fadmin-menu' );
  22. // No nav customizations on WP Admin of Atomic sites when SSO is disabled.
  23. if ( is_a( $admin_menu_class, Atomic_Admin_Menu::class, true ) && ! $is_api_request && ! \Jetpack::is_module_active( 'sso' ) ) {
  24. return false;
  25. }
  26. // No nav customizations on WP Admin of Jetpack sites.
  27. if ( is_a( $admin_menu_class, Jetpack_Admin_Menu::class, true ) && ! $is_api_request ) {
  28. return false;
  29. }
  30. return true;
  31. }
  32. /**
  33. * Gets the name of the class that customizes the admin menu.
  34. *
  35. * @return string Class name.
  36. */
  37. function get_admin_menu_class() {
  38. // WordPress.com Atomic sites.
  39. if ( jetpack_is_atomic_site() ) {
  40. require_once __DIR__ . '/class-atomic-admin-menu.php';
  41. return Atomic_Admin_Menu::class;
  42. }
  43. // WordPress.com Simple sites.
  44. if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
  45. $blog_id = get_current_blog_id();
  46. // Domain-only sites.
  47. $blog_options = get_blog_option( $blog_id, 'options' );
  48. $is_domain_only = ! empty( $blog_options['is_domain_only'] );
  49. if ( $is_domain_only ) {
  50. require_once __DIR__ . '/class-domain-only-admin-menu.php';
  51. return Domain_Only_Admin_Menu::class;
  52. }
  53. // P2 sites.
  54. require_once WP_CONTENT_DIR . '/lib/wpforteams/functions.php';
  55. if ( \WPForTeams\is_wpforteams_site( $blog_id ) ) {
  56. require_once __DIR__ . '/class-p2-admin-menu.php';
  57. return P2_Admin_Menu::class;
  58. }
  59. // Rest of simple sites.
  60. require_once __DIR__ . '/class-wpcom-admin-menu.php';
  61. return WPcom_Admin_Menu::class;
  62. }
  63. // Jetpack sites.
  64. require_once __DIR__ . '/class-jetpack-admin-menu.php';
  65. return Jetpack_Admin_Menu::class;
  66. }
  67. /**
  68. * Filters the name of the class that customizes the admin menu. It should extends the `Base_Admin_Menu` class.
  69. *
  70. * @module masterbar
  71. *
  72. * @since 9.6.0
  73. *
  74. * @param string $admin_menu_class Class name.
  75. */
  76. $admin_menu_class = apply_filters( 'jetpack_admin_menu_class', get_admin_menu_class() );
  77. if ( should_customize_nav( $admin_menu_class ) ) {
  78. /** The admin menu singleton instance. @var Base_Admin_Menu $instance */
  79. $admin_menu_class::get_instance();
  80. /**
  81. * Trigger an event when the user uses the dashboard quick switcher.
  82. *
  83. * @param string $screen The current screen.
  84. * @param string $view The view the user choosed to go to.
  85. */
  86. function dashboard_quick_switcher_record_usage( $screen, $view ) {
  87. require_once __DIR__ . '/class-dashboard-switcher-tracking.php';
  88. $tracking = new Dashboard_Switcher_Tracking(
  89. new Tracking( Dashboard_Switcher_Tracking::get_jetpack_tracking_product() ),
  90. array( Dashboard_Switcher_Tracking::class, 'wpcom_tracks_record_event' ),
  91. Dashboard_Switcher_Tracking::get_plan()
  92. );
  93. $tracking->record_switch_event( $screen, $view );
  94. }
  95. \add_action( 'jetpack_dashboard_switcher_changed_view', __NAMESPACE__ . '\dashboard_quick_switcher_record_usage', 10, 2 );
  96. } else {
  97. \add_filter( 'jetpack_load_admin_menu_class', '__return_false' );
  98. }