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