PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.7.3
Jetpack – WP Security, Backup, Speed, & Growth v12.7.3
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 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 3 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 3 years ago flickr.php 3 years ago gallery.php 3 years ago goodreads.php 3 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 3 years ago top-posts.php 2 years ago twitter-timeline-admin.js 6 years ago twitter-timeline.php 3 years ago upcoming-events.php 3 years ago wordpress-post-widget.php 4 years ago
gravatar-profile.php
517 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 <li>
221 <a href="<?php echo esc_url( $personal_link['value'] ); ?>">
222 <?php
223 $link_title = ( ! empty( $personal_link['title'] ) ) ? $personal_link['title'] : $personal_link['value'];
224 echo esc_html( $link_title );
225 ?>
226 </a>
227 </li>
228 <?php endforeach; ?>
229 </ul>
230
231 <?php
232 }
233
234 /**
235 * Displays the "Verified Services" accounts.
236 *
237 * @param array $accounts Array of social accounts.
238 */
239 public function display_accounts( $accounts = array() ) {
240 if ( empty( $accounts ) ) {
241 return;
242 }
243 ?>
244
245 <h4>
246 <?php
247 echo esc_html(
248 /**
249 * Filter the Gravatar Profile widget's "Verified Services" section title.
250 *
251 * @module widgets
252 *
253 * @since 2.8.0
254 *
255 * @param string $str "Verified Services" section title.
256 */
257 apply_filters(
258 'jetpack_gravatar_verified_services_title',
259 __( 'Verified Services', 'jetpack' )
260 )
261 );
262 ?>
263 </h4>
264 <ul class="grofile-urls grofile-accounts">
265
266 <?php
267 foreach ( $accounts as $account ) :
268 if ( 'true' !== $account['verified'] ) {
269 continue;
270 }
271
272 $sanitized_service_name = $this->get_sanitized_service_name( $account['shortname'] );
273 $link_title = sprintf(
274 /* translators: %1$s: service username. %2$s: service name ( Facebook, Twitter, etc.) */
275 _x( '%1$s on %2$s', '1: User Name, 2: Service Name (Facebook, Twitter, ...)', 'jetpack' ),
276 esc_html( $account['display'] ),
277 esc_html( $sanitized_service_name )
278 );
279 ?>
280
281 <li>
282 <a href="<?php echo esc_url( $account['url'] ); ?>" title="<?php echo esc_html( $link_title ); ?>">
283 <span class="grofile-accounts-logo grofile-accounts-<?php echo esc_attr( $account['shortname'] ); ?> accounts_<?php echo esc_attr( $account['shortname'] ); ?>"></span>
284 </a>
285 </li>
286
287 <?php endforeach; ?>
288 </ul>
289
290 <?php
291 }
292
293 /**
294 * Enqueue CSS and JavaScript.
295 *
296 * @since 4.0.0
297 */
298 public function enqueue_scripts() {
299 wp_enqueue_style(
300 'gravatar-profile-widget',
301 plugins_url( 'gravatar-profile.css', __FILE__ ),
302 array(),
303 '20120711'
304 );
305
306 wp_enqueue_style(
307 'gravatar-card-services',
308 'https://secure.gravatar.com/css/services.css',
309 array(),
310 defined( 'GROFILES__CACHE_BUSTER' ) ? GROFILES__CACHE_BUSTER : gmdate( 'YW' )
311 );
312 }
313
314 /**
315 * Outputs the widget settings form.
316 *
317 * @param array $instance Current settings.
318 */
319 public function form( $instance ) {
320 $title = isset( $instance['title'] ) ? $instance['title'] : '';
321 $email = isset( $instance['email'] ) ? $instance['email'] : '';
322 $email_user = isset( $instance['email_user'] ) ? $instance['email_user'] : get_current_user_id();
323 $show_personal_links = isset( $instance['show_personal_links'] ) ? (bool) $instance['show_personal_links'] : '';
324 $show_account_links = isset( $instance['show_account_links'] ) ? (bool) $instance['show_account_links'] : '';
325 $profile_url = 'https://gravatar.com/profile/edit';
326
327 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
328 $profile_url = admin_url( 'profile.php' );
329
330 if ( isset( $_REQUEST['calypso'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
331 $profile_url = 'https://wordpress.com/me';
332 }
333 }
334 ?>
335 <p>
336 <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">
337 <?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 ); ?>" />
338 </label>
339 </p>
340
341 <p>
342 <label for="<?php echo esc_attr( $this->get_field_id( 'email_user' ) ); ?>">
343 <?php esc_html_e( 'Select a user or pick "custom" and enter a custom email address.', 'jetpack' ); ?>
344 <br />
345
346 <?php
347 wp_dropdown_users(
348 array(
349 'show_option_none' => __( 'Custom', 'jetpack' ),
350 'selected' => $email_user,
351 'name' => $this->get_field_name( 'email_user' ),
352 'id' => $this->get_field_id( 'email_user' ),
353 'class' => 'gravatar-profile-user-select',
354 )
355 );
356 ?>
357 </label>
358 </p>
359
360 <p class="gprofile-email-container <?php echo empty( $email_user ) || -1 === (int) $email_user ? '' : 'hidden'; ?>">
361 <label for="<?php echo esc_attr( $this->get_field_id( 'email' ) ); ?>"><?php esc_html_e( 'Custom Email Address', 'jetpack' ); ?>
362 <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 ); ?>" />
363 </label>
364 </p>
365
366 <p>
367 <label for="<?php echo esc_attr( $this->get_field_id( 'show_personal_links' ) ); ?>">
368 <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 ); ?> />
369 <?php esc_html_e( 'Show Personal Links', 'jetpack' ); ?>
370 <br />
371 <small><?php esc_html_e( 'Links to your websites, blogs, or any other sites that help describe who you are.', 'jetpack' ); ?></small>
372 </label>
373 </p>
374
375 <p>
376 <label for="<?php echo esc_attr( $this->get_field_id( 'show_account_links' ) ); ?>">
377 <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 ); ?> />
378 <?php esc_html_e( 'Show Account Links', 'jetpack' ); ?>
379 <br />
380 <small><?php esc_html_e( 'Links to services that you use across the web.', 'jetpack' ); ?></small>
381 </label>
382 </p>
383
384 <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>
385
386 <?php
387 }
388
389 /**
390 * Inline admin script.
391 */
392 public function admin_script() {
393 ?>
394 <script>
395 jQuery( function( $ ) {
396 $( '.wrap' ).on( 'change', '.gravatar-profile-user-select', function() {
397 var $input = $(this).closest('.widget-inside').find('.gprofile-email-container');
398 if ( '-1' === this.value.toLowerCase() ) {
399 $input.show();
400 } else {
401 $input.hide();
402 }
403 });
404 } );
405 </script>
406 <?php
407 }
408
409 /**
410 * Update widget.
411 *
412 * @see WP_Widget::update()
413 *
414 * @param array $new_instance New widget instance data.
415 * @param array $old_instance Old widget instance data.
416 */
417 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
418 $instance = array();
419
420 $instance['title'] = isset( $new_instance['title'] ) ? wp_kses( $new_instance['title'], array() ) : '';
421 $instance['email'] = isset( $new_instance['email'] ) ? wp_kses( $new_instance['email'], array() ) : '';
422 $instance['email_user'] = isset( $new_instance['email_user'] ) ? (int) $new_instance['email_user'] : -1;
423 $instance['show_personal_links'] = isset( $new_instance['show_personal_links'] ) ? (bool) $new_instance['show_personal_links'] : false;
424 $instance['show_account_links'] = isset( $new_instance['show_account_links'] ) ? (bool) $new_instance['show_account_links'] : false;
425
426 if ( $instance['email_user'] > 0 ) {
427 $user = get_userdata( $instance['email_user'] );
428 $instance['email'] = $user->user_email;
429 }
430
431 $hashed_email = md5( strtolower( trim( $instance['email'] ) ) );
432 $cache_key = 'grofile-' . $hashed_email;
433 delete_transient( $cache_key );
434
435 return $instance;
436 }
437
438 /**
439 * Get the Gravatar profile for a given email address.
440 *
441 * @param string $email Email address.
442 */
443 private function get_profile( $email ) {
444 $hashed_email = md5( strtolower( trim( $email ) ) );
445 $cache_key = 'grofile-' . $hashed_email;
446 $profile = get_transient( $cache_key );
447
448 if ( ! $profile ) {
449 $profile_url = sprintf(
450 'https://secure.gravatar.com/%s.json',
451 $hashed_email
452 );
453
454 $expire = 300;
455 $response = wp_remote_get(
456 esc_url_raw( $profile_url ),
457 array( 'User-Agent' => 'WordPress.com Gravatar Profile Widget' )
458 );
459 $response_code = wp_remote_retrieve_response_code( $response );
460 if ( 200 === $response_code ) {
461 $profile = wp_remote_retrieve_body( $response );
462 $profile = json_decode( $profile, true );
463
464 if ( is_array( $profile ) && ! empty( $profile['entry'] ) && is_array( $profile['entry'] ) ) {
465 $expire = 900; // Cache for 15 minutes.
466 $profile = $profile['entry'][0];
467 } else {
468 // Something strange happened. Cache for 5 minutes.
469 $profile = array();
470 }
471 } else {
472 $expire = 900; // Cache for 15 minutes.
473 $profile = array();
474 }
475
476 set_transient( $cache_key, $profile, $expire );
477 }
478 return $profile;
479 }
480
481 /**
482 * Return properly capitalized service name.
483 *
484 * @param string $shortname The service.
485 *
486 * @return string
487 */
488 private function get_sanitized_service_name( $shortname ) {
489 // Some services have stylized or mixed cap names *cough* WP *cough*.
490 switch ( $shortname ) {
491 case 'friendfeed':
492 return 'FriendFeed';
493 case 'linkedin':
494 return 'LinkedIn';
495 case 'yahoo':
496 return 'Yahoo!';
497 case 'youtube':
498 return 'YouTube';
499 // phpcs:ignore WordPress.WP.CapitalPDangit
500 case 'wordpress':
501 return 'WordPress';
502 case 'tripit':
503 return 'TripIt';
504 case 'myspace':
505 return 'MySpace';
506 case 'foursquare':
507 return 'foursquare';
508 case 'google':
509 return 'Google+';
510 default:
511 // Others don't.
512 $shortname = ucwords( $shortname );
513 }
514 return $shortname;
515 }
516 }
517