PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-connection / src / identity-crisis / class-ui.php
jetpack / jetpack_vendor / automattic / jetpack-connection / src / identity-crisis Last commit date
class-exception.php 2 years ago class-identity-crisis.php 7 months ago class-rest-endpoints.php 2 months ago class-ui.php 8 months ago class-url-secret.php 2 years ago
class-ui.php
209 lines
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