PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 7.2.1
Jetpack – WP Security, Backup, Speed, & Growth v7.2.1
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 / class.jetpack-jitm.php
jetpack Last commit date
3rd-party 7 years ago _inc 7 years ago bin 7 years ago css 7 years ago extensions 7 years ago images 7 years ago json-endpoints 7 years ago languages 7 years ago logs 9 years ago modules 7 years ago sal 7 years ago scss 7 years ago sync 7 years ago views 7 years ago .svnignore 12 years ago CODE-OF-CONDUCT.md 9 years ago changelog.txt 7 years ago class.frame-nonce-preview.php 9 years ago class.jetpack-admin.php 7 years ago class.jetpack-affiliate.php 7 years ago class.jetpack-autoupdate.php 8 years ago class.jetpack-bbpress-json-api-compat.php 9 years ago class.jetpack-cli.php 7 years ago class.jetpack-client-server.php 8 years ago class.jetpack-client.php 7 years ago class.jetpack-connection-banner.php 7 years ago class.jetpack-constants.php 8 years ago class.jetpack-data.php 7 years ago class.jetpack-debugger.php 7 years ago class.jetpack-error.php 10 years ago class.jetpack-gutenberg.php 7 years ago class.jetpack-heartbeat.php 7 years ago class.jetpack-idc.php 8 years ago class.jetpack-ixr-client.php 10 years ago class.jetpack-jitm.php 7 years ago class.jetpack-modules-list-table.php 7 years ago class.jetpack-network-sites-list-table.php 9 years ago class.jetpack-network.php 7 years ago class.jetpack-options.php 7 years ago class.jetpack-plan.php 7 years ago class.jetpack-post-images.php 7 years ago class.jetpack-signature.php 7 years ago class.jetpack-tracks.php 7 years ago class.jetpack-twitter-cards.php 7 years ago class.jetpack-user-agent.php 8 years ago class.jetpack-xmlrpc-server.php 7 years ago class.jetpack.php 7 years ago class.json-api-endpoints.php 7 years ago class.json-api.php 7 years ago class.photon.php 7 years ago composer.json 7 years ago functions.compat.php 7 years ago functions.gallery.php 8 years ago functions.global.php 7 years ago functions.opengraph.php 7 years ago functions.photon.php 7 years ago jetpack.php 7 years ago json-api-config.php 10 years ago json-endpoints.php 7 years ago locales.php 7 years ago readme.txt 7 years ago require-lib.php 7 years ago uninstall.php 8 years ago wpml-config.xml 10 years ago
class.jetpack-jitm.php
409 lines
1 <?php
2
3 /**
4 * Jetpack just in time messaging through out the admin
5 *
6 * @since 3.7.0
7 */
8 class Jetpack_JITM {
9
10 /**
11 * @var Jetpack_JITM
12 **/
13 private static $instance = null;
14
15 /**
16 * Initializes the class, or returns the singleton
17 *
18 * @return Jetpack_JITM | false
19 */
20 static function init() {
21 /**
22 * Filter to turn off all just in time messages
23 *
24 * @since 3.7.0
25 * @since 5.4.0 Correct docblock to reflect default arg value
26 *
27 * @param bool false Whether to show just in time messages.
28 */
29 if ( ! apply_filters( 'jetpack_just_in_time_msgs', false ) ) {
30 return false;
31 }
32
33 if ( is_null( self::$instance ) ) {
34 self::$instance = new Jetpack_JITM;
35 }
36
37 return self::$instance;
38 }
39
40 /**
41 * Jetpack_JITM constructor.
42 */
43 private function __construct() {
44 if ( ! Jetpack::is_active() || Jetpack::is_development_mode() ) {
45 return;
46 }
47 add_action( 'current_screen', array( $this, 'prepare_jitms' ) );
48 }
49
50 /**
51 * Get's the Jetpack emblem
52 *
53 * @return string The Jetpack emblem
54 */
55 function get_emblem() {
56 return '<div class="jp-emblem">' . Jetpack::get_jp_emblem() . '</div>';
57 }
58
59 /**
60 * Prepare actions according to screen and post type.
61 *
62 * @since 3.8.2
63 *
64 * @uses Jetpack_Autoupdate::get_possible_failures()
65 *
66 * @param object $screen
67 */
68 function prepare_jitms( $screen ) {
69 if ( ! in_array( $screen->id, array(
70 'jetpack_page_stats',
71 'jetpack_page_akismet-key-config',
72 'admin_page_jetpack_modules'
73 ) ) ) {
74 add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
75 add_action( 'admin_notices', array( $this, 'ajax_message' ) );
76 add_action( 'edit_form_top', array( $this, 'ajax_message' ) );
77 }
78 }
79
80 /**
81 * A special filter for WooCommerce, to set a message based on local state.
82 *
83 * @param $message string The current message
84 *
85 * @return array The new message
86 */
87 static function jitm_woocommerce_services_msg( $content ) {
88 if ( ! function_exists( 'wc_get_base_location' ) ) {
89 return $content;
90 }
91
92 $base_location = wc_get_base_location();
93
94 switch ( $base_location['country'] ) {
95 case 'US':
96 $content->message = esc_html__( 'New free service: Show USPS shipping rates on your store! Added bonus: print shipping labels without leaving WooCommerce.', 'jetpack' );
97 break;
98 case 'CA':
99 $content->message = esc_html__( 'New free service: Show Canada Post shipping rates on your store!', 'jetpack' );
100 break;
101 default:
102 $content->message = '';
103 }
104
105 return $content;
106 }
107
108 /**
109 * A special filter for WooCommerce Call To Action button
110 *
111 * @param $CTA string The existing CTA
112 *
113 * @return string The new CTA
114 */
115 static function jitm_jetpack_woo_services_install( $CTA ) {
116 return wp_nonce_url( add_query_arg( array(
117 'wc-services-action' => 'install'
118 ), admin_url( 'admin.php?page=wc-settings' ) ), 'wc-services-install' );
119 }
120
121 /**
122 * A special filter for WooCommerce Call To Action button
123 *
124 * @param $CTA string The existing CTA
125 *
126 * @return string The new CTA
127 */
128 static function jitm_jetpack_woo_services_activate( $CTA ) {
129 return wp_nonce_url( add_query_arg( array(
130 'wc-services-action' => 'activate'
131 ), admin_url( 'admin.php?page=wc-settings' ) ), 'wc-services-install' );
132 }
133
134 /**
135 * Injects the dom to show a JITM inside of
136 */
137 function ajax_message() {
138 $message_path = $this->get_message_path();
139 $query_string = _http_build_query( $_GET, '', ',' );
140 $current_screen = wp_unslash( $_SERVER['REQUEST_URI'] );
141 ?>
142 <div class="jetpack-jitm-message"
143 data-nonce="<?php echo wp_create_nonce( 'wp_rest' ) ?>"
144 data-message-path="<?php echo esc_attr( $message_path ) ?>"
145 data-query="<?php echo urlencode_deep( $query_string ) ?>"
146 data-redirect="<?php echo urlencode_deep( $current_screen ) ?>"
147 ></div>
148 <?php
149 }
150
151 /**
152 * Get's the current message path for display of a JITM
153 *
154 * @return string The message path
155 */
156 function get_message_path() {
157 $screen = get_current_screen();
158
159 return 'wp:' . $screen->id . ':' . current_filter();
160 }
161
162 /**
163 * Function to enqueue jitm css and js
164 */
165 function jitm_enqueue_files() {
166 $min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
167 wp_register_style(
168 'jetpack-jitm-css',
169 plugins_url( "css/jetpack-admin-jitm{$min}.css", JETPACK__PLUGIN_FILE ),
170 false,
171 JETPACK__VERSION .
172 '-201243242'
173 );
174 wp_style_add_data( 'jetpack-jitm-css', 'rtl', 'replace' );
175 wp_style_add_data( 'jetpack-jitm-css', 'suffix', $min );
176 wp_enqueue_style( 'jetpack-jitm-css' );
177
178 wp_enqueue_script(
179 'jetpack-jitm-new',
180 Jetpack::get_file_url_for_environment( '_inc/build/jetpack-jitm.min.js', '_inc/jetpack-jitm.js' ),
181 array( 'jquery' ),
182 JETPACK__VERSION,
183 true
184 );
185 wp_localize_script( 'jetpack-jitm-new', 'jitm_config', array(
186 'api_root' => esc_url_raw( rest_url() ),
187 'activate_module_text' => esc_html__( 'Activate', 'jetpack' ),
188 'activated_module_text' => esc_html__( 'Activated', 'jetpack' ),
189 'activating_module_text' => esc_html__( 'Activating', 'jetpack' ),
190 ) );
191 }
192
193 /**
194 * Dismisses a JITM feature class so that it will no longer be shown
195 *
196 * @param $id string The id of the JITM that was dismissed
197 * @param $feature_class string The feature class of the JITM that was dismissed
198 *
199 * @return bool Always true
200 */
201 function dismiss( $id, $feature_class ) {
202 JetpackTracking::record_user_event( 'jitm_dismiss_client', array(
203 'jitm_id' => $id,
204 'feature_class' => $feature_class,
205 ) );
206
207
208 $hide_jitm = Jetpack_Options::get_option( 'hide_jitm' );
209 if ( ! is_array( $hide_jitm ) ) {
210 $hide_jitm = array();
211 }
212
213 if ( isset( $hide_jitm[ $feature_class ] ) ) {
214 if ( ! is_array( $hide_jitm[ $feature_class ] ) ) {
215 $hide_jitm[ $feature_class ] = array( 'last_dismissal' => 0, 'number' => 0 );
216 }
217 } else {
218 $hide_jitm[ $feature_class ] = array( 'last_dismissal' => 0, 'number' => 0 );
219 }
220
221 $number = $hide_jitm[ $feature_class ]['number'];
222
223 $hide_jitm[ $feature_class ] = array( 'last_dismissal' => time(), 'number' => $number + 1 );
224
225 Jetpack_Options::update_option( 'hide_jitm', $hide_jitm );
226
227 return true;
228 }
229
230 /**
231 * Asks the wpcom API for the current message to display keyed on query string and message path
232 *
233 * @param $message_path string The message path to ask for
234 * @param $query string The query string originally from the front end
235 *
236 * @return array The JITM's to show, or an empty array if there is nothing to show
237 */
238 function get_messages( $message_path, $query ) {
239 // custom filters go here
240 add_filter( 'jitm_woocommerce_services_msg', array( 'Jetpack_JITM', 'jitm_woocommerce_services_msg' ) );
241 add_filter( 'jitm_jetpack_woo_services_install', array( 'Jetpack_JITM', 'jitm_jetpack_woo_services_install' ) );
242 add_filter( 'jitm_jetpack_woo_services_activate', array(
243 'Jetpack_JITM',
244 'jitm_jetpack_woo_services_activate'
245 ) );
246
247 $user = wp_get_current_user();
248
249 // unauthenticated or invalid requests just bail
250 if ( ! $user ) {
251 return array();
252 }
253
254 require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-client.php' );
255
256 $site_id = Jetpack_Options::get_option( 'id' );
257
258 // build our jitm request
259 $path = add_query_arg( array(
260 'external_user_id' => urlencode_deep( $user->ID ),
261 'query_string' => urlencode_deep( $query ),
262 'mobile_browser' => jetpack_is_mobile( 'smart' ) ? 1 : 0,
263 ), sprintf( '/sites/%d/jitm/%s', $site_id, $message_path ) );
264
265 // attempt to get from cache
266 $envelopes = get_transient( 'jetpack_jitm_' . substr( md5( $path ), 0, 31 ) );
267
268 // if something is in the cache and it was put in the cache after the last sync we care about, use it
269 $use_cache = false;
270
271 /** This filter is documented in class.jetpack.php */
272 if ( apply_filters( 'jetpack_just_in_time_msg_cache', false ) ) {
273 $use_cache = true;
274 }
275
276 if ( $use_cache ) {
277 $last_sync = (int) get_transient( 'jetpack_last_plugin_sync' );
278 $from_cache = $envelopes && $last_sync > 0 && $last_sync < $envelopes['last_response_time'];
279 } else {
280 $from_cache = false;
281 }
282
283 // otherwise, ask again
284 if ( ! $from_cache ) {
285 $wpcom_response = Jetpack_Client::wpcom_json_api_request_as_blog(
286 $path,
287 '2',
288 array(
289 'user_id' => $user->ID,
290 'user_roles' => implode( ',', $user->roles ),
291 ),
292 null,
293 'wpcom'
294 );
295
296 // silently fail...might be helpful to track it?
297 if ( is_wp_error( $wpcom_response ) ) {
298 return array();
299 }
300
301 $envelopes = json_decode( $wpcom_response['body'] );
302
303 if ( ! is_array( $envelopes ) ) {
304 return array();
305 }
306
307 $expiration = isset( $envelopes[0] ) ? $envelopes[0]->ttl : 300;
308
309 // do not cache if expiration is 0 or we're not using the cache
310 if ( 0 != $expiration && $use_cache ) {
311 $envelopes['last_response_time'] = time();
312
313 set_transient( 'jetpack_jitm_' . substr( md5( $path ), 0, 31 ), $envelopes, $expiration );
314 }
315 }
316
317 $hidden_jitms = Jetpack_Options::get_option( 'hide_jitm' );
318 unset( $envelopes['last_response_time'] );
319
320 /**
321 * Allow adding your own custom JITMs after a set of JITMs has been received.
322 *
323 * @since 6.9.0
324 *
325 * @param array $envelopes array of existing JITMs.
326 */
327 $envelopes = apply_filters( 'jetpack_jitm_received_envelopes', $envelopes );
328
329 foreach ( $envelopes as $idx => &$envelope ) {
330
331 $dismissed_feature = isset( $hidden_jitms[ $envelope->feature_class ] ) && is_array( $hidden_jitms[ $envelope->feature_class ] ) ? $hidden_jitms[ $envelope->feature_class ] : null;
332
333 // if the this feature class has been dismissed and the request has not passed the ttl, skip it as it's been dismissed
334 if ( is_array( $dismissed_feature ) && ( time() - $dismissed_feature['last_dismissal'] < $envelope->expires || $dismissed_feature['number'] >= $envelope->max_dismissal ) ) {
335 unset( $envelopes[ $idx ] );
336 continue;
337 }
338
339 JetpackTracking::record_user_event( 'jitm_view_client', array(
340 'jitm_id' => $envelope->id,
341 ) );
342
343 $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
344
345 $url_params = array(
346 'source' => "jitm-$envelope->id",
347 'site' => $normalized_site_url,
348 'u' => $user->ID,
349 );
350
351 if ( ! class_exists( 'Jetpack_Affiliate' ) ) {
352 require_once JETPACK__PLUGIN_DIR . 'class.jetpack-affiliate.php';
353 }
354 // Get affiliate code and add it to the array of URL parameters
355 if ( '' !== ( $aff = Jetpack_Affiliate::init()->get_affiliate_code() ) ) {
356 $url_params['aff'] = $aff;
357 }
358
359 $envelope->url = add_query_arg( $url_params, 'https://jetpack.com/redirect/' );
360
361 $envelope->jitm_stats_url = Jetpack::build_stats_url( array( 'x_jetpack-jitm' => $envelope->id ) );
362
363 if ( $envelope->CTA->hook ) {
364 $envelope->url = apply_filters( 'jitm_' . $envelope->CTA->hook, $envelope->url );
365 unset( $envelope->CTA->hook );
366 }
367
368 if ( isset( $envelope->content->hook ) ) {
369 $envelope->content = apply_filters( 'jitm_' . $envelope->content->hook, $envelope->content );
370 unset( $envelope->content->hook );
371 }
372
373 // no point in showing an empty message
374 if ( empty( $envelope->content->message ) ) {
375 unset( $envelopes[ $idx ] );
376 continue;
377 }
378
379 switch ( $envelope->content->icon ) {
380 case 'jetpack':
381 $envelope->content->icon = '<div class="jp-emblem">' . Jetpack::get_jp_emblem() . '</div>';
382 break;
383 case 'woocommerce':
384 $envelope->content->icon = '<div class="jp-emblem"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 168 100" xml:space="preserve" enable-background="new 0 0 168 100" width="50" height="30"><style type="text/css">
385 .st0{clip-path:url(#SVGID_2_);enable-background:new ;}
386 .st1{clip-path:url(#SVGID_4_);}
387 .st2{clip-path:url(#SVGID_6_);}
388 .st3{clip-path:url(#SVGID_8_);fill:#8F567F;}
389 .st4{clip-path:url(#SVGID_10_);fill:#FFFFFE;}
390 .st5{clip-path:url(#SVGID_12_);fill:#FFFFFE;}
391 .st6{clip-path:url(#SVGID_14_);fill:#FFFFFE;}
392 </style><g><defs><polygon id="SVGID_1_" points="83.8 100 0 100 0 0.3 83.8 0.3 167.6 0.3 167.6 100 "/></defs><clipPath id="SVGID_2_"><use xlink:href="#SVGID_1_" overflow="visible"/></clipPath><g class="st0"><g><defs><rect id="SVGID_3_" width="168" height="100"/></defs><clipPath id="SVGID_4_"><use xlink:href="#SVGID_3_" overflow="visible"/></clipPath><g class="st1"><defs><path id="SVGID_5_" d="M15.6 0.3H152c8.6 0 15.6 7 15.6 15.6v52c0 8.6-7 15.6-15.6 15.6h-48.9l6.7 16.4L80.2 83.6H15.6C7 83.6 0 76.6 0 67.9v-52C0 7.3 7 0.3 15.6 0.3"/></defs><clipPath id="SVGID_6_"><use xlink:href="#SVGID_5_" overflow="visible"/></clipPath><g class="st2"><defs><rect id="SVGID_7_" width="168" height="100"/></defs><clipPath id="SVGID_8_"><use xlink:href="#SVGID_7_" overflow="visible"/></clipPath><rect x="-10" y="-9.7" class="st3" width="187.6" height="119.7"/></g></g></g></g></g><g><defs><path id="SVGID_9_" d="M8.4 14.5c1-1.3 2.4-2 4.3-2.1 3.5-0.2 5.5 1.4 6 4.9 2.1 14.3 4.4 26.4 6.9 36.4l15-28.6c1.4-2.6 3.1-3.9 5.2-4.1 3-0.2 4.9 1.7 5.6 5.7 1.7 9.1 3.9 16.9 6.5 23.4 1.8-17.4 4.8-30 9-37.7 1-1.9 2.5-2.9 4.5-3 1.6-0.1 3 0.3 4.3 1.4 1.3 1 2 2.3 2.1 3.9 0.1 1.2-0.1 2.3-0.7 3.3 -2.7 5-4.9 13.2-6.6 24.7 -1.7 11.1-2.3 19.8-1.9 26.1 0.1 1.7-0.1 3.2-0.8 4.5 -0.8 1.5-2 2.4-3.7 2.5 -1.8 0.1-3.6-0.7-5.4-2.5C52.4 66.7 47.4 57 43.7 44.1c-4.4 8.8-7.7 15.3-9.9 19.7 -4 7.7-7.5 11.7-10.3 11.9 -1.9 0.1-3.5-1.4-4.8-4.7 -3.5-9-7.3-26.3-11.3-52C7.1 17.3 7.5 15.8 8.4 14.5"/></defs><clipPath id="SVGID_10_"><use xlink:href="#SVGID_9_" overflow="visible"/></clipPath><rect x="-2.7" y="-0.6" class="st4" width="90.6" height="86.4"/></g><g><defs><path id="SVGID_11_" d="M155.6 25.2c-2.5-4.3-6.1-6.9-11-7.9 -1.3-0.3-2.5-0.4-3.7-0.4 -6.6 0-11.9 3.4-16.1 10.2 -3.6 5.8-5.3 12.3-5.3 19.3 0 5.3 1.1 9.8 3.3 13.6 2.5 4.3 6.1 6.9 11 7.9 1.3 0.3 2.5 0.4 3.7 0.4 6.6 0 12-3.4 16.1-10.2 3.6-5.9 5.3-12.4 5.3-19.4C159 33.4 157.9 28.9 155.6 25.2zM147 44.2c-0.9 4.5-2.7 7.9-5.2 10.1 -2 1.8-3.9 2.5-5.5 2.2 -1.7-0.3-3-1.8-4-4.4 -0.8-2.1-1.2-4.2-1.2-6.2 0-1.7 0.2-3.4 0.5-5 0.6-2.8 1.8-5.5 3.6-8.1 2.3-3.3 4.7-4.8 7.1-4.2 1.7 0.3 3 1.8 4 4.4 0.8 2.1 1.2 4.2 1.2 6.2C147.5 40.9 147.3 42.6 147 44.2z"/></defs><clipPath id="SVGID_12_"><use xlink:href="#SVGID_11_" overflow="visible"/></clipPath><rect x="109.6" y="6.9" class="st5" width="59.4" height="71.4"/></g><g><defs><path id="SVGID_13_" d="M112.7 25.2c-2.5-4.3-6.1-6.9-11-7.9 -1.3-0.3-2.5-0.4-3.7-0.4 -6.6 0-11.9 3.4-16.1 10.2 -3.5 5.8-5.3 12.3-5.3 19.3 0 5.3 1.1 9.8 3.3 13.6 2.5 4.3 6.1 6.9 11 7.9 1.3 0.3 2.5 0.4 3.7 0.4 6.6 0 12-3.4 16.1-10.2 3.5-5.9 5.3-12.4 5.3-19.4C116 33.4 114.9 28.9 112.7 25.2zM104.1 44.2c-0.9 4.5-2.7 7.9-5.2 10.1 -2 1.8-3.9 2.5-5.5 2.2 -1.7-0.3-3-1.8-4-4.4 -0.8-2.1-1.2-4.2-1.2-6.2 0-1.7 0.2-3.4 0.5-5 0.6-2.8 1.8-5.5 3.6-8.1 2.3-3.3 4.7-4.8 7.1-4.2 1.7 0.3 3 1.8 4 4.4 0.8 2.1 1.2 4.2 1.2 6.2C104.6 40.9 104.4 42.6 104.1 44.2z"/></defs><clipPath id="SVGID_14_"><use xlink:href="#SVGID_13_" overflow="visible"/></clipPath><rect x="66.7" y="6.9" class="st6" width="59.4" height="71.4"/></g></svg></div>';
393 break;
394 default:
395 $envelope->content->icon = '';
396 break;
397 }
398
399 $jetpack = Jetpack::init();
400 $jetpack->stat( 'jitm', $envelope->id . '-viewed-' . JETPACK__VERSION );
401 $jetpack->do_stats( 'server_side' );
402 }
403
404 return $envelopes;
405 }
406 }
407
408 add_action( 'init', array( 'Jetpack_JITM', 'init' ) );
409