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 / class-jetpack-stats-dashboard-widget.php
jetpack Last commit date
3rd-party 3 years ago _inc 3 years ago css 3 years ago extensions 3 years ago images 3 years ago jetpack_vendor 1 day ago json-endpoints 3 years ago modules 1 year ago sal 3 years ago src 3 years ago vendor 3 years ago views 3 years ago CHANGELOG.md 3 years ago LICENSE.txt 5 years ago SECURITY.md 5 years ago class-jetpack-connection-status.php 5 years ago class-jetpack-connection-widget.php 3 years ago class-jetpack-gallery-settings.php 3 years ago class-jetpack-pre-connection-jitms.php 4 years ago class-jetpack-recommendations-banner.php 3 years ago class-jetpack-stats-dashboard-widget.php 3 years ago class-jetpack-wizard-banner.php 5 years ago class-jetpack-xmlrpc-methods.php 3 years ago class.frame-nonce-preview.php 4 years ago class.jetpack-admin.php 3 years ago class.jetpack-affiliate.php 4 years ago class.jetpack-autoupdate.php 3 years ago class.jetpack-bbpress-json-api.compat.php 5 years ago class.jetpack-boost-modules.php 3 years ago class.jetpack-cli.php 3 years ago class.jetpack-client-server.php 4 years ago class.jetpack-connection-banner.php 3 years ago class.jetpack-data.php 5 years ago class.jetpack-gutenberg.php 3 years ago class.jetpack-heartbeat.php 4 years ago class.jetpack-idc.php 5 years ago class.jetpack-modules-list-table.php 3 years ago class.jetpack-network-sites-list-table.php 3 years ago class.jetpack-network.php 3 years ago class.jetpack-plan.php 3 years ago class.jetpack-post-images.php 3 years ago class.jetpack-twitter-cards.php 3 years ago class.jetpack-user-agent.php 3 years ago class.jetpack.php 3 years ago class.json-api-endpoints.php 3 years ago class.json-api.php 3 years ago class.photon.php 3 years ago composer.json 3 years ago enhanced-open-graph.php 3 years ago functions.compat.php 4 years ago functions.cookies.php 5 years ago functions.global.php 3 years ago functions.is-mobile.php 3 years ago functions.opengraph.php 3 years ago functions.photon.php 3 years ago jetpack.php 1 day ago json-api-config.php 3 years ago json-endpoints.php 3 years ago load-jetpack.php 3 years ago locales.php 4 years ago readme.txt 1 day ago uninstall.php 5 years ago wpml-config.xml 4 years ago
class-jetpack-stats-dashboard-widget.php
253 lines
1 <?php
2 /**
3 * Adds the Jetpack stats widget to the WordPress admin dashboard.
4 *
5 * @package jetpack
6 */
7
8 use Automattic\Jetpack\Assets;
9 use Automattic\Jetpack\Assets\Logo as Jetpack_Logo;
10 use Automattic\Jetpack\Redirect;
11 use Automattic\Jetpack\Stats\Options as Stats_Options;
12 use Automattic\Jetpack\Stats_Admin\WP_Dashboard_Odyssey_Widget as Dashboard_Stats_Widget;
13 use Automattic\Jetpack\Status;
14
15 /**
16 * Class that adds the Jetpack stats widget to the WordPress admin dashboard.
17 *
18 * Note that this widget renders whether or not the stats module is active because it currently
19 * displays information about Akismet and Protect.
20 */
21 class Jetpack_Stats_Dashboard_Widget {
22
23 /**
24 * Indicates whether the class initialized or not.
25 *
26 * @var bool
27 */
28 private static $initialized = false;
29
30 /**
31 * Initialize the class by calling the setup static function.
32 *
33 * @return void
34 */
35 public static function init() {
36 if ( ! self::$initialized ) {
37 self::$initialized = true;
38 self::wp_dashboard_setup();
39 }
40 }
41
42 /**
43 * Sets up the Jetpack Stats widget in the WordPress admin dashboard.
44 */
45 public static function wp_dashboard_setup() {
46
47 /**
48 * Filter whether the Jetpack Stats dashboard widget should be shown to the current user.
49 * By default, the dashboard widget is shown to users who can view_stats.
50 *
51 * @module stats
52 * @since 11.9
53 *
54 * @param bool Whether to show the widget to the current user.
55 */
56 if ( ! apply_filters( 'jetpack_stats_dashboard_widget_show_to_user', current_user_can( 'view_stats' ) ) ) {
57 return;
58 }
59
60 if ( Jetpack::is_connection_ready() ) {
61 add_action( 'admin_head', array( static::class, 'admin_head' ) );
62
63 $widget_title = sprintf(
64 __( 'Jetpack Stats', 'jetpack' )
65 );
66
67 if ( Stats_Options::get_option( 'enable_odyssey_stats' ) ) {
68 // New widget implemented in Odyssey Stats.
69 $stats_widget = new Dashboard_Stats_Widget();
70 wp_add_dashboard_widget(
71 'jetpack_summary_widget',
72 $widget_title,
73 array( $stats_widget, 'render' )
74 );
75 $stats_widget->load_admin_scripts();
76 } else {
77 // Legacy widget.
78 wp_add_dashboard_widget(
79 'jetpack_summary_widget',
80 $widget_title,
81 array( __CLASS__, 'render_widget' )
82 );
83 wp_enqueue_style(
84 'jetpack-dashboard-widget',
85 Assets::get_file_url_for_environment(
86 'css/dashboard-widget.min.css',
87 'css/dashboard-widget.css'
88 ),
89 array(),
90 JETPACK__VERSION
91 );
92 wp_style_add_data( 'jetpack-dashboard-widget', 'rtl', 'replace' );
93 }
94 }
95 }
96
97 /**
98 * JavaScript and CSS for dashboard widget.
99 *
100 * @access public
101 * @return void
102 */
103 public static function admin_head() {
104 ?>
105 <script type="text/javascript">
106 /* <![CDATA[ */
107 jQuery( function($) {
108 var dashStats = jQuery( '#dashboard_stats div.inside' );
109
110 if ( dashStats.find( '.dashboard-widget-control-form' ).length ) {
111 return;
112 }
113
114 if ( ! dashStats.length ) {
115 dashStats = jQuery( '#dashboard_stats div.dashboard-widget-content' );
116 var h = parseInt( dashStats.parent().height() ) - parseInt( dashStats.prev().height() );
117 var args = 'width=' + dashStats.width() + '&height=' + h.toString();
118 } else {
119 if ( jQuery('#dashboard_stats' ).hasClass('postbox') ) {
120 var args = 'width=' + ( dashStats.prev().width() * 2 ).toString();
121 } else {
122 var args = 'width=' + ( dashStats.width() * 2 ).toString();
123 }
124 }
125
126 dashStats
127 .not( '.dashboard-widget-control' )
128 .load( 'admin.php?page=stats&noheader&dashboard&' + args, function() {
129 jQuery( '#dashboard_stats' ).removeClass( 'is-loading' );
130 jQuery( '#stat-chart' ).css( 'width', 'auto' );
131 } );
132
133 // Widget settings toggle container.
134 var toggle = $( '.js-toggle-stats_dashboard_widget_control' );
135
136 // Move the toggle in the widget header.
137 toggle.appendTo( '#jetpack_summary_widget .handle-actions' );
138
139 // Toggle settings when clicking on it.
140 toggle.show().click( function( e ) {
141 e.preventDefault();
142 e.stopImmediatePropagation();
143 $( this ).parent().toggleClass( 'controlVisible' );
144 $( '#stats_dashboard_widget_control' ).slideToggle();
145 } );
146 } );
147 /* ]]> */
148 </script>
149 <?php
150 }
151
152 /**
153 * Renders the widget and fires a dashboard widget action.
154 */
155 public static function render_widget() {
156 // This function won't exist if the stats module is disabled.
157 if ( function_exists( 'stats_jetpack_dashboard_widget' ) ) {
158 stats_jetpack_dashboard_widget();
159 }
160
161 /**
162 * Fires when the dashboard is loaded, but no longer used anywhere in the Jetpack plugin.
163 * The action is still available for backward compatibility.
164 *
165 * @since 3.4.0
166 */
167 do_action( 'jetpack_dashboard_widget' );
168
169 self::render_footer();
170 }
171
172 /**
173 * Load the widget footer showing brute force protection and Akismet stats.
174 */
175 public static function render_footer() {
176 ?>
177 <footer>
178 <div class="blocked-container">
179 <div class="protect">
180 <h3><?php esc_html_e( 'Brute force attack protection', 'jetpack' ); ?></h3>
181 <?php if ( Jetpack::is_module_active( 'protect' ) ) : ?>
182 <p class="blocked-count">
183 <?php echo esc_html( number_format_i18n( get_site_option( 'jetpack_protect_blocked_attempts', 0 ) ) ); ?>
184 </p>
185 <p><?php echo esc_html_x( 'Blocked malicious login attempts', '{#} Blocked malicious login attempts -- number is on a prior line, text is a caption.', 'jetpack' ); ?></p>
186 <?php elseif ( current_user_can( 'jetpack_activate_modules' ) && ! ( new Status() )->is_offline_mode() ) : ?>
187 <a href="
188 <?php
189 echo esc_url(
190 wp_nonce_url(
191 Jetpack::admin_url(
192 array(
193 'action' => 'activate',
194 'module' => 'protect',
195 )
196 ),
197 'jetpack_activate-protect'
198 )
199 );
200 ?>
201 " class="button button-primary" title="<?php esc_attr_e( 'Jetpack helps to keep you secure from brute-force login attacks.', 'jetpack' ); ?>">
202 <?php esc_html_e( 'Activate', 'jetpack' ); ?>
203 </a>
204 <?php else : ?>
205 <?php esc_html_e( 'Brute force attack protection is inactive.', 'jetpack' ); ?>
206 <?php endif; ?>
207 </div>
208
209 <div class="akismet">
210 <h3><?php esc_html_e( 'Akismet Anti-spam', 'jetpack' ); ?></h3>
211 <?php if ( is_plugin_active( 'akismet/akismet.php' ) ) : ?>
212 <p class="blocked-count">
213 <?php echo esc_html( number_format_i18n( get_option( 'akismet_spam_count', 0 ) ) ); ?>
214 </p>
215 <p><?php echo esc_html_x( 'Blocked spam comments', '{#} Spam comments blocked by Akismet -- number is on a prior line, text is a caption.', 'jetpack' ); ?></p>
216 <?php elseif ( current_user_can( 'activate_plugins' ) && ! is_wp_error( validate_plugin( 'akismet/akismet.php' ) ) ) : ?>
217 <a href="
218 <?php
219 echo esc_url(
220 wp_nonce_url(
221 add_query_arg(
222 array(
223 'action' => 'activate',
224 'plugin' => 'akismet/akismet.php',
225 ),
226 admin_url( 'plugins.php' )
227 ),
228 'activate-plugin_akismet/akismet.php'
229 )
230 );
231 ?>
232 " class="button button-primary">
233 <?php esc_html_e( 'Activate', 'jetpack' ); ?>
234 </a>
235 <?php else : ?>
236 <p><a href="<?php echo esc_url( 'https://akismet.com/?utm_source=jetpack&utm_medium=link&utm_campaign=Jetpack%20Dashboard%20Widget%20Footer%20Link' ); ?>"><?php esc_html_e( 'Anti-spam can help to keep your blog safe from spam!', 'jetpack' ); ?></a></p>
237 <?php endif; ?>
238 </div>
239 </div>
240 <div class="footer-links">
241 <a href="<?php echo esc_url( Redirect::get_url( 'jetpack-support-wordpress-com-stats' ) ); ?>" target="_blank">
242 <?php
243 $jetpack_logo = new Jetpack_Logo();
244 echo $jetpack_logo->get_jp_emblem( true );// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
245 ?>
246 </a>
247 </div>
248 </footer>
249
250 <?php
251 }
252 }
253