WordPress.org

Make WordPress Core

Ticket #21195: 21195.3.diff

File 21195.3.diff, 12.7 KB (added by mdawaffe, 8 years ago)
  • wp-includes/link-template.php

     
    24352435                echo $before, $link, $after;
    24362436        }
    24372437}
     2438
     2439/**
     2440 * Retrieve the avatar URL for a user, email address, MD5 hash, comment, or post.
     2441 *
     2442 * @uses apply_filters() 'pre_get_avatar_url' to bypass
     2443 * @uses apply_filters() 'get_avatar_url' filters the result
     2444 * @uses apply_filters() 'get_avatar_comment_types' filters the comment types for which we can calculate an avatar
     2445 *
     2446 * @since 3.6
     2447 * @param mixed $id_or_email The Gravatar to retrieve:
     2448 *      (int)    {user_id}                   : Use the email address of the corresponding user
     2449 *      (string) "{hash}@md5.gravatar.com"   : Use the hash directly
     2450 *      (string) "{email}"
     2451 *      (object) {User row or WP_User object}: Use the user's email
     2452 *      (object) {Post row or WP_Post object}: Use the post_author's email
     2453 *      (object) {Comment row}               : Use the comment's user_id or comment_author_email
     2454 * @param array $args
     2455 *      size   : (int) Size of the avatar image
     2456 *      default: (string) URL for the default image or a default type:
     2457 *              404                    : Return a 404 instead of a default image
     2458 *              retro                  : 8bit
     2459 *              monsterid              : Monster
     2460 *              wavatar                : cartoon face
     2461 *              identicon              : the "quilt"
     2462 *              mystery, mm, mysteryman: The Oyster Man
     2463 *              blank                  : A transparent GIF
     2464 *              gravatar_default       : Gravatar Logo
     2465 *      force_default: (bool) Always show the default image, never the Gravatar
     2466 *      rating : display avatars up to the given rating: G < PG < R < X.
     2467 *      scheme : (string) @see set_url_scheme()
     2468 *      &processed_args : (array) Pass as reference.  When the function returns, the value will be the processed/sanitized $args plus a "found_avatar" guess.
     2469 *
     2470 * @return bool|string URL false on failure
     2471 */
     2472function get_avatar_url( $id_or_email, $args = null ) {
     2473        $original_args = $args;
     2474
     2475        $args = wp_parse_args( $args, array(
     2476                'size'           => 96,
     2477                'default'        => get_option( 'avatar_default', 'mystery' ),
     2478                'force_default'  => false,
     2479                'rating'         => get_option( 'avatar_rating' ),
     2480                'scheme'         => null,
     2481                'processed_args' => null, // if used, should be a reference
     2482        ) );
     2483
     2484        if ( is_numeric( $args['size'] ) ) {
     2485                $args['size'] = absint( $args['size'] );
     2486                if ( !$args['size'] ) {
     2487                        $args['size'] = 96;
     2488                }
     2489        } else {
     2490                $args['size'] = 96;
     2491        }
     2492
     2493        if ( empty( $args['default'] ) ) {
     2494                $args['default'] = 'mystery';
     2495        }
     2496
     2497        switch ( $args['default'] ) {
     2498        case 'mm' :
     2499        case 'mystery' :
     2500        case 'mysteryman' :
     2501                $args['default'] = 'mm';
     2502                break;
     2503        case 'gravatar_default' :
     2504                $args['default'] = false;
     2505                break;
     2506        }
     2507
     2508        $args['force_default'] = (bool) $args['force_default'];
     2509
     2510        $args['rating'] = strtolower( $args['rating'] );
     2511
     2512        $args['found_avatar'] = false;
     2513
     2514        $url = apply_filters_ref_array( 'pre_get_avatar_url', array( null, $id_or_email, &$args, $original_args ) );
     2515        if ( !is_null( $url ) ) {
     2516                $return = apply_filters_ref_array( 'get_avatar_url', array( $url, $id_or_email, &$args, $original_args ) );
     2517                $args['processed_args'] = $args;
     2518                unset( $args['processed_args']['processed_args'] );
     2519                return $return;
     2520        }
     2521
     2522        $email_hash = '';
     2523        $user = $email = false;
     2524
     2525        if ( is_numeric( $id_or_email ) ) {
     2526                $user = get_user_by( 'id', absint( $id_or_email ) );
     2527        } elseif ( is_string( $id_or_email ) ) {
     2528                if ( strpos( $id_or_email, '@md5.gravatar.com' ) ) {
     2529                        // md5 hash
     2530                        list( $email_hash ) = explode( '@', $id_or_email );
     2531                } else {
     2532                        // email address
     2533                        $email = $id_or_email;
     2534                }
     2535        } elseif ( is_object( $id_or_email ) ) {
     2536                if ( isset( $id_or_email->comment_ID ) ) {
     2537                        // Comment Object
     2538
     2539                        // No avatar for pingbacks or trackbacks
     2540                        $allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
     2541                        if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) ) {
     2542                                $args['processed_args'] = $args;
     2543                                unset( $args['processed_args']['processed_args'] );
     2544                                return false;
     2545                        }
     2546
     2547                        if ( ! empty( $id_or_email->user_id ) ) {
     2548                                $user = get_user_by( 'id', (int) $id_or_email->user_id );
     2549                        }
     2550                        if ( ( !$user || is_wp_error( $user ) ) && ! empty( $id_or_email->comment_author_email ) ) {
     2551                                $email = $id_or_email->comment_author_email;
     2552                        }
     2553                } elseif ( ! empty( $id_or_email->user_login ) ) {
     2554                        // User Object
     2555                        $user = $id_or_email;
     2556                } elseif ( ! empty( $id_or_email->post_author ) ) {
     2557                        // Post Object
     2558                        $user = get_user_by( 'id', (int) $id_or_email->post_author );
     2559                }
     2560        }
     2561       
     2562        if ( !$email_hash ) {
     2563                if ( $user ) {
     2564                        $email = $user->user_email;
     2565                }
     2566
     2567                if ( $email ) {
     2568                        $email_hash = md5( strtolower( trim( $email ) ) );
     2569                }
     2570        }
     2571
     2572        if ( $email_hash ) {
     2573                $args['found_avatar'] = true;
     2574        }
     2575
     2576        $url_args = array(
     2577                's' => $args['size'],
     2578                'd' => $args['default'],
     2579                'f' => $args['force_default'] ? 'y' : false,
     2580                'r' => $args['rating'],
     2581        );
     2582
     2583        $url = sprintf( 'http://%d.gravatar.com/avatar/%s', hexdec( $email_hash[0] ) % 3, $email_hash );
     2584
     2585        $url = add_query_arg(
     2586                rawurlencode_deep( array_filter( $url_args ) ),
     2587                set_url_scheme( $url, $args['scheme'] )
     2588        );
     2589
     2590        $return = apply_filters_ref_array( 'get_avatar_url', array( $url, $id_or_email, &$args, $original_args ) );
     2591        $args['processed_args'] = $args;
     2592        unset( $args['processed_args']['processed_args'] );
     2593        return $return;
     2594}
  • wp-includes/pluggable.php

     
    15721572
    15731573if ( !function_exists( 'get_avatar' ) ) :
    15741574/**
    1575  * Retrieve the avatar for a user who provided a user ID or email address.
     1575 * Retrieve the avatar img tag for a user, email address, MD5 hash, comment, or post.
    15761576 *
     1577 * @uses apply_filters() 'pre_get_avatar' to bypass
     1578 * @uses apply_filters() 'get_avatar' filters the result
     1579 *
    15771580 * @since 2.5
    1578  * @param int|string|object $id_or_email A user ID,  email address, or comment object
    1579  * @param int $size Size of the avatar image
    1580  * @param string $default URL to a default image to use if no avatar is available
    1581  * @param string $alt Alternative text to use in image tag. Defaults to blank
    1582  * @return string <img> tag for the user's avatar
    1583 */
    1584 function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {
    1585         if ( ! get_option('show_avatars') )
    1586                 return false;
     1581 * @param mixed $id_or_email The Gravatar to retrieve:
     1582 *      (int)    {user_id}                   : Use the email address of the corresponding user
     1583 *      (string) "{hash}@md5.gravatar.com"   : Use the hash directly
     1584 *      (string) "{email}"
     1585 *      (object) {User row or WP_User object}: Use the user's email
     1586 *      (object) {Post row or WP_Post object}: Use the post_author's email
     1587 *      (object) {Comment row}               : Use the comment's user_id or comment_author_email
     1588 * @param array $args
     1589 *      size   : (int) Size of the avatar image
     1590 *      default: (string) URL for the default image or a default type:
     1591 *              404                    : Return a 404 instead of a default image @since 3.6
     1592 *              retro                  : 8bit
     1593 *              monsterid              : Monster
     1594 *              wavatar                : cartoon face
     1595 *              identicon              : the "quilt"
     1596 *              mystery, mm, mysteryman: The Oyster Man
     1597 *              blank                  : A transparent GIF
     1598 *              gravatar_default       : Gravatar Logo
     1599 *      force_default: (bool) Always show the default image, never the Gravatar
     1600 *      rating : display avatars up to the given rating: G < PG < R < X.
     1601 *      scheme : (string) @see set_url_scheme()
     1602 *      alt    : (string) value for the img element's alt attribute
     1603 *      class  : (array|string) array or sttring of additional classes to add to the img element
     1604 *      force_display: (bool) Always show the avatar - ignore the show_avatars option
     1605 *
     1606 * @return bool|string <img> tag for the user's avatar.  False on failure.
     1607 */
     1608// Old Parameters:   $id_or_email, $size = 96, $default = '', $alt = '' )
     1609function get_avatar( $id_or_email, $args = null ) {
     1610        $defaults = array(
     1611                // get_avatar_url() args
     1612                'size'          => 96,
     1613                'default'       => get_option( 'avatar_default', 'mystery' ),
     1614                'force_default' => false,
     1615                'rating'        => get_option( 'avatar_rating' ),
     1616                'scheme'        => null,
    15871617
    1588         if ( false === $alt)
    1589                 $safe_alt = '';
    1590         else
    1591                 $safe_alt = esc_attr( $alt );
     1618                'alt'           => '',
     1619                'class'         => null,
     1620                'force_display' => false,
     1621        );
    15921622
    1593         if ( !is_numeric($size) )
    1594                 $size = '96';
     1623        if ( is_scalar( $args ) ) {
     1624                $args = array(
     1625                        'size' => $args,
     1626                );
    15951627
    1596         $email = '';
    1597         if ( is_numeric($id_or_email) ) {
    1598                 $id = (int) $id_or_email;
    1599                 $user = get_userdata($id);
    1600                 if ( $user )
    1601                         $email = $user->user_email;
    1602         } elseif ( is_object($id_or_email) ) {
    1603                 // No avatar for pingbacks or trackbacks
    1604                 $allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
    1605                 if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) )
    1606                         return false;
     1628                $num_args = func_num_args();
     1629                if ( $num_args > 4 ) {
     1630                        $num_args = 4;
     1631                }
    16071632
    1608                 if ( !empty($id_or_email->user_id) ) {
    1609                         $id = (int) $id_or_email->user_id;
    1610                         $user = get_userdata($id);
    1611                         if ( $user)
    1612                                 $email = $user->user_email;
    1613                 } elseif ( !empty($id_or_email->comment_author_email) ) {
    1614                         $email = $id_or_email->comment_author_email;
     1633                switch ( $num_args ) {
     1634                // no breaks
     1635                case 4 :
     1636                        $args['alt'] = func_get_arg( 3 );
     1637                case 3 :
     1638                        $args['default'] = func_get_arg( 2 );
    16151639                }
    16161640        } else {
    1617                 $email = $id_or_email;
     1641                $args = (array) $args;
    16181642        }
    16191643
    1620         if ( empty($default) ) {
    1621                 $avatar_default = get_option('avatar_default');
    1622                 if ( empty($avatar_default) )
    1623                         $default = 'mystery';
    1624                 else
    1625                         $default = $avatar_default;
    1626         }
     1644        $original_args = $args;
    16271645
    1628         if ( !empty($email) )
    1629                 $email_hash = md5( strtolower( trim( $email ) ) );
     1646        $args = wp_parse_args( $args, $defaults );
    16301647
    1631         if ( is_ssl() ) {
    1632                 $host = 'https://secure.gravatar.com';
    1633         } else {
    1634                 if ( !empty($email) )
    1635                         $host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) );
    1636                 else
    1637                         $host = 'http://0.gravatar.com';
     1648        $avatar = apply_filters_ref_array( 'pre_get_avatar', array( null, $id_or_email, &$args, $original_args ) );
     1649        if ( !is_null( $avatar ) ) {
     1650                return apply_filters( 'get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args, $original_args );
    16381651        }
    16391652
    1640         if ( 'mystery' == $default )
    1641                 $default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')
    1642         elseif ( 'blank' == $default )
    1643                 $default = includes_url('images/blank.gif');
    1644         elseif ( !empty($email) && 'gravatar_default' == $default )
    1645                 $default = '';
    1646         elseif ( 'gravatar_default' == $default )
    1647                 $default = "$host/avatar/?s={$size}";
    1648         elseif ( empty($email) )
    1649                 $default = "$host/avatar/?d=$default&amp;s={$size}";
    1650         elseif ( strpos($default, 'http://') === 0 )
    1651                 $default = add_query_arg( 's', $size, $default );
     1653        if ( !$args['force_display'] && !get_option( 'show_avatars' ) ) {
     1654                return false;
     1655        }
    16521656
    1653         if ( !empty($email) ) {
    1654                 $out = "$host/avatar/";
    1655                 $out .= $email_hash;
    1656                 $out .= '?s='.$size;
    1657                 $out .= '&amp;d=' . urlencode( $default );
     1657        $processed_args = null;
     1658        $args['processed_args'] =& $processed_args;
     1659        $url = get_avatar_url( $id_or_email, $args );
     1660        if ( !$url || is_wp_error( $url ) ) {
     1661                return false;
     1662        }
    16581663
    1659                 $rating = get_option('avatar_rating');
    1660                 if ( !empty( $rating ) )
    1661                         $out .= "&amp;r={$rating}";
     1664        $class = array( 'avatar', 'avatar-' . (int) $processed_args['size'], 'photo' );
    16621665
    1663                 $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    1664         } else {
    1665                 $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
     1666        if ( !$processed_args['found_avatar'] || $processed_args['force_default'] ) {
     1667                $class[] = ' avatar-default';
    16661668        }
    16671669
    1668         return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
     1670        if ( $args['class'] ) {
     1671                if ( is_array( $args['class'] ) ) {
     1672                        $class = array_merge( $class, $args['class'] );
     1673                } else {
     1674                        $class[] = $args['class'];
     1675                }
     1676        }
     1677
     1678        $avatar = sprintf(
     1679                '<img alt="%s" src="%s" class="%s" height="%d" width="%d" />',
     1680                esc_attr( $processed_args['alt'] ),
     1681                esc_url( $url ),
     1682                esc_attr( join( ' ', $class ) ),
     1683                (int) $processed_args['size'],
     1684                (int) $processed_args['size']
     1685        );
     1686
     1687        return apply_filters( 'get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $processed_args, $original_args );
    16691688}
    16701689endif;
    16711690