/**
  * Given post data and an email message, populate the sender and account on the email message if possible.
  * Also add message recipients and any attachments.
  * @param array $postData
  * @param EmailMessage $emailMessage
  * @param User $userToSendMessagesFrom
  * @return boolean
  */
 public static function resolveEmailMessageFromPostData(array &$postData, CreateEmailMessageForm $emailMessageForm, User $userToSendMessagesFrom)
 {
     $postVariableName = get_class($emailMessageForm);
     Yii::app()->emailHelper->loadOutboundSettingsFromUserEmailAccount($userToSendMessagesFrom);
     $toRecipients = explode(",", $postData[$postVariableName]['recipientsData']['to']);
     // Not Coding Standard
     static::attachRecipientsToMessage($toRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_TO);
     if (ArrayUtil::getArrayValue($postData[$postVariableName]['recipientsData'], 'cc') != null) {
         $ccRecipients = explode(",", $postData[$postVariableName]['recipientsData']['cc']);
         // Not Coding Standard
         static::attachRecipientsToMessage($ccRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_CC);
     }
     if (ArrayUtil::getArrayValue($postData[$postVariableName]['recipientsData'], 'bcc') != null) {
         $bccRecipients = explode(",", $postData[$postVariableName]['recipientsData']['bcc']);
         // Not Coding Standard
         static::attachRecipientsToMessage($bccRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_BCC);
     }
     if (isset($postData['filesIds'])) {
         static::attachFilesToMessage($postData['filesIds'], $emailMessageForm->getModel());
     }
     $emailAccount = EmailAccount::getByUserAndName($userToSendMessagesFrom);
     $sender = new EmailMessageSender();
     $sender->fromName = Yii::app()->emailHelper->fromName;
     $sender->fromAddress = Yii::app()->emailHelper->fromAddress;
     $sender->personOrAccount = $userToSendMessagesFrom;
     $emailMessageForm->sender = $sender;
     $emailMessageForm->account = $emailAccount;
     $emailMessageForm->content->textContent = EmailMessageUtil::resolveTextContent(ArrayUtil::getArrayValue($postData[$postVariableName]['content'], 'htmlContent'), null);
     $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
     $emailMessageForm->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX);
     return $emailMessageForm;
 }
 protected function preFilter($filterChain)
 {
     $sendGridPluginEnabled = (bool) ZurmoConfigurationUtil::getByModuleName('SendGridModule', 'enableSendgrid');
     try {
         if ($sendGridPluginEnabled) {
             SendGridEmailAccount::getByUserAndName(Yii::app()->user->userModel, null);
         } else {
             EmailAccount::getByUserAndName(Yii::app()->user->userModel);
         }
     } catch (NotFoundException $e) {
         $redirectUrl = Yii::app()->request->getParam('redirectUrl');
         if ($sendGridPluginEnabled) {
             try {
                 EmailAccount::getByUserAndName(Yii::app()->user->userModel);
             } catch (NotFoundException $ex) {
                 $messageView = new NoUserEmailConfigurationYetView($redirectUrl);
                 $view = new ModalView($this->controller, $messageView);
                 Yii::app()->getClientScript()->setToAjaxMode();
                 echo $view->render();
                 return false;
             }
         } else {
             $messageView = new NoUserEmailConfigurationYetView($redirectUrl);
             $view = new ModalView($this->controller, $messageView);
             Yii::app()->getClientScript()->setToAjaxMode();
             echo $view->render();
             return false;
         }
     }
     return true;
 }
 /**
  * Given post data and an email message, populate the sender and account on the email message if possible.
  * Also add message recipients and any attachments.
  * @param array $postData
  * @param CreateEmailMessageForm $emailMessageForm
  * @param User $userToSendMessagesFrom
  * @return CreateEmailMessageForm
  */
 public static function resolveEmailMessageFromPostData(array &$postData, CreateEmailMessageForm $emailMessageForm, User $userToSendMessagesFrom)
 {
     $postVariableName = get_class($emailMessageForm);
     $toRecipients = explode(",", $postData[$postVariableName]['recipientsData']['to']);
     // Not Coding Standard
     static::attachRecipientsToMessage($toRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_TO);
     if (ArrayUtil::getArrayValue($postData[$postVariableName]['recipientsData'], 'cc') != null) {
         $ccRecipients = explode(",", $postData[$postVariableName]['recipientsData']['cc']);
         // Not Coding Standard
         static::attachRecipientsToMessage($ccRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_CC);
     }
     if (ArrayUtil::getArrayValue($postData[$postVariableName]['recipientsData'], 'bcc') != null) {
         $bccRecipients = explode(",", $postData[$postVariableName]['recipientsData']['bcc']);
         // Not Coding Standard
         static::attachRecipientsToMessage($bccRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_BCC);
     }
     if (isset($postData['filesIds'])) {
         static::attachFilesToMessage($postData['filesIds'], $emailMessageForm->getModel());
     }
     $emailAccount = EmailAccount::getByUserAndName($userToSendMessagesFrom);
     $sender = new EmailMessageSender();
     $sender->fromName = $emailAccount->fromName;
     $sender->fromAddress = $emailAccount->fromAddress;
     $sender->personsOrAccounts->add($userToSendMessagesFrom);
     $emailMessageForm->sender = $sender;
     $emailMessageForm->account = $emailAccount;
     $box = EmailBoxUtil::getDefaultEmailBoxByUser($userToSendMessagesFrom);
     $emailMessageForm->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX);
     return $emailMessageForm;
 }
Exemple #4
0
 public function renderInput($attr)
 {
     switch ($attr) {
         case 'password':
             echo X2Html::x2ActivePasswordField($this, $attr, $this->htmlOptions($attr), true);
             break;
         default:
             parent::renderInput($attr);
     }
 }
Exemple #5
0
 public function renderInput($attr)
 {
     switch ($attr) {
         case 'password':
             echo CHtml::activePasswordField($this, $attr, $this->htmlOptions($attr));
             echo CHtml::label(Yii::t('app', 'Visible?'), 'visible', array('style' => 'display: inline'));
             echo CHtml::checkBox('visible', false, array('id' => 'password-visible', 'onchange' => 'js: x2.credManager.swapPasswordVisibility("#Credentials_auth_password")'));
             break;
         default:
             parent::renderInput($attr);
     }
 }
 public function setUp()
 {
     parent::setUp();
     $this->user = User::getByUsername('super');
     Yii::app()->user->userModel = $this->user;
     EmailAccount::deleteAll();
     EmailMessage::deleteAll();
     EmailMessageContent::deleteAll();
     EmailMessageSender::deleteAll();
     EmailMessageRecipient::deleteAll();
     EmailMessageSendError::deleteAll();
     FileModel::deleteAll();
 }
Exemple #7
0
 public function renderInput($attr)
 {
     switch ($attr) {
         case 'password':
             echo X2Html::x2ActivePasswordField($this, $attr, $this->htmlOptions($attr), true);
             break;
         case 'server':
             echo CHtml::activeDropDownList($this, 'server', $this->sesEndpoints, $this->htmlOptions($attr));
             break;
         default:
             parent::renderInput($attr);
     }
 }
 protected function preFilter($filterChain)
 {
     try {
         EmailAccount::getByUserAndName(Yii::app()->user->userModel);
     } catch (NotFoundException $e) {
         $redirectUrl = Yii::app()->request->getParam('redirectUrl');
         $messageView = new NoUserEmailConfigurationYetView($redirectUrl);
         $view = new ModalView($this->controller, $messageView);
         Yii::app()->getClientScript()->setToAjaxMode();
         echo $view->render();
         return false;
     }
     return true;
 }
Exemple #9
0
 public function renderInput($attr)
 {
     switch ($attr) {
         case 'email':
             echo '<p class="fieldhelp-thin-small">' . Yii::t('app', '(example@gmail.com)') . '</p>';
             echo CHtml::activeTextField($this, $attr, $this->htmlOptions($attr));
             break;
         case 'password':
             echo X2Html::x2ActivePasswordField($this, $attr, $this->htmlOptions($attr), true);
             break;
         default:
             parent::renderInput($attr);
     }
 }
Exemple #10
0
 public function renderInput($attr)
 {
     switch ($attr) {
         case 'email':
             echo '<p class="fieldhelp-thin-small">' . Yii::t('app', '(example@gmail.com)') . '</p>';
             echo CHtml::activeTextField($this, $attr, $this->htmlOptions($attr));
             break;
         case 'password':
             echo CHtml::activePasswordField($this, $attr, $this->htmlOptions($attr));
             echo CHtml::label(Yii::t('app', 'Visible?'), 'visible', array('style' => 'display: inline'));
             echo CHtml::checkBox('visible', false, array('id' => 'password-visible', 'onchange' => 'js: x2.credManager.swapPasswordVisibility("#Credentials_auth_password")'));
             break;
         default:
             parent::renderInput($attr);
     }
 }
 public function setUp()
 {
     parent::setUp();
     $this->user = User::getByUsername('super');
     Yii::app()->user->userModel = $this->user;
     EmailAccount::deleteAll();
     EmailMessage::deleteAll();
     EmailMessageContent::deleteAll();
     EmailMessageSender::deleteAll();
     EmailMessageRecipient::deleteAll();
     EmailMessageSendError::deleteAll();
     FileModel::deleteAll();
     if (!EmailMessageTestHelper::isSetEmailAccountsTestConfiguration()) {
         $this->markTestSkipped('Please fix the test email settings');
     }
 }
 /**
  * @param User $user
  * @param mixed $name null or String representing the email account name
  */
 public static function getByUserAndName(User $user, $name = null)
 {
     if ($name == null) {
         $name = self::DEFAULT_NAME;
     } else {
         //For now Zurmo does not support multiple email accounts
         throw new NotSupportedException();
     }
     assert('is_string($name)');
     $bean = ZurmoRedBean::findOne(EmailAccount::getTableName(), "_user_id = ? AND name = ?", array($user->id, $name));
     assert('$bean === false || $bean instanceof RedBean_OODBBean');
     if ($bean === false) {
         throw new NotFoundException();
     } else {
         $emailAccount = self::makeModel($bean);
     }
     return $emailAccount;
 }
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     SecurityTestHelper::createSuperAdmin();
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $emailAccount = EmailAccount::resolveAndGetByUserAndName(Yii::app()->user->userModel);
     //So the email is configured
     $emailAccount->fromAddress = '*****@*****.**';
     $saved = $emailAccount->save();
     assert($saved);
     // Not Coding Standard
     //Setup test data owned by the super user.
     $account = AccountTestHelper::createAccountByNameForOwner('superAccount', $super);
     $contact = ContactTestHelper::createContactWithAccountByNameForOwner('superContact', $super, $account);
     $contact->primaryEmail = new Email();
     $contact->primaryEmail->emailAddress = '*****@*****.**';
     $saved = $contact->save();
     assert($saved);
     // Not Coding Standard
 }
 /**
  * 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);
     }
 }
 public function testResolveEmailMessageFromPostData()
 {
     $billy = User::getByUsername('billy');
     Yii::app()->user->userModel = $billy;
     //Test with no users/person in recipients
     $emailMessage = new EmailMessage();
     $emailMessageForm = new CreateEmailMessageForm($emailMessage);
     $postVariableName = get_class($emailMessageForm);
     $postData = array($postVariableName => array('recipientsData' => array('to' => 'a@zurmo.com,b@zurmo.com', 'cc' => 'c@zurmo.com,d@zurmo.com', 'bcc' => 'e@zurmo.com,f@zurmo.com'), 'subject' => 'Test Email From Post', 'content' => array('htmlContent' => 'This is a test email')));
     $emailMessageForm = EmailMessageUtil::resolveEmailMessageFromPostData($postData, $emailMessageForm, $billy);
     //Message should have 6 recipients 2 of each type
     $this->assertEquals('6', count($emailMessageForm->getModel()->recipients));
     $recipients = $emailMessageForm->getModel()->recipients;
     $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[0]->type);
     $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipients[1]->type);
     $this->assertEquals(EmailMessageRecipient::TYPE_CC, $recipients[2]->type);
     $this->assertEquals(EmailMessageRecipient::TYPE_CC, $recipients[3]->type);
     $this->assertEquals(EmailMessageRecipient::TYPE_BCC, $recipients[4]->type);
     $this->assertEquals(EmailMessageRecipient::TYPE_BCC, $recipients[5]->type);
     $this->assertEquals('*****@*****.**', $recipients[0]->toAddress);
     $this->assertEquals('*****@*****.**', $recipients[1]->toAddress);
     $this->assertEquals('*****@*****.**', $recipients[2]->toAddress);
     $this->assertEquals('*****@*****.**', $recipients[3]->toAddress);
     $this->assertEquals('*****@*****.**', $recipients[4]->toAddress);
     $this->assertEquals('*****@*****.**', $recipients[5]->toAddress);
     $this->assertEquals('', $recipients[0]->toName);
     $this->assertEquals('', $recipients[1]->toName);
     $this->assertEquals('', $recipients[2]->toName);
     $this->assertEquals('', $recipients[3]->toName);
     $this->assertEquals('', $recipients[4]->toName);
     $this->assertEquals('', $recipients[5]->toName);
     //Recipients are not personOrAccount
     $this->assertCount(0, $recipients[0]->personsOrAccounts);
     $this->assertCount(0, $recipients[1]->personsOrAccounts);
     $this->assertCount(0, $recipients[2]->personsOrAccounts);
     $this->assertCount(0, $recipients[3]->personsOrAccounts);
     $this->assertCount(0, $recipients[4]->personsOrAccounts);
     $this->assertCount(0, $recipients[5]->personsOrAccounts);
     //The message should go to billy's box
     $this->assertEquals(EmailBox::USER_DEFAULT_NAME, $emailMessageForm->folder->emailBox->name);
     //The message should go to the default outbox folder
     $this->assertEquals(EmailFolder::getDefaultOutboxName(), $emailMessageForm->folder->name);
     $this->assertEquals(EmailFolder::TYPE_OUTBOX, $emailMessageForm->folder->type);
     //The sender should be populated with details from the users email account
     $emailAccount = EmailAccount::getByUserAndName($billy);
     $this->assertEquals($emailAccount->fromName, $emailMessageForm->sender->fromName);
     $this->assertEquals($emailAccount->fromAddress, $emailMessageForm->sender->fromAddress);
     //Test with null in cc/bcc
     $emailMessage = new EmailMessage();
     $emailMessageForm = new CreateEmailMessageForm($emailMessage);
     $postVariableName = get_class($emailMessageForm);
     $postData = array($postVariableName => array('recipientsData' => array('to' => '*****@*****.**', 'cc' => null, 'bcc' => null), 'subject' => 'Test Email From Post', 'content' => array('htmlContent' => 'This is a test email')));
     $emailMessageForm = EmailMessageUtil::resolveEmailMessageFromPostData($postData, $emailMessageForm, $billy);
     $this->assertEquals('1', count($emailMessageForm->getModel()->recipients));
     $this->assertEquals(EmailMessageRecipient::TYPE_TO, $emailMessageForm->getModel()->recipients[0]->type);
     $this->assertEquals('*****@*****.**', $emailMessageForm->getModel()->recipients[0]->toAddress);
     //Test with with contacts in recipients
     $emailMessage = new EmailMessage();
     $emailMessageForm = new CreateEmailMessageForm($emailMessage);
     $postVariableName = get_class($emailMessageForm);
     $postData = array($postVariableName => array('recipientsData' => array('to' => '*****@*****.**', 'cc' => null, 'bcc' => null), 'subject' => 'Test Email From Post', 'content' => array('htmlContent' => 'This is a test email')));
     $emailMessageForm = EmailMessageUtil::resolveEmailMessageFromPostData($postData, $emailMessageForm, $billy);
     $this->assertEquals('1', count($emailMessageForm->getModel()->recipients));
     $this->assertEquals(EmailMessageRecipient::TYPE_TO, $emailMessageForm->getModel()->recipients[0]->type);
     $this->assertEquals('*****@*****.**', $emailMessageForm->getModel()->recipients[0]->toAddress);
     $contacts = Contact::getByName('sally sallyson');
     $this->assertTrue($emailMessageForm->getModel()->recipients[0]->personsOrAccounts[0]->isSame($contacts[0]));
     //Test with attachments
     $email = new Email();
     $filesIds = array();
     $fileDocx = ZurmoTestHelper::createFileModel('testNote.txt');
     $filesIds[] = $fileDocx->id;
     $fileTxt = ZurmoTestHelper::createFileModel('testImage.png');
     $filesIds[] = $fileTxt->id;
     $emailMessage = new EmailMessage();
     $emailMessageForm = new CreateEmailMessageForm($emailMessage);
     $postVariableName = get_class($emailMessageForm);
     $postData = array($postVariableName => array('recipientsData' => array('to' => '*****@*****.**', 'cc' => null, 'bcc' => null), 'subject' => 'Test Email From Post', 'content' => array('htmlContent' => 'This is a test email')), 'filesIds' => $filesIds);
     $emailMessageForm = EmailMessageUtil::resolveEmailMessageFromPostData($postData, $emailMessageForm, $billy);
     $this->assertEquals(2, count($emailMessageForm->getModel()->files));
 }
 /**
  * Load user's outbound settings from user's email account or the system settings
  * @param User   $user
  * @param string $name  EmailAccount name or null for default name
  */
 public function loadOutboundSettingsFromUserEmailAccount(User $user, $name = null)
 {
     $userEmailAccount = EmailAccount::getByUserAndName($user, $name);
     if ($userEmailAccount->useCustomOutboundSettings == EmailMessageUtil::OUTBOUND_PERSONAL_SMTP_SETTINGS) {
         $settingsToLoad = array_merge(static::$settingsToLoad, array('fromName', 'fromAddress'));
         foreach ($settingsToLoad as $keyName) {
             if ($keyName == 'outboundPassword') {
                 $keyValue = ZurmoPasswordSecurityUtil::decrypt($userEmailAccount->{$keyName});
                 $this->{$keyName} = $keyValue;
             } else {
                 $this->{$keyName} = $userEmailAccount->{$keyName};
             }
         }
     } else {
         $this->loadOutboundSettings();
         $this->fromName = strval($user);
         $this->fromAddress = $this->resolveFromAddressByUser($user);
     }
 }
 public function testSendMessagePopulatesEmailAccountSettings()
 {
     $jane = User::getByUsername('jane');
     Yii::app()->user->userModel = $jane;
     $emailHelper = new EmailHelper();
     EmailMessageTestHelper::createEmailAccount($jane);
     $emailAccount = EmailAccount::getByUserAndName($jane);
     $emailAccount->useCustomOutboundSettings = EmailMessageUtil::OUTBOUND_PERSONAL_SMTP_SETTINGS;
     $emailAccount->outboundType = 'abc';
     $emailAccount->outboundPort = 11;
     $emailAccount->outboundHost = 'dumb.domain';
     $emailAccount->outboundUsername = '******';
     $emailAccount->outboundPassword = '******';
     $emailAccount->outboundSecurity = 'ssl';
     $emailAccount->save();
     $emailMessage = EmailMessageTestHelper::createOutboxEmail($jane, 'Test email', 'Raw content', 'Html content', 'Zurmo', Yii::app()->emailHelper->outboundUsername, 'John Doe', Yii::app()->params['emailTestAccounts']['userImapSettings']['imapUsername']);
     $emailMessage->account = $emailAccount;
     $emailMessage->save();
     $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     Yii::app()->emailHelper->sendQueued();
     $job = new ProcessOutboundEmailJob();
     $this->assertTrue($job->run());
     //Since user email account has invalid settings message is not sent
     $this->assertContains('Connection could not be established with host dumb.domain', strval($emailMessage->error));
     $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
 }
 public static function createEmailAccount(User $user)
 {
     $emailAccount = new EmailAccount();
     $emailAccount->user = $user;
     $emailAccount->name = EmailAccount::DEFAULT_NAME;
     $emailAccount->fromName = $user->getFullName();
     $emailAccount->fromAddress = '*****@*****.**';
     $emailAccount->useCustomOutboundSettings = false;
     $emailAccount->outboundType = 'smtp';
     $emailAccount->save();
 }
Exemple #19
0
 public function testCrudForHasOneAndHasManyEmailAccountRelations()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $emailAccount = EmailAccount::resolveAndGetByUserAndName($super);
     $emailAccountId = $emailAccount->id;
     $emailAccount->forgetAll();
     //Check read hasOne relation
     $emailAccount = EmailAccount::getById($emailAccountId);
     $user = $emailAccount->user;
     $this->assertEquals($super->username, $user->username);
     //Check update hasOne relation
     $user = User::getByUsername('billy');
     $emailAccount->user = $user;
     $this->assertTrue($emailAccount->save());
     $emailAccount->forgetAll();
     $emailAccount = EmailAccount::getById($emailAccountId);
     $this->assertEquals('billy', $emailAccount->user->username);
     //Check delete hasOne relation
     $emailAccount->user = null;
     $this->assertTrue($emailAccount->save());
     $emailAccount->forgetAll();
     $emailAccount = EmailAccount::getById($emailAccountId);
     $this->assertLessThan(0, $emailAccount->user->id);
     //Check create and read hasMany relation model
     $emailMessage = EmailMessageTestHelper::createDraftSystemEmail('first test email', $user);
     $emailAccount->messages->add($emailMessage);
     $this->assertTrue($emailAccount->save());
     $emailAccount->forgetAll();
     $emailAccount = EmailAccount::getById($emailAccountId);
     $this->assertCount(1, $emailAccount->messages);
     $this->assertEquals('first test email', $emailAccount->messages[0]->subject);
     //Check update hasMany relation
     $emailMessage = $emailAccount->messages[0];
     $emailMessage->subject = 'first test email modified';
     $this->assertTrue($emailAccount->save());
     $emailAccount->forgetAll();
     $emailAccount = EmailAccount::getById($emailAccountId);
     $this->assertCount(1, $emailAccount->messages);
     $this->assertEquals($emailMessage->subject, $emailAccount->messages[0]->subject);
     //Check add and read another hasMany relation model
     $emailMessage2 = EmailMessageTestHelper::createDraftSystemEmail('second test email', $user);
     $emailAccount->messages->add($emailMessage2);
     $this->assertTrue($emailAccount->save());
     $emailAccount->forgetAll();
     $emailAccount = EmailAccount::getById($emailAccountId);
     $this->assertCount(2, $emailAccount->messages);
     $this->assertEquals($emailMessage2->subject, $emailAccount->messages[1]->subject);
     //Check delete hasMany relation first model
     $emailAccount->messages->remove($emailMessage);
     $this->assertTrue($emailAccount->save());
     $emailAccount->forgetAll();
     $emailAccount = EmailAccount::getById($emailAccountId);
     $this->assertCount(1, $emailAccount->messages);
     $this->assertEquals($emailMessage2->subject, $emailAccount->messages[0]->subject);
     //Check delete last hasMany relation model
     $emailAccount->messages->remove($emailMessage2);
     $this->assertTrue($emailAccount->save());
     $emailAccount->forgetAll();
     $emailAccount = EmailAccount::getById($emailAccountId);
     $this->assertCount(0, $emailAccount->messages);
 }
 /**
  * @depends testLoadOutboundSettings
  */
 public function testLoadOutboundSettingsFromUserEmailAccount()
 {
     $billy = User::getByUsername('billy');
     Yii::app()->user->userModel = $billy;
     $emailHelper = new EmailHelper();
     //Load outbound setting when no EmailAccount was created
     try {
         $emailHelper->loadOutboundSettingsFromUserEmailAccount($billy);
     } catch (NotFoundException $e) {
         $this->addToAssertionCount(1);
     }
     //Load outbound setting when EmailAccount useCustomOutboundSettings = false
     EmailMessageTestHelper::createEmailAccount($billy);
     $emailHelper->loadOutboundSettingsFromUserEmailAccount($billy);
     $this->assertEquals('smtp', $emailHelper->outboundType);
     $this->assertEquals(25, $emailHelper->outboundPort);
     $this->assertEquals('xxx', $emailHelper->outboundHost);
     $this->assertNull($emailHelper->outboundUsername);
     $this->assertNull($emailHelper->outboundPassword);
     $this->assertNull($emailHelper->outboundSecurity);
     $this->assertEquals($emailHelper->defaultTestToAddress, $emailHelper->fromAddress);
     $this->assertEquals(strval($billy), $emailHelper->fromName);
     //Load outbound setting when EmailAccount useCustomOutboundSettings = true
     $emailAccount = EmailAccount::getByUserAndName($billy);
     $emailAccount->useCustomOutboundSettings = true;
     $emailAccount->outboundType = 'xyz';
     $emailAccount->outboundPort = 55;
     $emailAccount->outboundHost = 'zurmo.com';
     $emailAccount->outboundUsername = '******';
     $emailAccount->outboundPassword = '******';
     $emailAccount->outboundSecurity = 'ssl';
     $emailAccount->save();
     $emailHelper->loadOutboundSettingsFromUserEmailAccount($billy);
     $this->assertEquals('xyz', $emailHelper->outboundType);
     $this->assertEquals(55, $emailHelper->outboundPort);
     $this->assertEquals('zurmo.com', $emailHelper->outboundHost);
     $this->assertEquals('billy', $emailHelper->outboundUsername);
     $this->assertEquals('billypass', $emailHelper->outboundPassword);
     $this->assertEquals('ssl', $emailHelper->outboundSecurity);
     $this->assertEquals($billy->getFullName(), $emailHelper->fromName);
     $this->assertEquals('*****@*****.**', $emailHelper->fromAddress);
 }
 public function actionEmailConfiguration($id, $redirectUrl = null)
 {
     UserAccessUtil::resolveCanCurrentUserAccessAction(intval($id));
     $user = User::getById(intval($id));
     UserAccessUtil::resolveCanCurrentUserAccessRootUser($user);
     UserAccessUtil::resolveAccessingASystemUser($user);
     $title = Zurmo::t('EmailMessagesModule', 'Email Configuration');
     $breadCrumbLinks = array(strval($user) => array('default/details', 'id' => $id), $title);
     $emailAccount = EmailAccount::resolveAndGetByUserAndName($user);
     $userEmailConfigurationForm = new UserEmailConfigurationForm($emailAccount);
     $userEmailConfigurationForm->emailSignatureHtmlContent = $user->getEmailSignature()->htmlContent;
     $postVariableName = get_class($userEmailConfigurationForm);
     if (isset($_POST[$postVariableName])) {
         $userEmailConfigurationForm->setAttributes($_POST[$postVariableName]);
         if ($userEmailConfigurationForm->validate()) {
             $userEmailConfigurationForm->save();
             Yii::app()->user->setFlash('notification', Zurmo::t('UsersModule', 'User email configuration saved successfully.'));
             if ($redirectUrl != null) {
                 $this->redirect($redirectUrl);
             } else {
                 $this->redirect(array($this->getId() . '/details', 'id' => $user->id));
             }
         } else {
             $userEmailConfigurationForm->outboundPassword = ZurmoPasswordSecurityUtil::decrypt($userEmailConfigurationForm->outboundPassword);
         }
     }
     $titleBarAndEditView = new UserActionBarAndEmailConfigurationEditView($this->getId(), $this->getModule()->getId(), $user, $userEmailConfigurationForm);
     $titleBarAndEditView->setCssClasses(array('AdministrativeArea'));
     $view = new UsersPageView($this->resolveZurmoDefaultOrAdminView($titleBarAndEditView, $breadCrumbLinks, 'UserBreadCrumbView'));
     echo $view->render();
 }
 public static function createEmailAccountForMailerFactory(User $user, $useCustomSetting = null)
 {
     if ($useCustomSetting == null) {
         $useCustomSetting = EmailMessageUtil::OUTBOUND_GLOBAL_SETTINGS;
     }
     $emailAccount = new EmailAccount();
     $emailAccount->user = $user;
     $emailAccount->name = EmailAccount::DEFAULT_NAME;
     $emailAccount->fromName = $user->getFullName();
     $emailAccount->fromAddress = '*****@*****.**';
     $emailAccount->useCustomOutboundSettings = $useCustomSetting;
     $emailAccount->outboundType = 'smtp';
     $emailAccount->outboundHost = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundHost'];
     $emailAccount->outboundPort = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundPort'];
     $emailAccount->outboundUsername = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundUsername'];
     $emailAccount->outboundPassword = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundPassword'];
     $emailAccount->outboundSecurity = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundSecurity'];
     $emailAccount->save();
 }