PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 10.5
Jetpack – WP Security, Backup, Speed, & Growth v10.5
16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 All 501 releases
← All changes | modules/notes.php +90 -92 10.4.210.5 View file →
@@ -1,5 +1,5 @@
1 -<?php
1 +<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 2 /**
3 3 * Module Name: Notifications
4 4 * Module Description: Receive instant notifications of site comments and likes.
5 5 * Sort Order: 13
@@ -9,98 +9,78 @@
9 9 * Auto Activate: Yes
10 10 * Module Tags: Other
11 11 * Feature: General
12 12 * Additional Search Queries: notification, notifications, toolbar, adminbar, push, comments
13 + *
14 + * @package automattic/jetpack
13 15 */
14 16
15 17 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
16 18
17 -if ( !defined( 'JETPACK_NOTES__CACHE_BUSTER' ) ) define( 'JETPACK_NOTES__CACHE_BUSTER', JETPACK__VERSION . '-' . gmdate( 'oW' ) );
19 +if ( ! defined( 'JETPACK_NOTES__CACHE_BUSTER' ) ) {
20 + define( 'JETPACK_NOTES__CACHE_BUSTER', JETPACK__VERSION . '-' . gmdate( 'oW' ) );
21 +}
18 22
23 +/**
24 + * Notifications class.
25 + */
19 26 class Jetpack_Notifications {
27 + /**
28 + * Jetpack object.
29 + *
30 + * @var bool|Jetpack Jetpack object.
31 + */
20 32 public $jetpack = false;
21 33
22 34 /**
23 35 * Singleton
36 + *
24 37 * @static
25 38 */
26 39 public static function init() {
27 40 static $instance = array();
28 41
29 - if ( !$instance ) {
30 - $instance[0] = new Jetpack_Notifications;
42 + if ( ! $instance ) {
43 + $instance[0] = new Jetpack_Notifications();
31 44 }
32 45
33 46 return $instance[0];
34 47 }
35 48
36 - function __construct() {
49 + /**
50 + * Constructor.
51 + */
52 + private function __construct() {
37 53 $this->jetpack = Jetpack::init();
38 54
39 - add_action( 'init', array( &$this, 'action_init' ) );
55 + add_action( 'init', array( $this, 'action_init' ) );
40 56 }
41 57
42 - function wpcom_static_url($file) {
43 - $i = hexdec( substr( md5( $file ), -1 ) ) % 2;
44 - return 'https://s' . $i . '.wp.com' . $file;
58 + /**
59 + * Adds s0.wp.com to a file path.
60 + *
61 + * @param string $file File path.
62 + *
63 + * @return string
64 + */
65 + public function wpcom_static_url( $file ) {
66 + return 'https://s0.wp.com' . $file;
45 67 }
46 68
47 - // return the major version of Internet Explorer the viewer is using or false if it's not IE
48 - public static function get_internet_explorer_version() {
49 - static $version;
50 - if ( isset( $version ) ) {
51 - return $version;
69 + /**
70 + * Init the notifications admin bar.
71 + *
72 + * @return void
73 + */
74 + public function action_init() {
75 + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
76 + return;
52 77 }
53 78
54 - $user_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
55 -
56 - preg_match( '/MSIE (\d+)/', $user_agent, $matches );
57 - $version = empty( $matches[1] ) ? null : $matches[1];
58 - if ( empty( $version ) || !$version ) {
59 - return false;
79 + if ( ! has_filter( 'show_admin_bar', '__return_true' ) && ! is_user_logged_in() ) {
80 + return;
60 81 }
61 - return $version;
62 - }
63 82
64 - public static function current_browser_is_supported() {
65 - static $supported;
66 -
67 - if ( isset( $supported ) ) {
68 - return $supported;
69 - }
70 -
71 - $ie_version = self::get_internet_explorer_version();
72 - if ( false === $ie_version ) {
73 - return $supported = true;
74 - }
75 -
76 - if ( $ie_version < 8 ) {
77 - return $supported = false;
78 - }
79 -
80 - return $supported = true;
81 - }
82 -
83 - function action_init() {
84 - //syncing must wait until after init so
85 - //post types that support comments
86 - $filt_post_types = array();
87 - $all_post_types = get_post_types();
88 - foreach ( $all_post_types as $post_type ) {
89 - if ( post_type_supports( $post_type, 'comments' ) ) {
90 - $filt_post_types[] = $post_type;
91 - }
92 - }
93 -
94 - if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
95 - return;
96 -
97 - if ( !has_filter( 'show_admin_bar', '__return_true' ) && !is_user_logged_in() )
98 - return;
99 -
100 - if ( !self::current_browser_is_supported() )
101 - return;
102 -
103 83 // Do not show notifications in the Site Editor, which is always in fullscreen mode.
104 84 global $pagenow;
105 85 // phpcs:ignore WordPress.Security.NonceVerification
106 86 if ( 'admin.php' === $pagenow && isset( $_GET['page'] ) && 'gutenberg-edit-site' === $_GET['page'] ) {
@@ -106,14 +86,19 @@
106 86 if ( 'admin.php' === $pagenow && isset( $_GET['page'] ) && 'gutenberg-edit-site' === $_GET['page'] ) {
107 87 return;
108 88 }
109 89
110 - add_action( 'admin_bar_menu', array( &$this, 'admin_bar_menu'), 120 );
111 - add_action( 'wp_head', array( &$this, 'styles_and_scripts'), 120 );
112 - add_action( 'admin_head', array( &$this, 'styles_and_scripts') );
90 + add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 120 );
91 + add_action( 'wp_head', array( $this, 'styles_and_scripts' ), 120 );
92 + add_action( 'admin_head', array( $this, 'styles_and_scripts' ) );
113 93 }
114 94
115 - function styles_and_scripts() {
95 + /**
96 + * Enqueues and registers styles/scripts for notifications.
97 + *
98 + * @return void
99 + */
100 + public function styles_and_scripts() {
116 101 $is_rtl = is_rtl();
117 102
118 103 if ( Jetpack::is_module_active( 'masterbar' ) ) {
119 104 /**
@@ -137,29 +122,29 @@
137 122 wp_enqueue_style( 'noticons', $this->wpcom_static_url( '/i/noticons/noticons.css' ), array( 'wpcom-notes-admin-bar' ), JETPACK_NOTES__CACHE_BUSTER );
138 123
139 124 $this->print_js();
140 125
141 - // attempt to use core or plugin libraries if registered
126 + // attempt to use core or plugin libraries if registered.
142 127 $script_handles = array();
143 - if ( !wp_script_is( 'mustache', 'registered' ) ) {
144 - wp_register_script( 'mustache', $this->wpcom_static_url( '/wp-content/js/mustache.js' ), null, JETPACK_NOTES__CACHE_BUSTER );
128 + if ( ! wp_script_is( 'mustache', 'registered' ) ) {
129 + wp_register_script( 'mustache', $this->wpcom_static_url( '/wp-content/js/mustache.js' ), null, JETPACK_NOTES__CACHE_BUSTER, true );
145 130 }
146 131 $script_handles[] = 'mustache';
147 - if ( !wp_script_is( 'underscore', 'registered' ) ) {
148 - wp_register_script( 'underscore', $this->wpcom_static_url( '/wp-includes/js/underscore.min.js' ), null, JETPACK_NOTES__CACHE_BUSTER );
132 + if ( ! wp_script_is( 'underscore', 'registered' ) ) {
133 + wp_register_script( 'underscore', $this->wpcom_static_url( '/wp-includes/js/underscore.min.js' ), null, JETPACK_NOTES__CACHE_BUSTER, true );
149 134 }
150 135 $script_handles[] = 'underscore';
151 - if ( !wp_script_is( 'backbone', 'registered' ) ) {
152 - wp_register_script( 'backbone', $this->wpcom_static_url( '/wp-includes/js/backbone.min.js' ), array( 'underscore' ), JETPACK_NOTES__CACHE_BUSTER );
136 + if ( ! wp_script_is( 'backbone', 'registered' ) ) {
137 + wp_register_script( 'backbone', $this->wpcom_static_url( '/wp-includes/js/backbone.min.js' ), array( 'underscore' ), JETPACK_NOTES__CACHE_BUSTER, true );
153 138 }
154 139 $script_handles[] = 'backbone';
155 140
156 - wp_register_script( 'wpcom-notes-common', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/notes-common-v2.js' ), array( 'jquery', 'underscore', 'backbone', 'mustache' ), JETPACK_NOTES__CACHE_BUSTER );
141 + wp_register_script( 'wpcom-notes-common', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/notes-common-v2.js' ), array( 'jquery', 'underscore', 'backbone', 'mustache' ), JETPACK_NOTES__CACHE_BUSTER, true );
157 142 $script_handles[] = 'wpcom-notes-common';
158 143 $script_handles[] = 'jquery';
159 144 $script_handles[] = 'jquery-migrate';
160 145 $script_handles[] = 'jquery-core';
161 - wp_enqueue_script( 'wpcom-notes-admin-bar', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/admin-bar-v2.js' ), array( 'wpcom-notes-common' ), JETPACK_NOTES__CACHE_BUSTER );
146 + wp_enqueue_script( 'wpcom-notes-admin-bar', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/admin-bar-v2.js' ), array( 'wpcom-notes-common' ), JETPACK_NOTES__CACHE_BUSTER, true );
162 147 $script_handles[] = 'wpcom-notes-admin-bar';
163 148
164 149 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
165 150 add_filter(
@@ -175,17 +160,23 @@
175 160 );
176 161 }
177 162 }
178 163
179 - function admin_bar_menu() {
180 - global $wp_admin_bar, $current_blog;
164 + /**
165 + * Adds notifications bubble to the admin bar.
166 + *
167 + * @return void
168 + */
169 + public function admin_bar_menu() {
170 + global $wp_admin_bar;
181 171
182 - if ( !is_object( $wp_admin_bar ) )
172 + if ( ! is_object( $wp_admin_bar ) ) {
183 173 return;
174 + }
184 175
185 176 $wpcom_locale = get_locale();
186 177
187 - if ( !class_exists( 'GP_Locales' ) ) {
178 + if ( ! class_exists( 'GP_Locales' ) ) {
188 179 if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
189 180 require JETPACK__GLOTPRESS_LOCALES_PATH;
190 181 }
191 182 }
@@ -197,34 +188,41 @@
197 188 }
198 189 }
199 190
200 191 $classes = 'wpnt-loading wpn-read';
201 - $wp_admin_bar->add_menu( array(
202 - 'id' => 'notes',
203 - 'title' => '<span id="wpnt-notes-unread-count" class="' . esc_attr( $classes ) . '">
192 + $wp_admin_bar->add_menu(
193 + array(
194 + 'id' => 'notes',
195 + 'title' => '<span id="wpnt-notes-unread-count" class="' . esc_attr( $classes ) . '">
204 196 <span class="noticon noticon-notification"></span>
205 197 </span>',
206 - 'meta' => array(
207 - 'html' => '<div id="wpnt-notes-panel2" class="intrinsic-ignore" style="display:none" lang="' . esc_attr( $wpcom_locale ) . '" dir="' . ( is_rtl() ? 'rtl' : 'ltr' ) . '"><div class="wpnt-notes-panel-header"><span class="wpnt-notes-header">' . __( 'Notifications', 'jetpack' ) . '</span><span class="wpnt-notes-panel-link"></span></div></div>',
208 - 'class' => 'menupop',
209 - ),
210 - 'parent' => 'top-secondary',
211 - ) );
198 + 'meta' => array(
199 + 'html' => '<div id="wpnt-notes-panel2" class="intrinsic-ignore" style="display:none" lang="' . esc_attr( $wpcom_locale ) . '" dir="' . ( is_rtl() ? 'rtl' : 'ltr' ) . '"><div class="wpnt-notes-panel-header"><span class="wpnt-notes-header">' . __( 'Notifications', 'jetpack' ) . '</span><span class="wpnt-notes-panel-link"></span></div></div>',
200 + 'class' => 'menupop',
201 + ),
202 + 'parent' => 'top-secondary',
203 + )
204 + );
212 205 }
213 206
214 - function print_js() {
207 + /**
208 + * Echos the Notes JS.
209 + *
210 + * @return void
211 + */
212 + public function print_js() {
215 213 $link_accounts_url = is_user_logged_in() && ! ( new Connection_Manager( 'jetpack' ) )->is_user_connected() ? Jetpack::admin_url() : false;
216 -?>
214 + ?>
217 215 <script data-ampdevmode type="text/javascript">
218 216 /* <![CDATA[ */
219 217 var wpNotesIsJetpackClient = true;
220 218 var wpNotesIsJetpackClientV2 = true;
221 -<?php if ( $link_accounts_url ) : ?>
222 - var wpNotesLinkAccountsURL = '<?php print $link_accounts_url; ?>';
219 + <?php if ( $link_accounts_url ) : ?>
220 + var wpNotesLinkAccountsURL = '<?php echo esc_url( $link_accounts_url ); ?>';
223 221 <?php endif; ?>
224 222 /* ]]> */
225 223 </script>
226 -<?php
224 + <?php
227 225 }
228 226
229 227 }
230 228