Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
05/19/2016 08:50:46 PM (10 years ago)
Author:
r-a-y
Message:

Emails: Ensure that passing a known WP user email address to bp_send_email() will render the {{recipient.name}} token.

Commit also adds several unit tests for the BP_Email_Recipient class.

Fixes #7044.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/classes/class-bp-email-recipient.php

    r10599 r10792  
    5656                $name = sanitize_text_field( $name );
    5757
    58                 // User ID, WP_User object.
    59                 if ( is_int( $email_or_user ) || is_object( $email_or_user ) ) {
    60                         $this->user_object = is_object( $email_or_user ) ? $email_or_user : get_user_by( 'id', $email_or_user );
     58                // User ID, email address or WP_User object.
     59                if ( is_int( $email_or_user ) || ( is_string( $email_or_user ) && is_email( $email_or_user ) ) || is_object( $email_or_user ) ) {
     60                        // We already have a WP user.
     61                        if ( is_object( $email_or_user ) ) {
     62                                $this->user_object = $email_or_user;
    6163
    62                         if ( $this->user_object ) {
    63                                 // This is escaped with esc_html in bp_core_get_user_displayname()
    64                                 $name = wp_specialchars_decode( bp_core_get_user_displayname( $this->user_object->ID ), ENT_QUOTES );
    65 
    66                                 $this->address = $this->user_object->user_email;
    67                                 $this->name    = sanitize_text_field( $name );
     64                        // Query for WP user by user ID.
     65                        } elseif ( is_int( $email_or_user ) ) {
     66                                $this->user_object = get_user_by( 'id', $email_or_user );
    6867                        }
    6968
    70                 // Array, address, and name.
     69                        // Set email address.
     70                        if ( empty( $this->user_object ) && is_email( $email_or_user ) ) {
     71                                $address = $email_or_user;
     72                        }
     73
     74                // Array or miscellaneous string.
    7175                } else {
    7276                        if ( ! is_array( $email_or_user ) ) {
     
    8185                                $name    = current( $email_or_user );
    8286                        }
     87                }
    8388
    84                         if ( is_email( $address ) ) {
    85                                 $this->address = sanitize_email( $address );
    86                         }
     89                // Set address if we have one.
     90                if ( ! empty( $address ) ) {
     91                        $this->address = sanitize_email( $address );
     92                }
    8793
     94                // Still no user object; try to query user by email address.
     95                if ( empty( $this->user_object ) ) {
     96                        $this->get_user( 'search-email' );
     97                }
     98
     99                // We have a user object; so set address and name from DB.
     100                if ( $this->user_object ) {
     101                        // This is escaped with esc_html in bp_core_get_user_displayname()
     102                        $wp_name = wp_specialchars_decode( bp_core_get_user_displayname( $this->user_object->ID ), ENT_QUOTES );
     103
     104                        $this->address = $this->user_object->user_email;
     105                        $this->name    = sanitize_text_field( $wp_name );
     106
     107                }
     108
     109                // Custom name override.
     110                if ( $name ) {
    88111                        $this->name = $name;
    89112                }
Note: See TracChangeset for help on using the changeset viewer.