/** * @depends testDetailsJsonActionForWorkflow */ public function testDetailsJsonActionWithMergeTagResolution() { $contact = ContactTestHelper::createContactByNameForOwner('test', $this->user); $emailTemplateId = self::getModelIdByModelNameAndName('EmailTemplate', 'marketing 01'); $emailTemplate = EmailTemplate::getById($emailTemplateId); $unsubscribePlaceholder = GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag(); $manageSubscriptionsPlaceholder = GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag(); $emailTemplate->textContent = "Test text content with contact tag: [[FIRST^NAME]] {$unsubscribePlaceholder}"; $emailTemplate->htmlContent = "Test html content with contact tag: [[FIRST^NAME]] {$manageSubscriptionsPlaceholder}"; $this->assertTrue($emailTemplate->save()); $this->setGetArray(array('id' => $emailTemplateId, 'renderJson' => true, 'includeFilesInJson' => false, 'contactId' => $contact->id)); // @ to avoid headers already sent error. $content = @$this->runControllerWithExitExceptionAndGetContent('emailTemplates/default/detailsJson'); $emailTemplateDetailsResolvedArray = CJSON::decode($content); $this->assertNotEmpty($emailTemplateDetailsResolvedArray); $this->assertEquals('Test text content with contact tag: test ', $emailTemplateDetailsResolvedArray['textContent']); $this->assertEquals('Test html content with contact tag: test ', $emailTemplateDetailsResolvedArray['htmlContent']); }
/** * [[MODEL^URL]] : prints absolute url to the current model attached to template. * [[BASE^URL]] : prints absolute url to the current install without trailing slash. * [[APPLICATION^NAME]] : prints application name as set in global settings > application name. * [[CURRENT^YEAR]] : prints current year. * [[LAST^YEAR]] : prints last year. * [[OWNERS^AVATAR^SMALL]] : prints the owner's small avatar image (32x32). * [[OWNERS^AVATAR^MEDIUM ]] : prints the owner's medium avatar image (32x32). * [[OWNERS^AVATAR^LARGE]] : prints the owner's large avatar image (32x32). * [[OWNERS^EMAIL^SIGNATURE]] : prints the owner's email signature. * [[UNSUBSCRIBE^URL]] : prints unsubscribe url. * [[MANAGE^SUBSCRIPTIONS^URL]] : prints manage subscriptions url. * @return array */ protected function getSpecialTagsData() { return array(array('id' => 'modelUrl', 'label' => Zurmo::t('EmailTemplatesModule', 'Model URL'), 'dataValue' => MergeTagsUtil::TAG_PREFIX . 'MODEL' . MergeTagsUtil::CAPITAL_DELIMITER . 'URL' . MergeTagsUtil::TAG_SUFFIX), array('id' => 'baseUrl', 'label' => Zurmo::t('EmailTemplatesModule', 'Base URL'), 'dataValue' => MergeTagsUtil::TAG_PREFIX . 'BASE' . MergeTagsUtil::CAPITAL_DELIMITER . 'URL' . MergeTagsUtil::TAG_SUFFIX), array('id' => 'applicationName', 'label' => Zurmo::t('ZurmoModule', 'Application Name'), 'dataValue' => MergeTagsUtil::TAG_PREFIX . 'APPLICATION' . MergeTagsUtil::CAPITAL_DELIMITER . 'NAME' . MergeTagsUtil::TAG_SUFFIX), array('id' => 'currentYear', 'label' => Zurmo::t('EmailTemplatesModule', 'Current Year'), 'dataValue' => MergeTagsUtil::TAG_PREFIX . 'CURRENT' . MergeTagsUtil::CAPITAL_DELIMITER . 'YEAR' . MergeTagsUtil::TAG_SUFFIX), array('id' => 'lastYear', 'label' => Zurmo::t('EmailTemplatesModule', 'Last Year'), 'dataValue' => MergeTagsUtil::TAG_PREFIX . 'LAST' . MergeTagsUtil::CAPITAL_DELIMITER . 'YEAR' . MergeTagsUtil::TAG_SUFFIX), array('id' => 'ownersAvatarSmall', 'label' => Zurmo::t('EmailTemplatesModule', 'Owner\'s Avatar Small'), 'dataValue' => MergeTagsUtil::TAG_PREFIX . 'OWNERS' . MergeTagsUtil::CAPITAL_DELIMITER . 'AVATAR' . MergeTagsUtil::CAPITAL_DELIMITER . 'SMALL' . MergeTagsUtil::TAG_SUFFIX), array('id' => 'ownersAvatarMedium', 'label' => Zurmo::t('EmailTemplatesModule', 'Owner\'s Avatar Medium'), 'dataValue' => MergeTagsUtil::TAG_PREFIX . 'OWNERS' . MergeTagsUtil::CAPITAL_DELIMITER . 'AVATAR' . MergeTagsUtil::CAPITAL_DELIMITER . 'MEDIUM' . MergeTagsUtil::TAG_SUFFIX), array('id' => 'ownersAvatarLarge', 'label' => Zurmo::t('EmailTemplatesModule', 'Owner\'s Avatar Large'), 'dataValue' => MergeTagsUtil::TAG_PREFIX . 'OWNERS' . MergeTagsUtil::CAPITAL_DELIMITER . 'AVATAR' . MergeTagsUtil::CAPITAL_DELIMITER . 'LARGE' . MergeTagsUtil::TAG_SUFFIX), array('id' => 'ownersEmailSignature', 'label' => Zurmo::t('EmailTemplatesModule', 'Owner\'s Email Signature'), 'dataValue' => MergeTagsUtil::TAG_PREFIX . 'OWNERS' . MergeTagsUtil::CAPITAL_DELIMITER . 'EMAIL' . MergeTagsUtil::CAPITAL_DELIMITER . 'SIGNATURE' . MergeTagsUtil::TAG_SUFFIX), array('id' => 'unsubscribeUrl', 'label' => Zurmo::t('EmailTemplatesModule', 'Unsubscribe URL'), 'dataValue' => GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag()), array('id' => 'manageSubscriptionsUrl', 'label' => Zurmo::t('EmailTemplatesModule', 'Manage Subscriptions URL'), 'dataValue' => GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag())); }
protected function renderSpecialTagsContent() { $content = ZurmoHtml::tag('h4', array(), 'Special Tags'); $content = ZurmoHtml::tag('div', array('id' => 'mergetag-special-tags-head'), $content); $specialTagsContent = null; $specialTagsItems = array(); $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . "MODEL" . MergeTagsUtil::CAPITAL_DELIMITER . "URL" . MergeTagsUtil::TAG_SUFFIX) . " : prints absolute url to the current model attached to template."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . "BASE" . MergeTagsUtil::CAPITAL_DELIMITER . "URL" . MergeTagsUtil::TAG_SUFFIX) . " : prints absolute url to the current install without trailing slash."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . "APPLICATION" . MergeTagsUtil::CAPITAL_DELIMITER . "NAME" . MergeTagsUtil::TAG_SUFFIX) . " : prints application name as set in global settings > application name."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . "CURRENT" . MergeTagsUtil::CAPITAL_DELIMITER . "YEAR" . MergeTagsUtil::TAG_SUFFIX) . " : prints current year."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . "LAST" . MergeTagsUtil::CAPITAL_DELIMITER . "YEAR" . MergeTagsUtil::TAG_SUFFIX) . " : prints last year."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . 'OWNERS' . MergeTagsUtil::CAPITAL_DELIMITER . 'AVATAR' . MergeTagsUtil::CAPITAL_DELIMITER . 'SMALL' . MergeTagsUtil::TAG_SUFFIX) . " : prints the owner's small avatar image (32x32)."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . 'OWNERS' . MergeTagsUtil::CAPITAL_DELIMITER . 'AVATAR' . MergeTagsUtil::CAPITAL_DELIMITER . 'MEDIUM ' . MergeTagsUtil::TAG_SUFFIX) . " : prints the owner's medium avatar image (64x64)."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . 'OWNERS' . MergeTagsUtil::CAPITAL_DELIMITER . 'AVATAR' . MergeTagsUtil::CAPITAL_DELIMITER . 'LARGE' . MergeTagsUtil::TAG_SUFFIX) . " : prints the owner's large avatar image (128x128)."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . 'OWNERS' . MergeTagsUtil::CAPITAL_DELIMITER . 'EMAIL' . MergeTagsUtil::CAPITAL_DELIMITER . 'SIGNATURE' . MergeTagsUtil::TAG_SUFFIX) . " : prints the owner's email signature."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . 'GLOBAL' . MergeTagsUtil::CAPITAL_DELIMITER . 'MARKETING' . MergeTagsUtil::CAPITAL_DELIMITER . 'FOOTER' . MergeTagsUtil::CAPITAL_DELIMITER . 'PLAIN' . MergeTagsUtil::CAPITAL_DELIMITER . 'TEXT' . MergeTagsUtil::TAG_SUFFIX) . " : prints the Global Marketing Footer(Plain Text)."; $specialTagsItems[] = $this->renderBoldMergeTag(MergeTagsUtil::TAG_PREFIX . 'GLOBAL' . MergeTagsUtil::CAPITAL_DELIMITER . 'MARKETING' . MergeTagsUtil::CAPITAL_DELIMITER . 'FOOTER' . MergeTagsUtil::CAPITAL_DELIMITER . 'HTML' . MergeTagsUtil::TAG_SUFFIX) . " : prints the Global Marketing Footer(Rich Text)."; $specialTagsItems[] = $this->renderBoldMergeTag(GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag()) . " : prints unsubscribe url."; $specialTagsItems[] = $this->renderBoldMergeTag(GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag()) . " : prints manage subscriptions url."; foreach ($specialTagsItems as $specialTagsItem) { $specialTagsContent .= ZurmoHtml::tag('li', array(), $specialTagsItem); } $specialTagsContent = ZurmoHtml::tag('ul', array(), $specialTagsContent); $specialTagsContent = ZurmoHtml::tag('div', array('id' => 'mergetag-special-tags-body'), $specialTagsContent); $content .= $specialTagsContent; $content = ZurmoHtml::tag('div', array('id' => 'mergetag-special-tags'), $content); return $content; }
/** * @depends testProcessDueAutoresponderItemWithManageSubscriptionsUrlMergeTag */ public function testProcessDueAutoresponderItemWithUnsubscribeAndManageSubscriptionsUrlMergeTags() { $email = new Email(); $email->emailAddress = '*****@*****.**'; $contact = ContactTestHelper::createContactByNameForOwner('contact 12', $this->user); $contact->primaryEmail = $email; $this->assertTrue($contact->save()); $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 12', 'description', 'CustomFromName', '*****@*****.**'); $autoresponder = AutoresponderTestHelper::createAutoresponder('subject 12', GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag() . ', ' . GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag(), GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag() . ', ' . GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag(), 1, Autoresponder::OPERATION_SUBSCRIBE, true, $marketingList); $processed = 0; $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time()); $autoresponderItem = AutoresponderItemTestHelper::createAutoresponderItem($processed, $processDateTime, $autoresponder, $contact); $this->processDueItem($autoresponderItem); $this->assertEquals(1, $autoresponderItem->processed); $textContent = $autoresponderItem->emailMessage->content->textContent; $htmlContent = $autoresponderItem->emailMessage->content->htmlContent; $this->assertNotEquals($autoresponder->textContent, $textContent); $this->assertNotEquals($autoresponder->htmlContent, $htmlContent); $this->assertContains('localhost', $textContent); $this->assertEquals(1, substr_count($textContent, '/marketingLists/external/unsubscribe?hash=')); $this->assertContains('localhost', $htmlContent); $this->assertEquals(1, substr_count($htmlContent, '/marketingLists/external/unsubscribe?hash=')); $this->assertContains('<img width="1" height="1" src="localhost', $htmlContent); $this->assertContains('/tracking/default/track?id=', $htmlContent); $this->assertEquals(2, substr_count($textContent, 'localhost')); $this->assertEquals(1, substr_count($textContent, '/marketingLists/external/manageSubscriptions?hash=')); $this->assertContains(', localhost', $htmlContent); $this->assertEquals(1, substr_count($htmlContent, '/marketingLists/external/manageSubscriptions?hash=')); $this->assertContains('<img width="1" height="1" src="localhost', $htmlContent); $this->assertContains('/tracking/default/track?id=', $htmlContent); }
/** * @depends testCreateAndGetEmailTemplateById */ public function testUnsubscribeAndManageSubscriptionsMergeTagsValidation() { $emailTemplate = new EmailTemplate(); $emailTemplate->type = EmailTemplate::TYPE_CONTACT; $emailTemplate->subject = 'Another Test subject'; $emailTemplate->name = 'Another Test Email Template'; $emailTemplate->textContent = GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag() . ', ' . GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag(); $emailTemplate->htmlContent = GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag() . ', ' . GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag(); $emailTemplate->builtType = EmailTemplate::BUILT_TYPE_PASTED_HTML; $emailTemplate->modelClassName = 'Contact'; $validated = $emailTemplate->validate(null, false, true); $this->assertTrue($validated); $this->assertEmpty($emailTemplate->getErrors()); }
/** * @depends testProcessDueCampaignItemWithManageSubscriptionsUrlMergeTag */ public function testProcessDueCampaignItemWithUnsubscribeAndManageSubscriptionsUrlMergeTags() { $email = new Email(); $email->emailAddress = '*****@*****.**'; $contact = ContactTestHelper::createContactByNameForOwner('contact 17', $this->user); $contact->primaryEmail = $email; $this->assertTrue($contact->save()); $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 17', 'description', null, null); MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact); $campaign = CampaignTestHelper::createCampaign('campaign 15', 'subject 15', GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag() . ', ' . GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag(), GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag() . ', ' . GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag(), 'testFromName', '*****@*****.**', null, null, null, null, $marketingList); $processed = 0; $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact); $this->processDueItem($campaignItem); $textContent = $campaignItem->emailMessage->content->textContent; $htmlContent = $campaignItem->emailMessage->content->htmlContent; $this->assertNotEquals($campaign->textContent, $textContent); $this->assertNotEquals($campaign->htmlContent, $htmlContent); $this->assertContains('localhost', $textContent); $this->assertEquals(1, substr_count($textContent, '/marketingLists/external/unsubscribe?hash=')); $this->assertContains('localhost', $htmlContent); $this->assertEquals(1, substr_count($htmlContent, '/marketingLists/external/unsubscribe?hash=')); $this->assertContains('<img width="1" height="1" src="localhost', $htmlContent); $this->assertContains('/tracking/default/track?id=', $htmlContent); $this->assertContains(', localhost', $textContent); $this->assertEquals(1, substr_count($textContent, '/marketingLists/external/manageSubscriptions?hash=')); $this->assertContains(', localhost', $htmlContent); $this->assertEquals(1, substr_count($htmlContent, '/marketingLists/external/manageSubscriptions?hash=')); $this->assertContains('<img width="1" height="1" src="localhost', $htmlContent); $this->assertContains('/tracking/default/track?id=', $htmlContent); }
<!-- /standard article (right text) --> </td> </tr> <!-- /CONTENT --> <!-- FOOTER --> <tr> <td> <table bgcolor="#cccccc" text="#ffffff" width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td> <table align="left" bgcolor="#cccccc" text="#333333" width="280" cellpadding="10" cellspacing="0" border="0" class="footer-left"> <tr> <td style="color:#333333;"> <p> ' . GlobalMarketingFooterUtil::resolveUnsubscribeUrlMergeTag() . ' <br/> ' . GlobalMarketingFooterUtil::resolveManageSubscriptionsMergeTag() . '</p> </td> </tr> </table> <table align="right" bgcolor="#cccccc" text="#333333" width="280" cellpadding="10" cellspacing="0" border="0" class="footer-right"> <tr> <td style="color:#333333;"> <p> <a href="#" target="_blank"><img style="margin-left:1em;" align="right" src="' . PlaceholderImageUtil::resolveUrlForThemeFile('/default/images/demo/email-template-demo-one/facebook.gif') . '" width="32" height="32" border="0" alt="Facebook" /></a> <a href="#" target="_blank"><img style="margin-left:1em;" align="right" src="' . PlaceholderImageUtil::resolveUrlForThemeFile('/default/images/demo/email-template-demo-one/googleplus.gif') . '" width="32" height="32" border="0" alt="Google+" /></a> <a href="#" target="_blank"><img style="margin-left:1em;" align="right" src="' . PlaceholderImageUtil::resolveUrlForThemeFile('/default/images/demo/email-template-demo-one/linkedin.gif') . '" width="32" height="32" border="0" alt="LinkedIn" /></a> <a href="#" target="_blank"><img style="margin-left:1em;" align="right" src="' . PlaceholderImageUtil::resolveUrlForThemeFile('/default/images/demo/email-template-demo-one/twitter.gif') . '" width="32" height="32" border="0" alt="Twitter" /></a> <a href="#" target="_blank"><img style="margin-left:1em;" align="right" src="' . PlaceholderImageUtil::resolveUrlForThemeFile('/default/images/demo/email-template-demo-one/youtube.gif') . '" width="32" height="32" border="0" alt="YouTube" /></a> </p> </td> </tr>