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)); }