/** * @depends testResolveQueryStringFromUrlAndCreateOrUpdateActivityThrowsExceptionWhenNoIdInQueryString */ public function testResolveQueryStringFromUrlAndCreateOrUpdateActivityForEmailOpenTrackingWithoutExceptions() { // setup pre-req data $contact = ContactTestHelper::createContactByNameForOwner('contact 01', $this->user); $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 01', 'description 01', 'fromName 01', '*****@*****.**'); $campaign = CampaignTestHelper::createCampaign('campaign 01', 'subject 01', 'text Content 01', 'html Content 01', 'fromName 01', '*****@*****.**', null, null, null, null, $marketingList); $processed = 0; $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact); $modelId = $campaignItem->id; $modelType = get_class($campaignItem); $personId = $contact->getClassId('Person'); $this->assertNotNull($personId); // get the modelClassName to use for activity object tests $className = 'CampaignItemActivityUtil'; $resolveModelClassNameByModelTypeFunction = static::getProtectedMethod($className, 'resolveModelClassNameByModelType'); $modelClassName = $resolveModelClassNameByModelTypeFunction->invokeArgs(null, array($modelType)); $type = $modelClassName::TYPE_OPEN; $existingActivities = $modelClassName::getByType($type); $this->assertCount(0, $existingActivities); // get base query string $resolveBaseQueryStringArrayFunction = static::getProtectedMethod('ContentTrackingUtil', 'resolveBaseQueryStringArray'); $queryStringArray = $resolveBaseQueryStringArrayFunction->invokeArgs(null, array($modelId, $modelType, $personId)); $this->assertNotEmpty($queryStringArray); $this->assertCount(3, $queryStringArray); $this->assertArrayHasKey('modelId', $queryStringArray); $this->assertArrayHasKey('modelType', $queryStringArray); $this->assertArrayHasKey('personId', $queryStringArray); // get hash for query string and ensure its what we expect it to be. $queryStringArrayHash = StringUtil::resolveHashForQueryStringArray($queryStringArray); $queryStringArrayDecoded = $className::resolveQueryStringArrayForHash($queryStringArrayHash); $this->assertNotEmpty($queryStringArrayDecoded); $this->assertCount(5, $queryStringArrayDecoded); $this->assertArrayHasKey('modelId', $queryStringArrayDecoded); $this->assertArrayHasKey('modelType', $queryStringArrayDecoded); $this->assertArrayHasKey('personId', $queryStringArrayDecoded); $this->assertArrayHasKey('url', $queryStringArrayDecoded); $this->assertArrayHasKey('type', $queryStringArrayDecoded); $this->assertEquals($queryStringArray['modelId'], $queryStringArrayDecoded['modelId']); $this->assertEquals($queryStringArray['modelType'], $queryStringArrayDecoded['modelType']); $this->assertEquals($queryStringArray['personId'], $queryStringArrayDecoded['personId']); $this->assertNull($queryStringArrayDecoded['url']); $this->assertNull($queryStringArrayDecoded['type']); // do the magic, confirm magic worked by checking return value. $_GET['id'] = $queryStringArrayHash; $result = $className::resolveQueryStringFromUrlAndCreateOrUpdateActivity(); $this->assertNotEmpty($result); $this->assertCount(2, $result); $this->assertArrayHasKey('redirect', $result); $this->assertArrayHasKey('imagePath', $result); $this->assertEquals(false, $result['redirect']); $this->assertEquals(PlaceholderImageUtil::resolveOneByOnePixelImagePath(), $result['imagePath']); // check activity object count to confirm we got a new activity $existingActivities = $modelClassName::getByType($type); $this->assertCount(1, $existingActivities); // try fetching an object matching criteria of the one we just inserted. $activity = $modelClassName::getByTypeAndModelIdAndPersonIdAndUrl($type, $modelId, $personId); $this->assertNotEmpty($activity); $this->assertCount(1, $activity); $this->assertEquals(1, $activity[0]->quantity); // do the magic again, this time it should update quantity $result = $className::resolveQueryStringFromUrlAndCreateOrUpdateActivity(); $this->assertNotEmpty($result); $this->assertCount(2, $result); $this->assertArrayHasKey('redirect', $result); $this->assertArrayHasKey('imagePath', $result); $this->assertEquals(false, $result['redirect']); $this->assertEquals(PlaceholderImageUtil::resolveOneByOnePixelImagePath(), $result['imagePath']); // check activity object count to confirm we got a new activity $existingActivities = $modelClassName::getByType($type); $this->assertCount(1, $existingActivities); // try fetching an object matching criteria of the one we just inserted. $type = $modelClassName::TYPE_OPEN; $activity = $modelClassName::getByTypeAndModelIdAndPersonIdAndUrl($type, $modelId, $personId); $this->assertNotEmpty($activity); $this->assertCount(1, $activity); $this->assertEquals(2, $activity[0]->quantity); }
/** * Resolve the divider image for the middle td * @return string */ protected function resolveDividerImageUrl() { $imagePath = static::DEFAULT_STYLE_IMAGE_DIRECTORY_PATH . $this->properties['backend']['image']; $imageUrl = PlaceholderImageUtil::resolveUrlForThemeFile($imagePath, true); return $imageUrl; }
protected static function processActivityFromQueryStringArray($queryStringArray) { $activityUpdated = static::createOrUpdateActivity($queryStringArray); if (!$activityUpdated) { throw new FailedToSaveModelException(); } $trackingType = static::resolveTrackingTypeByQueryStringArray($queryStringArray); if ($trackingType === EmailMessageActivity::TYPE_CLICK) { // this shouldn't be here, its here to suppose no-scheme urls from previous versions' database $url = StringUtil::addSchemeIfMissing($queryStringArray['url']); return array('redirect' => true, 'url' => $url); } else { return array('redirect' => false, 'imagePath' => PlaceholderImageUtil::resolveOneByOnePixelImagePath()); } }
/** * resolve the url for td before and after divider image * @return string */ protected function resolveDummyDividerImageUrl() { return PlaceholderImageUtil::resolveTransparentImageUrl(true); }
protected static function getDummyImageUrl() { return PlaceholderImageUtil::resolveOneByOnePixelImageUrl(false); }
<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> </table> </td> </tr> </table> </td> </tr> <!-- /FOOTER --> <!-- SUBFOOTER --> <tr> <td> <table width="100%" cellpadding="10" cellspacing="0" border="0">
protected function renderImage($isThumb = false) { $altText = ''; $htmlOptions = array(); if (!$isThumb) { $altText = $this->getAltText(); $htmlOptions = $this->getHtmlOptions(); } if ($this->image != null) { $url = ImageFileModelUtil::getUrlForGetImageFromImageFileName($this->image->getImageCacheFileName(), $isThumb); } else { $url = PlaceholderImageUtil::resolvePlaceholderImageUrl(); } return ZurmoHtml::image($url, $altText, $htmlOptions); }
protected function resolveTdCloseAndOpenContentForHorizontalLayout() { if ($this->getLayout() == 'horizontal') { $urlToImage = PlaceholderImageUtil::resolveTransparentImageUrl(true); $content = ZurmoHtml::closeTag('td'); $content .= ZurmoHtml::openTag('td', array('class' => 'social-horizontal-expander')); $content .= ZurmoHtml::image($urlToImage, '', array('width' => '15', 'height' => '15')); $content .= ZurmoHtml::closeTag('td'); $content .= ZurmoHtml::openTag('td'); return $content; } }