public function actionCreateEmailMessage($toAddress = null, $relatedId = null, $relatedModelClassName = null)
 {
     $postData = PostUtil::getData();
     $getData = GetUtil::getData();
     $personOrAccount = self::resolvePersonOrAccountFromGet($relatedId, $relatedModelClassName);
     $emailMessage = new EmailMessage();
     $emailMessageForm = new CreateEmailMessageForm($emailMessage);
     $emailMessageForm->setScenario('createNonDraft');
     $postVariableName = get_class($emailMessageForm);
     if ($toAddress == null && $personOrAccount != null && $personOrAccount->primaryEmail->emailAddress != null) {
         $toAddress = $personOrAccount->primaryEmail->emailAddress;
     }
     if (isset($postData[$postVariableName])) {
         EmailMessageUtil::resolveEmailMessageFromPostData($postData, $emailMessageForm, Yii::app()->user->userModel);
         $this->actionValidateCreateEmailMessage($postData, $emailMessageForm);
         $this->attemptToSaveModelFromPost($emailMessageForm, null, false);
         ZurmoControllerUtil::updatePermissionsWithDefaultForModelByCurrentUser($emailMessageForm->getModel());
         Yii::app()->jobQueue->add('ProcessOutboundEmail');
     } else {
         EmailMessageUtil::resolveSignatureToEmailMessage($emailMessage, Yii::app()->user->userModel);
         EmailMessageUtil::resolvePersonOrAccountToEmailMessage($emailMessage, Yii::app()->user->userModel, $toAddress, $relatedId, $relatedModelClassName);
         $createEmailMessageModalEditView = new CreateEmailMessageModalEditView($this->getId(), $this->getModule()->getId(), $emailMessageForm);
         $view = new ModalView($this, $createEmailMessageModalEditView);
         Yii::app()->getClientScript()->setToAjaxMode();
         echo $view->render();
     }
 }
 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->assertLessThan(0, $recipients[0]->personOrAccount->id);
     $this->assertLessThan(0, $recipients[1]->personOrAccount->id);
     $this->assertLessThan(0, $recipients[2]->personOrAccount->id);
     $this->assertLessThan(0, $recipients[3]->personOrAccount->id);
     $this->assertLessThan(0, $recipients[4]->personOrAccount->id);
     $this->assertLessThan(0, $recipients[5]->personOrAccount->id);
     //The message should go to the default outbox folder
     $this->assertEquals(EmailFolder::getDefaultOutboxName(), $emailMessageForm->folder->name);
     $this->assertEquals(EmailFolder::TYPE_OUTBOX, $emailMessageForm->folder->type);
     //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->assertEquals($emailMessageForm->getModel()->recipients[0]->personOrAccount->getClassId('Item'), $contacts[0]->getClassId('Item'));
     //Test with attachments
     $email = new Email();
     $filesIds = array();
     $fileDocx = ZurmoTestHelper::createFileModel('testNote.txt', 'FileModel');
     $filesIds[] = $fileDocx->id;
     $fileTxt = ZurmoTestHelper::createFileModel('testImage.png', 'FileModel');
     $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));
 }