diff options
Diffstat (limited to 'plugins/jetpack/modules/shortcodes/gravatar.php')
-rw-r--r-- | plugins/jetpack/modules/shortcodes/gravatar.php | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/shortcodes/gravatar.php b/plugins/jetpack/modules/shortcodes/gravatar.php new file mode 100644 index 00000000..8d1c4ee1 --- /dev/null +++ b/plugins/jetpack/modules/shortcodes/gravatar.php @@ -0,0 +1,150 @@ +<?php +/** + * Gravatar shortcode for avatar and profile. + * + * Usage: + * + * [gravatar email="user@example.org" size="48"] + * [gravatar_profile who="user@example.org"] + */ + +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'] = intval( $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 = get_user_by( 'id', (int) $atts['who'] ); + } 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; + } + + // Render the shortcode + $gravatar_url = set_url_scheme( 'http://gravatar.com/' . $user->user_login ); + + if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { + $avatar_url = wpcom_get_avatar_url( $user->ID, 96 ); + $avatar_url = $avatar_url[0]; + $user_location = get_user_attribute( $user->ID, 'location' ); + } else { + $avatar_url = get_avatar_url( $user->user_email, array( 'size' => 96 ) ); + $user_location = get_user_meta( $user->ID, 'location', true ); + } + + ob_start(); + + ?> + <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 #eee; 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> + + <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( $user->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(); +} |