PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 7.5.1
Jetpack – WP Security, Backup, Speed, & Growth v7.5.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 All 500 releases
jetpack / modules / notes.php
notes.php
199 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
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 * Auto Activate: Yes
9 * Module Tags: Other
10 * Feature: General
11 * Additional Search Queries: notification, notifications, toolbar, adminbar, push, comments
12 */
13
14 if ( !defined( 'JETPACK_NOTES__CACHE_BUSTER' ) ) define( 'JETPACK_NOTES__CACHE_BUSTER', JETPACK__VERSION . '-' . gmdate( 'oW' ) );
15
16 class Jetpack_Notifications {
17 public $jetpack = false;
18
19 /**
20 * Singleton
21 * @static
22 */
23 public static function init() {
24 static $instance = array();
25
26 if ( !$instance ) {
27 $instance[0] = new Jetpack_Notifications;
28 }
29
30 return $instance[0];
31 }
32
33 function __construct() {
34 $this->jetpack = Jetpack::init();
35
36 add_action( 'init', array( &$this, 'action_init' ) );
37 }
38
39 function wpcom_static_url($file) {
40 $i = hexdec( substr( md5( $file ), -1 ) ) % 2;
41 $url = 'http://s' . $i . '.wp.com' . $file;
42 return set_url_scheme( $url );
43 }
44
45 // return the major version of Internet Explorer the viewer is using or false if it's not IE
46 public static function get_internet_explorer_version() {
47 static $version;
48 if ( isset( $version ) ) {
49 return $version;
50 }
51
52 $user_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
53
54 preg_match( '/MSIE (\d+)/', $user_agent, $matches );
55 $version = empty( $matches[1] ) ? null : $matches[1];
56 if ( empty( $version ) || !$version ) {
57 return false;
58 }
59 return $version;
60 }
61
62 public static function current_browser_is_supported() {
63 static $supported;
64
65 if ( isset( $supported ) ) {
66 return $supported;
67 }
68
69 $ie_version = self::get_internet_explorer_version();
70 if ( false === $ie_version ) {
71 return $supported = true;
72 }
73
74 if ( $ie_version < 8 ) {
75 return $supported = false;
76 }
77
78 return $supported = true;
79 }
80
81 function action_init() {
82 //syncing must wait until after init so
83 //post types that support comments
84 $filt_post_types = array();
85 $all_post_types = get_post_types();
86 foreach ( $all_post_types as $post_type ) {
87 if ( post_type_supports( $post_type, 'comments' ) ) {
88 $filt_post_types[] = $post_type;
89 }
90 }
91
92 if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
93 return;
94
95 if ( !has_filter( 'show_admin_bar', '__return_true' ) && !is_user_logged_in() )
96 return;
97
98 if ( !self::current_browser_is_supported() )
99 return;
100
101 add_action( 'admin_bar_menu', array( &$this, 'admin_bar_menu'), 120 );
102 add_action( 'wp_head', array( &$this, 'styles_and_scripts'), 120 );
103 add_action( 'admin_head', array( &$this, 'styles_and_scripts') );
104 }
105
106 function styles_and_scripts() {
107 $is_rtl = is_rtl();
108
109 if ( Jetpack::is_module_active( 'masterbar' ) ) {
110 /**
111 * Can be used to force Notifications to display in RTL style.
112 *
113 * @module notes
114 *
115 * @since 4.8.0
116 *
117 * @param bool true Should notifications be displayed in RTL style. Defaults to false.
118 */
119 $is_rtl = apply_filters( 'a8c_wpcom_masterbar_enqueue_rtl_notification_styles', false );
120 }
121
122 if ( ! $is_rtl ) {
123 wp_enqueue_style( 'wpcom-notes-admin-bar', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/admin-bar-v2.css' ), array(), JETPACK_NOTES__CACHE_BUSTER );
124 } else {
125 wp_enqueue_style( 'wpcom-notes-admin-bar', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/rtl/admin-bar-v2-rtl.css' ), array(), JETPACK_NOTES__CACHE_BUSTER );
126 }
127 wp_enqueue_style( 'noticons', $this->wpcom_static_url( '/i/noticons/noticons.css' ), array(), JETPACK_NOTES__CACHE_BUSTER );
128
129 $this->print_js();
130
131 // attempt to use core or plugin libraries if registered
132 if ( !wp_script_is( 'mustache', 'registered' ) ) {
133 wp_register_script( 'mustache', $this->wpcom_static_url( '/wp-content/js/mustache.js' ), null, JETPACK_NOTES__CACHE_BUSTER );
134 }
135 if ( !wp_script_is( 'underscore', 'registered' ) ) {
136 wp_register_script( 'underscore', $this->wpcom_static_url( '/wp-includes/js/underscore.min.js' ), null, JETPACK_NOTES__CACHE_BUSTER );
137 }
138 if ( !wp_script_is( 'backbone', 'registered' ) ) {
139 wp_register_script( 'backbone', $this->wpcom_static_url( '/wp-includes/js/backbone.min.js' ), array( 'underscore' ), JETPACK_NOTES__CACHE_BUSTER );
140 }
141
142 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 );
143 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 );
144 }
145
146 function admin_bar_menu() {
147 global $wp_admin_bar, $current_blog;
148
149 if ( !is_object( $wp_admin_bar ) )
150 return;
151
152 $wpcom_locale = get_locale();
153
154 if ( !class_exists( 'GP_Locales' ) ) {
155 if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
156 require JETPACK__GLOTPRESS_LOCALES_PATH;
157 }
158 }
159
160 if ( class_exists( 'GP_Locales' ) ) {
161 $wpcom_locale_object = GP_Locales::by_field( 'wp_locale', $wpcom_locale );
162 if ( $wpcom_locale_object instanceof GP_Locale ) {
163 $wpcom_locale = $wpcom_locale_object->slug;
164 }
165 }
166
167 $classes = 'wpnt-loading wpn-read';
168 $wp_admin_bar->add_menu( array(
169 'id' => 'notes',
170 'title' => '<span id="wpnt-notes-unread-count" class="' . esc_attr( $classes ) . '">
171 <span class="noticon noticon-notification"></span>
172 </span>',
173 'meta' => array(
174 'html' => '<div id="wpnt-notes-panel2" 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>',
175 'class' => 'menupop',
176 ),
177 'parent' => 'top-secondary',
178 ) );
179 }
180
181 function print_js() {
182 $link_accounts_url = is_user_logged_in() && !Jetpack::is_user_connected() ? Jetpack::admin_url() : false;
183 ?>
184 <script type="text/javascript">
185 /* <![CDATA[ */
186 var wpNotesIsJetpackClient = true;
187 var wpNotesIsJetpackClientV2 = true;
188 <?php if ( $link_accounts_url ) : ?>
189 var wpNotesLinkAccountsURL = '<?php print $link_accounts_url; ?>';
190 <?php endif; ?>
191 /* ]]> */
192 </script>
193 <?php
194 }
195
196 }
197
198 Jetpack_Notifications::init();
199