<?php /** * Gravatar shortcode for avatar and profile. * * Usage: * * [gravatar email="user@example.org" size="48"] * [gravatar_profile who="user@example.org"] * * @package automattic/jetpack */ add_shortcode( 'gravatar', 'jetpack_gravatar_shortcode' ); add_shortcode( 'gravatar_profile', 'jetpack_gravatar_profile_shortcode' ); /** * Get gravatar using the email provided at the specified size. * * @since 4.5.0 * * @param array $atts Shortcode attributes. * * @return bool|string */ function jetpack_gravatar_shortcode( $atts ) { $atts = shortcode_atts( array( 'email' => '', 'size' => 96, ), $atts ); if ( empty( $atts['email'] ) || ! is_email( $atts['email'] ) ) { return false; } $atts['size'] = (int) $atts['size']; if ( 0 > $atts['size'] ) { $atts['size'] = 96; } return get_avatar( $atts['email'], $atts['size'] ); } /** * Display Gravatar profile * * @since 4.5.0 * * @param array $atts Shortcode attributes. * * @uses shortcode_atts() * @uses get_user_by() * @uses is_email() * @uses sanitize_email() * @uses sanitize_user() * @uses set_url_scheme() * @uses wpcom_get_avatar_url() * @uses get_user_attribute() * @uses esc_url() * @uses esc_html() * @uses _e() * * @return string */ function jetpack_gravatar_profile_shortcode( $atts ) { // Give each use of the shortcode a unique ID. static $instance = 0; // Process passed attributes. $atts = shortcode_atts( array( 'who' => null, ), $atts, 'jetpack_gravatar_profile' ); // Can specify username, user ID, or email address. if ( is_numeric( $atts['who'] ) ) { $user_id = (int) $atts['who']; if ( ! is_user_member_of_blog( $user_id, get_current_blog_id() ) ) { // Bail if the user id is not a member of this site. return false; } $user = get_user_by( 'id', $user_id ); } elseif ( is_email( $atts['who'] ) ) { $user = get_user_by( 'email', sanitize_email( $atts['who'] ) ); } elseif ( is_string( $atts['who'] ) ) { $user = get_user_by( 'login', sanitize_user( $atts['who'] ) ); } else { $user = false; } // Bail if we don't have a user. if ( false === $user ) { return false; } $hashed_email = hash( 'sha256', strtolower( trim( $user->user_email ) ) ); $cache_key = 'jetpack_gravatar_profile_' . $hashed_email; $profile = get_transient( $cache_key ); if ( empty( $profile ) ) { $profile_url = sprintf( 'https://secure.gravatar.com/%s.json', $hashed_email ); $response = wp_remote_get( esc_url_raw( $profile_url ), array( 'User-Agent' => 'Jetpack Plugin Gravatar Profile Shortcode' ) ); $response_code = wp_remote_retrieve_response_code( $response ); $expire = 300; // Cache any errors for 5 minutes. $profile = array(); if ( $response_code === 200 ) { $profile = json_decode( wp_remote_retrieve_body( $response ), true ); if ( is_array( $profile ) && ! empty( $profile['entry'] ) && is_array( $profile['entry'] ) ) { // Sucessfully fetched the profile. Cache for 15 minutes. $expire = 900; $profile = $profile['entry'][0]; } } set_transient( $cache_key, $profile, $expire ); } // Fetching the profile returned an error. Bail. if ( empty( $profile ) ) { return false; } // Render the shortcode. $gravatar_url = 'https://gravatar.com/' . $hashed_email; $user_location = ! empty( $profile['currentLocation'] ) ? $profile['currentLocation'] : ''; $display_name = ! empty( $profile['displayName'] ) ? $profile['displayName'] : ''; $user_description = ! empty( $profile['aboutMe'] ) ? $profile['aboutMe'] : ''; if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { $gravatar_url = 'https://gravatar.com/' . $user->user_login; $avatar_url = wpcom_get_avatar_url( $user->ID, 96 ); $avatar_url = $avatar_url[0]; } else { $avatar_url = get_avatar_url( $user->user_email, array( 'size' => 96 ) ); } ob_start(); if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) { wp_enqueue_style( 'gravatar-style', plugins_url( '/css/gravatar-amp.css', __FILE__ ), array(), JETPACK__VERSION ); } else { ?> <script type="text/javascript"> ( function() { if ( null === document.getElementById( 'gravatar-profile-embed-styles' ) ) { var headID = document.getElementsByTagName( 'head' )[0]; var styleNode = document.createElement( 'style' ); styleNode.type = 'text/css'; styleNode.id = 'gravatar-profile-embed-styles'; var gCSS = '.grofile-wrap { border: solid 1px #f0f0f1; padding: 10px; } .grofile { padding: 0 0 5px 0; } .grofile-left { float: left; display: block; width: 96px; margin-right: 15px; } .grofile .gravatar { margin-bottom: 5px; } .grofile-clear { clear: left; font-size: 1px; height: 1px; } .grofile ul li a { text-indent: -99999px; } .grofile .grofile-left a:hover { text-decoration: none !important; border: none !important; } .grofile-name { margin-top: 0; }'; if ( document.all ) { styleNode.innerText = gCSS; } else { styleNode.textContent = gCSS; } headID.appendChild( styleNode ); } } )(); </script> <?php } ?> <div class="grofile vcard" id="grofile-embed-<?php echo esc_attr( $instance ); ?>"> <div class="grofile-inner"> <div class="grofile-left"> <div class="grofile-img"> <a href="<?php echo esc_url( $gravatar_url ); ?>"> <img src="<?php echo esc_url( $avatar_url ); ?>" width="96" height="96" class="no-grav gravatar photo" /> </a> </div> </div> <div class="grofile-right"> <p class="grofile-name fn"> <strong><?php echo esc_html( $display_name ); ?></strong> <?php if ( ! empty( $user_location ) ) : ?> <br><span class="grofile-location adr"><?php echo esc_html( $user_location ); ?></span><?php endif; ?> </p> <p class="grofile-bio"> <strong><?php esc_html_e( 'Bio:', 'jetpack' ); ?></strong> <?php echo wp_kses_post( $user_description ); ?> </p> <p class="grofile-view"> <a href="<?php echo esc_url( $gravatar_url ); ?>"><?php esc_html_e( 'View complete profile', 'jetpack' ); ?></a> </p> </div> <span class="grofile-clear"> </span> </div> </div> <?php // Increment and return the rendered profile. ++$instance; return ob_get_clean(); }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
css | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
img | Folder | 0755 |
|
|
js | Folder | 0755 |
|
|
archiveorg-book.php | File | 3.31 KB | 0644 |
|
archiveorg.php | File | 3.92 KB | 0644 |
|
archives.php | File | 2.38 KB | 0644 |
|
bandcamp.php | File | 7.75 KB | 0644 |
|
brightcove.php | File | 8.77 KB | 0644 |
|
cartodb.php | File | 803 B | 0644 |
|
class.filter-embedded-html-objects.php | File | 13.01 KB | 0644 |
|
codepen.php | File | 265 B | 0644 |
|
crowdsignal.php | File | 21.6 KB | 0644 |
|
dailymotion.php | File | 15.27 KB | 0644 |
|
descript.php | File | 3 KB | 0644 |
|
facebook.php | File | 4.73 KB | 0644 |
|
flatio.php | File | 383 B | 0644 |
|
flickr.php | File | 9.29 KB | 0644 |
|
getty.php | File | 7.54 KB | 0644 |
|
gist.php | File | 8.31 KB | 0644 |
|
googleapps.php | File | 9.84 KB | 0644 |
|
googlemaps.php | File | 7.97 KB | 0644 |
|
googleplus.php | File | 1.03 KB | 0644 |
|
gravatar.php | File | 6.13 KB | 0644 |
|
houzz.php | File | 920 B | 0644 |
|
inline-pdfs.php | File | 1.14 KB | 0644 |
|
instagram.php | File | 14.51 KB | 0644 |
|
kickstarter.php | File | 2.39 KB | 0644 |
|
mailchimp.php | File | 7.03 KB | 0644 |
|
medium.php | File | 3.22 KB | 0644 |
|
mixcloud.php | File | 3.62 KB | 0644 |
|
others.php | File | 2.07 KB | 0644 |
|
pinterest.php | File | 1.79 KB | 0644 |
|
presentations.php | File | 14.53 KB | 0644 |
|
quiz.php | File | 9.16 KB | 0644 |
|
recipe.php | File | 18.95 KB | 0644 |
|
scribd.php | File | 2.45 KB | 0644 |
|
sitemap.php | File | 562 B | 0644 |
|
slideshare.php | File | 3.81 KB | 0644 |
|
slideshow.php | File | 9.27 KB | 0644 |
|
smartframe.php | File | 3.64 KB | 0644 |
|
soundcloud.php | File | 8.68 KB | 0644 |
|
spotify.php | File | 3.26 KB | 0644 |
|
ted.php | File | 3.35 KB | 0644 |
|
tweet.php | File | 5.03 KB | 0644 |
|
twitchtv.php | File | 2.63 KB | 0644 |
|
twitter-timeline.php | File | 1.93 KB | 0644 |
|
unavailable.php | File | 3.24 KB | 0644 |
|
untappd-menu.php | File | 2.41 KB | 0644 |
|
upcoming-events.php | File | 1.68 KB | 0644 |
|
ustream.php | File | 3.13 KB | 0644 |
|
videopress.php | File | 423 B | 0644 |
|
vimeo.php | File | 11.51 KB | 0644 |
|
vine.php | File | 2.61 KB | 0644 |
|
vr.php | File | 4.92 KB | 0644 |
|
wordads.php | File | 1.81 KB | 0644 |
|
wufoo.php | File | 3.38 KB | 0644 |
|
youtube.php | File | 23.33 KB | 0644 |
|