PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.1.1
Jetpack – WP Security, Backup, Speed, & Growth v14.1.1
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 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 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 / modules / notes.php
jetpack / modules Last commit date
carousel 1 year ago cloudflare-analytics 2 years ago comment-likes 5 years ago comments 1 year ago custom-post-types 1 year ago geo-location 4 years ago google-fonts 1 year ago gravatar 6 years ago infinite-scroll 1 year ago likes 1 year ago markdown 2 years ago memberships 1 year ago photon-cdn 1 year ago plugin-search 1 year ago post-by-email 3 years ago related-posts 1 year ago scan 1 year ago seo-tools 2 years ago sharedaddy 1 year ago shortcodes 1 year ago simple-payments 3 years ago site-icon 2 years ago sitemaps 1 year ago stats 2 years ago subscriptions 1 year ago theme-tools 1 year ago tiled-gallery 2 years ago verification-tools 4 years ago videopress 1 year ago widget-visibility 1 year ago widgets 1 year ago woocommerce-analytics 2 years ago wordads 2 years ago wpcom-tos 5 years ago blaze.php 2 years ago blocks.php 1 year ago carousel.php 2 years ago comment-likes.php 2 years ago comments.php 2 years ago contact-form.php 2 years ago copy-post.php 2 years ago custom-content-types.php 1 year ago geo-location.php 4 years ago google-fonts.php 2 years ago gravatar-hovercards.php 2 years ago infinite-scroll.php 3 years ago json-api.php 5 years ago latex.php 4 years ago likes.php 1 year ago markdown.php 4 years ago masterbar.php 1 year ago module-extras.php 2 years ago module-headings.php 1 year ago module-info.php 1 year ago monitor.php 2 years ago notes.php 1 year ago photon-cdn.php 1 year ago photon.php 3 years ago plugin-search.php 2 years ago post-by-email.php 5 years ago post-list.php 4 years ago protect.php 2 years ago publicize.php 1 year ago related-posts.php 2 years ago search.php 4 years ago seo-tools.php 2 years ago sharedaddy.php 2 years ago shortcodes.php 1 year ago shortlinks.php 2 years ago sitemaps.php 4 years ago sso.php 1 year ago stats.php 1 year ago subscriptions.php 1 year ago theme-tools.php 1 year ago tiled-gallery.php 4 years ago vaultpress.php 2 years ago verification-tools.php 5 years ago videopress.php 4 years ago waf.php 3 years ago widget-visibility.php 4 years ago widgets.php 1 year ago woocommerce-analytics.php 2 years ago wordads.php 2 years ago wpgroho.js 1 year ago
notes.php
255 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Module Name: Notifications
4 * Module Description: Receive instant notifications of site comments and likes.
5 * Sort Order: 13
6 * First Introduced: 1.9
7 * Requires Connection: Yes
8 * Requires User Connection: Yes
9 * Auto Activate: Yes
10 * Module Tags: Other
11 * Feature: General
12 * Additional Search Queries: notification, notifications, toolbar, adminbar, push, comments
13 *
14 * @package automattic/jetpack
15 */
16
17 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
18 use Automattic\Jetpack\Status\Host;
19
20 if ( ! defined( 'JETPACK_NOTES__CACHE_BUSTER' ) ) {
21 define( 'JETPACK_NOTES__CACHE_BUSTER', JETPACK__VERSION . '-' . gmdate( 'oW' ) . '-lite' );
22 }
23
24 /**
25 * Notifications class.
26 */
27 class Jetpack_Notifications {
28 /**
29 * Jetpack object.
30 *
31 * @var bool|Jetpack Jetpack object.
32 */
33 public $jetpack = false;
34
35 /**
36 * Singleton
37 *
38 * @static
39 */
40 public static function init() {
41 static $instance = array();
42
43 if ( ! $instance ) {
44 $instance[0] = new Jetpack_Notifications();
45 }
46
47 return $instance[0];
48 }
49
50 /**
51 * Constructor.
52 */
53 private function __construct() {
54 $this->jetpack = Jetpack::init();
55
56 add_action( 'init', array( $this, 'action_init' ) );
57 }
58
59 /**
60 * Adds s0.wp.com to a file path.
61 *
62 * @param string $file File path.
63 *
64 * @return string
65 */
66 public function wpcom_static_url( $file ) {
67 return 'https://s0.wp.com' . $file;
68 }
69
70 /**
71 * Init the notifications admin bar.
72 *
73 * @return void
74 */
75 public function action_init() {
76 if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
77 return;
78 }
79
80 if ( ! has_filter( 'show_admin_bar', '__return_true' ) && ! is_user_logged_in() ) {
81 return;
82 }
83
84 // Do not show notifications in the Site Editor, which is always in fullscreen mode.
85 global $pagenow;
86
87 // Pre 13.7 pages that still need to be supported if < 13.7 is
88 // still installed.
89 $allowed_old_pages = array( 'admin.php', 'themes.php' );
90 $is_old_site_editor_page = in_array( $pagenow, $allowed_old_pages, true ) && isset( $_GET['page'] ) && 'gutenberg-edit-site' === $_GET['page']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
91 // For Gutenberg > 13.7, the core `site-editor.php` route is used instead
92 $is_site_editor_page = 'site-editor.php' === $pagenow;
93
94 if ( $is_site_editor_page || $is_old_site_editor_page ) {
95 return;
96 }
97
98 add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 120 );
99 add_action( 'wp_head', array( $this, 'styles_and_scripts' ), 120 );
100 add_action( 'admin_head', array( $this, 'styles_and_scripts' ) );
101 }
102
103 /**
104 * Enqueues and registers styles/scripts for notifications.
105 *
106 * @return void
107 */
108 public function styles_and_scripts() {
109 if ( self::is_block_editor() ) {
110 return;
111 }
112 $is_rtl = is_rtl();
113
114 if ( ( new Host() )->is_woa_site() ) {
115 /**
116 * Can be used to force Notifications to display in RTL style.
117 *
118 * @module notes
119 *
120 * @since 4.8.0
121 *
122 * @param bool true Should notifications be displayed in RTL style. Defaults to false.
123 */
124 $is_rtl = apply_filters( 'a8c_wpcom_masterbar_enqueue_rtl_notification_styles', false );
125 }
126
127 if ( ! $is_rtl ) {
128 wp_enqueue_style( 'wpcom-notes-admin-bar', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/admin-bar-v2.css' ), array( 'admin-bar' ), JETPACK_NOTES__CACHE_BUSTER );
129 } else {
130 wp_enqueue_style( 'wpcom-notes-admin-bar', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/rtl/admin-bar-v2-rtl.css' ), array( 'admin-bar' ), JETPACK_NOTES__CACHE_BUSTER );
131 }
132
133 wp_enqueue_style( 'noticons', $this->wpcom_static_url( '/i/noticons/noticons.css' ), array( 'wpcom-notes-admin-bar' ), JETPACK_NOTES__CACHE_BUSTER );
134
135 $this->print_js();
136
137 $script_handles = array();
138 wp_register_script( 'wpcom-notes-common', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/notes-common-lite.min.js' ), array(), JETPACK_NOTES__CACHE_BUSTER, true );
139 $script_handles[] = 'wpcom-notes-common';
140 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 );
141 $script_handles[] = 'wpcom-notes-admin-bar';
142
143 $wp_notes_args = 'var wpNotesArgs = ' . wp_json_encode( array( 'cacheBuster' => JETPACK_NOTES__CACHE_BUSTER ) ) . ';';
144 wp_add_inline_script( 'wpcom-notes-admin-bar', $wp_notes_args, 'before' );
145
146 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
147 add_filter(
148 'script_loader_tag',
149 function ( $tag, $handle ) use ( $script_handles ) {
150 if ( in_array( $handle, $script_handles, true ) ) {
151 $tag = preg_replace( '/(?<=<script)(?=\s|>)/i', ' data-ampdevmode', $tag );
152 }
153 return $tag;
154 },
155 10,
156 2
157 );
158 }
159 }
160
161 /**
162 * Adds notifications bubble to the admin bar.
163 *
164 * @return void
165 */
166 public function admin_bar_menu() {
167 global $wp_admin_bar;
168
169 if ( ! is_object( $wp_admin_bar ) ) {
170 return;
171 }
172
173 if ( self::is_block_editor() ) {
174 return;
175 }
176
177 $user_locale = get_user_locale();
178
179 if ( ! class_exists( 'GP_Locales' ) ) {
180 if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
181 require JETPACK__GLOTPRESS_LOCALES_PATH;
182 }
183 }
184
185 if ( class_exists( 'GP_Locales' ) ) {
186 $jetpack_locale_object = GP_Locales::by_field( 'slug', $user_locale );
187 if ( $jetpack_locale_object instanceof GP_Locale ) {
188 $user_locale = $jetpack_locale_object->slug;
189 }
190 }
191
192 $third_party_cookie_check_iframe = '<span style="display:none;"><iframe class="jetpack-notes-cookie-check" src="https://widgets.wp.com/3rd-party-cookie-check/index.html"></iframe></span>';
193
194 $title = self::get_notes_markup();
195 $wp_admin_bar->add_menu(
196 array(
197 'id' => 'notes',
198 'title' => $title,
199 'meta' => array(
200 'html' => '<div id="wpnt-notes-panel2" class="intrinsic-ignore" style="display:none" lang="' . esc_attr( strtolower( substr( $user_locale, 0, 2 ) ) ) . '" 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>' . $third_party_cookie_check_iframe,
201 'class' => 'menupop',
202 ),
203 'parent' => 'top-secondary',
204 'href' => 'https://wordpress.com/notifications',
205 )
206 );
207 }
208
209 /**
210 * Returns the HTML markup for used by notification in top bar
211 *
212 * @return string
213 */
214 private static function get_notes_markup() {
215 return '<span id="wpnt-notes-unread-count" class="wpnt-loading wpn-read"></span>
216 <span class="noticon noticon-bell ab-icon"></span>
217 <span class="screen-reader-text">' . esc_html__( 'Notifications', 'jetpack' ) . '</span>';
218 }
219
220 /**
221 * Echos the Notes JS.
222 *
223 * @return void
224 */
225 public function print_js() {
226 $link_accounts_url = is_user_logged_in() && ! ( new Connection_Manager( 'jetpack' ) )->is_user_connected() ? Jetpack::admin_url() : false;
227 ?>
228 <script data-ampdevmode type="text/javascript">
229 /* <![CDATA[ */
230 var wpNotesIsJetpackClient = true;
231 var wpNotesIsJetpackClientV2 = true;
232 <?php if ( $link_accounts_url ) : ?>
233 var wpNotesLinkAccountsURL = '<?php echo esc_url( $link_accounts_url ); ?>';
234 <?php endif; ?>
235 /* ]]> */
236 </script>
237 <?php
238 }
239
240 /**
241 * Checks to see if we're in the block editor.
242 */
243 public static function is_block_editor() {
244 if ( function_exists( 'get_current_screen' ) ) {
245 $current_screen = get_current_screen();
246 if ( ! empty( $current_screen ) && $current_screen->is_block_editor() ) {
247 return true;
248 }
249 }
250 return false;
251 }
252 }
253
254 Jetpack_Notifications::init();
255