PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
jetpack / jetpack_vendor / automattic / jetpack-connection / src / identity-crisis / class-ui.php

class-ui.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3, at jetpack_vendor/automattic/jetpack-connection/src/identity-crisis/class-ui.php

209 lines 5.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Identity_Crisis UI class of the Connection package.
4 *
5 * @package automattic/jetpack-connection
6 */
7
8 namespace Automattic\Jetpack\IdentityCrisis;
9
10 use Automattic\Jetpack\Assets;
11 use Automattic\Jetpack\Identity_Crisis;
12 use Automattic\Jetpack\Status;
13 use Automattic\Jetpack\Status\Host;
14 use Automattic\Jetpack\Tracking;
15 use Jetpack_Options;
16 use Jetpack_Tracks_Client;
17
18 /**
19 * The Identity Crisis UI handling.
20 */
21 class UI {
22
23 /**
24 * Temporary storage for consumer data.
25 *
26 * @var array
27 */
28 private static $consumers;
29
30 /**
31 * Initialization.
32 */
33 public static function init() {
34 if ( did_action( 'jetpack_identity_crisis_ui_init' ) ) {
35 return;
36 }
37
38 /**
39 * Action called after initializing Identity Crisis UI.
40 *
41 * @since 0.6.0
42 */
43 do_action( 'jetpack_identity_crisis_ui_init' );
44
45 $idc_data = Identity_Crisis::check_identity_crisis();
46
47 if ( false === $idc_data ) {
48 return;
49 }
50
51 add_action( 'admin_enqueue_scripts', array( static::class, 'enqueue_scripts' ) );
52
53 Tracking::register_tracks_functions_scripts( true );
54 }
55
56 /**
57 * Enqueue scripts!
58 */
59 public static function enqueue_scripts() {
60 if ( is_admin() ) {
61 Assets::register_script(
62 'jp_identity_crisis_banner',
63 '../../dist/identity-crisis.js',
64 __FILE__,
65 array(
66 'in_footer' => true,
67 'textdomain' => 'jetpack-connection',
68 )
69 );
70 Assets::enqueue_script( 'jp_identity_crisis_banner' );
71 wp_add_inline_script( 'jp_identity_crisis_banner', static::get_initial_state(), 'before' );
72
73 add_action( 'admin_notices', array( static::class, 'render_container' ) );
74 }
75 }
76
77 /**
78 * Create the container element for the IDC banner.
79 */
80 public static function render_container() {
81 ?>
82 <div id="jp-identity-crisis-container" class="notice"></div>
83 <?php
84 }
85
86 /**
87 * Return the rendered initial state JavaScript code.
88 *
89 * @return string
90 */
91 private static function get_initial_state() {
92 return 'var JP_IDENTITY_CRISIS__INITIAL_STATE=' . wp_json_encode( static::get_initial_state_data(), JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP ) . ';';
93 }
94
95 /**
96 * Get the initial state data.
97 *
98 * @return array
99 */
100 private static function get_initial_state_data() {
101 $idc_urls = Identity_Crisis::get_mismatched_urls();
102 $current_screen = get_current_screen();
103 $is_admin = current_user_can( 'jetpack_disconnect' );
104 $possible_dynamic_site_url_detected = (bool) Identity_Crisis::detect_possible_dynamic_site_url();
105 $is_development_site = (bool) Status::is_development_site();
106
107 return array(
108 'WP_API_root' => esc_url_raw( rest_url() ),
109 'WP_API_nonce' => wp_create_nonce( 'wp_rest' ),
110 'wpcomHomeUrl' => ( is_array( $idc_urls ) && array_key_exists( 'wpcom_url', $idc_urls ) ) ? $idc_urls['wpcom_url'] : null,
111 'currentUrl' => ( is_array( $idc_urls ) && array_key_exists( 'current_url', $idc_urls ) ) ? $idc_urls['current_url'] : null,
112 'redirectUri' => isset( $_SERVER['REQUEST_URI'] ) ? str_replace( '/wp-admin/', '/', filter_var( wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) : '',
113 'tracksUserData' => Jetpack_Tracks_Client::get_connected_user_tracks_identity(),
114 'tracksEventData' => array(
115 'isAdmin' => $is_admin,
116 'currentScreen' => $current_screen ? $current_screen->id : false,
117 'blogID' => Jetpack_Options::get_option( 'id' ),
118 'platform' => static::get_platform(),
119 ),
120 'isSafeModeConfirmed' => Identity_Crisis::$is_safe_mode_confirmed,
121 'consumerData' => static::get_consumer_data(),
122 'isAdmin' => $is_admin,
123 'possibleDynamicSiteUrlDetected' => $possible_dynamic_site_url_detected,
124 'isDevelopmentSite' => $is_development_site,
125
126 /**
127 * Use the filter to provide custom HTML elecontainer ID.
128 *
129 * @since 0.10.0
130 *
131 * @param string|null $containerID The container ID.
132 */
133 'containerID' => apply_filters( 'identity_crisis_container_id', null ),
134 );
135 }
136
137 /**
138 * Get the package consumer data.
139 *
140 * @return array
141 */
142 public static function get_consumer_data() {
143 if ( null !== static::$consumers ) {
144 return static::$consumers;
145 }
146
147 $consumers = apply_filters( 'jetpack_idc_consumers', array() );
148
149 if ( ! $consumers ) {
150 return array();
151 }
152
153 usort(
154 $consumers,
155 function ( $c1, $c2 ) {
156 $priority1 = ( array_key_exists( 'priority', $c1 ) && (int) $c1['priority'] ) ? (int) $c1['priority'] : 10;
157 $priority2 = ( array_key_exists( 'priority', $c2 ) && (int) $c2['priority'] ) ? (int) $c2['priority'] : 10;
158
159 return $priority1 <=> $priority2;
160 }
161 );
162
163 $consumer_chosen = null;
164 $consumer_url_length = 0;
165 foreach ( $consumers as &$consumer ) {
166 if ( empty( $consumer['admin_page'] ) || ! is_string( $consumer['admin_page'] ) ) {
167 continue;
168 }
169
170 if ( isset( $consumer['customContent'] ) && is_callable( $consumer['customContent'] ) ) {
171 $consumer['customContent'] = call_user_func( $consumer['customContent'] );
172 }
173
174 if ( isset( $_SERVER['REQUEST_URI'] ) && str_starts_with( filter_var( wp_unslash( $_SERVER['REQUEST_URI'] ) ), $consumer['admin_page'] ) && strlen( $consumer['admin_page'] ) > $consumer_url_length ) {
175 $consumer_chosen = $consumer;
176 $consumer_url_length = strlen( $consumer['admin_page'] );
177 }
178 }
179 unset( $consumer );
180
181 static::$consumers = $consumer_chosen ? $consumer_chosen : array_shift( $consumers );
182
183 return static::$consumers;
184 }
185
186 /**
187 * Get the site platform.
188 *
189 * @return string
190 */
191 private static function get_platform() {
192 $host = new Host();
193
194 if ( $host->is_woa_site() ) {
195 return 'woa';
196 }
197
198 if ( $host->is_vip_site() ) {
199 return 'vip';
200 }
201
202 if ( $host->is_newspack_site() ) {
203 return 'newspack';
204 }
205
206 return 'self-hosted';
207 }
208 }
209