Widgets */ function jetpack_gravatar_profile_widget_init() { register_widget( 'Jetpack_Gravatar_Profile_Widget' ); } /** * Display a widgetized version of your Gravatar Profile * https://blog.gravatar.com/2010/03/26/gravatar-profiles/ */ class Jetpack_Gravatar_Profile_Widget extends WP_Widget { /** * Jetpack_Gravatar_Profile_Widget constructor. */ public function __construct() { parent::__construct( 'grofile', /** This filter is documented in modules/widgets/facebook-likebox.php */ apply_filters( 'jetpack_widget_name', __( 'Gravatar Profile', 'jetpack' ) ), array( 'classname' => 'widget-grofile grofile', 'description' => __( 'Display a mini version of your Gravatar Profile', 'jetpack' ), 'customize_selective_refresh' => true, ) ); if ( is_admin() ) { add_action( 'admin_footer-widgets.php', array( $this, 'admin_script' ) ); } if ( is_customize_preview() ) { add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); } } /** * Display the Widget. * * @see WP_Widget::widget() * * @param array $args Display arguments. * @param array $instance The settings for the particular instance of the widget. */ public function widget( $args, $instance ) { /** * Fires when an item is displayed on the front end. * * Can be used to track stats about the number of displays for a specific item * * @module widgets, shortcodes * * @since 1.6.0 * * @param string widget_view Item type (e.g. widget, or embed). * @param string grofile Item description (e.g. grofile, goodreads). */ do_action( 'jetpack_stats_extra', 'widget_view', 'grofile' ); $instance = wp_parse_args( $instance, array( 'title' => '', 'email' => '', ) ); /** This filter is documented in core/src/wp-includes/default-widgets.php */ $title = apply_filters( 'widget_title', $instance['title'] ); if ( ! $instance['email'] ) { if ( current_user_can( 'edit_theme_options' ) ) { echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ( ! empty( $title ) ) { echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } echo '

' . wp_kses( sprintf( /* translators: %s is a link to the widget settings page. */ __( 'You need to select what to show in this Gravatar Profile widget.', 'jetpack' ), admin_url( 'widgets.php' ) ), array( 'a' => array( 'href' => true, ), ) ) . '

'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } return; } echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ( ! empty( $title ) ) { echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $profile = $this->get_profile( $instance['email'] ); if ( ! empty( $profile ) ) { $profile = wp_parse_args( $profile, array( 'thumbnailUrl' => '', 'profileUrl' => '', 'displayName' => '', 'aboutMe' => '', 'urls' => array(), 'accounts' => array(), ) ); $base_width = 320; $gravatar_url = add_query_arg( 's', $base_width, $profile['thumbnailUrl'] ); // The default grav returned by grofiles is super small. // Generate a srcset with larger sizes for high DPI screens. $srcset = ''; $multipliers = array( 1, 1.5, 2, 3, 4 ); $srcset_values = array(); foreach ( $multipliers as $multiplier ) { $srcset_width = (int) ( $base_width * $multiplier ); $srcset_url = add_query_arg( 's', $srcset_width, $profile['thumbnailUrl'] ); $srcset_values[] = "{$srcset_url} {$multiplier}x"; } $srcset = implode( ', ', $srcset_values ); // Enqueue front end assets. $this->enqueue_scripts(); ?> <?php echo esc_attr( $profile['displayName'] ); ?>

display_personal_links( (array) $profile['urls'] ); } if ( $instance['show_account_links'] ) { $this->display_accounts( (array) $profile['accounts'] ); } ?>

' . esc_html__( 'Error loading profile', 'jetpack' ) . '

'; } echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Displays the "Personal Links" section. * * @param array $personal_links Array of links. */ public function display_personal_links( $personal_links = array() ) { if ( empty( $personal_links ) ) { return; } ?>

|

0 ) { $user = get_userdata( $instance['email_user'] ); $instance['email'] = $user->user_email; } $hashed_email = md5( strtolower( trim( $instance['email'] ) ) ); $cache_key = 'grofile-' . $hashed_email; delete_transient( $cache_key ); return $instance; } /** * Get the Gravatar profile for a given email address. * * @param string $email Email address. */ private function get_profile( $email ) { $hashed_email = md5( strtolower( trim( $email ) ) ); $cache_key = 'grofile-' . $hashed_email; $profile = get_transient( $cache_key ); if ( ! $profile ) { $profile_url = sprintf( 'https://secure.gravatar.com/%s.json', $hashed_email ); $expire = 300; $response = wp_remote_get( esc_url_raw( $profile_url ), array( 'User-Agent' => 'WordPress.com Gravatar Profile Widget' ) ); $response_code = wp_remote_retrieve_response_code( $response ); if ( 200 === $response_code ) { $profile = wp_remote_retrieve_body( $response ); $profile = json_decode( $profile, true ); if ( is_array( $profile ) && ! empty( $profile['entry'] ) && is_array( $profile['entry'] ) ) { $expire = 900; // Cache for 15 minutes. $profile = $profile['entry'][0]; } else { // Something strange happened. Cache for 5 minutes. $profile = array(); } } else { $expire = 900; // Cache for 15 minutes. $profile = array(); } set_transient( $cache_key, $profile, $expire ); } return $profile; } /** * Return properly capitalized service name. * * @param string $shortname The service. * * @return string */ private function get_sanitized_service_name( $shortname ) { // Some services have stylized or mixed cap names *cough* WP *cough*. switch ( $shortname ) { case 'friendfeed': return 'FriendFeed'; case 'linkedin': return 'LinkedIn'; case 'yahoo': return 'Yahoo!'; case 'youtube': return 'YouTube'; // phpcs:ignore WordPress.WP.CapitalPDangit case 'wordpress': return 'WordPress'; case 'tripit': return 'TripIt'; case 'myspace': return 'MySpace'; case 'foursquare': return 'foursquare'; case 'google': return 'Google+'; default: // Others don't. $shortname = ucwords( $shortname ); } return $shortname; } }