PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 8.6.1
Jetpack – WP Security, Backup, Speed, & Growth v8.6.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 / modules / widgets / my-community.php
jetpack / modules / widgets Last commit date
authors 8 years ago contact-info 6 years ago eu-cookie-law 6 years ago facebook-likebox 10 years ago flickr 6 years ago gallery 6 years ago goodreads 8 years ago google-translate 7 years ago image-widget 8 years ago migrate-to-core 8 years ago milestone 6 years ago my-community 8 years ago search 6 years ago simple-payments 7 years ago social-icons 7 years ago social-media-icons 8 years ago top-posts 8 years ago wordpress-post-widget 6 years ago authors.php 6 years ago blog-stats.php 7 years ago contact-info.php 6 years ago customizer-controls.css 9 years ago customizer-utils.js 7 years ago eu-cookie-law.php 6 years ago facebook-likebox.php 6 years ago flickr.php 6 years ago gallery.php 6 years ago goodreads.php 6 years ago google-translate.php 6 years ago gravatar-profile.css 9 years ago gravatar-profile.php 6 years ago image-widget.php 6 years ago internet-defense-league.php 6 years ago mailchimp.php 7 years ago milestone.php 9 years ago my-community.php 6 years ago rsslinks-widget.php 7 years ago search.php 6 years ago simple-payments.php 6 years ago social-icons.php 6 years ago social-media-icons.php 6 years ago top-posts.php 6 years ago twitter-timeline-admin.js 9 years ago twitter-timeline.php 6 years ago upcoming-events.php 7 years ago wordpress-post-widget.php 6 years ago
my-community.php
301 lines
1 <?php
2
3 use Automattic\Jetpack\Redirect;
4
5 /**
6 * Disable direct access/execution to/of the widget code.
7 */
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit;
10 }
11
12 /**
13 * Jetpack_My_Community_Widget displays community members of this site.
14 *
15 * A community member is a WordPress.com user that liked or commented on an entry or subscribed to the site.
16 * Requires WordPress.com connection to work. Otherwise it won't be visible in Widgets screen in admin.
17 */
18 class Jetpack_My_Community_Widget extends WP_Widget {
19 /**
20 * Transient expiration time.
21 *
22 * @var int $expiration
23 */
24 static $expiration = 600;
25
26 /**
27 * Default widget title.
28 *
29 * @var string $default_title
30 */
31 var $default_title;
32
33 /**
34 * Registers the widget with WordPress.
35 */
36 function __construct() {
37 parent::__construct(
38 'jetpack_my_community', // Base ID
39 /** This filter is documented in modules/widgets/facebook-likebox.php */
40 apply_filters( 'jetpack_widget_name', esc_html__( 'My Community', 'jetpack' ) ),
41 array(
42 'description' => esc_html__( "Display members of your site's community.", 'jetpack' ),
43 'customize_selective_refresh' => true,
44 )
45 );
46
47 if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
48 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
49 }
50
51 $this->default_title = esc_html__( 'Community', 'jetpack' );
52 }
53
54 /**
55 * Enqueue stylesheet for grid layout.
56 */
57 function enqueue_style() {
58 wp_register_style( 'jetpack-my-community-widget', plugins_url( 'my-community/style.css', __FILE__ ), array(), '20160129' );
59 wp_enqueue_style( 'jetpack-my-community-widget' );
60 }
61
62 /**
63 * Back end widget form.
64 *
65 * @see WP_Widget::form()
66 *
67 * @param array $instance Previously saved values from database.
68 *
69 * @return string|void
70 */
71 function form( $instance ) {
72 $title = isset( $instance['title'] ) ? $instance['title'] : false;
73 if ( false === $title ) {
74 $title = $this->default_title;
75 }
76
77 $number = isset( $instance['number'] ) ? $instance['number'] : 10;
78 if ( ! in_array( $number, array( 10, 50 ) ) ) {
79 $number = 10;
80 }
81
82 $include_likers = isset( $instance['include_likers'] ) ? (bool) $instance['include_likers'] : true;
83 $include_followers = isset( $instance['include_followers'] ) ? (bool) $instance['include_followers'] : true;
84 $include_commenters = isset( $instance['include_commenters'] ) ? (bool) $instance['include_commenters'] : true;
85 ?>
86
87 <p>
88 <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
89 <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
90 </p>
91
92 <p>
93 <label><?php esc_html_e( 'Show a maximum of', 'jetpack' ); ?></label>
94 </p>
95 <ul>
96 <li><label><input id="<?php echo $this->get_field_id( 'number' ); ?>-few" name="<?php echo $this->get_field_name( 'number' ); ?>" type="radio" value="10" <?php checked( '10', $number ); ?> /> <?php esc_html_e( '10 community members', 'jetpack' ); ?></label></li>
97 <li><label><input id="<?php echo $this->get_field_id( 'number' ); ?>-lots" name="<?php echo $this->get_field_name( 'number' ); ?>" type="radio" value="50" <?php checked( '50', $number ); ?> /> <?php esc_html_e( '50 community members', 'jetpack' ); ?></label></li>
98 </ul>
99
100 <p>
101 <label for="<?php echo $this->get_field_id( 'include_likers' ); ?>">
102 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'include_likers' ); ?>" name="<?php echo $this->get_field_name( 'include_likers' ); ?>" value="1" <?php checked( $include_likers, 1 ); ?> />
103 <?php esc_html_e( 'Include activity from likers', 'jetpack' ); ?>
104 </label>
105 </p>
106
107 <p>
108 <label for="<?php echo $this->get_field_id( 'include_followers' ); ?>">
109 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'include_followers' ); ?>" name="<?php echo $this->get_field_name( 'include_followers' ); ?>" value="1" <?php checked( $include_followers, 1 ); ?> />
110 <?php esc_html_e( 'Include activity from followers', 'jetpack' ); ?>
111 </label>
112 </p>
113
114 <p>
115 <label for="<?php echo $this->get_field_id( 'include_commenters' ); ?>">
116 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'include_commenters' ); ?>" name="<?php echo $this->get_field_name( 'include_commenters' ); ?>" value="1" <?php checked( $include_commenters, 1 ); ?> />
117 <?php esc_html_e( 'Include activity from commenters', 'jetpack' ); ?>
118 </label>
119 </p>
120
121 <?php
122 }
123
124 /**
125 * Sanitize widget form values as they are saved.
126 *
127 * @see WP_Widget::update()
128 *
129 * @param array $new_instance Values just sent to be saved.
130 * @param array $old_instance Previously saved values from database.
131 *
132 * @return array Updated safe values to be saved.
133 */
134 function update( $new_instance, $old_instance ) {
135 $instance = array();
136 $instance['title'] = wp_kses( $new_instance['title'], array() );
137 if ( $instance['title'] === $this->default_title ) {
138 $instance['title'] = false; // Store as false in case of language change
139 }
140
141 $instance['number'] = (int) $new_instance['number'];
142 if ( ! in_array( $instance['number'], array( 10, 50 ) ) ) {
143 $instance['number'] = 10;
144 }
145
146 $instance['include_likers'] = (bool) $new_instance['include_likers'];
147 $instance['include_followers'] = (bool) $new_instance['include_followers'];
148 $instance['include_commenters'] = (bool) $new_instance['include_commenters'];
149
150 delete_transient( "$this->id-v2-{$instance['number']}" . (int) $instance['include_likers'] . (int) $instance['include_followers'] . (int) $instance['include_commenters'] );
151
152 return $instance;
153 }
154
155 /**
156 * Front-end display of widget.
157 *
158 * @see WP_Widget::widget()
159 *
160 * @param array $args Widget arguments.
161 * @param array $instance Saved values from database.
162 */
163 function widget( $args, $instance ) {
164 $instance = wp_parse_args(
165 $instance, array(
166 'title' => false,
167 'number' => true,
168 'include_likers' => true,
169 'include_followers' => true,
170 'include_commenters' => true,
171 )
172 );
173
174 $title = $instance['title'];
175
176 if ( false === $title ) {
177 $title = $this->default_title;
178 }
179
180 /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
181 $title = apply_filters( 'widget_title', $title );
182
183 echo $args['before_widget'];
184
185 if ( ! empty( $title ) ) {
186 echo $args['before_title'] . $title . $args['after_title'];
187 }
188
189 $transient_name = "$this->id-v2-{$instance['number']}" . (int) $instance['include_likers'] . (int) $instance['include_followers'] . (int) $instance['include_commenters'];
190
191 $my_community = get_transient( $transient_name );
192
193 if ( empty( $my_community ) ) {
194 $my_community = $this->get_community( $instance );
195
196 set_transient( $transient_name, $my_community, self::$expiration );
197 }
198
199 echo $my_community;
200
201 echo $args['after_widget'];
202
203 /** This action is documented in modules/widgets/gravatar-profile.php */
204 do_action( 'jetpack_stats_extra', 'widget_view', 'my_community' );
205 }
206
207 /**
208 * Initiate request and render the response.
209 *
210 * @since 4.0
211 *
212 * @param array $query
213 *
214 * @return string
215 */
216 function get_community( $query ) {
217 $members = $this->fetch_remote_community( $query );
218
219 if ( ! empty( $members ) ) {
220
221 $my_community = '<div class="widgets-multi-column-grid"><ul>';
222
223 foreach ( $members as $member ) {
224 $my_community .= sprintf(
225 '<li><a href="%s" title="%s"><img alt="%s" src="%s" class="avatar avatar-48" height="48" width="48"></a></li>',
226 esc_url( $member->profile_URL ),
227 esc_attr( $member->name ),
228 esc_attr( $member->name ),
229 esc_url( $member->avatar_URL )
230 );
231 }
232
233 $my_community .= '</ul></div>';
234
235 } else {
236 if ( current_user_can( 'edit_theme_options' ) ) {
237 $my_community = '<p>' . wp_kses(
238 sprintf(
239 __( 'There are no users to display in this <a href="%1$s">My Community widget</a>. <a href="%2$s">Want more traffic?</a>', 'jetpack' ),
240 admin_url( 'widgets.php' ),
241 esc_url( Redirect::get_url( 'jetpack-support-getting-more-views-and-traffic' ) )
242 ), array( 'a' => array( 'href' => true ) )
243 ) . '</p>';
244 } else {
245 $my_community = '<p>' . esc_html__( "I'm just starting out; leave me a comment or a like :)", 'jetpack' ) . '</p>';
246 }
247 }
248
249 return $my_community;
250 }
251
252 /**
253 * Request community members to WordPress.com endpoint.
254 *
255 * @since 4.0
256 *
257 * @param $query
258 *
259 * @return array
260 */
261 function fetch_remote_community( $query ) {
262 $jetpack_blog_id = Jetpack_Options::get_option( 'id' );
263 $url = add_query_arg(
264 array(
265 'number' => $query['number'],
266 'likers' => (int) $query['include_likers'],
267 'followers' => (int) $query['include_followers'],
268 'commenters' => (int) $query['include_commenters'],
269 ),
270 "https://public-api.wordpress.com/rest/v1.1/sites/$jetpack_blog_id/community"
271 );
272 $response = wp_remote_get( $url );
273 $response_body = wp_remote_retrieve_body( $response );
274
275 if ( empty( $response_body ) ) {
276 return array();
277 }
278
279 $response_body = json_decode( $response_body );
280
281 if ( isset( $response_body->users ) ) {
282 return $response_body->users;
283 }
284
285 return array();
286 }
287 }
288
289 /**
290 * If site is connected to WordPress.com, register the widget.
291 *
292 * @since 4.0
293 */
294 function jetpack_my_community_init() {
295 if ( Jetpack::is_active() ) {
296 register_widget( 'Jetpack_My_Community_Widget' );
297 }
298 }
299
300 add_action( 'widgets_init', 'jetpack_my_community_init' );
301