PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.3.2
Jetpack – WP Security, Backup, Speed, & Growth v12.3.2
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 3 years ago carousel 3 years ago cloudflare-analytics 4 years ago comment-likes 5 years ago comments 3 years ago contact-form 1 year ago custom-css 3 years ago custom-post-types 3 years ago geo-location 4 years ago google-analytics 3 years ago gravatar 6 years ago infinite-scroll 3 years ago likes 3 years ago markdown 3 years ago masterbar 3 years ago memberships 3 years ago photon-cdn 3 years ago plugin-search 4 years ago post-by-email 3 years ago related-posts 3 years ago scan 3 years ago seo-tools 3 years ago sharedaddy 3 years ago shortcodes 3 years ago simple-payments 3 years ago site-icon 4 years ago sitemaps 3 years ago sso 3 years ago stats 3 years ago subscriptions 3 years ago theme-tools 3 years ago tiled-gallery 3 years ago verification-tools 4 years ago videopress 3 years ago widget-visibility 3 years ago widgets 3 years ago woocommerce-analytics 3 years ago wordads 3 years ago wpcom-block-editor 3 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 4 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 3 years ago gravatar-hovercards.php 3 years ago infinite-scroll.php 3 years ago json-api.php 5 years ago latex.php 4 years ago lazy-images.php 4 years ago likes.php 3 years ago markdown.php 4 years ago masterbar.php 4 years ago module-extras.php 4 years ago module-headings.php 3 years ago module-info.php 3 years ago monitor.php 4 years ago notes.php 3 years ago photon-cdn.php 3 years ago photon.php 3 years ago plugin-search.php 3 years ago post-by-email.php 5 years ago post-list.php 4 years ago protect.php 3 years ago publicize.php 3 years ago related-posts.php 4 years ago search.php 4 years ago seo-tools.php 4 years ago sharedaddy.php 4 years ago shortcodes.php 3 years ago shortlinks.php 4 years ago sitemaps.php 4 years ago sso.php 3 years ago stats.php 3 years ago subscriptions.php 3 years ago theme-tools.php 3 years ago tiled-gallery.php 4 years ago vaultpress.php 4 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
237 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 $is_rtl = is_rtl();
109
110 if ( Jetpack::is_module_active( 'masterbar' ) ) {
111 /**
112 * Can be used to force Notifications to display in RTL style.
113 *
114 * @module notes
115 *
116 * @since 4.8.0
117 *
118 * @param bool true Should notifications be displayed in RTL style. Defaults to false.
119 */
120 $is_rtl = apply_filters( 'a8c_wpcom_masterbar_enqueue_rtl_notification_styles', false );
121 }
122
123 if ( ! $is_rtl ) {
124 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 );
125 } else {
126 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 );
127 }
128
129 wp_enqueue_style( 'noticons', $this->wpcom_static_url( '/i/noticons/noticons.css' ), array( 'wpcom-notes-admin-bar' ), JETPACK_NOTES__CACHE_BUSTER );
130
131 $this->print_js();
132
133 $script_handles = array();
134 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 );
135 $script_handles[] = 'wpcom-notes-common';
136 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 );
137 $script_handles[] = 'wpcom-notes-admin-bar';
138
139 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
140 add_filter(
141 'script_loader_tag',
142 function ( $tag, $handle ) use ( $script_handles ) {
143 if ( in_array( $handle, $script_handles, true ) ) {
144 $tag = preg_replace( '/(?<=<script)(?=\s|>)/i', ' data-ampdevmode', $tag );
145 }
146 return $tag;
147 },
148 10,
149 2
150 );
151 }
152 }
153
154 /**
155 * Adds notifications bubble to the admin bar.
156 *
157 * @return void
158 */
159 public function admin_bar_menu() {
160 global $wp_admin_bar;
161
162 if ( ! is_object( $wp_admin_bar ) ) {
163 return;
164 }
165
166 $wpcom_locale = get_locale();
167
168 if ( ! class_exists( 'GP_Locales' ) ) {
169 if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
170 require JETPACK__GLOTPRESS_LOCALES_PATH;
171 }
172 }
173
174 if ( class_exists( 'GP_Locales' ) ) {
175 $wpcom_locale_object = GP_Locales::by_field( 'wp_locale', $wpcom_locale );
176 if ( $wpcom_locale_object instanceof GP_Locale ) {
177 $wpcom_locale = $wpcom_locale_object->slug;
178 }
179 }
180
181 $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>';
182
183 $classes = 'wpnt-loading wpn-read';
184 $wp_admin_bar->add_menu(
185 array(
186 'id' => 'notes',
187 'title' => '<span id="wpnt-notes-unread-count" class="' . esc_attr( $classes ) . '">
188 <span class="noticon noticon-notification"></span>
189 </span>',
190 'meta' => array(
191 '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,
192 'class' => 'menupop',
193 ),
194 'parent' => 'top-secondary',
195 )
196 );
197 }
198
199 /**
200 * Echos the Notes JS.
201 *
202 * @return void
203 */
204 public function print_js() {
205 $link_accounts_url = is_user_logged_in() && ! ( new Connection_Manager( 'jetpack' ) )->is_user_connected() ? Jetpack::admin_url() : false;
206 ?>
207 <script data-ampdevmode type="text/javascript">
208 /* <![CDATA[ */
209 var wpNotesIsJetpackClient = true;
210 var wpNotesIsJetpackClientV2 = true;
211 <?php if ( $link_accounts_url ) : ?>
212 var wpNotesLinkAccountsURL = '<?php echo esc_url( $link_accounts_url ); ?>';
213 <?php endif; ?>
214 /* ]]> */
215 window.addEventListener('message', function ( event ) {
216 // Confirm that the message is from the right origin.
217 if ('https://widgets.wp.com' !== event.origin) {
218 return;
219 }
220 // Check whether 3rd Party Cookies are blocked
221 var has3PCBlocked = 'WPCOM:3PC:blocked' === event.data;
222
223 var tagerElement = document.getElementById('wp-admin-bar-notes');
224
225 if ( has3PCBlocked && tagerElement ) {
226 // Hide the notification button/icon
227 tagerElement.style.display = 'none';
228 }
229 }, false );
230 </script>
231 <?php
232 }
233
234 }
235
236 Jetpack_Notifications::init();
237