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-blaze / src / class-dashboard.php
jetpack / jetpack_vendor / automattic / jetpack-blaze / src Last commit date
class-blaze.php 1 month ago class-dashboard-config-data.php 1 month ago class-dashboard-rest-controller.php 1 month ago class-dashboard.php 3 days ago class-rest-controller.php 1 month ago
class-dashboard.php
229 lines
1 <?php
2 /**
3 * A class that adds a Blaze dashboard to wp-admin.
4 *
5 * @since 0.7.0
6 *
7 * @package automattic/jetpack-blaze
8 */
9
10 namespace Automattic\Jetpack\Blaze;
11
12 use Automattic\Jetpack\Assets;
13
14 /**
15 * Responsible for adding a Blaze dashboard menu to wp-admin.
16 * The screen content itself is rendered remotely.
17 */
18 class Dashboard {
19 /**
20 * Package version.
21 *
22 * @var string
23 */
24 const PACKAGE_VERSION = '0.28.4';
25
26 /**
27 * List of dependencies needed to render the dashboard in wp-admin.
28 *
29 * @var array
30 */
31 const JS_DEPENDENCIES = array( 'lodash', 'react', 'react-dom', 'wp-components', 'wp-compose', 'wp-i18n', 'wp-is-shallow-equal', 'wp-primitives', 'wp-url', 'moment' );
32
33 /**
34 * URL where we load the Blaze dashboard remotely.
35 *
36 * @var string
37 */
38 const CDN_URL = 'https://widgets.wp.com/blaze-dashboard/%s/%s';
39
40 /**
41 * Script handle for the JS file we enqueue in the dashboard page.
42 *
43 * @var string
44 */
45 const SCRIPT_HANDLE = 'jetpack-blaze-dashboard';
46
47 /**
48 * We bump the asset version when the Jetpack back end is not compatible anymore.
49 *
50 * @var string
51 */
52 const BLAZEDASH_VERSION = 'v1';
53
54 /**
55 * Cache key for the cache buster.
56 *
57 * @var string
58 */
59 const BLAZEDASH_CACHE_BUSTER_CACHE_KEY = 'jetpack_blaze_admin_asset_cache_buster';
60
61 /**
62 * Blaze dashboard admin page. Default is admin.php.
63 *
64 * @var string
65 */
66 private $admin_page;
67
68 /**
69 * Blaze dashboard menu slug. Default is 'advertising'.
70 *
71 * @var string
72 */
73 private $menu_slug;
74
75 /**
76 * Blaze dashboard css prefix. Default is 'jp-blaze'.
77 *
78 * @var string
79 */
80 private $css_prefix;
81
82 /**
83 * Dashboard constructor.
84 *
85 * @param string $admin_page Dashboard admin page. Default is admin.php.
86 * @param string $menu_slug Dashboard menu slug. Default is 'advertising'.
87 * @param string $css_prefix Dashboard css prefix. Default is 'jp-blaze'.
88 */
89 public function __construct( $admin_page = 'admin.php', $menu_slug = 'advertising', $css_prefix = 'jp-blaze' ) {
90 $this->admin_page = $admin_page;
91 $this->menu_slug = $menu_slug;
92 $this->css_prefix = $css_prefix;
93 }
94
95 /**
96 * Override render funtion
97 *
98 * @return void
99 */
100 public function render() {
101 ?>
102 <div id="wpcom" class="<?php echo esc_attr( $this->css_prefix ); ?>-dashboard" style="min-height: calc(100vh - 100px);">
103 <div class="hide-if-js"><?php esc_html_e( 'Your Jetpack Blaze dashboard requires JavaScript to function properly.', 'jetpack-blaze' ); ?></div>
104 <div class="hide-if-no-js" style="height: 100%">
105 <img
106 class="<?php echo esc_attr( $this->css_prefix ); ?>-dashboard-loading-spinner"
107 width="32"
108 height="32"
109 style="position: absolute; left: 50%; top: 50%;"
110 alt=<?php echo esc_attr( __( 'Loading', 'jetpack-blaze' ) ); ?>
111 src="//en.wordpress.com/i/loading/loading-64.gif"
112 />
113 </div>
114 </div>
115 <script>
116 jQuery(document).ready(function($) {
117 // Load SVG sprite.
118 $.get("https://widgets.wp.com/blaze-dashboard/common/gridicons-506499ddac13811fee8e.svg", function(data) {
119 var div = document.createElement("div");
120 div.innerHTML = new XMLSerializer().serializeToString(data.documentElement);
121 div.style = 'display: none';
122 document.body.insertBefore(div, document.body.childNodes[0]);
123 });
124 // we intercept on all anchor tags and change it to hashbang style.
125 $("#wpcom").on('click', 'a', function (e) {
126 const link = e && e.currentTarget && e.currentTarget.attributes && e.currentTarget.attributes.href && e.currentTarget.attributes.href.value;
127 if (link && link.startsWith( '/<?php echo esc_attr( $this->menu_slug ); ?>' ) ) {
128 location.hash = `#!${link}`;
129 return false;
130 }
131 });
132 });
133 </script>
134 <?php
135 }
136
137 /**
138 * Initialize the admin resources.
139 */
140 public function admin_init() {
141 add_action( 'admin_enqueue_scripts', array( $this, 'load_admin_scripts' ) );
142 }
143
144 /**
145 * Load the admin scripts.
146 *
147 * @param string $hook The current admin page.
148 */
149 public function load_admin_scripts( $hook ) {
150 if ( ! str_ends_with( $hook, 'page_' . $this->menu_slug ) ) {
151 return;
152 }
153
154 $asset_handle = self::SCRIPT_HANDLE;
155 $asset_name = 'build.min';
156
157 $dashboard_config = new Dashboard_Config_Data( $this->admin_page, $this->menu_slug );
158
159 $config_data = $dashboard_config->get_data();
160
161 if ( file_exists( __DIR__ . "/../dist/{$asset_name}.js" ) ) {
162 // Load local assets for the convenience of development.
163 Assets::register_script(
164 $asset_handle,
165 "../dist/{$asset_name}.js",
166 __FILE__,
167 array(
168 'enqueue' => true,
169 'in_footer' => true,
170 'textdomain' => 'jetpack-blaze',
171 )
172 );
173 } else {
174 $css_url = $asset_name . ( is_rtl() ? '.rtl' : '' ) . '.css';
175 $css_handle = $asset_handle . '-style';
176
177 wp_enqueue_script(
178 $asset_handle,
179 sprintf( self::CDN_URL, self::BLAZEDASH_VERSION, "{$asset_name}.js" ),
180 self::JS_DEPENDENCIES,
181 $this->get_cdn_asset_cache_buster(),
182 true
183 );
184 wp_enqueue_style(
185 $css_handle,
186 sprintf( self::CDN_URL, self::BLAZEDASH_VERSION, $css_url ),
187 array(),
188 $this->get_cdn_asset_cache_buster()
189 );
190 }
191
192 wp_add_inline_script(
193 $asset_handle,
194 $dashboard_config->get_js_config_data( $config_data ),
195 'before'
196 );
197 }
198
199 /**
200 * Returns cache buster string for assets.
201 * Development mode doesn't need this, as it's handled by `Assets` class.
202 */
203 protected function get_cdn_asset_cache_buster() {
204 // Use cached cache buster in production.
205 $remote_asset_version = get_transient( self::BLAZEDASH_CACHE_BUSTER_CACHE_KEY );
206 if ( ! empty( $remote_asset_version ) ) {
207 return $remote_asset_version;
208 }
209
210 // If no cached cache buster, we fetch it from CDN and set to transient.
211 $response = wp_remote_get( sprintf( self::CDN_URL, self::BLAZEDASH_VERSION, 'build_meta.json' ), array( 'timeout' => 5 ) );
212
213 if ( is_wp_error( $response ) ) {
214 // fallback to the package version.
215 return self::PACKAGE_VERSION;
216 }
217
218 $build_meta = json_decode( wp_remote_retrieve_body( $response ), true );
219 if ( ! empty( $build_meta['cache_buster'] ) ) {
220 // Cache the cache buster for 15 mins.
221 set_transient( self::BLAZEDASH_CACHE_BUSTER_CACHE_KEY, $build_meta['cache_buster'], 15 * MINUTE_IN_SECONDS );
222 return $build_meta['cache_buster'];
223 }
224
225 // fallback to the package version.
226 return self::PACKAGE_VERSION;
227 }
228 }
229