Example #1
0
 /**
  * Method for testing creating a simple notification for the current user.
  */
 public function actionGenerateManageSubscriptionHash()
 {
     if (Yii::app()->user->userModel->username != 'super') {
         throw new NotSupportedException();
     }
     $contact = RandomDataUtil::getRandomValueFromArray(Contact::getAll());
     $personId = $contact->getClassId('Person');
     $marketingList = RandomDataUtil::getRandomValueFromArray(MarketingList::getAll());
     $marketingListId = $marketingList->id;
     $model = RandomDataUtil::getRandomValueFromArray(CampaignItem::getAll());
     $modelId = $model->id;
     $modelType = get_class($model);
     $hash = EmailMessageActivityUtil::resolveHashForUnsubscribeAndManageSubscriptionsUrls($personId, $marketingListId, $modelId, $modelType, false);
     echo 'index.php/marketingLists/external/manageSubscriptions?hash=' . $hash;
 }
 /**
  * @depends testResolveQueryStringFromUrlAndCreateNewActivityThrowsExceptionForDecipherableHexadecimalHashWithMissingParameters
  */
 public function testResolveQueryStringFromUrlAndCreateNewActivityDoesNotThrowsExceptionForMissingUrlParameter()
 {
     $queryStringArray = array('modelId' => 1, 'modelType' => 'ModelClassName', 'personId' => 2);
     $hash = StringUtil::resolveHashForQueryStringArray($queryStringArray);
     $result = EmailMessageActivityUtil::resolveQueryStringArrayForHash($hash);
     $this->assertTrue(is_array($result));
     $this->assertCount(5, $result);
     $this->assertArrayHasKey('modelId', $result);
     $this->assertArrayHasKey('modelType', $result);
     $this->assertArrayHasKey('personId', $result);
     $this->assertArrayHasKey('url', $result);
     $this->assertArrayHasKey('type', $result);
     $this->assertEquals($queryStringArray['modelId'], $result['modelId']);
     $this->assertEquals($queryStringArray['modelType'], $result['modelType']);
     $this->assertEquals($queryStringArray['personId'], $result['personId']);
     $this->assertNull($result['url']);
     $this->assertNull($result['type']);
 }
Example #3
0
 public function actionTrack()
 {
     try {
         Yii::app()->user->userModel = BaseActionControlUserConfigUtil::getUserToRunAs();
         $response = EmailMessageActivityUtil::resolveQueryStringFromUrlAndCreateOrUpdateActivity();
         if ($response['redirect']) {
             $this->redirect($response['url']);
         } elseif (isset($response['imagePath'])) {
             $mime = ZurmoFileHelper::getMimeType($response['imagePath']);
             $size = filesize($response['imagePath']);
             $name = pathinfo($response['imagePath'], PATHINFO_FILENAME);
             header('Content-Type: ' . $mime);
             header('Content-Length: ' . $size);
             header('Content-Name: ' . $name);
             readfile($response['imagePath']);
             Yii::app()->end(0, false);
         }
     } catch (NotFoundException $e) {
     } catch (NotSupportedException $e) {
     } catch (FailedToSaveModelException $e) {
     } catch (MissingASuperAdministratorException $e) {
     }
     // we do not catch all exceptions because we need Exit and Redirect Exception for unit tests
 }
 /**
  * @depends testResolveManageSubscriptionsUrlWithMissingSomeOptionalParams
  */
 public function testResolveManageSubscriptionsUrlWithoutModel()
 {
     $errorOnFirstMissing = MergeTagsToModelAttributesAdapter::DO_NOT_ERROR_ON_FIRST_INVALID_TAG;
     $model = null;
     $params = array('personId' => 1, 'marketingListId' => 2, 'modelId' => 3, 'modelType' => 'AutoresponderItem', 'createNewActivity' => true, 'preview' => false);
     $expected = GlobalMarketingFooterUtil::resolveManageSubscriptionsUrlByArray($params);
     $this->assertContains('marketingLists/external/manageSubscriptions?hash=', $expected);
     $resolved = SpecialMergeTagsAdapter::resolve('manageSubscriptionsUrl', $model, $errorOnFirstMissing, $params);
     $this->assertContains('marketingLists/external/manageSubscriptions?hash=', $resolved);
     $expectedHash = static::extractHashFromUrl($expected);
     $resolvedHash = static::extractHashFromUrl($resolved);
     $expectedReversed = EmailMessageActivityUtil::resolveQueryStringArrayForHash($expectedHash);
     $resolvedReversed = EmailMessageActivityUtil::resolveQueryStringArrayForHash($resolvedHash);
     $this->assertEquals($expectedReversed, $resolvedReversed);
 }
Example #5
0
 protected function createBounceActivity(ImapMessage $message)
 {
     $zurmoItemClass = null;
     $zurmoItemId = null;
     $zurmoPersonId = null;
     $headerTags = array('zurmoItemId', 'zurmoItemClass', 'zurmoPersonId');
     $headers = EmailBounceUtil::resolveCustomHeadersFromTextBody($headerTags, $message->textBody);
     $this->deleteMessage($message);
     if ($headers === false) {
         return false;
     }
     extract($headers);
     assert('$zurmoItemClass === "AutoresponderItem" || $zurmoItemClass === "CampaignItem"');
     assert('$zurmoItemId > 0');
     assert('$zurmoPersonId > 0');
     $activityClassName = EmailMessageActivityUtil::resolveModelClassNameByModelType($zurmoItemClass);
     $activityUtilClassName = $activityClassName . 'Util';
     $type = $activityClassName::TYPE_BOUNCE;
     $activityData = array('modelId' => $zurmoItemId, 'modelType' => $zurmoItemClass, 'personId' => $zurmoPersonId, 'url' => null, 'type' => $type);
     $activityCreatedOrUpdated = $activityUtilClassName::createOrUpdateActivity($activityData);
     try {
         if (!$activityCreatedOrUpdated) {
             throw new NotSupportedException();
         }
     } catch (NotSupportedException $e) {
         return false;
     }
     return true;
 }
 /**
  * Resolve and check campaign email message.
  * @param EmailMessage $emailMessage
  */
 public static function getCampaignOrAutoresponderDataByEmailMessage(EmailMessage $emailMessage)
 {
     $campaignItems = EmailMessageActivityUtil::getByEmailMessageId("CampaignItem", $emailMessage->id);
     if (!empty($campaignItems)) {
         return array($campaignItems[0]->id, 'CampaignItem', $campaignItems[0]->contact->getClassId('Person'));
     } else {
         $autoResponderItems = EmailMessageActivityUtil::getByEmailMessageId("AutoresponderItem", $emailMessage->id);
         if (!empty($autoResponderItems)) {
             return array($autoResponderItems[0]->id, 'AutoresponderItem', $autoResponderItems[0]->contact->getClassId('Person'));
         }
     }
     return null;
 }
 protected static function resolveContent(&$content, $tracking = true, $isHtmlContent = true)
 {
     return EmailMessageActivityUtil::resolveContentForTrackingAndFooter($tracking, $content, 1, 'AutoresponderItem', 1, 1, $isHtmlContent);
 }
 protected function createActivityIfRequired($createNewActivity, $newUnsubcribedValue, $modelId, $modelType, $personId)
 {
     if (!$createNewActivity || $newUnsubcribedValue != 1) {
         return;
     }
     $activityClassName = EmailMessageActivityUtil::resolveModelClassNameByModelType($modelType);
     $activityUtilClassName = $activityClassName . 'Util';
     $type = $activityClassName::TYPE_UNSUBSCRIBE;
     $url = null;
     $sourceIP = Yii::app()->request->userHostAddress;
     $activityData = array('modelId' => $modelId, 'modelType' => $modelType, 'personId' => $personId, 'url' => null, 'type' => $type);
     return $activityUtilClassName::createOrUpdateActivity($activityData);
 }
 protected function renderToggleSubscriptionSwitch($marketingListId, $subscribed)
 {
     $template = ZurmoHtml::tag('div', array('class' => 'switch-state clearfix'), '{input}{label}');
     $createNewActivity = false;
     if ($marketingListId == $this->sourceMarketingListId) {
         $createNewActivity = true;
     }
     $hash = EmailMessageActivityUtil::resolveHashForUnsubscribeAndManageSubscriptionsUrls($this->personId, $marketingListId, $this->modelId, $this->modelType, $createNewActivity);
     $subscribeUrl = $this->getSubscribeUrlByHash($hash);
     $unsubscribeUrl = $this->getUnsubscribeUrlByHash($hash);
     $checkedValue = $subscribeUrl;
     if (!$subscribed) {
         $checkedValue = $unsubscribeUrl;
     }
     $baseId = static::TOGGLE_UNSUBSCRIPTION_LINK_CLASS . '_' . $marketingListId;
     $content = ZurmoHTML::radioButtonList($baseId, $checkedValue, self::getDropDownArray($subscribeUrl, $unsubscribeUrl), array('separator' => '', 'template' => $template));
     return ZurmoHtml::tag('div', array('class' => 'switch'), $content);
 }
 protected function renderContent()
 {
     EmailMessageActivityUtil::resolveUnsubscribeAndManageSubscriptionPlaceholders($this->placeholderContent, 0, 0, 0, 'AutoresponderItem', $this->isHtmlContent, true, true);
     $content = ZurmoHtml::tag('div', array('id' => 'footer-preview-modal-content', 'class' => 'footer-preview-modal'), $this->placeholderContent);
     return $content;
 }
 /**
  * @depends testOptOutAction
  */
 public function testSubscribeActionAfterOptOutActionDisableOptOut()
 {
     $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $marketingList = MarketingList::getByName('marketingList 04');
     $this->assertNotEmpty($marketingList);
     $marketingList = $marketingList[0];
     $marketingListId = $marketingList->id;
     $contact = Contact::getByName('contact 05 contact 05son');
     $this->assertNotEmpty($contact);
     $contact = $contact[0];
     $this->assertEquals(1, $contact->primaryEmail->optOut);
     $personId = $contact->getClassId('Person');
     $member = MarketingListMember::getByMarketingListIdContactIdAndSubscribed($marketingList->id, $contact->id, 1);
     $this->assertNotEmpty($member);
     Yii::app()->user->userModel = null;
     $hash = EmailMessageActivityUtil::resolveHashForUnsubscribeAndManageSubscriptionsUrls($personId, $marketingListId, 1, 'AutoresponderItem', false);
     $this->setGetArray(array('hash' => $hash));
     @$this->runControllerWithRedirectExceptionAndGetUrl($this->subscribeUrl);
     $content = $this->runControllerWithNoExceptionsAndGetContent($this->manageSubscriptionsUrl);
     $this->assertTrue(strpos($content, '<td>marketingList 01</td>') !== false);
     $this->assertTrue(strpos($content, '<td>marketingList 03</td>') !== false);
     $this->assertTrue(strpos($content, 'marketingLists/external/subscribe?hash=') !== false);
     $this->assertTrue(strpos($content, 'id="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_') !== false);
     $this->assertTrue(strpos($content, 'id="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_') !== false);
     $this->assertTrue(strpos($content, 'type="radio" name="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_') !== false);
     $this->assertTrue(strpos($content, 'id="marketingListsManageSubscriptionListView-toggleUnsubscribed_' . $marketingListId . '_0" checked="checked" type="radio" name="marketingListsManage' . 'SubscriptionListView-toggleUnsubscribed_' . $marketingListId) !== false);
     $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $contact = Contact::getByName('contact 05 contact 05son');
     $this->assertNotEmpty($contact);
     $contact = $contact[0];
     $this->assertEquals(0, $contact->primaryEmail->optOut);
 }
 /**
  * Process actiity information.
  * @param array $value
  */
 protected function processActivityInformation($value)
 {
     $type = $this->getActivityTypeByEvent($value);
     $activityClassName = EmailMessageActivityUtil::resolveModelClassNameByModelType($value['itemClass']);
     $activityUtilClassName = $activityClassName . 'Util';
     $activityData = array('modelId' => $value['itemId'], 'modelType' => $value['itemClass'], 'personId' => $value['personId'], 'url' => null, 'type' => $type);
     if ($activityUtilClassName::createOrUpdateActivity($activityData)) {
         //$activityClassName = CampaignItemActivity
         $emailMessageActivities = $activityClassName::getByTypeAndModelIdAndPersonIdAndUrl($type, $value['itemId'], $value['personId'], null);
         self::resolveAndUpdateEventInformationByStatus($value);
         $externalMessageActivityCount = ExternalApiEmailMessageActivity::getByTypeAndEmailMessageActivity($value['type'], $emailMessageActivities[0], "sendgrid");
         if ($externalMessageActivityCount == 0) {
             $this->saveExternalApiEmailMessageActivity($emailMessageActivities[0], $value);
         }
     }
 }