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