/** * Adds recipient emails as recipients to the email message. If the recipient email already matches * an person or account on the email message it will ignore it. * @param Array $recipients * @param EmailMessage $emailMessage * @param integer $type */ public static function attachRecipientsToMessage(array $recipients, EmailMessage $emailMessage, $type) { assert('is_int($type)'); $existingPersonsOrAccounts = array(); if ($emailMessage->recipients->count() > 0) { foreach ($emailMessage->recipients as $recipient) { if ($recipient->personOrAccount != null && $recipient->personOrAccount->id > 0) { $existingPersonsOrAccounts[] = $recipient->personOrAccount->getClassId('Item'); } } } foreach ($recipients as $recipient) { if ($recipient != null) { $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddressForUser($recipient, Yii::app()->user->userModel); if (empty($personsOrAccounts)) { $personsOrAccounts[] = null; } foreach ($personsOrAccounts as $personOrAccount) { if ($personOrAccount == null || !in_array($personOrAccount->getClassId('Item'), $existingPersonsOrAccounts)) { $messageRecipient = new EmailMessageRecipient(); $messageRecipient->toAddress = $recipient; $messageRecipient->type = $type; if ($personOrAccount != null) { $messageRecipient->toName = strval($personOrAccount); $messageRecipient->personOrAccount = $personOrAccount; $existingPersonsOrAccounts[] = $personOrAccount->getClassId('Item'); } $emailMessage->recipients->add($messageRecipient); } } } } }
/** * @depends testGetPersonsAndAccountsByEmailAddress */ public function testGetPersonsAndAccountsByEmailAddressForUser() { $user = User::getByUsername('newUser'); $emailAddress = '*****@*****.**'; $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddressForUser($emailAddress, $user); $this->assertEmpty($personsOrAccounts); $emailAddress = '*****@*****.**'; $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddressForUser($emailAddress, $user); $this->assertEmpty($personsOrAccounts); $emailAddress = '*****@*****.**'; $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddressForUser($emailAddress, $user); $this->assertEmpty($personsOrAccounts); $emailAddress = '*****@*****.**'; $personsOrAccounts = EmailArchivingUtil::getPersonsAndAccountsByEmailAddressForUser($emailAddress, $user); $this->assertEquals(1, count($personsOrAccounts)); $this->assertTrue($personsOrAccounts[0] instanceof User); }