PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.5.1
Jetpack – WP Security, Backup, Speed, & Growth v14.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 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 / modules / widgets / blog-stats.php
jetpack / modules / widgets Last commit date
authors 8 years ago contact-info 5 years ago eu-cookie-law 1 year ago facebook-likebox 11 years ago flickr 2 years ago gallery 1 year ago goodreads 2 years ago google-translate 1 year ago image-widget 8 years ago instagram 6 years ago internet-defense-league 2 years ago milestone 1 year ago my-community 8 years ago simple-payments 1 year ago social-icons 1 year ago social-media-icons 5 years ago top-posts 8 years ago wordpress-post-widget 2 years ago authors.php 1 year ago blog-stats.php 1 year ago class-jetpack-eu-cookie-law-widget.php 1 year ago class-jetpack-instagram-widget.php 1 year ago contact-info.php 1 year ago customizer-controls.css 9 years ago customizer-utils.js 1 year ago facebook-likebox.php 2 years ago flickr.php 1 year ago gallery.php 1 year ago goodreads.php 1 year ago google-translate.php 1 year ago gravatar-profile.css 1 year ago gravatar-profile.php 1 year ago image-widget.php 1 year ago internet-defense-league.php 3 years ago mailchimp.php 3 years ago milestone.php 5 years ago my-community.php 1 year ago rsslinks-widget.php 3 years ago simple-payments.php 1 year ago social-icons.php 1 year ago social-media-icons.php 1 year ago top-posts.php 1 year ago twitter-timeline-admin.js 1 year ago twitter-timeline.php 1 year ago upcoming-events.php 2 years ago wordpress-post-widget.php 1 year ago
blog-stats.php
196 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileNam
2 /**
3 * Blog Stats Widget.
4 *
5 * @since 4.5.0
6 *
7 * @package automattic/jetpack
8 */
9
10 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files.
11
12 use Automattic\Jetpack\Stats\WPCOM_Stats;
13 use Automattic\Jetpack\Status\Host;
14
15 // Disable direct access/execution to/of the widget code.
16 if ( ! defined( 'ABSPATH' ) ) {
17 exit( 0 );
18 }
19
20 /**
21 * Blog Stats Widget.
22 *
23 * Displays all time stats for that site.
24 *
25 * @since 4.5.0
26 */
27 class Jetpack_Blog_Stats_Widget extends WP_Widget {
28
29 /**
30 * Constructor
31 */
32 public function __construct() {
33 $widget_ops = array(
34 'classname' => 'blog-stats',
35 'description' => esc_html__( 'Show a hit counter for your blog.', 'jetpack' ),
36 'customize_selective_refresh' => true,
37 'show_instance_in_rest' => true,
38 );
39 parent::__construct(
40 'blog-stats',
41 /** This filter is documented in modules/widgets/facebook-likebox.php */
42 apply_filters( 'jetpack_widget_name', esc_html__( 'Blog Stats', 'jetpack' ) ),
43 $widget_ops
44 );
45 $this->alt_option_name = 'widget_statscounter';
46 add_filter( 'widget_types_to_hide_from_legacy_widget_block', array( $this, 'hide_widget_in_block_editor' ) );
47 }
48
49 /**
50 * Remove the "Blog Stats" widget from the Legacy Widget block
51 *
52 * @param array $widget_types List of widgets that are currently removed from the Legacy Widget block.
53 * @return array $widget_types New list of widgets that will be removed.
54 */
55 public function hide_widget_in_block_editor( $widget_types ) {
56 // @TODO: Hide for Simple sites when the block API starts working.
57 if ( ! ( new Host() )->is_wpcom_simple() ) {
58 $widget_types[] = 'blog-stats';
59 }
60 return $widget_types;
61 }
62
63 /**
64 * Return an associative array of default values
65 *
66 * These values are used in new widgets.
67 *
68 * @return array Array of default values for the Widget's options
69 */
70 public function defaults() {
71 return array(
72 'title' => esc_html__( 'Blog Stats', 'jetpack' ),
73 /* Translators: Number of views, plural */
74 'hits' => esc_html__( 'hits', 'jetpack' ),
75 );
76 }
77
78 /**
79 * Return All Time Stats for that blog.
80 *
81 * We query the WordPress.com Stats REST API endpoint.
82 *
83 * @uses Automattic\Jetpack\Stats\WPCOM_Stats->get_stats. That function caches data locally for 5 minutes.
84 *
85 * @return string|false $views All Time Stats for that blog.
86 */
87 public function get_stats() {
88 $wpcom_stats = new WPCOM_Stats();
89 // Get data from the WordPress.com Stats REST API endpoint.
90 $stats = $wpcom_stats->convert_stats_array_to_object( $wpcom_stats->get_stats( array( 'fields' => 'stats' ) ) );
91
92 if ( isset( $stats->stats->views ) ) {
93 return $stats->stats->views;
94 } else {
95 return false;
96 }
97 }
98
99 /**
100 * Back end widget form.
101 *
102 * @see WP_Widget::form()
103 *
104 * @param array $instance Previously saved values from database.
105 *
106 * @return void
107 */
108 public function form( $instance ) {
109 $instance = wp_parse_args( $instance, $this->defaults() );
110 ?>
111
112 <p>
113 <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
114 <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
115 </p>
116 <p>
117 <label for="<?php echo esc_attr( $this->get_field_id( 'hits' ) ); ?>"><?php esc_html_e( 'Pageview Description:', 'jetpack' ); ?></label>
118 <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'hits' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'hits' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['hits'] ); ?>" />
119 </p>
120 <p><?php esc_html_e( 'Hit counter is delayed by up to 5 minutes.', 'jetpack' ); ?></p>
121
122 <?php
123 }
124
125 /**
126 * Sanitize widget form values as they are saved.
127 *
128 * @see WP_Widget::update()
129 *
130 * @param array $new_instance Values just sent to be saved.
131 * @param array $old_instance Previously saved values from database.
132 *
133 * @return array Updated safe values to be saved.
134 */
135 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
136 $instance = array();
137 $instance['title'] = wp_kses( $new_instance['title'], array() );
138 $instance['hits'] = wp_kses( $new_instance['hits'], array() );
139
140 return $instance;
141 }
142
143 /**
144 * Front-end display of widget.
145 *
146 * @see WP_Widget::widget()
147 *
148 * @param array $args Widget arguments.
149 * @param array $instance Saved values from database.
150 */
151 public function widget( $args, $instance ) {
152 $instance = wp_parse_args( $instance, $this->defaults() );
153
154 /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
155 $title = apply_filters( 'widget_title', $instance['title'] );
156
157 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
158
159 if ( ! empty( $title ) ) {
160 echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
161 }
162
163 // Get the Site Stats.
164 $views = $this->get_stats();
165
166 if ( 0 === $views ) {
167 esc_html_e( 'There is nothing to display yet', 'jetpack' );
168 } elseif ( $views ) {
169 printf(
170 '<ul><li>%1$s %2$s</li></ul>',
171 esc_html( number_format_i18n( $views ) ),
172 isset( $instance['hits'] ) ? esc_html( $instance['hits'] ) : ''
173 );
174 } else {
175 esc_html_e( 'There was an issue retrieving stats. Please try again later.', 'jetpack' );
176 }
177
178 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
179
180 /** This action is already documented in modules/widgets/gravatar-profile.php */
181 do_action( 'jetpack_stats_extra', 'widget_view', 'blog_stats' );
182 }
183 }
184
185 /**
186 * If the Stats module is active in a recent version of Jetpack, register the widget.
187 *
188 * @since 4.5.0
189 */
190 function jetpack_blog_stats_widget_init() {
191 if ( Jetpack::is_module_active( 'stats' ) ) {
192 register_widget( 'Jetpack_Blog_Stats_Widget' );
193 }
194 }
195 add_action( 'widgets_init', 'jetpack_blog_stats_widget_init' );
196