Skip to:
Content

BuddyPress.org

Changeset 10481


Ignore:
Timestamp:
01/28/2016 07:26:34 PM (4 years ago)
Author:
djpaul
Message:

Emails: update set_to, set_bcc, set_cc to correctly handle multiple recipients.

Also tweaks the PHPDoc to make the intended use of the array argument
clearer.

See #6592

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/bp-core-functions.php

    r10478 r10481  
    28392839 * @param string $email_type Type of email being sent.
    28402840 * @param string|array|int|WP_User $to Either a email address, user ID, WP_User object,
    2841  *                                     or an array containg the address and name.
     2841 *                                     or an array containing any combination of the above.
    28422842 * @param array $args {
    28432843 *     Optional. Array of extra. parameters.
  • trunk/src/bp-core/classes/class-bp-email-recipient.php

    r10473 r10481  
    5050     *
    5151     * @param string|array|int|WP_User $email_or_user Either a email address, user ID, WP_User object,
    52      *                                                or an array containg the address and name.
     52     *                                                or an array containing any combination of the above.
    5353     * @param string $name Optional. If $email_or_user is a string, this is the recipient's name.
    5454     */
     
    9595         *
    9696         * @param string|array|int|WP_User $email_or_user Either a email address, user ID, WP_User object,
    97          *                                                or an array containg the address and name.
     97         *                                                or an array containing any combination of the above.
    9898         * @param string $name If $email_or_user is a string, this is the recipient's name.
    9999         * @param BP_Email_Recipient $this Current instance of the email type class.
  • trunk/src/bp-core/classes/class-bp-email.php

    r10470 r10481  
    520520     *
    521521     * @param string|array|int|WP_User $bcc_address Either a email address, user ID, WP_User object,
    522      *                                              or an array containg the address and name.
     522     *                                              or an array containing any combination of the above.
    523523     * @param string $name Optional. If $bcc_address is a string, this is the recipient's name.
    524524     * @return BP_Email
    525525     */
    526526    public function set_bcc( $bcc_address, $name = '' ) {
    527         $bcc = array( new BP_Email_Recipient( $bcc_address, $name ) );
     527        $bcc = array();
     528
     529        if ( is_array( $bcc_address ) ) {
     530            foreach ( $bcc_address as $address ) {
     531                $bcc[] = new BP_Email_Recipient( $address );
     532            }
     533
     534        } else {
     535            $bcc = array( new BP_Email_Recipient( $bcc_address, $name ) );
     536        }
    528537
    529538        /**
     
    534543         * @param BP_Email_Recipient[] $bcc BCC recipients.
    535544         * @param string|array|int|WP_User $bcc_address Either a email address, user ID, WP_User object,
    536          *                                              or an array containg the address and name.
     545         *                                              or an array containing any combination of the above.
    537546         * @param string $name Optional. If $bcc_address is a string, this is the recipient's name.
    538547         * @param BP_Email $this Current instance of the email type class.
     
    555564     *
    556565     * @param string|array|int|WP_User $cc_address Either a email address, user ID, WP_User object,
    557      *                                             or an array containg the address and name.
     566     *                                             or an array containing any combination of the above.
    558567     * @param string $name Optional. If $cc_address is a string, this is the recipient's name.
    559568     * @return BP_Email
    560569     */
    561570    public function set_cc( $cc_address, $name = '' ) {
    562         $cc = array( new BP_Email_Recipient( $cc_address, $name ) );
     571        $cc = array();
     572
     573        if ( is_array( $cc_address ) ) {
     574            foreach ( $cc_address as $address ) {
     575                $cc[] = new BP_Email_Recipient( $address );
     576            }
     577
     578        } else {
     579            $cc = array( new BP_Email_Recipient( $cc_address, $name ) );
     580        }
    563581
    564582        /**
     
    569587         * @param BP_Email_Recipient[] $cc CC recipients.
    570588         * @param string|array|int|WP_User $cc_address Either a email address, user ID, WP_User object,
    571          *                                             or an array containg the address and name.
     589         *                                             or an array containing any combination of the above.
    572590         * @param string $name Optional. If $cc_address is a string, this is the recipient's name.
    573591         * @param BP_Email $this Current instance of the email type class.
     
    658676     * @since 2.5.0
    659677     *
    660      * @param string|array|int|WP_User $email_address Either a email address, user ID, WP_User object,
    661      *                                                or an array containg the address and name.
     678     * @param string|array|int|WP_User $email_address Either a email address, user ID, or WP_User object.
    662679     * @param string $name Optional. If $email_address is a string, this is the recipient's name.
    663680     * @return BP_Email
     
    672689         *
    673690         * @param BP_Email_Recipient $from Sender details.
    674          * @param string|array|int|WP_User $email_address Either a email address, user ID, WP_User object,
    675          *                                                or an array containg the address and name.
     691         * @param string|array|int|WP_User $email_address Either a email address, user ID, or WP_User object.
    676692         * @param string $name Optional. If $email_address is a string, this is the recipient's name.
    677693         * @param BP_Email $this Current instance of the email type class.
     
    727743     *
    728744     * @param string|array|int|WP_User $email_address Either a email address, user ID, WP_User object,
    729      *                                                or an array containg the address and name.
     745     *                                                or an array containing any combination of the above.
    730746     * @param string $name Optional. If $email_address is a string, this is the recipient's name.
    731747     * @return BP_Email
     
    741757         * @param BP_Email_Recipient $reply_to "Reply to" recipient.
    742758         * @param string|array|int|WP_User $email_address Either a email address, user ID, WP_User object,
    743          *                                                or an array containg the address and name.
     759         *                                                or an array containing any combination of the above.
    744760         * @param string $name Optional. If $email_address is a string, this is the recipient's name.
    745761         * @param BP_Email $this Current instance of the email type class.
     
    816832     *
    817833     * @param string|array|int|WP_User $to_address Either a email address, user ID, WP_User object,
    818      *                                             or an array containg the address and name.
     834     *                                             or an array containing any combination of the above.
    819835     * @param string $name Optional. If $to_address is a string, this is the recipient's name.
    820836     * @return BP_Email
    821837     */
    822838    public function set_to( $to_address, $name = '' ) {
    823         $to = array( new BP_Email_Recipient( $to_address, $name ) );
     839        $to = array();
     840
     841        if ( is_array( $to_address ) ) {
     842            foreach ( $to_address as $address ) {
     843                $to[] = new BP_Email_Recipient( $address );
     844            }
     845
     846        } else {
     847            $to = array( new BP_Email_Recipient( $to_address, $name ) );
     848        }
    824849
    825850        /**
  • trunk/tests/phpunit/testcases/core/class-bp-email.php

    r10470 r10481  
    55 */
    66class BP_Tests_Email extends BP_UnitTestCase {
     7    protected $u1;
     8    protected $u2;
     9
    710    public function setUp() {
    811        parent::setUp();
     12
     13        $this->u1 = $this->factory->user->create( array(
     14            'display_name' => 'Unit Test',
     15            'user_email'   => 'test1@example.com',
     16        ) );
     17
     18        $this->u2 = $this->factory->user->create( array(
     19            'display_name' => 'Unit Test2',
     20            'user_email'   => 'test2@example.com',
     21        ) );
     22
    923        remove_filter( 'bp_email_get_headers', 'bp_email_set_default_headers', 6, 4 );
    1024        remove_filter( 'bp_email_get_tokens', 'bp_email_set_default_tokens', 6, 4 );
     
    156170        $this->assertSame( '<b>hello world</b><b>hello world</b>', $email->get_content() );
    157171    }
     172
     173    public function test_multiple_recipients_are_supported_by_address() {
     174        $email1 = 'test1@example.com';
     175        $email2 = 'test2@example.com';
     176        $email  = new BP_Email( 'fake_type' );
     177
     178        $email->set_to( array( $email1, $email2 ) );
     179        $addresses = $email->get_to();
     180
     181        $this->assertCount( 2, $addresses );
     182        $this->assertSame( $email1, $addresses[0]->get_address() );
     183        $this->assertSame( $email2, $addresses[1]->get_address() );
     184    }
     185
     186    public function test_multiple_recipients_are_supported_by_wp_user_object() {
     187        $user1 = get_user_by( 'id', $this->u1 );
     188        $user2 = get_user_by( 'id', $this->u2 );
     189        $email = new BP_Email( 'fake_type' );
     190
     191        $email->set_to( array( $user1, $user2 ) );
     192        $addresses = $email->get_to();
     193
     194        $this->assertCount( 2, $addresses );
     195        $this->assertSame( $user1->user_email, $addresses[0]->get_address() );
     196        $this->assertSame( $user2->user_email, $addresses[1]->get_address() );
     197    }
     198
     199    public function test_multiple_recipients_are_supported_by_wp_user_id() {
     200        $user1 = get_user_by( 'id', $this->u1 );
     201        $user2 = get_user_by( 'id', $this->u2 );
     202        $email = new BP_Email( 'fake_type' );
     203        $email->set_to( array( $this->u1, $this->u2 ) );
     204        $addresses = $email->get_to();
     205
     206        $this->assertCount( 2, $addresses );
     207        $this->assertSame( $user1->user_email, $addresses[0]->get_address() );
     208        $this->assertSame( $user2->user_email, $addresses[1]->get_address() );
     209    }
     210
     211    public function test_multiple_recipients_are_supported() {
     212        $user1 = get_user_by( 'id', $this->u1 );
     213        $user2 = get_user_by( 'id', $this->u2 );
     214        $user3 = 'test3@example.com';
     215        $email = new BP_Email( 'fake_type' );
     216
     217        $email->set_to( array( $user1, $this->u2, $user3 ) );
     218        $addresses = $email->get_to();
     219
     220        $this->assertCount( 3, $addresses );
     221        $this->assertSame( $user1->user_email, $addresses[0]->get_address() );
     222        $this->assertSame( $user2->user_email, $addresses[1]->get_address() );
     223        $this->assertSame( $user3,             $addresses[2]->get_address() );
     224    }
    158225}
Note: See TracChangeset for help on using the changeset viewer.