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