function MAX_querystringGetDestinationUrl($adId = null) { $conf = $GLOBALS['_MAX']['CONF']; $dest = isset($_REQUEST[$conf['var']['dest']]) ? $_REQUEST[$conf['var']['dest']] : ''; if (empty($dest) && !empty($adId)) { // Get the destination from the banner $aAd = MAX_cacheGetAd($adId); if (!empty($aAd)) { $dest = $aAd['url']; } } // If no destination URL has been found by now, then we don't need to redirect if (empty($dest)) { return; } $aVariables = array(); $aValidVariables = array_values($conf['var']); // See if any plugin-components have added items to the click url... $componentParams = OX_Delivery_Common_hook('addUrlParams', array(array('bannerid' => $adId))); if (!empty($componentParams) && is_array($componentParams)) { foreach ($componentParams as $params) { if (!empty($params) && is_array($params)) { foreach ($params as $key => $value) { $aValidVariables[] = $key; } } } } // We also need to ensure that any variables already present in the dest are not duplicated... $destParams = parse_url($dest); if (!empty($destParams['query'])) { $destQuery = explode('&', $destParams['query']); if (!empty($destQuery)) { foreach ($destQuery as $destPair) { list($destName, $destValue) = explode('=', $destPair); $aValidVariables[] = $destName; } } } foreach ($_GET as $name => $value) { if (!in_array($name, $aValidVariables)) { $aVariables[] = $name . '=' . $value; } } foreach ($_POST as $name => $value) { if (!in_array($name, $aValidVariables)) { $aVariables[] = $name . '=' . $value; } } if (!empty($aVariables)) { $dest .= (strpos($dest, '?') > 0 ? '&' : '?') . implode('&', $aVariables); } return $dest; }
function _adSelect(&$aLinkedAdInfos, $context, $source, $richMedia, $companion, $adArrayVar = 'ads', $cp = null) { if (!is_array($aLinkedAdInfos)) { return; } if (!is_null($cp) && isset($aLinkedAdInfos[$adArrayVar][$cp])) { $aAds =& $aLinkedAdInfos[$adArrayVar][$cp]; } elseif (is_null($cp) && isset($aLinkedAdInfos[$adArrayVar])) { $aAds =& $aLinkedAdInfos[$adArrayVar]; } else { $aAds = array(); } if (count($aAds) == 0) { return; } $aContext = _adSelectBuildContextArray($aAds, $adArrayVar, $context, $companion); _adSelectDiscardNonMatchingAds($aAds, $aContext, $source, $richMedia); if (count($aAds) == 0) { return; } global $n; mt_srand(floor((isset($n) && strlen($n) > 5 ? hexdec($n[0] . $n[2] . $n[3] . $n[4] . $n[5]) : 1000000) * (double) microtime())); $conf = $GLOBALS['_MAX']['CONF']; if ($adArrayVar == 'eAds') { if (!empty($conf['delivery']['ecpmSelectionRate'])) { $selection_rate = floatval($conf['delivery']['ecpmSelectionRate']); if (!_controlTrafficEnabled($aAds) || mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND'] <= $selection_rate) { $max_ecpm = 0; $top_ecpms = array(); foreach ($aAds as $key => $ad) { if ($ad['ecpm'] < $max_ecpm) { continue; } elseif ($ad['ecpm'] > $max_ecpm) { $top_ecpms = array(); $max_ecpm = $ad['ecpm']; } $top_ecpms[$key] = 1; } if ($max_ecpm <= 0) { $GLOBALS['_MAX']['ECPM_CONTROL'] = 1; $total_priority = _setPriorityFromWeights($aAds); } else { $GLOBALS['_MAX']['ECPM_SELECTION'] = 1; $total_priority = count($top_ecpms); foreach ($aAds as $key => $ad) { if (!empty($top_ecpms[$key])) { $aAds[$key]['priority'] = 1 / $total_priority; } else { $aAds[$key]['priority'] = 0; } } } } else { $GLOBALS['_MAX']['ECPM_CONTROL'] = 1; $total_priority = _setPriorityFromWeights($aAds); } } } else { if (isset($cp)) { $used_priority = 0; for ($i = 10; $i > $cp; $i--) { if (isset($aLinkedAdInfos['priority_used'][$adArrayVar][$i])) { $used_priority += $aLinkedAdInfos['priority_used'][$adArrayVar][$i]; } } if ($used_priority >= 1) { return $GLOBALS['OX_adSelect_SkipOtherPriorityLevels']; } $remaining_priority = 1 - $used_priority; $total_priority_orig = 0; foreach ($aAds as $ad) { $total_priority_orig += $ad['priority'] * $ad['priority_factor']; } $aLinkedAdInfos['priority_used'][$adArrayVar][$i] = $total_priority_orig; if ($total_priority_orig <= 0) { return; } if ($total_priority_orig > $remaining_priority || $companion) { $scaling_denom = $total_priority_orig; if ($cp >= PRI_ECPM_FROM && $cp <= PRI_ECPM_TO && !empty($conf['delivery']['ecpmSelectionRate'])) { $selection_rate = floatval($conf['delivery']['ecpmSelectionRate']); if (!_controlTrafficEnabled($aAds) || mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND'] <= $selection_rate) { $GLOBALS['_MAX']['ECPM_SELECTION'] = 1; foreach ($aAds as $key => $ad) { $ecpms[] = $ad['ecpm']; $adids[] = $key; } array_multisort($ecpms, SORT_DESC, $adids); $p_avail = $remaining_priority; $ad_count = count($aAds); $i = 0; while ($i < $ad_count) { $l = $i; while ($l < $ad_count - 1 && $ecpms[$l + 1] == $ecpms[$i]) { $l++; } $p_needed = 0; for ($a_idx = $i; $a_idx <= $l; $a_idx++) { $id = $adids[$a_idx]; $p_needed += $aAds[$id]['priority'] * $aAds[$id]['priority_factor']; } if ($p_needed > $p_avail) { $scale = $p_avail / $p_needed; for ($a_idx = $i; $a_idx <= $l; $a_idx++) { $id = $adids[$a_idx]; $aAds[$id]['priority'] = $aAds[$id]['priority'] * $scale; } $p_avail = 0; for ($a_idx = $l + 1; $a_idx < $ad_count; $a_idx++) { $id = $adids[$a_idx]; $aAds[$id]['priority'] = 0; } break; } else { $p_avail -= $p_needed; $i = $l + 1; } } $scaling_denom = $remaining_priority; } else { $GLOBALS['_MAX']['ECPM_CONTROL'] = 1; } } $scaling_factor = 1 / $scaling_denom; } else { $scaling_factor = 1 / $remaining_priority; } $total_priority = 0; foreach ($aAds as $key => $ad) { $newPriority = $ad['priority'] * $ad['priority_factor'] * $scaling_factor; $aAds[$key]['priority'] = $newPriority; $total_priority += $newPriority; } } else { $total_priority = _setPriorityFromWeights($aAds); } } global $n; mt_srand(floor((isset($n) && strlen($n) > 5 ? hexdec($n[0] . $n[2] . $n[3] . $n[4] . $n[5]) : 1000000) * (double) microtime())); $conf = $GLOBALS['_MAX']['CONF']; $random_num = mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND']; if ($random_num > $total_priority) { return; } $low = 0; $high = 0; foreach ($aAds as $aLinkedAd) { if (!empty($aLinkedAd['priority'])) { $low = $high; $high += $aLinkedAd['priority']; if ($high > $random_num && $low <= $random_num) { $ad = MAX_cacheGetAd($aLinkedAd['ad_id']); $ad['tracker_status'] = !empty($aLinkedAd['tracker_status']) ? $aLinkedAd['tracker_status'] : null; if ($ad['width'] == $ad['height'] && $ad['width'] == -1) { $ad['width'] = $aLinkedAd['width']; $ad['height'] = $aLinkedAd['height']; } return $ad; } } } return; }
/** * Method tests invalidateBannerCache method */ function test_invalidateBannerCache() { $cachedData = MAX_cacheGetAd($this->_aIds['banners'][0]); $zoneLinkingCachedData = MAX_cacheGetZoneLinkedAds($this->_aIds['zones'][0]); // Change something in banner $doBanners = OA_Dal::factoryDO('banners'); $doBanners->get($this->_aIds['banners'][0]); $doBanners->description = 'new description'; $doBanners->update(); // Expect no changes in cache $this->assertEqual(MAX_cacheGetAd($this->_aIds['banners'][0]), $cachedData); $this->assertEqual(MAX_cacheGetZoneLinkedAds($this->_aIds['zones'][0]), $zoneLinkingCachedData); $this->oDeliveryCacheManager->invalidateBannerCache($this->_aIds['banners'][0]); // Now expect changes in cache $this->assertNotEqual(MAX_cacheGetAd($this->_aIds['banners'][0]), $cachedData); $this->assertNotEqual(MAX_cacheGetZoneLinkedAds($this->_aIds['zones'][0]), $zoneLinkingCachedData); }
require_once MAX_PATH . '/lib/max/Delivery/cache.php'; MAX_commonSendContentTypeHeader('text/html'); //Register any script specific input variables MAX_commonRegisterGlobalsArray(array('timeout')); $timeout = !empty($timeout) ? $timeout : 0; if ($zoneid > 0) { // Get the zone from cache $aZone = MAX_cacheGetZoneInfo($zoneid); } else { // Direct selection, or problem with admin DB $aZone = array(); $aZone['zoneid'] = $zoneid; $aZone['append'] = ''; $aZone['prepend'] = ''; } // Get the banner from cache $aBanner = MAX_cacheGetAd($bannerid); $prepend = !empty($aZone['prepend']) ? $aZone['prepend'] : ''; $html = MAX_adRender($aBanner, $zoneid, $source, $target, $ct0, $withtext); $append = !empty($aZone['append']) ? $aZone['append'] : ''; $title = !empty($aBanner['alt']) ? $aBanner['alt'] : 'Advertisement'; echo "\n<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>\n<head>\n<title>{$title}</title>"; if ($timeout > 0) { $timeoutMs = $timeout * 1000; echo "\n<script type='text/javascript'>\n<!--// <![CDATA[\n window.setTimeout(\"window.close()\",{$timeoutMs});\n// ]]> -->\n</script>"; } // Include the FlashObject script if required if ($aBanner['contenttype'] == 'swf') { echo MAX_flashGetFlashObjectExternal(); } echo "\n<style type='text/css'>\nbody {margin:0; height:100%; width:100%}\n</style>\n</head>\n<body>\n{$prepend}{$html}{$append}\n</body>\n</html>";
/** * Creates all possible delivert cache files * * @param array $aIds array of DB Ids returned by _createTestData * @see _createTestData */ function _createTestCacheFiles($aIds) { // Create cache files not related to DB Objects MAX_cacheGetAccountTZs(); MAX_cacheCheckIfMaintenanceShouldRun(); MAX_cacheGetGoogleJavaScript(); // Create cache files for banners and images foreach ($aIds['banners'] as $bannerId) { MAX_cacheGetAd($bannerId); } foreach ($aIds['images'] as $filename) { MAX_cacheGetCreative($filename); } // Create cache files for zones foreach ($aIds['zones'] as $zoneId) { MAX_cacheGetZoneLinkedAds($zoneId); MAX_cacheGetZoneInfo($zoneId); } // Create cache files for websites foreach ($aIds['affiliates'] as $affiliateid) { OA_cacheGetPublisherZones($affiliateid); } // Create cache files for trackers foreach ($aIds['trackers'] as $trackerid) { MAX_cacheGetTracker($trackerid); MAX_cacheGetTrackerVariables($trackerid); } // Create cache files for channels foreach ($aIds['channel'] as $channelid) { MAX_cacheGetChannelLimitations($channelid); } // cache files for direct-selection are not created // due to problems with invalidating MAX_cacheGetLinkedAds }
/** * This function takes a group of ads, and selects the ad to show * * @param array $aLinkedAds The array of possible ads for this search criteria * @param array $context The context of this ad selection * - used for companion positioning * - and excluding banner/campaigns from this ad-call * @param string $source The "source" parameter passed into the adcall * @param boolean $richMedia Does this invocation method allow for serving 3rd party/html ads * @param boolean $companion Should ad selection only return companion ads? * @param string $adArrayVar The collection of ads in $aLinkedAds to select the ad from * @param integer $cp * * @return array|void The ad-array for the selected ad or void if no ad selected */ function _adSelect(&$aLinkedAdInfos, $context, $source, $richMedia, $companion, $adArrayVar = 'ads', $cp = null) { // If there are no linked ads, we can return if (!is_array($aLinkedAdInfos)) { return; } if (!is_null($cp) && isset($aLinkedAdInfos[$adArrayVar][$cp])) { $aAds =& $aLinkedAdInfos[$adArrayVar][$cp]; } elseif (is_null($cp) && isset($aLinkedAdInfos[$adArrayVar])) { $aAds =& $aLinkedAdInfos[$adArrayVar]; } else { $aAds = array(); } // If there are no linked ads of the specified type, we can return if (count($aAds) == 0) { return; } // Build preconditions $aContext = _adSelectBuildContextArray($aAds, $adArrayVar, $context, $companion); // New delivery algorithm: discard all invalid ads before iterating over them // $aAds passed by ref here _adSelectDiscardNonMatchingAds($aAds, $aContext, $source, $richMedia); // If there are no linked ads of the specified type, we can return if (count($aAds) == 0) { return; } // Seed the random number generator global $n; mt_srand(floor((isset($n) && strlen($n) > 5 ? hexdec($n[0] . $n[2] . $n[3] . $n[4] . $n[5]) : 1000000) * (double) microtime())); $conf = $GLOBALS['_MAX']['CONF']; if ($adArrayVar == 'eAds') { if (!empty($conf['delivery']['ecpmSelectionRate'])) { // we should still allow there to be some portion of control // responses in order to avoid starving out any ad $selection_rate = floatval($conf['delivery']['ecpmSelectionRate']); if (!_controlTrafficEnabled($aAds) || mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND'] <= $selection_rate) { // Find the highest value eCPM ad(s) an naively select // from that set. $max_ecpm = 0; $top_ecpms = array(); // build an eCPM sorted index for the ads foreach ($aAds as $key => $ad) { if ($ad['ecpm'] < $max_ecpm) { continue; } elseif ($ad['ecpm'] > $max_ecpm) { $top_ecpms = array(); $max_ecpm = $ad['ecpm']; } $top_ecpms[$key] = 1; } // fallback to weighted prioritization if ecpm weighting zeros out if ($max_ecpm <= 0) { $GLOBALS['_MAX']['ECPM_CONTROL'] = 1; $total_priority = _setPriorityFromWeights($aAds); } else { // zero out the priority for all except ads with the // highest eCPM value $GLOBALS['_MAX']['ECPM_SELECTION'] = 1; $total_priority = count($top_ecpms); foreach ($aAds as $key => $ad) { if (!empty($top_ecpms[$key])) { $aAds[$key]['priority'] = 1 / $total_priority; } else { $aAds[$key]['priority'] = 0; } } } } else { $GLOBALS['_MAX']['ECPM_CONTROL'] = 1; $total_priority = _setPriorityFromWeights($aAds); } } } else { if (isset($cp)) { // How much of the priority space have we already covered? $used_priority = 0; for ($i = 10; $i > $cp; $i--) { if (isset($aLinkedAdInfos['priority_used'][$adArrayVar][$i])) { $used_priority += $aLinkedAdInfos['priority_used'][$adArrayVar][$i]; } } // sanity check, in case there is no space left. if ($used_priority >= 1) { return $GLOBALS['OX_adSelect_SkipOtherPriorityLevels']; } $remaining_priority = 1 - $used_priority; // Calculate the sum of all priority values $total_priority_orig = 0; foreach ($aAds as $ad) { $total_priority_orig += $ad['priority'] * $ad['priority_factor']; } $aLinkedAdInfos['priority_used'][$adArrayVar][$i] = $total_priority_orig; // If there are no active ads, we can return if ($total_priority_orig <= 0) { return; } // In this case, the sum of priorities is greater than the ratio // we have remaining, so just scale to fill the remaining space. if ($total_priority_orig > $remaining_priority || $companion) { $scaling_denom = $total_priority_orig; // In this case, the space has been oversold, so eCPM optimization // is allowed to be applied. The approach is to give priority to // higher eCPM, but not to rescale priorities, unless there is a tie // for a position at the edge of the dropoff. if ($cp >= PRI_ECPM_FROM && $cp <= PRI_ECPM_TO && !empty($conf['delivery']['ecpmSelectionRate'])) { // we should still allow there to be some portion of control // responses in order to avoid starving out any ad $selection_rate = floatval($conf['delivery']['ecpmSelectionRate']); if (!_controlTrafficEnabled($aAds) || mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND'] <= $selection_rate) { // set flag to indicate this request has applied ecpm optimization $GLOBALS['_MAX']['ECPM_SELECTION'] = 1; // build an eCPM sorted index for the ads foreach ($aAds as $key => $ad) { $ecpms[] = $ad['ecpm']; $adids[] = $key; } array_multisort($ecpms, SORT_DESC, $adids); $p_avail = $remaining_priority; $ad_count = count($aAds); $i = 0; while ($i < $ad_count) { // find the range of consecutive ads with equal eCPMs $l = $i; while ($l < $ad_count - 1 && $ecpms[$l + 1] == $ecpms[$i]) { $l++; } // how much priority space does this range of equal eCPM ads require? $p_needed = 0; for ($a_idx = $i; $a_idx <= $l; $a_idx++) { $id = $adids[$a_idx]; $p_needed += $aAds[$id]['priority'] * $aAds[$id]['priority_factor']; } // if this range needs more priority space than is left, we'll scale // these and zero out all ads with lower eCPM values if ($p_needed > $p_avail) { $scale = $p_avail / $p_needed; for ($a_idx = $i; $a_idx <= $l; $a_idx++) { $id = $adids[$a_idx]; $aAds[$id]['priority'] = $aAds[$id]['priority'] * $scale; } $p_avail = 0; // zero out remaining ads priorities for ($a_idx = $l + 1; $a_idx < $ad_count; $a_idx++) { $id = $adids[$a_idx]; $aAds[$id]['priority'] = 0; } break; } else { $p_avail -= $p_needed; $i = $l + 1; } } $scaling_denom = $remaining_priority; } else { // set flag to indicate this request was eligible for ecpm optimization, // but did not apply it in order to serve a control result set $GLOBALS['_MAX']['ECPM_CONTROL'] = 1; } } // scaling_denom is either remaining_priority or total_priority_orig, both of which // have been guarded against being 0, so there's no risk of div by 0 here $scaling_factor = 1 / $scaling_denom; } else { // in this case, we don't need to use the whole of the remaining // space, but we scale to the remaining size, which leaves room to // select a lower level, since $total_priority_orig / $remaining_priority < 1 $scaling_factor = 1 / $remaining_priority; } // recalculate the priorities (in place??), using the scaling factor. $total_priority = 0; foreach ($aAds as $key => $ad) { $newPriority = $ad['priority'] * $ad['priority_factor'] * $scaling_factor; $aAds[$key]['priority'] = $newPriority; $total_priority += $newPriority; } } else { // Rescale priorities by weights $total_priority = _setPriorityFromWeights($aAds); } } // Seed the random number generator global $n; mt_srand(floor((isset($n) && strlen($n) > 5 ? hexdec($n[0] . $n[2] . $n[3] . $n[4] . $n[5]) : 1000000) * (double) microtime())); $conf = $GLOBALS['_MAX']['CONF']; // Pick a float random number between 0 and 1, inclusive. $random_num = mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND']; ###START_STRIP_DELIVERY // testing support if (function_exists('test_mt_rand')) { $random_num = test_mt_rand(0, $GLOBALS['_MAX']['MAX_RAND']) / $GLOBALS['_MAX']['MAX_RAND']; } ###END_STRIP_DELIVERY // Is it higher than the sum of all the priority values? if ($random_num > $total_priority) { // No suitable ad found, proceed as usual return; } // Perform selection of an ad, based on the random number $low = 0; $high = 0; foreach ($aAds as $aLinkedAd) { if (!empty($aLinkedAd['priority'])) { $low = $high; $high += $aLinkedAd['priority']; if ($high > $random_num && $low <= $random_num) { ###START_STRIP_DELIVERY // testing support if (function_exists('test_MAX_cacheGetAd')) { return test_MAX_cacheGetAd($aLinkedAd['ad_id']); } ###END_STRIP_DELIVERY $ad = MAX_cacheGetAd($aLinkedAd['ad_id']); // Carry over for conversion tracking $ad['tracker_status'] = !empty($aLinkedAd['tracker_status']) ? $aLinkedAd['tracker_status'] : null; // Carry over for ad dimensions for market ads if ($ad['width'] == $ad['height'] && $ad['width'] == -1) { $ad['width'] = $aLinkedAd['width']; $ad['height'] = $aLinkedAd['height']; } return $ad; } } } return; }
function MAX_querystringGetDestinationUrl($adId = null) { $conf = $GLOBALS['_MAX']['CONF']; $dest = isset($_REQUEST[$conf['var']['dest']]) ? $_REQUEST[$conf['var']['dest']] : ''; if (empty($dest) && !empty($adId)) { $aAd = MAX_cacheGetAd($adId); if (!empty($aAd)) { $dest = $aAd['url']; } } if (empty($dest)) { return; } $aVariables = array(); $aValidVariables = array_values($conf['var']); $componentParams = OX_Delivery_Common_hook('addUrlParams', array(array('bannerid' => $adId))); if (!empty($componentParams) && is_array($componentParams)) { foreach ($componentParams as $params) { if (!empty($params) && is_array($params)) { foreach ($params as $key => $value) { $aValidVariables[] = $key; } } } } $destParams = parse_url($dest); if (!empty($destParams['query'])) { $destQuery = explode('&', $destParams['query']); if (!empty($destQuery)) { foreach ($destQuery as $destPair) { list($destName, $destValue) = explode('=', $destPair); $aValidVariables[] = $destName; } } } foreach ($_GET as $name => $value) { if (!in_array($name, $aValidVariables)) { $aVariables[] = $name . '=' . $value; } } foreach ($_POST as $name => $value) { if (!in_array($name, $aValidVariables)) { $aVariables[] = $name . '=' . $value; } } if (!empty($aVariables)) { $dest .= (strpos($dest, '?') > 0 ? '&' : '?') . implode('&', $aVariables); } return $dest; }
$entityId = OA_Permission::getEntityId(); if (OA_Permission::isAccount(OA_ACCOUNT_ADVERTISER)) { $entityType = 'advertiser_id'; } else { $entityType = 'agency_id'; } // Display navigation $aOtherCampaigns = Admin_DA::getPlacements(array($entityType => $entityId)); $aOtherBanners = Admin_DA::getAds(array('placement_id' => $campaignid), false); // Setup a fake record for the "Apply to all" entry $aOtherBanners[-1] = array('name' => '--' . $GLOBALS['strAllBannersInCampaign'] . '--', 'ad_id' => -1, 'placement_id' => $campaignid); MAX_displayNavigationBanner($pageName, $aOtherCampaigns, $aOtherBanners, $aEntities); /*-------------------------------------------------------*/ /* Main code */ /*-------------------------------------------------------*/ $aBanner = MAX_cacheGetAd($bannerid, false); if (!isset($acl)) { $acl = Admin_DA::getDeliveryLimitations(array('ad_id' => $bannerid)); // This array needs to be sorted by executionorder, this should ideally be done in SQL // When we move to DataObject this should be addressed ksort($acl); } $aParams = array('clientid' => $clientid, 'campaignid' => $campaignid, 'bannerid' => $bannerid); MAX_displayAcls($acl, $aParams); echo "\n<table border='0' width='100%' cellpadding='0' cellspacing='0' bgcolor='#FFFFFF'>"; $aParams = array('title' => $GLOBALS['strCampaign'], 'titleLink' => "campaign-edit.php?clientid={$clientid}&campaignid={$campaignid}", 'aText' => $GLOBALS['strCappingCampaign'], 'aCappedObject' => $aBanner, 'type' => 'Campaign'); $tabindex = _echoDeliveryCappingHtml($tabindex, $GLOBALS['strCappingBanner'], $aBanner, 'Ad', $aParams); echo "\n<tr><td height='1' colspan='6' bgcolor='#888888'>\n<img src='" . OX::assetPath() . "/images/break.gif' height='1' width='100%'></td></tr>\n\n</table>\n<br /><br /><br />\n<input type='submit' name='submit' value='{$GLOBALS['strSaveChanges']}' tabindex='" . $tabindex++ . "'>\n\n</form>"; /*-------------------------------------------------------*/ /* Form requirements */ /*-------------------------------------------------------*/
/** * Method tests invalidateGetAdCache method */ function test_invalidateGetAdCache() { $aIds = $this->_createTestData(); $this->_createTestCacheFiles($aIds); $cachedData = MAX_cacheGetAd($aIds['banners'][0]); // Change something in banner $doBanners = OA_Dal::factoryDO('banners'); $doBanners->get($aIds['banners'][0]); $doBanners->description = 'new description'; $doBanners->update(); // Expect no changes in cache $this->assertEqual(MAX_cacheGetAd($aIds['banners'][0]), $cachedData); $this->oDeliveryCacheCommon->invalidateGetAdCache($aIds['banners'][0]); // Now expect changes in cache $this->assertNotEqual(MAX_cacheGetAd($aIds['banners'][0]), $cachedData); }