Skip to:
Content

BuddyPress.org

Ticket #7044: 7044.02.patch

File 7044.02.patch, 5.6 KB (added by r-a-y, 3 years ago)
  • src/bp-core/classes/class-bp-email-recipient.php

     
    5555        public function __construct( $email_or_user, $name = '' ) {
    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 );
    61 
    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 );
     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;
     63
     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 );
     67                        }
    6568
    66                                 $this->address = $this->user_object->user_email;
    67                                 $this->name    = sanitize_text_field( $name );
     69                        // Set email address.
     70                        if ( empty( $this->user_object ) && is_email( $email_or_user ) ) {
     71                                $address = $email_or_user;
    6872                        }
    6973
    70                 // Array, address, and name.
     74                // Array or miscellaneous string.
    7175                } else {
    7276                        if ( ! is_array( $email_or_user ) ) {
    7377                                $email_or_user = array( $email_or_user => $name );
     
    8084                                $address = key( $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                }
     93
     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                }
    87108
     109                // Custom name override.
     110                if ( ! empty( $name ) ) {
    88111                        $this->name = $name;
    89112                }
    90113
  • tests/phpunit/testcases/core/class-bp-email-recipient.php

     
    4747                $this->assertSame( 'Unit Test', $recipient->get_name() );
    4848        }
    4949
    50         public function test_return_with_address_and_optional_name() {
     50        public function test_return_with_known_address_and_optional_name() {
     51                $email     = 'test@example.com';
     52                $name      = 'Custom';
     53                $recipient = new BP_Email_Recipient( $email, $name );
     54
     55                $this->assertSame( 'test@example.com', $recipient->get_address() );
     56                $this->assertSame( 'Custom', $recipient->get_name() );
     57        }
     58
     59        public function test_return_with_known_address_and_empty_name() {
    5160                $email     = 'test@example.com';
    5261                $recipient = new BP_Email_Recipient( $email );
    5362
     63                $this->assertSame( 'test@example.com', $recipient->get_address() );
     64
     65                // Should fallback to WP user name.
     66                $this->assertSame( 'Unit Test', $recipient->get_name() );
     67        }
     68
     69        public function test_return_with_unknown_address_and_optional_name() {
     70                $email     = 'unknown@example.com';
     71                $name      = 'Custom';
     72                $recipient = new BP_Email_Recipient( $email, $name );
     73
     74                $this->assertSame( $email, $recipient->get_address() );
     75                $this->assertSame( $name, $recipient->get_name() );
     76        }
     77
     78        public function test_return_with_unknown_address_and_empty_name() {
     79                $email     = 'unknown@example.com';
     80                $recipient = new BP_Email_Recipient( $email );
     81
    5482                $this->assertSame( $email, $recipient->get_address() );
    5583                $this->assertEmpty( $recipient->get_name() );
    5684        }
    5785
    58         public function test_return_with_array_and_optional_name() {
    59                 $email     = 'test@example.com';
     86        public function test_return_with_unknown_array_and_optional_name() {
     87                $email     = 'unknown@example.com';
     88                $name      = 'Custom';
     89                $recipient = new BP_Email_Recipient( array( $email => $name ) );
     90
     91                $this->assertSame( $email, $recipient->get_address() );
     92                $this->assertSame( $name, $recipient->get_name() );
     93        }
     94
     95        public function test_return_with_unknown_array_and_empty_name() {
     96                $email     = 'unknown@example.com';
    6097                $recipient = new BP_Email_Recipient( array( $email ) );
    6198
    6299                $this->assertSame( $email, $recipient->get_address() );
    63100                $this->assertEmpty( $recipient->get_name() );
    64101        }
    65102
     103        public function test_return_with_known_array_and_optional_name() {
     104                $email     = 'test@example.com';
     105                $name      = 'Custom';
     106                $recipient = new BP_Email_Recipient( array( $email => $name ) );
     107
     108                $this->assertSame( $email, $recipient->get_address() );
     109                $this->assertSame( $name, $recipient->get_name() );
     110        }
     111
     112        public function test_return_with_known_array_and_empty_name() {
     113                $email     = 'test@example.com';
     114                $recipient = new BP_Email_Recipient( array( $email ) );
     115
     116                $this->assertSame( $email, $recipient->get_address() );
     117
     118                // Should fallback to WP user name.
     119                $this->assertSame( 'Unit Test', $recipient->get_name() );
     120        }
     121
    66122        public function test_should_return_empty_string_if_user_id_id_invalid() {
    67123                $recipient = new BP_Email_Recipient( time() );
    68124