/** * 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']); }
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); }
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); } } }