Widgets */ add_action( 'widgets_init', 'jetpack_gravatar_profile_widget_init' ); function jetpack_gravatar_profile_widget_init() { register_widget( 'Jetpack_Gravatar_Profile_Widget' ); } /** * Display a widgetized version of your Gravatar Profile * http://blog.gravatar.com/2010/03/26/gravatar-profiles/ */ class Jetpack_Gravatar_Profile_Widget extends WP_Widget { 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' ) ); } } 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']; if ( ! empty( $title ) ) echo $args['before_title'] . $title . $args['after_title']; echo '

' . sprintf( __( 'You need to select what to show in this Gravatar Profile widget.', 'jetpack' ), admin_url( 'widgets.php' ) ) . '

'; echo $args['after_widget']; } return; } echo $args['before_widget']; if ( ! empty( $title ) ) echo $args['before_title'] . $title . $args['after_title']; $profile = $this->get_profile( $instance['email'] ); if( ! empty( $profile ) ) { $profile = wp_parse_args( $profile, array( 'thumbnailUrl' => '', 'profileUrl' => '', 'displayName' => '', 'aboutMe' => '', 'urls' => array(), 'accounts' => array(), ) ); $gravatar_url = add_query_arg( 's', 320, $profile['thumbnailUrl'] ); // the default grav returned by grofiles is super small // 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']; } 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; } private function get_profile( $email ) { $hashed_email = md5( strtolower( trim( $email ) ) ); $cache_key = 'grofile-' . $hashed_email; if( ! $profile = get_transient( $cache_key ) ) { $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; } 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'; 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; } } // END