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