PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.7.2
Jetpack – WP Security, Backup, Speed, & Growth v13.7.2
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 / gravatar-profile.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 2 years ago goodreads 2 years ago google-translate 4 years ago image-widget 8 years ago instagram 6 years ago internet-defense-league 2 years ago migrate-to-core 3 years ago milestone 2 years ago my-community 8 years ago simple-payments 2 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 2 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 2 years ago goodreads.php 2 years ago google-translate.php 2 years ago gravatar-profile.css 10 years ago gravatar-profile.php 2 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
gravatar-profile.php
519 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 // phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move classes to appropriately-named class files.
4
5 add_action( 'widgets_init', 'jetpack_gravatar_profile_widget_init' );
6 /**
7 * Register the widget for use in Appearance -> Widgets
8 */
9 function jetpack_gravatar_profile_widget_init() {
10 register_widget( 'Jetpack_Gravatar_Profile_Widget' );
11 }
12
13 /**
14 * Display a widgetized version of your Gravatar Profile
15 * https://blog.gravatar.com/2010/03/26/gravatar-profiles/
16 */
17 class Jetpack_Gravatar_Profile_Widget extends WP_Widget {
18 /**
19 * Jetpack_Gravatar_Profile_Widget constructor.
20 */
21 public function __construct() {
22 parent::__construct(
23 'grofile',
24 /** This filter is documented in modules/widgets/facebook-likebox.php */
25 apply_filters( 'jetpack_widget_name', __( 'Gravatar Profile', 'jetpack' ) ),
26 array(
27 'classname' => 'widget-grofile grofile',
28 'description' => __( 'Display a mini version of your Gravatar Profile', 'jetpack' ),
29 'customize_selective_refresh' => true,
30 )
31 );
32
33 if ( is_admin() ) {
34 add_action( 'admin_footer-widgets.php', array( $this, 'admin_script' ) );
35 }
36
37 if ( is_customize_preview() ) {
38 add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
39 }
40 }
41
42 /**
43 * Display the Widget.
44 *
45 * @see WP_Widget::widget()
46 *
47 * @param array $args Display arguments.
48 * @param array $instance The settings for the particular instance of the widget.
49 */
50 public function widget( $args, $instance ) {
51 /**
52 * Fires when an item is displayed on the front end.
53 *
54 * Can be used to track stats about the number of displays for a specific item
55 *
56 * @module widgets, shortcodes
57 *
58 * @since 1.6.0
59 *
60 * @param string widget_view Item type (e.g. widget, or embed).
61 * @param string grofile Item description (e.g. grofile, goodreads).
62 */
63 do_action( 'jetpack_stats_extra', 'widget_view', 'grofile' );
64
65 $instance = wp_parse_args(
66 $instance,
67 array(
68 'title' => '',
69 'email' => '',
70 )
71 );
72
73 /** This filter is documented in core/src/wp-includes/default-widgets.php */
74 $title = apply_filters( 'widget_title', $instance['title'] );
75
76 if ( ! $instance['email'] ) {
77 if ( current_user_can( 'edit_theme_options' ) ) {
78 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
79 if ( ! empty( $title ) ) {
80 echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
81 }
82 echo '<p>' . wp_kses(
83 sprintf(
84 /* translators: %s is a link to the widget settings page. */
85 __( 'You need to select what to show in this <a href="%s">Gravatar Profile widget</a>.', 'jetpack' ),
86 admin_url( 'widgets.php' )
87 ),
88 array(
89 'a' => array(
90 'href' => true,
91 ),
92 )
93 ) . '</p>';
94 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
95 }
96 return;
97 }
98
99 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
100 if ( ! empty( $title ) ) {
101 echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
102 }
103
104 $profile = $this->get_profile( $instance['email'] );
105
106 if ( ! empty( $profile ) ) {
107 $profile = wp_parse_args(
108 $profile,
109 array(
110 'thumbnailUrl' => '',
111 'profileUrl' => '',
112 'displayName' => '',
113 'aboutMe' => '',
114 'urls' => array(),
115 'accounts' => array(),
116 )
117 );
118 $base_width = 320;
119 $gravatar_url = add_query_arg( 's', $base_width, $profile['thumbnailUrl'] ); // The default grav returned by grofiles is super small.
120
121 // Generate a srcset with larger sizes for high DPI screens.
122 $srcset = '';
123 $multipliers = array( 1, 1.5, 2, 3, 4 );
124 $srcset_values = array();
125 foreach ( $multipliers as $multiplier ) {
126 $srcset_width = (int) ( $base_width * $multiplier );
127 $srcset_url = add_query_arg( 's', $srcset_width, $profile['thumbnailUrl'] );
128 $srcset_values[] = "{$srcset_url} {$multiplier}x";
129 }
130 $srcset = implode( ', ', $srcset_values );
131
132 // Enqueue front end assets.
133 $this->enqueue_scripts();
134
135 ?>
136 <img
137 src="<?php echo esc_url( $gravatar_url ); ?>"
138 srcset="<?php echo esc_attr( $srcset ); ?>"
139 class="grofile-thumbnail no-grav"
140 alt="<?php echo esc_attr( $profile['displayName'] ); ?>"
141 loading="lazy" />
142 <div class="grofile-meta">
143 <h4><a href="<?php echo esc_url( $profile['profileUrl'] ); ?>"><?php echo esc_html( $profile['displayName'] ); ?></a></h4>
144 <p><?php echo wp_kses_post( $profile['aboutMe'] ); ?></p>
145 </div>
146
147 <?php
148
149 if ( $instance['show_personal_links'] ) {
150 $this->display_personal_links( (array) $profile['urls'] );
151 }
152
153 if ( $instance['show_account_links'] ) {
154 $this->display_accounts( (array) $profile['accounts'] );
155 }
156
157 ?>
158
159 <p><a href="<?php echo esc_url( $profile['profileUrl'] ); ?>" class="grofile-full-link">
160 <?php
161 echo esc_html(
162 /**
163 * Filter the Gravatar Profile widget's profile link title.
164 *
165 * @module widgets
166 *
167 * @since 2.8.0
168 *
169 * @param string $str Profile link title.
170 */
171 apply_filters(
172 'jetpack_gravatar_full_profile_title',
173 __( 'View Full Profile &rarr;', 'jetpack' )
174 )
175 );
176 ?>
177 </a></p>
178
179 <?php
180 } elseif ( current_user_can( 'edit_theme_options' ) ) {
181 echo '<p>' . esc_html__( 'Error loading profile', 'jetpack' ) . '</p>';
182 }
183
184 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
185 }
186
187 /**
188 * Displays the "Personal Links" section.
189 *
190 * @param array $personal_links Array of links.
191 */
192 public function display_personal_links( $personal_links = array() ) {
193 if ( empty( $personal_links ) ) {
194 return;
195 }
196 ?>
197
198 <h4>
199 <?php
200 echo esc_html(
201 apply_filters(
202 /**
203 * Filter the Gravatar Profile widget's "Personal Links" section title.
204 *
205 * @module widgets
206 *
207 * @since 2.8.0
208 *
209 * @param string $str "Personal Links" section title.
210 */
211 'jetpack_gravatar_personal_links_title',
212 __( 'Personal Links', 'jetpack' )
213 )
214 );
215 ?>
216 </h4>
217 <ul class="grofile-urls grofile-links">
218
219 <?php foreach ( $personal_links as $personal_link ) : ?>
220 <?php if ( is_array( $personal_link ) ) : ?>
221 <li>
222 <a href="<?php echo esc_url( $personal_link['value'] ); ?>">
223 <?php
224 $link_title = ( ! empty( $personal_link['title'] ) ) ? $personal_link['title'] : $personal_link['value'];
225 echo esc_html( $link_title );
226 ?>
227 </a>
228 </li>
229 <?php endif; ?>
230 <?php endforeach; ?>
231 </ul>
232
233 <?php
234 }
235
236 /**
237 * Displays the "Verified Services" accounts.
238 *
239 * @param array $accounts Array of social accounts.
240 */
241 public function display_accounts( $accounts = array() ) {
242 if ( empty( $accounts ) ) {
243 return;
244 }
245 ?>
246
247 <h4>
248 <?php
249 echo esc_html(
250 /**
251 * Filter the Gravatar Profile widget's "Verified Services" section title.
252 *
253 * @module widgets
254 *
255 * @since 2.8.0
256 *
257 * @param string $str "Verified Services" section title.
258 */
259 apply_filters(
260 'jetpack_gravatar_verified_services_title',
261 __( 'Verified Services', 'jetpack' )
262 )
263 );
264 ?>
265 </h4>
266 <ul class="grofile-urls grofile-accounts">
267
268 <?php
269 foreach ( $accounts as $account ) :
270 if ( 'true' !== $account['verified'] ) {
271 continue;
272 }
273
274 $sanitized_service_name = $this->get_sanitized_service_name( $account['shortname'] );
275 $link_title = sprintf(
276 /* translators: %1$s: service username. %2$s: service name ( Facebook, Twitter, etc.) */
277 _x( '%1$s on %2$s', '1: User Name, 2: Service Name (Facebook, Twitter, ...)', 'jetpack' ),
278 esc_html( $account['display'] ),
279 esc_html( $sanitized_service_name )
280 );
281 ?>
282
283 <li>
284 <a href="<?php echo esc_url( $account['url'] ); ?>" title="<?php echo esc_html( $link_title ); ?>">
285 <span class="grofile-accounts-logo grofile-accounts-<?php echo esc_attr( $account['shortname'] ); ?> accounts_<?php echo esc_attr( $account['shortname'] ); ?>"></span>
286 </a>
287 </li>
288
289 <?php endforeach; ?>
290 </ul>
291
292 <?php
293 }
294
295 /**
296 * Enqueue CSS and JavaScript.
297 *
298 * @since 4.0.0
299 */
300 public function enqueue_scripts() {
301 wp_enqueue_style(
302 'gravatar-profile-widget',
303 plugins_url( 'gravatar-profile.css', __FILE__ ),
304 array(),
305 '20120711'
306 );
307
308 wp_enqueue_style(
309 'gravatar-card-services',
310 'https://secure.gravatar.com/css/services.css',
311 array(),
312 defined( 'GROFILES__CACHE_BUSTER' ) ? GROFILES__CACHE_BUSTER : gmdate( 'YW' )
313 );
314 }
315
316 /**
317 * Outputs the widget settings form.
318 *
319 * @param array $instance Current settings.
320 */
321 public function form( $instance ) {
322 $title = isset( $instance['title'] ) ? $instance['title'] : '';
323 $email = isset( $instance['email'] ) ? $instance['email'] : '';
324 $email_user = isset( $instance['email_user'] ) ? $instance['email_user'] : get_current_user_id();
325 $show_personal_links = isset( $instance['show_personal_links'] ) ? (bool) $instance['show_personal_links'] : '';
326 $show_account_links = isset( $instance['show_account_links'] ) ? (bool) $instance['show_account_links'] : '';
327 $profile_url = 'https://gravatar.com/profile/edit';
328
329 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
330 $profile_url = admin_url( 'profile.php' );
331
332 if ( isset( $_REQUEST['calypso'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
333 $profile_url = 'https://wordpress.com/me';
334 }
335 }
336 ?>
337 <p>
338 <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">
339 <?php esc_html_e( 'Title', 'jetpack' ); ?> <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( $title ); ?>" />
340 </label>
341 </p>
342
343 <p>
344 <label for="<?php echo esc_attr( $this->get_field_id( 'email_user' ) ); ?>">
345 <?php esc_html_e( 'Select a user or pick "custom" and enter a custom email address.', 'jetpack' ); ?>
346 <br />
347
348 <?php
349 wp_dropdown_users(
350 array(
351 'show_option_none' => __( 'Custom', 'jetpack' ),
352 'selected' => $email_user,
353 'name' => $this->get_field_name( 'email_user' ),
354 'id' => $this->get_field_id( 'email_user' ),
355 'class' => 'gravatar-profile-user-select',
356 )
357 );
358 ?>
359 </label>
360 </p>
361
362 <p class="gprofile-email-container <?php echo empty( $email_user ) || -1 === (int) $email_user ? '' : 'hidden'; ?>">
363 <label for="<?php echo esc_attr( $this->get_field_id( 'email' ) ); ?>"><?php esc_html_e( 'Custom Email Address', 'jetpack' ); ?>
364 <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'email' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'email' ) ); ?>" type="text" value="<?php echo esc_attr( $email ); ?>" />
365 </label>
366 </p>
367
368 <p>
369 <label for="<?php echo esc_attr( $this->get_field_id( 'show_personal_links' ) ); ?>">
370 <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'show_personal_links' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'show_personal_links' ) ); ?>" <?php checked( $show_personal_links ); ?> />
371 <?php esc_html_e( 'Show Personal Links', 'jetpack' ); ?>
372 <br />
373 <small><?php esc_html_e( 'Links to your websites, blogs, or any other sites that help describe who you are.', 'jetpack' ); ?></small>
374 </label>
375 </p>
376
377 <p>
378 <label for="<?php echo esc_attr( $this->get_field_id( 'show_account_links' ) ); ?>">
379 <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'show_account_links' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'show_account_links' ) ); ?>" <?php checked( $show_account_links ); ?> />
380 <?php esc_html_e( 'Show Account Links', 'jetpack' ); ?>
381 <br />
382 <small><?php esc_html_e( 'Links to services that you use across the web.', 'jetpack' ); ?></small>
383 </label>
384 </p>
385
386 <p><a href="<?php echo esc_url( $profile_url ); ?>" target="_blank" title="<?php esc_attr_e( 'Opens in new window', 'jetpack' ); ?>"><?php esc_html_e( 'Edit Your Profile', 'jetpack' ); ?></a> | <a href="https://gravatar.com" target="_blank" title="<?php esc_attr_e( 'Opens in new window', 'jetpack' ); ?>"><?php esc_html_e( "What's a Gravatar?", 'jetpack' ); ?></a></p>
387
388 <?php
389 }
390
391 /**
392 * Inline admin script.
393 */
394 public function admin_script() {
395 ?>
396 <script>
397 jQuery( function( $ ) {
398 $( '.wrap' ).on( 'change', '.gravatar-profile-user-select', function() {
399 var $input = $(this).closest('.widget-inside').find('.gprofile-email-container');
400 if ( '-1' === this.value.toLowerCase() ) {
401 $input.show();
402 } else {
403 $input.hide();
404 }
405 });
406 } );
407 </script>
408 <?php
409 }
410
411 /**
412 * Update widget.
413 *
414 * @see WP_Widget::update()
415 *
416 * @param array $new_instance New widget instance data.
417 * @param array $old_instance Old widget instance data.
418 */
419 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
420 $instance = array();
421
422 $instance['title'] = isset( $new_instance['title'] ) ? wp_kses( $new_instance['title'], array() ) : '';
423 $instance['email'] = isset( $new_instance['email'] ) ? wp_kses( $new_instance['email'], array() ) : '';
424 $instance['email_user'] = isset( $new_instance['email_user'] ) ? (int) $new_instance['email_user'] : -1;
425 $instance['show_personal_links'] = isset( $new_instance['show_personal_links'] ) ? (bool) $new_instance['show_personal_links'] : false;
426 $instance['show_account_links'] = isset( $new_instance['show_account_links'] ) ? (bool) $new_instance['show_account_links'] : false;
427
428 if ( $instance['email_user'] > 0 ) {
429 $user = get_userdata( $instance['email_user'] );
430 $instance['email'] = $user->user_email;
431 }
432
433 $hashed_email = md5( strtolower( trim( $instance['email'] ) ) );
434 $cache_key = 'grofile-' . $hashed_email;
435 delete_transient( $cache_key );
436
437 return $instance;
438 }
439
440 /**
441 * Get the Gravatar profile for a given email address.
442 *
443 * @param string $email Email address.
444 */
445 private function get_profile( $email ) {
446 $hashed_email = md5( strtolower( trim( $email ) ) );
447 $cache_key = 'grofile-' . $hashed_email;
448 $profile = get_transient( $cache_key );
449
450 if ( ! $profile ) {
451 $profile_url = sprintf(
452 'https://secure.gravatar.com/%s.json',
453 $hashed_email
454 );
455
456 $expire = 300;
457 $response = wp_remote_get(
458 esc_url_raw( $profile_url ),
459 array( 'User-Agent' => 'WordPress.com Gravatar Profile Widget' )
460 );
461 $response_code = wp_remote_retrieve_response_code( $response );
462 if ( 200 === $response_code ) {
463 $profile = wp_remote_retrieve_body( $response );
464 $profile = json_decode( $profile, true );
465
466 if ( is_array( $profile ) && ! empty( $profile['entry'] ) && is_array( $profile['entry'] ) ) {
467 $expire = 900; // Cache for 15 minutes.
468 $profile = $profile['entry'][0];
469 } else {
470 // Something strange happened. Cache for 5 minutes.
471 $profile = array();
472 }
473 } else {
474 $expire = 900; // Cache for 15 minutes.
475 $profile = array();
476 }
477
478 set_transient( $cache_key, $profile, $expire );
479 }
480 return $profile;
481 }
482
483 /**
484 * Return properly capitalized service name.
485 *
486 * @param string $shortname The service.
487 *
488 * @return string
489 */
490 private function get_sanitized_service_name( $shortname ) {
491 // Some services have stylized or mixed cap names *cough* WP *cough*.
492 switch ( $shortname ) {
493 case 'friendfeed':
494 return 'FriendFeed';
495 case 'linkedin':
496 return 'LinkedIn';
497 case 'yahoo':
498 return 'Yahoo!';
499 case 'youtube':
500 return 'YouTube';
501 // phpcs:ignore WordPress.WP.CapitalPDangit
502 case 'wordpress':
503 return 'WordPress';
504 case 'tripit':
505 return 'TripIt';
506 case 'myspace':
507 return 'MySpace';
508 case 'foursquare':
509 return 'foursquare';
510 case 'google':
511 return 'Google+';
512 default:
513 // Others don't.
514 $shortname = ucwords( $shortname );
515 }
516 return $shortname;
517 }
518 }
519