PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 6.0.4
Jetpack – WP Security, Backup, Speed, & Growth v6.0.4
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 8 years ago _inc 1 year ago bin 8 years ago css 8 years ago images 1 year ago json-endpoints 3 years ago languages 8 years ago modules 1 year ago sal 8 years ago scss 8 years ago sync 8 years ago views 8 years ago .svnignore 12 years ago CODE-OF-CONDUCT.md 9 years ago changelog.txt 8 years ago class.frame-nonce-preview.php 9 years ago class.jetpack-admin.php 8 years ago class.jetpack-autoupdate.php 9 years ago class.jetpack-bbpress-json-api-compat.php 9 years ago class.jetpack-cli.php 8 years ago class.jetpack-client-server.php 8 years ago class.jetpack-client.php 8 years ago class.jetpack-connection-banner.php 8 years ago class.jetpack-constants.php 8 years ago class.jetpack-data.php 9 years ago class.jetpack-debugger.php 8 years ago class.jetpack-error.php 10 years ago class.jetpack-heartbeat.php 9 years ago class.jetpack-idc.php 8 years ago class.jetpack-ixr-client.php 10 years ago class.jetpack-jitm.php 8 years ago class.jetpack-modules-list-table.php 8 years ago class.jetpack-network-sites-list-table.php 9 years ago class.jetpack-network.php 8 years ago class.jetpack-options.php 8 years ago class.jetpack-post-images.php 8 years ago class.jetpack-signature.php 8 years ago class.jetpack-tracks.php 8 years ago class.jetpack-twitter-cards.php 8 years ago class.jetpack-user-agent.php 8 years ago class.jetpack-xmlrpc-server.php 8 years ago class.jetpack.php 8 years ago class.json-api-endpoints.php 3 years ago class.json-api.php 8 years ago class.photon.php 8 years ago composer.json 8 years ago functions.compat.php 9 years ago functions.gallery.php 8 years ago functions.global.php 8 years ago functions.opengraph.php 8 years ago functions.photon.php 9 years ago jetpack.php 1 year ago json-api-config.php 10 years ago json-endpoints.php 8 years ago locales.php 9 years ago phpcs.xml 8 years ago readme.txt 1 year ago require-lib.php 8 years ago uninstall.php 8 years ago wpml-config.xml 10 years ago
class.jetpack-jitm.php
380 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 ) );
188 }
189
190 /**
191 * Dismisses a JITM feature class so that it will no longer be shown
192 *
193 * @param $id string The id of the JITM that was dismissed
194 * @param $feature_class string The feature class of the JITM that was dismissed
195 *
196 * @return bool Always true
197 */
198 function dismiss( $id, $feature_class ) {
199 JetpackTracking::record_user_event( 'jitm_dismiss_client', array(
200 'jitm_id' => $id,
201 'feature_class' => $feature_class,
202 ) );
203
204
205 $hide_jitm = Jetpack_Options::get_option( 'hide_jitm' );
206 if ( ! is_array( $hide_jitm ) ) {
207 $hide_jitm = array();
208 }
209
210 if ( isset( $hide_jitm[ $feature_class ] ) ) {
211 if ( ! is_array( $hide_jitm[ $feature_class ] ) ) {
212 $hide_jitm[ $feature_class ] = array( 'last_dismissal' => 0, 'number' => 0 );
213 }
214 } else {
215 $hide_jitm[ $feature_class ] = array( 'last_dismissal' => 0, 'number' => 0 );
216 }
217
218 $number = $hide_jitm[ $feature_class ]['number'];
219
220 $hide_jitm[ $feature_class ] = array( 'last_dismissal' => time(), 'number' => $number + 1 );
221
222 Jetpack_Options::update_option( 'hide_jitm', $hide_jitm );
223
224 return true;
225 }
226
227 /**
228 * Asks the wpcom API for the current message to display keyed on query string and message path
229 *
230 * @param $message_path string The message path to ask for
231 * @param $query string The query string originally from the front end
232 *
233 * @return array The JITM's to show, or an empty array if there is nothing to show
234 */
235 function get_messages( $message_path, $query ) {
236 // custom filters go here
237 add_filter( 'jitm_woocommerce_services_msg', array( 'Jetpack_JITM', 'jitm_woocommerce_services_msg' ) );
238 add_filter( 'jitm_jetpack_woo_services_install', array( 'Jetpack_JITM', 'jitm_jetpack_woo_services_install' ) );
239 add_filter( 'jitm_jetpack_woo_services_activate', array(
240 'Jetpack_JITM',
241 'jitm_jetpack_woo_services_activate'
242 ) );
243
244 $user = wp_get_current_user();
245
246 // unauthenticated or invalid requests just bail
247 if ( ! $user ) {
248 return array();
249 }
250
251 require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-client.php' );
252
253 $site_id = Jetpack_Options::get_option( 'id' );
254
255 // build our jitm request
256 $path = add_query_arg( array(
257 'external_user_id' => urlencode_deep( $user->ID ),
258 'query_string' => urlencode_deep( $query ),
259 ), sprintf( '/sites/%d/jitm/%s', $site_id, $message_path ) );
260
261 // attempt to get from cache
262 $envelopes = get_transient( 'jetpack_jitm_' . substr( md5( $path ), 0, 31 ) );
263
264 // if something is in the cache and it was put in the cache after the last sync we care about, use it
265 $use_cache = false;
266
267 /** This filter is documented in class.jetpack.php */
268 if ( apply_filters( 'jetpack_just_in_time_msg_cache', false ) ) {
269 $use_cache = true;
270 }
271
272 if ( $use_cache ) {
273 $last_sync = (int) get_transient( 'jetpack_last_plugin_sync' );
274 $from_cache = $envelopes && $last_sync > 0 && $last_sync < $envelopes['last_response_time'];
275 } else {
276 $from_cache = false;
277 }
278
279 // otherwise, ask again
280 if ( ! $from_cache ) {
281 $wpcom_response = Jetpack_Client::wpcom_json_api_request_as_blog(
282 $path,
283 '2',
284 array(
285 'user_id' => $user->ID,
286 'user_roles' => implode( ',', $user->roles ),
287 ),
288 null,
289 'wpcom'
290 );
291
292 // silently fail...might be helpful to track it?
293 if ( is_wp_error( $wpcom_response ) ) {
294 return array();
295 }
296
297 $envelopes = json_decode( $wpcom_response['body'] );
298
299 if ( ! is_array( $envelopes ) ) {
300 return array();
301 }
302
303 $expiration = isset( $envelopes[0] ) ? $envelopes[0]->ttl : 300;
304
305 // do not cache if expiration is 0 or we're not using the cache
306 if ( 0 != $expiration && $use_cache ) {
307 $envelopes['last_response_time'] = time();
308
309 set_transient( 'jetpack_jitm_' . substr( md5( $path ), 0, 31 ), $envelopes, $expiration );
310 }
311 }
312
313 $hidden_jitms = Jetpack_Options::get_option( 'hide_jitm' );
314 unset( $envelopes['last_response_time'] );
315
316 foreach ( $envelopes as $idx => &$envelope ) {
317
318 $dismissed_feature = isset( $hidden_jitms[ $envelope->feature_class ] ) && is_array( $hidden_jitms[ $envelope->feature_class ] ) ? $hidden_jitms[ $envelope->feature_class ] : null;
319
320 // if the this feature class has been dismissed and the request has not passed the ttl, skip it as it's been dismissed
321 if ( is_array( $dismissed_feature ) && ( time() - $dismissed_feature['last_dismissal'] < $envelope->expires || $dismissed_feature['number'] >= $envelope->max_dismissal ) ) {
322 unset( $envelopes[ $idx ] );
323 continue;
324 }
325
326 JetpackTracking::record_user_event( 'jitm_view_client', array(
327 'jitm_id' => $envelope->id,
328 ) );
329
330 $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
331 $envelope->url = 'https://jetpack.com/redirect/?source=jitm-' . $envelope->id . '&site=' . $normalized_site_url . '&u=' . $user->ID;
332 $envelope->jitm_stats_url = Jetpack::build_stats_url( array( 'x_jetpack-jitm' => $envelope->id ) );
333
334 if ( $envelope->CTA->hook ) {
335 $envelope->url = apply_filters( 'jitm_' . $envelope->CTA->hook, $envelope->url );
336 unset( $envelope->CTA->hook );
337 }
338
339 if ( isset( $envelope->content->hook ) ) {
340 $envelope->content = apply_filters( 'jitm_' . $envelope->content->hook, $envelope->content );
341 unset( $envelope->content->hook );
342 }
343
344 // no point in showing an empty message
345 if ( empty( $envelope->content->message ) ) {
346 unset( $envelopes[ $idx ] );
347 continue;
348 }
349
350 switch ( $envelope->content->icon ) {
351 case 'jetpack':
352 $envelope->content->icon = '<div class="jp-emblem">' . Jetpack::get_jp_emblem() . '</div>';
353 break;
354 case 'woocommerce':
355 $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">
356 .st0{clip-path:url(#SVGID_2_);enable-background:new ;}
357 .st1{clip-path:url(#SVGID_4_);}
358 .st2{clip-path:url(#SVGID_6_);}
359 .st3{clip-path:url(#SVGID_8_);fill:#8F567F;}
360 .st4{clip-path:url(#SVGID_10_);fill:#FFFFFE;}
361 .st5{clip-path:url(#SVGID_12_);fill:#FFFFFE;}
362 .st6{clip-path:url(#SVGID_14_);fill:#FFFFFE;}
363 </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>';
364 break;
365 default:
366 $envelope->content->icon = '';
367 break;
368 }
369
370 $jetpack = Jetpack::init();
371 $jetpack->stat( 'jitm', $envelope->id . '-viewed-' . JETPACK__VERSION );
372 $jetpack->do_stats( 'server_side' );
373 }
374
375 return $envelopes;
376 }
377 }
378
379 add_action( 'init', array( 'Jetpack_JITM', 'init' ) );
380