PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.8.3
Jetpack – WP Security, Backup, Speed, & Growth v12.8.3
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
calypsoify 2 years ago carousel 2 years ago cloudflare-analytics 4 years ago comment-likes 5 years ago comments 2 years ago contact-form 1 year ago custom-css 2 years ago custom-post-types 2 years ago geo-location 4 years ago google-analytics 3 years ago google-fonts 2 years ago gravatar 6 years ago infinite-scroll 3 years ago likes 3 years ago markdown 3 years ago masterbar 2 years ago memberships 2 years ago photon-cdn 2 years ago plugin-search 4 years ago post-by-email 3 years ago related-posts 2 years ago scan 2 years ago seo-tools 2 years ago sharedaddy 2 years ago shortcodes 2 years ago simple-payments 3 years ago site-icon 4 years ago sitemaps 2 years ago sso 2 years ago stats 2 years ago subscriptions 2 years ago theme-tools 2 years ago tiled-gallery 2 years ago verification-tools 4 years ago videopress 2 years ago widget-visibility 2 years ago widgets 2 years ago woocommerce-analytics 2 years ago wordads 2 years ago wpcom-block-editor 2 years ago wpcom-tos 5 years ago action-bar.php 3 years ago blaze.php 3 years ago carousel.php 4 years ago comment-likes.php 3 years ago comments.php 2 years ago contact-form.php 3 years ago copy-post.php 3 years ago custom-content-types.php 4 years ago custom-css.php 3 years ago enhanced-distribution.php 4 years ago geo-location.php 4 years ago google-analytics.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 lazy-images.php 2 years ago likes.php 2 years ago markdown.php 4 years ago masterbar.php 4 years ago module-extras.php 4 years ago module-headings.php 2 years ago module-info.php 2 years ago monitor.php 2 years ago notes.php 2 years ago photon-cdn.php 3 years 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 3 years ago publicize.php 2 years ago related-posts.php 2 years ago search.php 4 years ago seo-tools.php 4 years ago sharedaddy.php 2 years ago shortcodes.php 3 years ago shortlinks.php 4 years ago sitemaps.php 4 years ago sso.php 2 years ago stats.php 2 years ago subscriptions.php 2 years ago theme-tools.php 3 years 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 3 years ago woocommerce-analytics.php 5 years ago wordads.php 5 years ago wpgroho.js 6 years ago
notes.php
256 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
19 if ( ! defined( 'JETPACK_NOTES__CACHE_BUSTER' ) ) {
20 define( 'JETPACK_NOTES__CACHE_BUSTER', JETPACK__VERSION . '-' . gmdate( 'oW' ) . '-lite' );
21 }
22
23 /**
24 * Notifications class.
25 */
26 class Jetpack_Notifications {
27 /**
28 * Jetpack object.
29 *
30 * @var bool|Jetpack Jetpack object.
31 */
32 public $jetpack = false;
33
34 /**
35 * Singleton
36 *
37 * @static
38 */
39 public static function init() {
40 static $instance = array();
41
42 if ( ! $instance ) {
43 $instance[0] = new Jetpack_Notifications();
44 }
45
46 return $instance[0];
47 }
48
49 /**
50 * Constructor.
51 */
52 private function __construct() {
53 $this->jetpack = Jetpack::init();
54
55 add_action( 'init', array( $this, 'action_init' ) );
56 }
57
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;
67 }
68
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;
77 }
78
79 if ( ! has_filter( 'show_admin_bar', '__return_true' ) && ! is_user_logged_in() ) {
80 return;
81 }
82
83 // Do not show notifications in the Site Editor, which is always in fullscreen mode.
84 global $pagenow;
85
86 // Pre 13.7 pages that still need to be supported if < 13.7 is
87 // still installed.
88 $allowed_old_pages = array( 'admin.php', 'themes.php' );
89 $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
90 // For Gutenberg > 13.7, the core `site-editor.php` route is used instead
91 $is_site_editor_page = 'site-editor.php' === $pagenow;
92
93 if ( $is_site_editor_page || $is_old_site_editor_page ) {
94 return;
95 }
96
97 add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 120 );
98 add_action( 'wp_head', array( $this, 'styles_and_scripts' ), 120 );
99 add_action( 'admin_head', array( $this, 'styles_and_scripts' ) );
100 }
101
102 /**
103 * Enqueues and registers styles/scripts for notifications.
104 *
105 * @return void
106 */
107 public function styles_and_scripts() {
108 if ( self::is_block_editor() ) {
109 return;
110 }
111 $is_rtl = is_rtl();
112
113 if ( Jetpack::is_module_active( 'masterbar' ) ) {
114 /**
115 * Can be used to force Notifications to display in RTL style.
116 *
117 * @module notes
118 *
119 * @since 4.8.0
120 *
121 * @param bool true Should notifications be displayed in RTL style. Defaults to false.
122 */
123 $is_rtl = apply_filters( 'a8c_wpcom_masterbar_enqueue_rtl_notification_styles', false );
124 }
125
126 if ( ! $is_rtl ) {
127 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 );
128 } else {
129 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 );
130 }
131
132 wp_enqueue_style( 'noticons', $this->wpcom_static_url( '/i/noticons/noticons.css' ), array( 'wpcom-notes-admin-bar' ), JETPACK_NOTES__CACHE_BUSTER );
133
134 $this->print_js();
135
136 $script_handles = array();
137 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 );
138 $script_handles[] = 'wpcom-notes-common';
139 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 );
140 $script_handles[] = 'wpcom-notes-admin-bar';
141
142 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
143 add_filter(
144 'script_loader_tag',
145 function ( $tag, $handle ) use ( $script_handles ) {
146 if ( in_array( $handle, $script_handles, true ) ) {
147 $tag = preg_replace( '/(?<=<script)(?=\s|>)/i', ' data-ampdevmode', $tag );
148 }
149 return $tag;
150 },
151 10,
152 2
153 );
154 }
155 }
156
157 /**
158 * Adds notifications bubble to the admin bar.
159 *
160 * @return void
161 */
162 public function admin_bar_menu() {
163 global $wp_admin_bar;
164
165 if ( ! is_object( $wp_admin_bar ) ) {
166 return;
167 }
168
169 if ( self::is_block_editor() ) {
170 return;
171 }
172
173 $wpcom_locale = get_locale();
174
175 if ( ! class_exists( 'GP_Locales' ) ) {
176 if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
177 require JETPACK__GLOTPRESS_LOCALES_PATH;
178 }
179 }
180
181 if ( class_exists( 'GP_Locales' ) ) {
182 $wpcom_locale_object = GP_Locales::by_field( 'wp_locale', $wpcom_locale );
183 if ( $wpcom_locale_object instanceof GP_Locale ) {
184 $wpcom_locale = $wpcom_locale_object->slug;
185 }
186 }
187
188 $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>';
189
190 $classes = 'wpnt-loading wpn-read';
191 $wp_admin_bar->add_menu(
192 array(
193 'id' => 'notes',
194 'title' => '<span id="wpnt-notes-unread-count" class="' . esc_attr( $classes ) . '">
195 <span class="noticon noticon-notification"></span>
196 </span>',
197 'meta' => array(
198 '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>' . $third_party_cookie_check_iframe,
199 'class' => 'menupop',
200 ),
201 'parent' => 'top-secondary',
202 )
203 );
204 }
205
206 /**
207 * Echos the Notes JS.
208 *
209 * @return void
210 */
211 public function print_js() {
212 $link_accounts_url = is_user_logged_in() && ! ( new Connection_Manager( 'jetpack' ) )->is_user_connected() ? Jetpack::admin_url() : false;
213 ?>
214 <script data-ampdevmode type="text/javascript">
215 /* <![CDATA[ */
216 var wpNotesIsJetpackClient = true;
217 var wpNotesIsJetpackClientV2 = true;
218 <?php if ( $link_accounts_url ) : ?>
219 var wpNotesLinkAccountsURL = '<?php echo esc_url( $link_accounts_url ); ?>';
220 <?php endif; ?>
221 /* ]]> */
222 window.addEventListener('message', function ( event ) {
223 // Confirm that the message is from the right origin.
224 if ('https://widgets.wp.com' !== event.origin) {
225 return;
226 }
227 // Check whether 3rd Party Cookies are blocked
228 var has3PCBlocked = 'WPCOM:3PC:blocked' === event.data;
229
230 var tagerElement = document.getElementById('wp-admin-bar-notes');
231
232 if ( has3PCBlocked && tagerElement ) {
233 // Hide the notification button/icon
234 tagerElement.style.display = 'none';
235 }
236 }, false );
237 </script>
238 <?php
239 }
240
241 /**
242 * Checks to see if we're in the block editor.
243 */
244 public static function is_block_editor() {
245 if ( function_exists( 'get_current_screen' ) ) {
246 $current_screen = get_current_screen();
247 if ( ! empty( $current_screen ) && $current_screen->is_block_editor() ) {
248 return true;
249 }
250 }
251 return false;
252 }
253 }
254
255 Jetpack_Notifications::init();
256