diff options
Diffstat (limited to 'plugins/jetpack/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-ui.php')
-rw-r--r-- | plugins/jetpack/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-ui.php | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/plugins/jetpack/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-ui.php b/plugins/jetpack/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-ui.php new file mode 100644 index 00000000..a3c2694a --- /dev/null +++ b/plugins/jetpack/jetpack_vendor/automattic/jetpack-identity-crisis/src/class-ui.php @@ -0,0 +1,151 @@ +<?php +/** + * Identity_Crisis package. + * + * @package automattic/jetpack-identity-crisis + */ + +namespace Automattic\Jetpack\IdentityCrisis; + +use Automattic\Jetpack\Assets; +use Automattic\Jetpack\Identity_Crisis; +use Automattic\Jetpack\Tracking as Tracking; +use Jetpack_Tracks_Client; + +/** + * The Identity Crisis UI handling. + */ +class UI { + + /** + * Initialization. + */ + public static function init() { + if ( did_action( 'jetpack_identity_crisis_ui_init' ) ) { + return; + } + + /** + * Action called after initializing Identity Crisis UI. + * + * @since 0.6.0 + */ + do_action( 'jetpack_identity_crisis_ui_init' ); + + $idc_data = Identity_Crisis::check_identity_crisis(); + + if ( false === $idc_data ) { + return; + } + + add_action( 'admin_enqueue_scripts', array( static::class, 'enqueue_scripts' ) ); + + Tracking::register_tracks_functions_scripts( true ); + } + + /** + * Enqueue scripts! + */ + public static function enqueue_scripts() { + if ( is_admin() ) { + Assets::register_script( + 'jp_identity_crisis_banner', + '../build/index.js', + __FILE__, + array( + 'in_footer' => true, + 'textdomain' => 'jetpack-idc', + ) + ); + Assets::enqueue_script( 'jp_identity_crisis_banner' ); + wp_add_inline_script( 'jp_identity_crisis_banner', static::get_initial_state(), 'before' ); + + add_action( 'admin_notices', array( static::class, 'render_container' ) ); + } + } + + /** + * Create the container element for the IDC banner. + */ + public static function render_container() { + ?> + <div id="jp-identity-crisis-container"></div> + <?php + } + + /** + * Return the rendered initial state JavaScript code. + * + * @return string + */ + private static function get_initial_state() { + return 'var JP_IDENTITY_CRISIS__INITIAL_STATE=JSON.parse(decodeURIComponent("' . rawurlencode( wp_json_encode( static::get_initial_state_data() ) ) . '"));'; + } + + /** + * Get the initial state data. + * + * @return array + */ + private static function get_initial_state_data() { + $idc_urls = Identity_Crisis::get_mismatched_urls(); + $current_screen = get_current_screen(); + $is_admin = current_user_can( 'jetpack_disconnect' ); + + return array( + 'WP_API_root' => esc_url_raw( rest_url() ), + 'WP_API_nonce' => wp_create_nonce( 'wp_rest' ), + 'wpcomHomeUrl' => ( is_array( $idc_urls ) && array_key_exists( 'wpcom_url', $idc_urls ) ) ? $idc_urls['wpcom_url'] : null, + 'currentUrl' => ( is_array( $idc_urls ) && array_key_exists( 'current_url', $idc_urls ) ) ? $idc_urls['current_url'] : null, + 'redirectUri' => str_replace( '/wp-admin/', '/', $_SERVER['REQUEST_URI'] ), + 'tracksUserData' => Jetpack_Tracks_Client::get_connected_user_tracks_identity(), + 'tracksEventData' => array( + 'isAdmin' => $is_admin, + 'currentScreen' => $current_screen ? $current_screen->id : false, + ), + 'isSafeModeConfirmed' => Identity_Crisis::$is_safe_mode_confirmed, + 'consumerData' => static::get_consumer_data(), + 'isAdmin' => $is_admin, + ); + } + + /** + * Get the package consumer data. + * + * @return array + */ + private static function get_consumer_data() { + $consumers = apply_filters( 'jetpack_idc_consumers', array() ); + + if ( ! $consumers ) { + return array(); + } + + usort( + $consumers, + function ( $c1, $c2 ) { + $priority1 = ( array_key_exists( 'priority', $c1 ) && (int) $c1['priority'] ) ? (int) $c1['priority'] : 10; + $priority2 = ( array_key_exists( 'priority', $c2 ) && (int) $c2['priority'] ) ? (int) $c2['priority'] : 10; + + return $priority1 > $priority2 ? 1 : -1; + } + ); + + $consumer_chosen = null; + $consumer_url_length = 0; + + foreach ( $consumers as $consumer ) { + if ( empty( $consumer['admin_page'] ) || ! is_string( $consumer['admin_page'] ) ) { + continue; + } + + if ( 0 === strpos( $_SERVER['REQUEST_URI'], $consumer['admin_page'] ) && strlen( $consumer['admin_page'] ) > $consumer_url_length ) { + $consumer_chosen = $consumer; + $consumer_url_length = strlen( $consumer['admin_page'] ); + } + } + + return $consumer_chosen ? $consumer_chosen : array_shift( $consumers ); + } + +} |