/**
  * @depends testResolveEmailAddressToContactIfEmailRelationAvailableForReceivedMessage
  */
 public function testResolveEmailAddressToContactIfEmailRelationAvailableForSentMessage()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $message1 = EmailMessageTestHelper::createArchivedUnmatchedSentMessage($super);
     $contact = new Contact();
     $this->assertNull($contact->primaryEmail->emailAddress);
     ArchivedEmailMatchingUtil::resolveContactToSenderOrRecipient($message1, $contact);
     ArchivedEmailMatchingUtil::resolveEmailAddressToContactIfEmailRelationAvailable($message1, $contact);
     $this->assertEquals('*****@*****.**', $contact->primaryEmail->emailAddress);
     $this->assertNull($contact->secondaryEmail->emailAddress);
     //Test placing in secondary address from recipient
     $message1 = EmailMessageTestHelper::createArchivedUnmatchedSentMessage($super);
     $contact = new Contact();
     $contact->primaryEmail->emailAddress = '*****@*****.**';
     $this->assertNull($contact->secondaryEmail->emailAddress);
     ArchivedEmailMatchingUtil::resolveContactToSenderOrRecipient($message1, $contact);
     ArchivedEmailMatchingUtil::resolveEmailAddressToContactIfEmailRelationAvailable($message1, $contact);
     $this->assertEquals('*****@*****.**', $contact->primaryEmail->emailAddress);
     $this->assertEquals('*****@*****.**', $contact->secondaryEmail->emailAddress);
 }
 public function actionCompleteMatch($id)
 {
     //!!!todo security checks?? think about it
     $emailMessage = EmailMessage::getById((int) $id);
     $userCanAccessContacts = RightsUtil::canUserAccessModule('ContactsModule', Yii::app()->user->userModel);
     $userCanAccessLeads = RightsUtil::canUserAccessModule('LeadsModule', Yii::app()->user->userModel);
     if (!$userCanAccessContacts && !$userCanAccessLeads) {
         throw new NotSupportedException();
     }
     $selectForm = self::makeSelectForm($userCanAccessLeads, $userCanAccessContacts);
     if (isset($_POST[get_class($selectForm)])) {
         if (isset($_POST['ajax']) && $_POST['ajax'] === 'select-contact-form-' . $id) {
             $selectForm->setAttributes($_POST[get_class($selectForm)][$id]);
             $selectForm->validate();
             $errorData = array();
             foreach ($selectForm->getErrors() as $attribute => $errors) {
                 $errorData[ZurmoHtml::activeId($selectForm, $attribute)] = $errors;
             }
             echo CJSON::encode($errorData);
             Yii::app()->end(0, false);
         } else {
             $selectForm->setAttributes($_POST[get_class($selectForm)][$id]);
             $contact = Contact::getById((int) $selectForm->contactId);
             ArchivedEmailMatchingUtil::resolveContactToSenderOrRecipient($emailMessage, $contact);
             ArchivedEmailMatchingUtil::resolveEmailAddressToContactIfEmailRelationAvailable($emailMessage, $contact);
             $emailMessage->folder = EmailFolder::getByBoxAndType($emailMessage->folder->emailBox, EmailFolder::TYPE_ARCHIVED);
             if (!$emailMessage->save()) {
                 throw new FailedToSaveModelException();
             }
         }
     } else {
         static::attemptToMatchAndSaveLeadOrContact($emailMessage, 'Contact', (int) $id);
         static::attemptToMatchAndSaveLeadOrContact($emailMessage, 'Lead', (int) $id);
     }
     ZurmoControllerUtil::updatePermissionsWithDefaultForModelByCurrentUser($emailMessage);
 }