public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     SecurityTestHelper::createSuperAdmin();
     UserTestHelper::createBasicUser('normal');
     $emailBox = EmailBoxUtil::getDefaultEmailBoxByUser(User::getByUsername('super'));
 }
 /**
  * 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;
 }
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     SecurityTestHelper::createSuperAdmin();
     $emailBox = EmailBoxUtil::getDefaultEmailBoxByUser(User::getByUsername('super'));
     ContactTestHelper::createContactByNameForOwner('contact01', Yii::app()->user->userModel);
     ContactTestHelper::createContactByNameForOwner('contact02', Yii::app()->user->userModel);
     ContactTestHelper::createContactByNameForOwner('contact03', Yii::app()->user->userModel);
 }
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     SecurityTestHelper::createSuperAdmin();
     UserTestHelper::createBasicUser('billy');
     $jane = UserTestHelper::createBasicUser('jane');
     UserTestHelper::createBasicUser('sally');
     UserTestHelper::createBasicUser('jason');
     $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
     EmailBoxUtil::createBoxAndDefaultFoldersByUserAndName($jane, 'JaneBox');
 }
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     SecurityTestHelper::createSuperAdmin();
     UserTestHelper::createBasicUser('normal');
     EmailBoxUtil::getDefaultEmailBoxByUser(User::getByUsername('super'));
     $contact1 = ContactTestHelper::createContactByNameForOwner('contact01', Yii::app()->user->userModel);
     $contact2 = ContactTestHelper::createContactByNameForOwner('contact02', Yii::app()->user->userModel);
     $contact3 = ContactTestHelper::createContactByNameForOwner('contact03', Yii::app()->user->userModel);
     $contact1->primaryEmail->emailAddress = '*****@*****.**';
     $contact2->primaryEmail->emailAddress = '*****@*****.**';
     $contact3->primaryEmail->emailAddress = '*****@*****.**';
     // Begin Not Coding Standard
     assert($contact1->save());
     assert($contact2->save());
     assert($contact3->save());
     // End Not Coding Standard
 }
 public static function setUpBeforeClass()
 {
     parent::setUpBeforeClass();
     SecurityTestHelper::createSuperAdmin();
     $billy = UserTestHelper::createBasicUser('billy');
     $jane = UserTestHelper::createBasicUser('jane');
     UserTestHelper::createBasicUser('sally');
     UserTestHelper::createBasicUser('jason');
     $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
     EmailBoxUtil::createBoxAndDefaultFoldersByUserAndName($jane, 'JaneBox');
     if (EmailMessageTestHelper::isSetEmailAccountsTestConfiguration()) {
         EmailMessageTestHelper::createEmailAccountForMailerFactory($jane);
     }
     Yii::app()->emailHelper->outboundType = 'smtp';
     Yii::app()->emailHelper->outboundHost = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundHost'];
     Yii::app()->emailHelper->outboundPort = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundPort'];
     Yii::app()->emailHelper->outboundUsername = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundUsername'];
     Yii::app()->emailHelper->outboundPassword = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundPassword'];
     Yii::app()->emailHelper->outboundSecurity = Yii::app()->params['emailTestAccounts']['userSmtpSettings']['outboundSecurity'];
     Yii::app()->emailHelper->setOutboundSettings();
 }
 protected function resolveEmailMessage($subject = 'Subject', $textContent = 'My First Message', $htmlContent = 'Some fake HTML content', $fromAddress = '*****@*****.**', $fromName = 'Zurmo', $toAddress = '*****@*****.**', $toName = null, $contact = null)
 {
     if (!isset($contact)) {
         $contact = ContactTestHelper::createContactByNameForOwner('emailContact', Yii::app()->user->userModel);
     }
     $emailMessage = new EmailMessage();
     $emailMessage->owner = $contact->owner;
     $emailMessage->subject = $subject;
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = $textContent;
     $emailContent->htmlContent = $htmlContent;
     $emailMessage->content = $emailContent;
     $sender = new EmailMessageSender();
     $sender->fromAddress = $fromAddress;
     $sender->fromName = $fromName;
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = $toAddress;
     if (!isset($toName)) {
         $toName = strval($contact);
     }
     $recipient->toName = $toName;
     $recipient->personsOrAccounts->add($contact);
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailBox = EmailBoxUtil::getDefaultEmailBoxByUser(Yii::app()->user->userModel);
     $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_OUTBOX);
     $saved = $emailMessage->save();
     if (!$saved) {
         var_dump($emailMessage->getErrors());
         throw new FailedToSaveModelException();
     }
     return $emailMessage;
 }
 /**
  * Create new model
  * @param $data
  * @return ApiResult
  * @throws ApiException
  */
 protected function processCreate($data)
 {
     try {
         $model = new EmailMessage();
         $emailMessage = $this->getImapMessageFromEmailData($data);
         if (isset($data['sentFrom'])) {
             unset($data['sentFrom']);
         }
         if (isset($data['recipients'])) {
             unset($data['recipients']);
         }
         if (isset($data['attachments'])) {
             unset($data['attachments']);
         }
         if (isset($data['owner']['id'])) {
             try {
                 $emailOwner = User::getById((int) $data['owner']['id']);
             } catch (CException $e) {
                 $message = Zurmo::t('ZurmoModule', 'Owner not found.');
                 throw new ApiException($message);
             }
         } else {
             $emailOwner = Yii::app()->user->userModel;
         }
         $emailSenderOrRecipientEmailFoundInSystem = false;
         $userCanAccessContacts = RightsUtil::canUserAccessModule('ContactsModule', $emailOwner);
         $userCanAccessLeads = RightsUtil::canUserAccessModule('LeadsModule', $emailOwner);
         $userCanAccessAccounts = RightsUtil::canUserAccessModule('AccountsModule', $emailOwner);
         if (!empty($emailMessage->fromEmail)) {
             $senderInfo['email'] = $emailMessage->fromEmail;
             $senderInfo['name'] = $emailMessage->fromName;
             $sender = EmailArchivingUtil::createEmailMessageSender($senderInfo, $userCanAccessContacts, $userCanAccessLeads, $userCanAccessAccounts);
             if ($sender->personsOrAccounts->count() > 0) {
                 $emailSenderOrRecipientEmailFoundInSystem = true;
             }
         } else {
             $message = Zurmo::t('ZurmoModule', 'Sender not found.');
             throw new ApiException($message);
         }
         try {
             $recipientsInfo = EmailArchivingUtil::resolveEmailRecipientsFromEmailMessage($emailMessage);
         } catch (NotSupportedException $exception) {
             $message = Zurmo::t('ZurmoModule', 'No recipients found.');
             throw new ApiException($message);
         }
         $emailRecipientFoundInSystem = false;
         foreach ($recipientsInfo as $recipientInfo) {
             $recipient = EmailArchivingUtil::createEmailMessageRecipient($recipientInfo, $userCanAccessContacts, $userCanAccessLeads, $userCanAccessAccounts);
             $model->recipients->add($recipient);
             // Check if at least one recipient email can't be found in Contacts, Leads, Account and User emails
             // so we will save email message in EmailFolder::TYPE_ARCHIVED_UNMATCHED folder, and user will
             // be able to match emails with items(Contacts, Accounts...) emails in systems
             if ($recipient->personsOrAccounts->count() > 0) {
                 $emailRecipientFoundInSystem = true;
             }
         }
         if ($emailSenderOrRecipientEmailFoundInSystem == true) {
             $emailSenderOrRecipientEmailFoundInSystem = $emailRecipientFoundInSystem;
         }
         if ($emailOwner instanceof User) {
             $box = EmailBoxUtil::getDefaultEmailBoxByUser($emailOwner);
         } else {
             $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
         }
         if (!$emailSenderOrRecipientEmailFoundInSystem) {
             $model->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED_UNMATCHED);
             $this->sendArchivedUnmatchedNotificationToEmailOwner($emailOwner);
         } else {
             $model->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED);
         }
         $model->sender = $sender;
         if (isset($data['textContent']) || isset($data['htmlContent'])) {
             $emailContent = new EmailMessageContent();
             if (isset($data['textContent'])) {
                 $emailContent->textContent = $data['textContent'];
             } else {
                 $emailContent->textContent = '';
             }
             if (isset($data['htmlContent'])) {
                 $emailContent->htmlContent = $data['htmlContent'];
             } else {
                 $emailContent->htmlContent = '';
             }
             $model->content = $emailContent;
             unset($data['textContent']);
             unset($data['htmlContent']);
         } else {
             $message = Zurmo::t('ZurmoModule', 'No email content found.');
             throw new ApiException($message);
         }
         if (!empty($emailMessage->attachments)) {
             foreach ($emailMessage->attachments as $attachment) {
                 if (isset($attachment['filename']) && isset($attachment['attachment'])) {
                     $file = EmailArchivingUtil::createEmailAttachment($attachment, true);
                     if ($file instanceof FileModel) {
                         $model->files->add($file);
                     }
                 }
             }
         }
         if (!isset($data['sentDateTime'])) {
             $model->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
         }
         $this->setModelScenarioFromData($model, $data);
         $model = $this->attemptToSaveModelFromData($model, $data, null, false);
         $id = $model->id;
         $model->forget();
         if (!count($model->getErrors())) {
             $data = array('id' => $id);
             $result = new ApiResult(ApiResponse::STATUS_SUCCESS, $data, null, null);
         } else {
             $errors = $model->getErrors();
             $message = Zurmo::t('ZurmoModule', 'Model was not created.');
             $result = new ApiResult(ApiResponse::STATUS_FAILURE, null, $message, $errors);
         }
     } catch (Exception $e) {
         $message = $e->getMessage();
         throw new ApiException($message);
     }
     return $result;
 }
Esempio n. 9
0
 /**
  * Special method to load archived, but unmatched emails. This is for use with the @see ArchivedEmailMatchingListView
  */
 public function actionLoadUnmatchedSampler()
 {
     if (!Group::isUserASuperAdministrator(Yii::app()->user->userModel)) {
         throw new NotSupportedException();
     }
     $box = EmailBoxUtil::getDefaultEmailBoxByUser(Yii::app()->user->userModel);
     //#1 Create Archived - Sent
     $emailMessage = new EmailMessage();
     $emailMessage->owner = Yii::app()->user->userModel;
     $emailMessage->subject = 'A test unmatched archived sent email';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Super User';
     $sender->personOrAccount = Yii::app()->user->userModel;
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = 'Bobby Bobson';
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED_UNMATCHED);
     $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $saved = $emailMessage->save();
     if (!$saved) {
         throw new NotSupportedException();
     }
     //#2 Create Archived - Received
     $emailMessage = new EmailMessage();
     $emailMessage->owner = Yii::app()->user->userModel;
     $emailMessage->subject = 'A test unmatched archived received email';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My Second Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Bobby Bobson';
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = 'Super User';
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $recipient->personOrAccount = Yii::app()->user->userModel;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED_UNMATCHED);
     $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $saved = $emailMessage->save();
     if (!$saved) {
         throw new NotSupportedException();
     }
 }
 /**
  * Save email message
  * This method should be protected, but we made it public for unit testing, so don't call it outside this class.
  * @param ImapMessage $message
  * @throws NotSupportedException
  * @return boolean
  */
 public function saveEmailMessage(ImapMessage $message)
 {
     // Get owner for message
     try {
         $emailOwner = EmailArchivingUtil::resolveOwnerOfEmailMessage($message);
     } catch (CException $e) {
         // User not found, so inform user about issue and continue with next email.
         $this->resolveMessageSubjectAndContentAndSendSystemMessage('OwnerNotExist', $message);
         return false;
     }
     $emailSenderOrRecipientEmailFoundInSystem = false;
     $userCanAccessContacts = RightsUtil::canUserAccessModule('ContactsModule', $emailOwner);
     $userCanAccessLeads = RightsUtil::canUserAccessModule('LeadsModule', $emailOwner);
     $userCanAccessAccounts = RightsUtil::canUserAccessModule('AccountsModule', $emailOwner);
     $senderInfo = EmailArchivingUtil::resolveEmailSenderFromEmailMessage($message);
     if (!$senderInfo) {
         $this->resolveMessageSubjectAndContentAndSendSystemMessage('SenderNotExtracted', $message);
         return false;
     } else {
         $sender = EmailArchivingUtil::createEmailMessageSender($senderInfo, $userCanAccessContacts, $userCanAccessLeads, $userCanAccessAccounts);
         if ($sender->personsOrAccounts->count() > 0) {
             $emailSenderOrRecipientEmailFoundInSystem = true;
         }
     }
     try {
         $recipientsInfo = EmailArchivingUtil::resolveEmailRecipientsFromEmailMessage($message);
     } catch (NotSupportedException $exception) {
         $this->resolveMessageSubjectAndContentAndSendSystemMessage('RecipientNotExtracted', $message);
         return false;
     }
     $emailMessage = new EmailMessage();
     $emailMessage->owner = $emailOwner;
     $emailMessage->subject = $message->subject;
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = $message->textBody;
     $emailContent->htmlContent = $message->htmlBody;
     $emailMessage->content = $emailContent;
     $emailMessage->sender = $sender;
     $emailRecipientFoundInSystem = false;
     foreach ($recipientsInfo as $recipientInfo) {
         $recipient = EmailArchivingUtil::createEmailMessageRecipient($recipientInfo, $userCanAccessContacts, $userCanAccessLeads, $userCanAccessAccounts);
         $emailMessage->recipients->add($recipient);
         // Check if at least one recipient email can't be found in Contacts, Leads, Account and User emails
         // so we will save email message in EmailFolder::TYPE_ARCHIVED_UNMATCHED folder, and user will
         // be able to match emails with items(Contacts, Accounts...) emails in systems
         if ($recipient->personsOrAccounts->count() > 0) {
             $emailRecipientFoundInSystem = true;
         }
     }
     // Override $emailSenderOrRecipientEmailFoundInSystem only if there are no errors
     if ($emailSenderOrRecipientEmailFoundInSystem == true) {
         $emailSenderOrRecipientEmailFoundInSystem = $emailRecipientFoundInSystem;
     }
     if ($emailOwner instanceof User) {
         $box = EmailBoxUtil::getDefaultEmailBoxByUser($emailOwner);
     } else {
         $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
     }
     if (!$emailSenderOrRecipientEmailFoundInSystem) {
         $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED_UNMATCHED);
         $notificationMessage = new NotificationMessage();
         $notificationMessage->textContent = Zurmo::t('EmailMessagesModule', 'At least one archived email message does ' . 'not match any records in the system. ' . 'To manually match them use this link: {url}.', array('{url}' => Yii::app()->createUrl('emailMessages/default/matchingList')));
         $notificationMessage->htmlContent = Zurmo::t('EmailMessagesModule', 'At least one archived email message does ' . 'not match any records in the system. ' . '<a href="{url}" target="_blank">Click here</a> to manually match them.', array('{url}' => Yii::app()->createUrl('emailMessages/default/matchingList')));
         if ($emailOwner instanceof User) {
             $rules = new EmailMessageArchivingEmailAddressNotMatchingNotificationRules();
             $rules->addUser($emailOwner);
             NotificationsUtil::submit($notificationMessage, $rules);
         }
     } else {
         $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED);
     }
     if (!empty($message->attachments)) {
         foreach ($message->attachments as $attachment) {
             if (!$attachment['is_attachment']) {
                 continue;
             }
             $file = EmailArchivingUtil::createEmailAttachment($attachment);
             if ($file instanceof FileModel) {
                 $emailMessage->files->add($file);
             }
         }
     }
     $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $validated = $emailMessage->validate();
     if (!$validated) {
         // Email message couldn't be validated(some related models can't be validated). Email user.
         $this->resolveMessageSubjectAndContentAndSendSystemMessage('EmailMessageNotValidated', $message);
         return false;
     }
     EmailArchivingUtil::resolveSanitizeFromImapToUtf8($emailMessage);
     $saved = $emailMessage->save();
     try {
         if (!$saved) {
             throw new NotSupportedException();
         }
         if (isset($message->uid)) {
             $this->imapManager->deleteMessage($message->uid);
             $this->getMessageLogger()->addDebugMessage('Deleted Message id: ' . $message->uid);
         }
     } catch (NotSupportedException $e) {
         // Email message couldn't be saved. Email user.
         $this->resolveMessageSubjectAndContentAndSendSystemMessage('EmailMessageNotSaved', $message);
         return false;
     }
     return true;
 }
Esempio n. 11
0
 public function testGetDefaultEmailBoxByUserNotCreatingDuplicates()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $emailBoxCountBefore = EmailBox::getCount();
     $johnDoe = UserTestHelper::createBasicUser('johnDoe');
     Yii::app()->user->userModel = $johnDoe;
     $johnDoeId = $johnDoe->id;
     $this->assertTrue($johnDoeId > 0);
     $this->assertTrue($johnDoe->emailBoxes->count() == 0);
     EmailBoxUtil::getDefaultEmailBoxByUser($johnDoe);
     //still doesn't show from the user side, because it was added via the other side.
     $this->assertTrue($johnDoe->emailBoxes->count() == 0);
     $this->assertEquals($emailBoxCountBefore + 1, EmailBox::getCount());
     //lets try getting default again, shouldn't create a new one.
     EmailBoxUtil::getDefaultEmailBoxByUser($johnDoe);
     //still doesn't show from the user side, because it was added via the other side.
     $this->assertTrue($johnDoe->emailBoxes->count() == 0);
     $this->assertEquals($emailBoxCountBefore + 1, EmailBox::getCount());
     $johnDoeId = $johnDoe->id;
     $johnDoe->forget();
     $johnDoe = User::getById($johnDoeId);
     //now we forgot and re-retrieved so it should still show
     $this->assertTrue($johnDoe->emailBoxes->count() == 1);
     EmailBoxUtil::getDefaultEmailBoxByUser($johnDoe);
     // This command shouldn't create new box
     $this->assertTrue($johnDoe->emailBoxes->count() == 1);
     $johnDoeId = $johnDoe->id;
     $johnDoe->forget();
     $johnDoe = User::getById($johnDoeId);
     //now we forgot and re-retrieved so it should still show
     $this->assertTrue($johnDoe->emailBoxes->count() == 1);
     $this->assertEquals($emailBoxCountBefore + 1, EmailBox::getCount());
 }
 public function __construct()
 {
     $user = User::getByUsername('super');
     $this->emailBox = EmailBoxUtil::getDefaultEmailBoxByUser($user);
 }
 public static function createArchivedUnmatchedSentMessage(User $user)
 {
     if ($user->primaryEmail->emailAddress == null) {
         throw new NotSupportedException();
     }
     $box = EmailBoxUtil::getDefaultEmailBoxByUser($user);
     $emailMessage = new EmailMessage();
     $emailMessage->owner = Yii::app()->user->userModel;
     $emailMessage->subject = 'A test unmatched archived sent email';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = $user->primaryEmail->emailAddress;
     $sender->fromName = strval($user);
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = 'Bobby Bobson';
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED_UNMATCHED);
     $saved = $emailMessage->save();
     if (!$saved) {
         throw new NotSupportedException();
     }
     return $emailMessage;
 }
Esempio n. 14
0
 /**
  * @depends testTryDeletingTheNotificationsBox
  */
 public function testUserDefaultBoxBoxResolvesCorrectly()
 {
     $jane = User::getByUsername('jane');
     Yii::app()->user->userModel = $jane;
     $boxes = EmailBox::getAll();
     $this->assertEquals(1, count($boxes));
     $box = EmailBoxUtil::getDefaultEmailBoxByUser($jane);
     $this->assertEquals(EmailBox::USER_DEFAULT_NAME, $box->name);
     $this->assertEquals(8, $box->folders->count());
     $this->assertTrue($box->isDeletable());
     $this->assertTrue($box->id > 0);
     //After it saves, it should create a Sent folder and an Outbox folder
     $boxes = EmailBox::getAll();
     $this->assertEquals(2, count($boxes));
     $jane->forget();
     $jane = User::getByUsername('jane');
     Yii::app()->user->userModel = $jane;
     $this->assertEquals(1, $jane->emailBoxes->count());
     $box = $jane->emailBoxes->offsetGet(0);
     $this->assertEquals(8, $box->folders->count());
     $folder1 = $box->folders->offsetGet(0);
     $folder2 = $box->folders->offsetGet(1);
     $folder3 = $box->folders->offsetGet(2);
     $folder4 = $box->folders->offsetGet(3);
     $folder5 = $box->folders->offsetGet(4);
     $folder6 = $box->folders->offsetGet(5);
     $folder7 = $box->folders->offsetGet(6);
     $folder8 = $box->folders->offsetGet(7);
     $this->assertTrue($folder1->name == EmailFolder::getDefaultInboxName() || $folder1->name == EmailFolder::getDefaultSentName() || $folder1->name == EmailFolder::getDefaultOutboxName() || $folder1->name == EmailFolder::getDefaultDraftName() || $folder1->name == EmailFolder::getDefaultOutboxErrorName() || $folder1->name == EmailFolder::getDefaultOutboxFailureName() || $folder1->name == EmailFolder::getDefaultArchivedName() || $folder1->name == EmailFolder::getDefaultArchivedUnmatchedName());
     $this->assertTrue($folder2->name == EmailFolder::getDefaultInboxName() || $folder2->name == EmailFolder::getDefaultSentName() || $folder2->name == EmailFolder::getDefaultOutboxName() || $folder2->name == EmailFolder::getDefaultDraftName() || $folder2->name == EmailFolder::getDefaultOutboxErrorName() || $folder2->name == EmailFolder::getDefaultOutboxFailureName() || $folder2->name == EmailFolder::getDefaultArchivedName() || $folder2->name == EmailFolder::getDefaultArchivedUnmatchedName());
     $this->assertTrue($folder3->name == EmailFolder::getDefaultInboxName() || $folder3->name == EmailFolder::getDefaultSentName() || $folder3->name == EmailFolder::getDefaultOutboxName() || $folder3->name == EmailFolder::getDefaultDraftName() || $folder3->name == EmailFolder::getDefaultOutboxErrorName() || $folder3->name == EmailFolder::getDefaultOutboxFailureName() || $folder3->name == EmailFolder::getDefaultArchivedName() || $folder3->name == EmailFolder::getDefaultArchivedUnmatchedName());
     $this->assertTrue($folder4->name == EmailFolder::getDefaultInboxName() || $folder4->name == EmailFolder::getDefaultSentName() || $folder4->name == EmailFolder::getDefaultOutboxName() || $folder4->name == EmailFolder::getDefaultDraftName() || $folder4->name == EmailFolder::getDefaultOutboxErrorName() || $folder4->name == EmailFolder::getDefaultOutboxFailureName() || $folder4->name == EmailFolder::getDefaultArchivedName() || $folder4->name == EmailFolder::getDefaultArchivedUnmatchedName());
     $this->assertTrue($folder5->name == EmailFolder::getDefaultInboxName() || $folder5->name == EmailFolder::getDefaultSentName() || $folder5->name == EmailFolder::getDefaultOutboxName() || $folder5->name == EmailFolder::getDefaultDraftName() || $folder5->name == EmailFolder::getDefaultOutboxErrorName() || $folder5->name == EmailFolder::getDefaultOutboxFailureName() || $folder5->name == EmailFolder::getDefaultArchivedName() || $folder5->name == EmailFolder::getDefaultArchivedUnmatchedName());
     $this->assertTrue($folder6->name == EmailFolder::getDefaultInboxName() || $folder6->name == EmailFolder::getDefaultSentName() || $folder6->name == EmailFolder::getDefaultOutboxName() || $folder6->name == EmailFolder::getDefaultDraftName() || $folder6->name == EmailFolder::getDefaultOutboxErrorName() || $folder6->name == EmailFolder::getDefaultOutboxFailureName() || $folder6->name == EmailFolder::getDefaultArchivedName() || $folder6->name == EmailFolder::getDefaultArchivedUnmatchedName());
     $this->assertTrue($folder7->name == EmailFolder::getDefaultInboxName() || $folder7->name == EmailFolder::getDefaultSentName() || $folder7->name == EmailFolder::getDefaultOutboxName() || $folder7->name == EmailFolder::getDefaultDraftName() || $folder7->name == EmailFolder::getDefaultOutboxErrorName() || $folder7->name == EmailFolder::getDefaultOutboxFailureName() || $folder7->name == EmailFolder::getDefaultArchivedName() || $folder7->name == EmailFolder::getDefaultArchivedUnmatchedName());
     $this->assertTrue($folder8->name == EmailFolder::getDefaultInboxName() || $folder8->name == EmailFolder::getDefaultSentName() || $folder8->name == EmailFolder::getDefaultOutboxName() || $folder8->name == EmailFolder::getDefaultDraftName() || $folder8->name == EmailFolder::getDefaultOutboxErrorName() || $folder8->name == EmailFolder::getDefaultOutboxFailureName() || $folder8->name == EmailFolder::getDefaultArchivedName() || $folder8->name == EmailFolder::getDefaultArchivedUnmatchedName());
     $this->assertNotEquals($folder1->name, $folder2->name);
     $this->assertNotEquals($folder1->name, $folder3->name);
     $this->assertNotEquals($folder1->name, $folder4->name);
     $this->assertNotEquals($folder1->name, $folder5->name);
     $this->assertNotEquals($folder1->name, $folder6->name);
     $this->assertNotEquals($folder1->name, $folder7->name);
     $this->assertNotEquals($folder1->name, $folder8->name);
     $this->assertNotEquals($folder2->name, $folder3->name);
     $this->assertNotEquals($folder2->name, $folder4->name);
     $this->assertNotEquals($folder2->name, $folder5->name);
     $this->assertNotEquals($folder2->name, $folder6->name);
     $this->assertNotEquals($folder2->name, $folder7->name);
     $this->assertNotEquals($folder2->name, $folder8->name);
     $this->assertNotEquals($folder3->name, $folder4->name);
     $this->assertNotEquals($folder3->name, $folder5->name);
     $this->assertNotEquals($folder3->name, $folder6->name);
     $this->assertNotEquals($folder3->name, $folder7->name);
     $this->assertNotEquals($folder3->name, $folder8->name);
     $this->assertNotEquals($folder4->name, $folder5->name);
     $this->assertNotEquals($folder4->name, $folder6->name);
     $this->assertNotEquals($folder4->name, $folder7->name);
     $this->assertNotEquals($folder4->name, $folder8->name);
     $this->assertNotEquals($folder5->name, $folder6->name);
     $this->assertNotEquals($folder5->name, $folder7->name);
     $this->assertNotEquals($folder5->name, $folder8->name);
     $this->assertNotEquals($folder6->name, $folder7->name);
     $this->assertNotEquals($folder6->name, $folder8->name);
     $this->assertNotEquals($folder7->name, $folder8->name);
     $boxes = EmailBox::getAll();
     $this->assertEquals(2, count($boxes));
     $this->assertEquals($boxes[1]->user->id, $jane->id);
     $jane->forget();
     $jane = User::getByUsername('jane');
     Yii::app()->user->userModel = $jane;
     $this->assertEquals(1, $jane->emailBoxes->count());
     $this->assertEquals($jane->emailBoxes->offsetGet(0), $boxes[1]);
     // Check if only one default email box is created for user
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $jimmy = UserTestHelper::createBasicUser('jimmy');
     $saved = $jimmy->save();
     $this->assertTrue($saved);
     Yii::app()->user->userModel = $jimmy;
     $jimmysId = $jimmy->id;
     $this->assertTrue($jimmysId > 0);
     $this->assertTrue($jimmy->emailBoxes->count() == 0);
     EmailBoxUtil::getDefaultEmailBoxByUser($jimmy);
     //still doesn't show from the user side, because it was added via the other side.
     $this->assertTrue($jimmy->emailBoxes->count() == 0);
     $jimmysId = $jimmy->id;
     $jimmy->forget();
     $jimmy = User::getById($jimmysId);
     //now we forgot and re-retrieved so it should still show
     $this->assertTrue($jimmy->emailBoxes->count() == 1);
     EmailBoxUtil::getDefaultEmailBoxByUser($jimmy);
     // This command shouldn't create new box
     $boxes = EmailBox::getAll();
     // Note that two new boxes are created for use jimmy instead one.
     // Probably because $jimmy->emailBoxes->count() return 0
     $this->assertEquals(3, count($boxes));
 }
Esempio n. 15
0
 /**
  * Special method to load a campaign with all types of campaignItemActivity
  */
 public function actionLoadCampaignWithAllItemActivityTypes()
 {
     if (!Group::isUserASuperAdministrator(Yii::app()->user->userModel)) {
         throw new NotSupportedException();
     }
     $emailBox = EmailBoxUtil::getDefaultEmailBoxByUser(Yii::app()->user->userModel);
     $marketingList = new MarketingList();
     $marketingList->name = 'Demo Marketing List';
     $marketingList->save();
     $campaign = new Campaign();
     $campaign->marketingList = $marketingList;
     $campaign->name = 'Campaign with all campaignItemActivity';
     $campaign->subject = 'Demo for all types of campaignItemActivities';
     $campaign->status = Campaign::STATUS_COMPLETED;
     $campaign->sendOnDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $campaign->supportsRichText = true;
     $campaign->htmlContent = 'Demo content';
     $campaign->fromName = 'Zurmo';
     $campaign->fromAddress = '*****@*****.**';
     $campaign->enableTracking = true;
     $saved = $campaign->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $contacts = Contact::getAll();
     //Awaiting queue
     $contact = $contacts[0];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $campaignItem->unrestrictedSave();
     //Contact is not subscribed
     $contact = $contacts[1];
     $marketingList->addNewMember($contact->id, true);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Skipped, both primary and secondary are opted out
     $contact = $contacts[2];
     $contact->primaryEmail->emailAddress = $contact->firstName . '*****@*****.**';
     $contact->primaryEmail->optOut = true;
     $contact->secondaryEmail->emailAddress = $contact->firstName . '*****@*****.**';
     $contact->secondaryEmail->optOut = true;
     $contact->save();
     $marketingList->addNewMember($contact->id);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Skipped, primary is opted out but secondary is not
     $contact = $contacts[3];
     $contact->primaryEmail->emailAddress = $contact->firstName . '*****@*****.**';
     $contact->primaryEmail->optOut = true;
     $contact->secondaryEmail->emailAddress = $contact->firstName . '*****@*****.**';
     $contact->secondaryEmail->optOut = false;
     $contact->save();
     $marketingList->addNewMember($contact->id);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Skipped, primary and secondary not set
     $contact = $contacts[4];
     $contact->primaryEmail = null;
     $contact->secondaryEmail = null;
     $contact->save();
     $marketingList->addNewMember($contact->id);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Skipped, primary not set but secondary is set
     $contact = $contacts[5];
     $contact->primaryEmail = null;
     $contact->secondaryEmail->emailAddress = $contact->firstName . '@zurmo.org';
     $contact->secondaryEmail->optOut = false;
     $contact->save();
     $marketingList->addNewMember($contact->id);
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->type = CampaignItemActivity::TYPE_SKIP;
     $activity->save();
     $campaignItem->unrestrictedSave();
     //Queued
     $contact = $contacts[6];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->save();
     $emailMessage = new EmailMessage();
     $emailMessage->setScenario('importModel');
     $emailMessage->owner = $contact->owner;
     $emailMessage->subject = 'Subject';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Zurmo';
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = strval($contact);
     $recipient->personsOrAccounts->add($contact);
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_OUTBOX);
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $campaignItem->emailMessage = $emailMessage;
     $campaignItem->unrestrictedSave();
     //Queued with error
     $contact = $contacts[7];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->save();
     $emailMessage = new EmailMessage();
     $emailMessage->setScenario('importModel');
     $emailMessage->owner = $contact->owner;
     $emailMessage->subject = 'Subject';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Zurmo';
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = strval($contact);
     $recipient->personsOrAccounts->add($contact);
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_OUTBOX_ERROR);
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->sendAttempts = 2;
     $emailMessageError = new EmailMessageSendError();
     $emailMessageError->serializedData = serialize(array('code' => '0001', 'message' => 'Error Message'));
     $emailMessage->error = $emailMessageError;
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $campaignItem->emailMessage = $emailMessage;
     $campaignItem->unrestrictedSave();
     //Failure
     $contact = $contacts[8];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->quantity = 1;
     $activity->save();
     $emailMessage = new EmailMessage();
     $emailMessage->setScenario('importModel');
     $emailMessage->owner = $contact->owner;
     $emailMessage->subject = 'Subject';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Zurmo';
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = strval($contact);
     $recipient->personsOrAccounts->add($contact);
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_OUTBOX_FAILURE);
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->sendAttempts = 3;
     $emailMessageError = new EmailMessageSendError();
     $emailMessageError->serializedData = serialize(array('code' => '0001', 'message' => 'Error Message'));
     $emailMessage->error = $emailMessageError;
     $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $campaignItem->emailMessage = $emailMessage;
     $campaignItem->unrestrictedSave();
     //Sent, open, click, bounce
     $contact = $contacts[9];
     $campaignItem = new CampaignItem();
     $campaignItem->processed = true;
     $campaignItem->campaign = $campaign;
     $campaignItem->contact = $contact;
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->type = CampaignItemActivity::TYPE_CLICK;
     $activity->quantity = rand(1, 50);
     $activity->latestDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + rand(100, 1000));
     $activity->latestSourceIP = '10.11.12.13';
     $activity->save();
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->type = CampaignItemActivity::TYPE_OPEN;
     $activity->quantity = rand(1, 50);
     $activity->latestDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + rand(100, 1000));
     $activity->latestSourceIP = '10.11.12.13';
     $activity->save();
     $activity = new CampaignItemActivity();
     $activity->person = $contact;
     $activity->campaignItem = $campaignItem;
     $activity->type = CampaignItemActivity::TYPE_BOUNCE;
     $activity->quantity = rand(1, 50);
     $activity->latestDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + rand(100, 1000));
     $activity->latestSourceIP = '10.11.12.13';
     $activity->save();
     $emailMessage = new EmailMessage();
     $emailMessage->setScenario('importModel');
     $emailMessage->owner = $contact->owner;
     $emailMessage->subject = 'Subject';
     $emailContent = new EmailMessageContent();
     $emailContent->textContent = 'My First Message';
     $emailContent->htmlContent = 'Some fake HTML content';
     $emailMessage->content = $emailContent;
     //Sending is current user (super)
     $sender = new EmailMessageSender();
     $sender->fromAddress = '*****@*****.**';
     $sender->fromName = 'Zurmo';
     $sender->personsOrAccounts->add(Yii::app()->user->userModel);
     $emailMessage->sender = $sender;
     //Recipient is BobMessage
     $recipient = new EmailMessageRecipient();
     $recipient->toAddress = '*****@*****.**';
     $recipient->toName = strval($contact);
     $recipient->personsOrAccounts->add($contact);
     $recipient->type = EmailMessageRecipient::TYPE_TO;
     $emailMessage->recipients->add($recipient);
     $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_SENT);
     $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $emailMessage->save();
     if (!$saved) {
         throw new FailedToSaveModelException();
     }
     $emailMessage->save();
     $campaignItem->emailMessage = $emailMessage;
     $campaignItem->unrestrictedSave();
 }