public function testResolveAndGetByUserAndName()
 {
     //Test a user that not have a Primary Email Address
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $emailAccount = SendGridEmailAccount::resolveAndGetByUserAndName($super);
     $this->assertEquals('Default', $emailAccount->name);
     $this->assertEquals($super, $emailAccount->user);
     $this->assertEquals($super->getFullName(), $emailAccount->fromName);
     $this->assertEquals($super->primaryEmail->emailAddress, $emailAccount->fromAddress);
     $emailAccountId = $emailAccount->id;
     $emailAccount = SendGridEmailAccount::resolveAndGetByUserAndName($super);
     $this->assertNotEquals($emailAccountId, $emailAccount->id);
     $emailAccount->apiUsername = static::$apiUsername;
     $emailAccount->apiPassword = static::$apiPassword;
     $emailAccount->save();
     $this->assertEquals($emailAccount->getError('fromAddress'), 'From Address cannot be blank.');
     $emailAccount->fromAddress = '*****@*****.**';
     $this->assertTrue($emailAccount->save());
     $emailAccountId = $emailAccount->id;
     $emailAccount = SendGridEmailAccount::resolveAndGetByUserAndName($super);
     $this->assertEquals($emailAccountId, $emailAccount->id);
     $this->assertEquals('Default', $emailAccount->name);
     $this->assertEquals($super, $emailAccount->user);
     $this->assertEquals($super->getFullName(), $emailAccount->fromName);
     $this->assertEquals('*****@*****.**', $emailAccount->fromAddress);
     $this->assertEquals(static::$apiUsername, $emailAccount->apiUsername);
     $this->assertEquals(static::$apiPassword, ZurmoPasswordSecurityUtil::decrypt($emailAccount->apiPassword));
 }
 /**
  * Resolve mailer by email message.
  * @return \ZurmoSwiftMailer|\ZurmoSendGridMailer
  */
 public function resolveMailer()
 {
     $apiUser = Yii::app()->sendGridEmailHelper->apiUsername;
     $apiPassword = Yii::app()->sendGridEmailHelper->apiPassword;
     $user = $this->emailMessage->owner;
     $defaultMailerClassName = static::resolveDefaultMailerClassName();
     if ($user != null) {
         $this->sendGridEmailAccount = SendGridEmailAccount::resolveAndGetByUserAndName($user, null, false);
         $this->emailAccount = EmailAccount::resolveAndGetByUserAndName($user, null, false);
     }
     if ($this->sendGridPluginEnabled && $user != null) {
         //Should user settings be used
         if ($this->shouldSendGridUserSettingsBeUsed()) {
             return new ZurmoSendGridMailer($this->emailMessage, $this->sendGridEmailAccount);
         } else {
             //Check for personal settings
             if ($this->shouldCustomUserSettingsBeUsed()) {
                 return new $defaultMailerClassName($this->emailMessage, $this->emailAccount);
             } else {
                 if ($apiUser != null && $apiPassword != null) {
                     $this->updateMailerDetailsForEmailMessage('sendgrid', 'global');
                     return new ZurmoSendGridMailer($this->emailMessage, null);
                 } else {
                     $this->updateMailerDetailsForEmailMessage('smtp', 'global');
                     return new $defaultMailerClassName($this->emailMessage, null);
                 }
             }
         }
     } elseif ($user != null && $this->shouldCustomUserSettingsBeUsed() === true) {
         return new $defaultMailerClassName($this->emailMessage, $this->emailAccount);
     } elseif ($this->sendGridPluginEnabled && $apiUser != null && $apiPassword != null) {
         $this->updateMailerDetailsForEmailMessage('sendgrid', 'global');
         return new ZurmoSendGridMailer($this->emailMessage, null);
     } else {
         $this->updateMailerDetailsForEmailMessage('smtp', 'global');
         return new $defaultMailerClassName($this->emailMessage, null);
     }
 }
 /**
  * Configure sendgrid options.
  * @param int $id
  * @param string $redirectUrl
  * @return void
  */
 protected function processSendGridPostConfiguration($id, $redirectUrl = null)
 {
     SendGridAccessUtil::resolveCanCurrentUserAccessAction(intval($id));
     $user = User::getById(intval($id));
     $emailAccount = SendGridEmailAccount::resolveAndGetByUserAndName($user);
     $userSendGridConfigurationForm = new UserSendGridConfigurationForm($emailAccount);
     $userSendGridConfigurationForm->emailSignatureHtmlContent = $user->getEmailSignature()->htmlContent;
     $postVariableName = get_class($userSendGridConfigurationForm);
     if (isset($_POST[$postVariableName])) {
         $userSendGridConfigurationForm->setAttributes($_POST[$postVariableName]);
         if ($userSendGridConfigurationForm->validate()) {
             $userSendGridConfigurationForm->save();
             Yii::app()->user->setFlash('notification', Zurmo::t('UsersModule', 'User SendGrid API configuration saved successfully.'));
             if ($redirectUrl != null) {
                 $this->redirect($redirectUrl);
             } else {
                 $this->redirect(array($this->getId() . '/details', 'id' => $user->id));
             }
         } else {
             $userSendGridConfigurationForm->apiPassword = ZurmoPasswordSecurityUtil::decrypt($userSendGridConfigurationForm->apiPassword);
         }
     }
     return $userSendGridConfigurationForm;
 }