PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
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-stats-admin / src / class-odyssey-config-data.php
jetpack / jetpack_vendor / automattic / jetpack-stats-admin / src Last commit date
class-admin-post-list-column.php 2 days ago class-dashboard.php 2 days ago class-main.php 2 days ago class-notices.php 8 months ago class-odyssey-assets.php 2 weeks ago class-odyssey-config-data.php 2 days ago class-rest-controller.php 1 month ago class-wp-dashboard-odyssey-widget.php 2 years ago class-wpcom-client.php 2 days ago
class-odyssey-config-data.php
283 lines
1 <?php
2 /**
3 * Stats Initial State
4 *
5 * @package automattic/jetpack-stats-admin
6 */
7
8 namespace Automattic\Jetpack\Stats_Admin;
9
10 use Automattic\Jetpack\Blaze;
11 use Automattic\Jetpack\Current_Plan as Jetpack_Plan;
12 use Automattic\Jetpack\Modules;
13 use Automattic\Jetpack\Status\Host;
14 use Jetpack_Options;
15
16 /**
17 * Class Odyssey_Config_Data
18 *
19 * @package automattic/jetpack-stats-admin
20 */
21 class Odyssey_Config_Data {
22
23 /**
24 * Set configData to window.configData.
25 *
26 * @param string $config_variable_name The config variable name.
27 * @param array $config_data The config data.
28 */
29 public function get_js_config_data( $config_variable_name = 'configData', $config_data = null ) {
30 return "window.{$config_variable_name} = " . wp_json_encode(
31 $config_data === null ? $this->get_data() : $config_data,
32 JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP
33 ) . ';';
34 }
35
36 /**
37 * Return the config for the app.
38 */
39 public function get_data() {
40 $blog_id = $this->get_connected_blog_id();
41 $data = $this->get_site_agnostic_data( $blog_id );
42
43 /*
44 * A site the app cannot reach has no record to seed its store with. Emitting one anyway
45 * would key every entry on a blog ID of 0 and make each lookup miss, so leave it out and
46 * let the app fall back to the screens it shows without a site.
47 */
48 if ( $blog_id ) {
49 $data['intial_state'] = $this->get_initial_state( $blog_id );
50 }
51
52 return $data;
53 }
54
55 /**
56 * The WordPress.com blog ID the app can talk to, or 0 when there is none.
57 *
58 * A site keeps its blog ID when it disconnects, but every request the app would make with it
59 * has to be signed with a token the site no longer holds. Such a site has no more to offer
60 * the app than one that was never connected.
61 *
62 * @return int
63 */
64 protected function get_connected_blog_id() {
65 $blog_id = (int) Jetpack_Options::get_option( 'id' );
66
67 return Main::is_site_connected() ? $blog_id : 0;
68 }
69
70 /**
71 * Config the app can rely on with or without a WordPress.com connection.
72 *
73 * @param int $blog_id The WordPress.com blog ID, 0 when the site is not connected.
74 * @return array
75 */
76 protected function get_site_agnostic_data( $blog_id ) {
77 global $wp_version;
78
79 return array(
80 'admin_page_base' => $this->get_admin_path(),
81 'api_root' => esc_url_raw( rest_url() ),
82 'blog_id' => $blog_id,
83 'enable_all_sections' => false,
84 'env_id' => 'production',
85 'google_analytics_key' => 'UA-10673494-15',
86 'google_maps_and_places_api_key' => '',
87 'hostname' => wp_parse_url( get_site_url(), PHP_URL_HOST ),
88 'i18n_default_locale_slug' => 'en',
89 'i18n_locale_slug' => $this->get_user_locale(),
90 'mc_analytics_enabled' => false,
91 'meta' => array(),
92 'nonce' => wp_create_nonce( 'wp_rest' ),
93 'site_name' => \get_bloginfo( 'name' ),
94 'sections' => array(),
95 // Features are inlined @see https://github.com/Automattic/wp-calypso/pull/70122
96 'features' => array(
97 'is_running_in_jetpack_site' => ! ( new Host() )->is_wpcom_simple(),
98 ),
99 // Intended for apps that do not use redux.
100 'gmt_offset' => $this->get_gmt_offset(),
101 'odyssey_stats_base_url' => admin_url( 'admin.php?page=stats' ),
102 // Repeated in the site record below, which a site without a connection never gets.
103 'admin_url' => admin_url(),
104 'jetpack_version' => defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : '',
105 'stats_admin_version' => Main::VERSION,
106 'software_version' => $wp_version,
107 );
108 }
109
110 /**
111 * The Redux state the app boots with.
112 *
113 * @param int $blog_id The WordPress.com blog ID.
114 * @return array
115 */
116 protected function get_initial_state( $blog_id ) {
117 global $wp_version;
118
119 $host = new Host();
120 $capabilities = $this->get_current_user_capabilities();
121 $can_blaze = class_exists( 'Automattic\Jetpack\Blaze' ) && Blaze::should_initialize()['can_init'];
122
123 return array(
124 'currentUser' => array(
125 'id' => 1000,
126 'user' => array(
127 'ID' => 1000,
128 'username' => 'no-user',
129 ),
130 'capabilities' => array(
131 "$blog_id" => $capabilities,
132 ),
133 ),
134 'sites' => array(
135 'items' => array(
136 "$blog_id" => array(
137 'ID' => $blog_id,
138 'URL' => site_url(),
139 // Atomic and jetpack sites should return true.
140 'jetpack' => ! $host->is_wpcom_simple(),
141 'visible' => true,
142 'capabilities' => $capabilities,
143 'products' => Jetpack_Plan::get_products(),
144 'plan' => $this->get_plan(),
145 'options' => array(
146 'wordads' => ( new Modules() )->is_active( 'wordads' ),
147 'admin_url' => admin_url(),
148 'gmt_offset' => $this->get_gmt_offset(),
149 'is_automated_transfer' => $this->is_automated_transfer( $blog_id ),
150 'is_wpcom_atomic' => $host->is_woa_site(),
151 'is_wpcom_simple' => $host->is_wpcom_simple(),
152 'is_vip' => $host->is_vip_site(),
153 'jetpack_version' => defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : '',
154 'stats_admin_version' => Main::VERSION,
155 'software_version' => $wp_version,
156 'can_blaze' => $can_blaze,
157 ),
158 ),
159 ),
160 'features' => array( "$blog_id" => array( 'data' => $this->get_plan_features() ) ),
161 ),
162 );
163 }
164
165 /**
166 * Defines a filter to set whether a site is an automated_transfer site or not.
167 *
168 * Default is false. On Atomic, this is set to true by `wpcomsh`.
169 *
170 * @param int $blog_id Blog ID.
171 *
172 * @return bool
173 */
174 public function is_automated_transfer( $blog_id ) {
175 /**
176 * Filter if a site is an automated-transfer site.
177 *
178 * @module json-api
179 *
180 * @since 6.4.0
181 *
182 * @param bool is_automated_transfer( $this->blog_id )
183 * @param int $blog_id Blog identifier.
184 */
185 return apply_filters(
186 'jetpack_site_automated_transfer',
187 false,
188 $blog_id
189 );
190 }
191
192 /**
193 * Get the current site GMT Offset.
194 *
195 * @return float The current site GMT Offset by hours.
196 */
197 protected function get_gmt_offset() {
198 return (float) get_option( 'gmt_offset' );
199 }
200
201 /**
202 * Page base for the Calypso admin page.
203 */
204 protected function get_admin_path() {
205 if ( ! isset( $_SERVER['PHP_SELF'] ) || ! isset( $_SERVER['QUERY_STRING'] ) ) {
206 $parsed = wp_parse_url( admin_url( 'admin.php?page=stats' ) );
207 return $parsed['path'] . '?' . $parsed['query'];
208 }
209 // We do this because page.js requires the exactly page base to be set otherwise it will not work properly.
210 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
211 return wp_unslash( $_SERVER['PHP_SELF'] ) . '?' . wp_unslash( $_SERVER['QUERY_STRING'] );
212 }
213
214 /**
215 * Get locale acceptable by Calypso.
216 */
217 protected function get_user_locale() {
218 /**
219 * In WP, locales are formatted as LANGUAGE_REGION, for example `en`, `en_US`, `es_AR`,
220 * but Calypso expects language-region, e.g. `en-us`, `en`, `es-ar`. So we need to convert
221 * them to lower case and replace the underscore with a dash.
222 */
223 $locale = strtolower( get_user_locale() );
224 $locale = str_replace( '_', '-', $locale );
225
226 return $locale;
227 }
228
229 /**
230 * Get the features of the current plan.
231 */
232 protected function get_plan_features() {
233 $plan = Jetpack_Plan::get();
234 if ( empty( $plan['features'] ) ) {
235 return array();
236 }
237 return $plan['features'];
238 }
239
240 /**
241 * Get the current plan.
242 *
243 * @return array
244 */
245 protected function get_plan() {
246 $plan = Jetpack_Plan::get();
247 unset( $plan['features'] );
248 unset( $plan['supports'] );
249 return $plan;
250 }
251
252 /**
253 * Get the capabilities of the current user.
254 *
255 * @return array An array of capabilities.
256 */
257 protected function get_current_user_capabilities() {
258 return array(
259 'edit_pages' => current_user_can( 'edit_pages' ),
260 'edit_posts' => current_user_can( 'edit_posts' ),
261 'edit_others_posts' => current_user_can( 'edit_others_posts' ),
262 'edit_others_pages' => current_user_can( 'edit_others_pages' ),
263 'delete_posts' => current_user_can( 'delete_posts' ),
264 'delete_others_posts' => current_user_can( 'delete_others_posts' ),
265 'edit_theme_options' => current_user_can( 'edit_theme_options' ),
266 'edit_users' => current_user_can( 'edit_users' ),
267 'list_users' => current_user_can( 'list_users' ),
268 'manage_categories' => current_user_can( 'manage_categories' ),
269 'manage_options' => current_user_can( 'manage_options' ),
270 'moderate_comments' => current_user_can( 'moderate_comments' ),
271 'activate_wordads' => current_user_can( 'manage_options' ),
272 'promote_users' => current_user_can( 'promote_users' ),
273 'publish_posts' => current_user_can( 'publish_posts' ),
274 'upload_files' => current_user_can( 'upload_files' ),
275 'delete_users' => current_user_can( 'delete_users' ),
276 'remove_users' => current_user_can( 'remove_users' ),
277 'own_site' => current_user_can( 'manage_options' ), // Administrators are considered owners on site.
278 'view_stats' => current_user_can( 'view_stats' ),
279 'activate_plugins' => current_user_can( 'activate_plugins' ),
280 );
281 }
282 }
283