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