%s", checked( $option, 'enabled', false ), esc_html__( 'View people\'s profiles when you mouse over their Gravatars', 'jetpack' ) ); ?> element of the avatar. * @param mixed $author User ID, email address, user login, comment object, user object, post object. * * @return string The element of the avatar. */ function grofiles_get_avatar( $avatar, $author ) { $is_amp = class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request(); if ( is_numeric( $author ) ) { grofiles_gravatars_to_append( $author ); } elseif ( is_string( $author ) ) { if ( str_contains( $author, '@' ) ) { grofiles_gravatars_to_append( $author ); } else { $user = get_user_by( 'slug', $author ); if ( $user ) { grofiles_gravatars_to_append( $user->ID ); } } } elseif ( isset( $author->comment_type ) ) { if ( $is_amp ) { if ( 1 === preg_match( '/avatar\/([a-zA-Z0-9]+)\?/', $avatar, $email_hash ) ) { $email_hash = $email_hash[1]; $cache_group = 'gravatar_profiles_'; $cache_key = 'gravatar_profile_' . $email_hash; $response_body = wp_cache_get( $cache_key, $cache_group ); if ( false === $response_body ) { $response = wp_remote_get( esc_url_raw( 'https://gravatar.com/' . $email_hash . '.json' ) ); if ( is_array( $response ) && ! is_wp_error( $response ) ) { $response_body = json_decode( $response['body'] ); wp_cache_set( $cache_key, $response_body, $cache_group, 60 * MINUTE_IN_SECONDS ); } } $profile = isset( $response_body->entry[0] ) ? $response_body->entry[0] : null; $display_name = isset( $profile->displayName ) ? $profile->displayName : ''; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase $location = isset( $profile->currentLocation ) ? $profile->currentLocation : ''; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase $description = isset( $profile->aboutMe ) ? $profile->aboutMe : ''; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase $avatar = '
' . $avatar . '
' . esc_html( $display_name ) . ( ! empty( $location ) ? ' – ' . esc_html( $location ) : '' ) . ( ! empty( $description ) ? ' – ' . esc_html( $description ) : '' ) . '
'; } return $avatar; } if ( '' !== $author->comment_type && 'comment' !== $author->comment_type ) { return $avatar; } if ( $author->user_id ) { grofiles_gravatars_to_append( $author->user_id ); } else { grofiles_gravatars_to_append( $author->comment_author_email ); } } elseif ( isset( $author->user_login ) ) { grofiles_gravatars_to_append( $author->ID ); } elseif ( isset( $author->post_author ) ) { grofiles_gravatars_to_append( $author->post_author ); } return $avatar; } /** * Loads Gravatar Hovercard script. * * @todo is_singular() only? */ function grofiles_attach_cards() { // Is the display of Avatars disabled? if ( ! get_option( 'show_avatars' ) ) { return; } // Is the display of Gravatar Hovercards disabled? if ( 'disabled' === Jetpack_Options::get_option_and_ensure_autoload( 'gravatar_disable_hovercards', '0' ) ) { return; } if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) { wp_enqueue_style( 'gravatar-hovercard-style', plugins_url( '/gravatar/gravatar-hovercards-amp.css', __FILE__ ), array(), JETPACK__VERSION ); } else { wp_enqueue_script( 'grofiles-cards', 'https://secure.gravatar.com/js/gprofiles.js', array(), GROFILES__CACHE_BUSTER, true ); wp_enqueue_script( 'wpgroho', plugins_url( 'wpgroho.js', __FILE__ ), array( 'grofiles-cards' ), JETPACK__VERSION, true ); if ( is_user_logged_in() ) { $cu = wp_get_current_user(); $my_hash = md5( $cu->user_email ); } elseif ( ! empty( $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] ) ) { $my_hash = md5( filter_var( wp_unslash( $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] ) ) ); } else { $my_hash = ''; } wp_localize_script( 'wpgroho', 'WPGroHo', compact( 'my_hash' ) ); } } /** * Add hovercards on Discussion settings panel. */ function grofiles_attach_cards_forced() { add_filter( 'pre_option_gravatar_disable_hovercards', 'grofiles_force_gravatar_enable_hovercards' ); grofiles_attach_cards(); } /** * Set hovercards as enabled on Discussion settings panel. */ function grofiles_force_gravatar_enable_hovercards() { return 'enabled'; } /** * Add script to admin footer on Discussion settings panel. */ function grofiles_admin_cards_forced() { add_action( 'admin_footer', 'grofiles_attach_cards_forced' ); } /** * Add script to admin footer. */ function grofiles_admin_cards() { add_action( 'admin_footer', 'grofiles_attach_cards' ); } /** * Dequeue the FE assets when there are no gravatars on the page to be displayed. */ function grofiles_extra_data() { $authors = grofiles_gravatars_to_append(); if ( ! $authors ) { wp_dequeue_script( 'grofiles-cards' ); wp_dequeue_script( 'wpgroho' ); } else { ?>
user_email ); } } elseif ( is_email( $author ) ) { $hash = md5( $author ); } elseif ( is_a( $author, 'WP_User' ) ) { $hash = md5( $author->user_email ); } if ( ! $hash ) { return; } ?>
$value ) : ?>
( data_key => data_callback, ... ) */ function grofiles_hovercards_data_callbacks() { /** * Filter the Gravatar Hovercard PHP callbacks. * * @module gravatar-hovercards * * @since 1.1.0 * * @param array $args Array of data callbacks. */ return apply_filters( 'grofiles_hovercards_data_callbacks', array() ); } /** * Keyed JSON object containing all profile data provided by registered callbacks * * @param int|string $author User ID or email address. * * @return array ( data_key => data, ... ) */ function grofiles_hovercards_data( $author ) { $r = array(); foreach ( grofiles_hovercards_data_callbacks() as $key => $callback ) { if ( ! is_callable( $callback ) ) { continue; } $data = call_user_func( $callback, $author, $key ); if ( $data !== null ) { $r[ $key ] = $data; } } return $r; }