/** * Calculates the eCPM values for all campaigns in the priority levels specified * by ecpmCampaignLevels */ public function runAlgorithm() { $campaign_priorities = $this->getCampaignPriorityLevelsToProcess(); $aAgenciesIds = $this->oDal->getAllAgenciesIds(); foreach ($aAgenciesIds as $agencyId) { foreach ($campaign_priorities as $priority => $x) { $aCampaignsInfo = $this->oDal->getAllCampaignsInfoByAgencyIdAndPriority($agencyId, $priority); if (is_array($aCampaignsInfo) && !empty($aCampaignsInfo)) { $aCampaignsEcpms = array(); $aCampaignsDeliveries = $this->oDal->getAgencyPriorityCampaignsDeliveriesToDate($agencyId, $priority); foreach ($aCampaignsInfo as $campaignId => $aCampaign) { $aCampaignsEcpms[$campaignId] = OX_Util_Utils::getEcpm($aCampaign[self::IDX_REVENUE_TYPE], $aCampaign[self::IDX_REVENUE], $aCampaignsDeliveries[$campaignId]['sum_impressions'], $aCampaignsDeliveries[$campaignId]['sum_clicks'], $aCampaignsDeliveries[$campaignId]['sum_conversions'], $aCampaign[self::IDX_ACTIVATE], $aCampaign[self::IDX_EXPIRE]); } $this->oDal->updateCampaignsEcpms($aCampaignsEcpms); } } } }
$aCampaign['activate'] = '-'; } if (!empty($aCampaign['expire_time'])) { $oExpireDate = new Date($aCampaign['expire_time']); $oTz = $oExpireDate->tz; $oExpireDate->setTZbyID('UTC'); $oExpireDate->convertTZ($oTz); $aCampaign['expire'] = $oExpireDate->format($date_format); } else { $aCampaign['expire'] = '-'; } if ($aCampaign['type'] == DataObjects_Campaigns::CAMPAIGN_TYPE_MARKET_CONTRACT) { $aCampaign['system'] = true; $aCampaign['type'] = OX_Util_Utils::getCampaignType($aCampaign['priority']); } else { $aCampaign['type'] = OX_Util_Utils::getCampaignType($aCampaign['priority']); } if ($aCampaign['priority'] == -1) { $aCampaign['priority'] = $strOverride; } elseif ($aCampaign['priority'] == -2) { $aCampaign['priority'] = $strCampaignECPM; } elseif ($aCampaign['priority'] == 0) { $aCampaign['priority'] = $strLow; } else { $aCampaign['priority'] = $strHigh . ' (' . $aCampaign['priority'] . ')'; } $aCampaigns[$campaignId] = $aCampaign; } $aCount = array('campaigns' => 0, 'campaigns_hidden' => 0); $campaignshidden = 0; if (isset($aCampaigns) && is_array($aCampaigns) && count($aCampaigns) > 0) {
/** * Returns campaign status translated text based on given status. * * @param int $priority * @return name for given campaign type */ static function getCampaignStatusName($status) { $key = OX_Util_Utils::getCampaignStatusTranslationKey($status); if ($key) { $name = $GLOBALS[$key]; } return $name; }
function _function_showCampaignType($aParams, &$smarty) { $priority = $aParams['priority']; return OX_Util_Utils::getCampaignTypeName($priority); }
function calculateEcpm() { if ($this->campaignid) { $oMaxDalMaintenance = new OA_Dal_Maintenance_Priority(); $result = $oMaxDalMaintenance->getCampaignDeliveryToDate($this->campaignid); $requestsToDate = $result[0]['sum_requests']; $impressionsToDate = $result[0]['sum_views']; $clicksToDate = $result[0]['sum_clicks']; $conversionsToDate = $result[0]['sum_conversions']; } else { $requestsToDate = $impressionsToDate = $clicksToDate = $conversionsToDate = 0; } return OX_Util_Utils::getEcpm($this->revenue_type, $this->revenue, $impressionsToDate, $clicksToDate, $conversionsToDate, $this->activate_time, $this->expire_time); }
function buildCampaignForm($campaign, &$oComponent = null) { global $pref; $form = new OA_Admin_UI_Component_Form("campaignform", "POST", $_SERVER['SCRIPT_NAME']); $form->forceClientValidation(true); $form->addElement('hidden', 'campaignid', $campaign['campaignid']); $form->addElement('hidden', 'clientid', $campaign['clientid']); $form->addElement('hidden', 'expire_time', $campaign['expire_time']); $form->addElement('hidden', 'target_old', isset($campaign['target_value']) ? (int) $campaign['target_value'] : 0); $form->addElement('hidden', 'target_type_old', isset($campaign['target_type']) ? $campaign['target_type'] : ''); $form->addElement('hidden', 'weight_old', isset($campaign['weight']) ? (int) $campaign['weight'] : 0); $form->addElement('hidden', 'status_old', isset($campaign['status']) ? (int) $campaign['status'] : 1); $form->addElement('hidden', 'previousweight', isset($campaign["weight"]) ? $campaign["weight"] : ''); $form->addElement('hidden', 'previoustarget', isset($campaign["target"]) ? $campaign["target"] : ''); $form->addElement('hidden', 'previousactive', isset($campaign["active"]) ? $campaign["active"] : ''); $form->addElement('hidden', 'previousimpressions', isset($campaign["impressions"]) ? $campaign["impressions"] : ''); $form->addElement('hidden', 'previousclicks', isset($campaign["clicks"]) ? $campaign["clicks"] : ''); $form->addElement('hidden', 'previousconversions', isset($campaign["conversions"]) ? $campaign["conversions"] : ''); //campaign inactive note (if any) if (isset($campaign['status']) && $campaign['status'] != OA_ENTITY_STATUS_RUNNING) { $aReasons = getCampaignInactiveReasons($campaign); $form->addElement('custom', 'campaign-inactive-note', null, array('inactiveReason' => $aReasons), false); } //form sections $newCampaign = empty($campaign['campaignid']); $remnantEcpmEnabled = !empty($pref['campaign_ecpm_enabled']); $contractEcpmEnabled = !empty($pref['contract_ecpm_enabled']); buildBasicInformationFormSection($form, $campaign, $newCampaign, $remnantEcpmEnabled, $contractEcpmEnabled); buildDateFormSection($form, $campaign, $newCampaign); buildPricingFormSection($form, $campaign, $newCampaign, $remnantEcpmEnabled, $contractEcpmEnabled); buildPluggableFormSection($oComponent, 'afterPricingFormSection', $form, $campaign, $newCampaign); buildHighPriorityFormSection($form, $campaign, $newCampaign); buildLowAndExclusivePriorityFormSection($form, $campaign, $newCampaign); buildDeliveryCappingFormSection($form, $GLOBALS['strCappingCampaign'], $campaign, null, null, true, $newCampaign); buildMiscFormSection($form, $campaign, $newCampaign); //form controls $form->addElement('controls', 'form-controls'); $form->addElement('submit', 'submit', $GLOBALS['strSaveChanges']); //validation rules $translation = new OX_Translation(); $nameRequiredMsg = $translation->translate($GLOBALS['strXRequiredField'], array($GLOBALS['strName'])); $form->addRule('campaignname', $nameRequiredMsg, 'required'); $form->addFormRule('checkIfCampaignTypeSpecified'); $typeRequiredMsg = $translation->translate($GLOBALS['strXRequiredField'], array($GLOBALS['strPricingModel'])); $form->addRule('revenue_type', $typeRequiredMsg, 'required'); // $form->addRule('impressions', 'TODO message', 'formattedNumber'); // $form->addRule('clicks', 'TODO message', 'formattedNumber'); // if ($conf['logging']['trackerImpressions']) { // $form->addRule('conversions', 'TODO message', 'formattedNumber'); // } // $form->addRule('weight', 'TODO message', 'wholeNumber-'); // $form->addRule('target_value', 'TODO message', 'wholeNumber-'); //set form values $form->setDefaults($campaign); $form->setDefaults(array('impressions' => !isset($campaign['impressions']) || $campaign['impressions'] == '' || $campaign['impressions'] < 0 ? '-' : $campaign['impressions'], 'clicks' => !isset($campaign['clicks']) || $campaign['clicks'] == '' || $campaign['clicks'] < 0 ? '-' : $campaign['clicks'], 'conversions' => !isset($campaign['conversions']) || $campaign['conversions'] == '' || $campaign['conversions'] < 0 ? '-' : $campaign['conversions'])); if (!empty($campaign['activate_date'])) { $oDate = new Date($campaign['activate_date']); $startDateSet = 't'; $startDateStr = $oDate->format('%d %B %Y '); } else { $startDateSet = 'f'; $startDateStr = ''; } if (!empty($campaign['expire_date'])) { $oDate = new Date($campaign['expire_date']); $endDateSet = 't'; $endDateStr = $oDate->format('%d %B %Y '); } else { $endDateSet = 'f'; $endDateStr = ''; } $form->setDefaults(array('campaign_type' => $newCampaign ? '' : OX_Util_Utils::getCampaignType($campaign['priority']), 'impr_unlimited' => isset($campaign["impressions"]) && $campaign["impressions"] >= 0 ? 'f' : 't', 'click_unlimited' => isset($campaign["clicks"]) && $campaign["clicks"] >= 0 ? 'f' : 't', 'conv_unlimited' => isset($campaign["conversions"]) && $campaign["conversions"] >= 0 ? 'f' : 't', 'startSet' => $startDateSet, 'endSet' => $endDateSet, 'start' => $startDateStr, 'end' => $endDateStr, 'priority' => $campaign['priority'] > '0' && $campaign['campaignid'] != '' ? 2 : $campaign['priority'], 'high_priority_value' => $campaign['priority'] > '0' ? $campaign['priority'] : 5, 'target_value' => !empty($campaign['target_value']) ? $campaign['target_value'] : '-', 'weight' => isset($campaign["weight"]) ? $campaign["weight"] : $pref['default_campaign_weight'], 'revenue_type' => isset($campaign["revenue_type"]) ? $campaign["revenue_type"] : MAX_FINANCE_CPM)); return $form; }
$campaigns[$row_campaigns['campaignid']]['expire'] = $oExpireDate->format($date_format); } else { $campaigns[$row_campaigns['campaignid']]['expire'] = '-'; } if ($row_campaigns['priority'] == -1) { $campaigns[$row_campaigns['campaignid']]['priority'] = $strExclusive; } elseif ($row_campaigns['priority'] == -2) { $campaigns[$row_campaigns['campaignid']]['priority'] = $strCampaignECPM; } elseif ($row_campaigns['priority'] == 0) { $campaigns[$row_campaigns['campaignid']]['priority'] = $strLow; } else { $campaigns[$row_campaigns['campaignid']]['priority'] = $strHigh . ' (' . $row_campaigns['priority'] . ')'; } $campaigns[$row_campaigns['campaignid']]['status'] = $row_campaigns['status']; $campaigns[$row_campaigns['campaignid']]['anonymous'] = $row_campaigns['anonymous']; $campaigns[$row_campaigns['campaignid']]['type'] = OX_Util_Utils::getCampaignType($row_campaigns['priority']); } $aCount = array('campaigns' => 0, 'campaigns_hidden' => 0); $campaignshidden = 0; if (isset($campaigns) && is_array($campaigns) && count($campaigns) > 0) { reset($campaigns); while (list($key, $campaign) = each($campaigns)) { $aCount['campaigns']++; if ($hideinactive == true && ($campaign['status'] != OA_ENTITY_STATUS_RUNNING || $campaign['status'] == OA_ENTITY_STATUS_RUNNING && count($campaign['banners']) == 0 && count($campaign['banners']) < $campaign['count'])) { $aCount['campaigns_hidden']++; unset($campaigns[$key]); } } } $oTpl->assign('clientId', $clientid); $oTpl->assign('aCampaigns', $campaigns);
function MAX_displayLinkedPlacementsAds($aParams, $publisherId, $zoneId, $hideInactive, $showMatchingAds, $pageName, &$tabIndex, $directLinkedAds = false) { echo "\n <br /><strong>{$GLOBALS['strCampaignLinkedAds']}:</strong><br />\n <table id='linked-campaigns' width='100%' border='0' align='center' cellspacing='0' cellpadding='0'>\n <tr height='25'>\n <td width='40%'><b> {$GLOBALS['strName']}</b></td>\n <td width='20%'><b> {$GLOBALS['strType']}</b></td>\n <td><b>{$GLOBALS['strID']} </b></td>\n <td> </td>\n </tr>\n <tr height='1'>\n <td colspan='4' bgcolor='#888888'><img src='" . OX::assetPath() . "/images/break.gif' height='1' width='100%'></td>\n </tr>"; $i = 0; $inactive = 0; $aPlacements = !empty($aParams) ? Admin_DA::getPlacements($aParams) : array(); foreach ($aPlacements as $placementId => $aPlacement) { $placementActive = $aPlacement['status'] == OA_ENTITY_STATUS_RUNNING; if (!$hideInactive || $placementActive) { $pParams = $aParams; $pParams['placement_id'] = $placementId; $aAds = Admin_DA::getAds($pParams, true); $bgcolor = $i % 2 == 0 ? " bgcolor='#F6F6F6'" : ''; // Remove these ad(s) from the direct linked ads foreach ($aAds as $dAdId) { unset($directLinkedAds[$dAdId['ad_id']]); } // Remove from array any ads not linked to the zone. // These might exist if campaign has been linked to zone // and indivual ads have then been unlinked $pParams = array('zone_id' => $zoneId); $aAdZones = Admin_DA::getAdZones($pParams, true); $aAdZoneLinks = array(); foreach ($aAdZones as $aAdZone) { $aAdZoneLinks[] = $aAdZone['ad_id']; } foreach ($aAds as $adId => $aAd) { if (!in_array($adId, $aAdZoneLinks)) { unset($aAds[$adId]); } } $placementIcon = MAX_getEntityIcon('placement', $placementActive); $placementName = htmlspecialchars(MAX_getDisplayName($aPlacement['name'])); $placementLink = OA_Permission::isAccount(OA_ACCOUNT_ADMIN) || OA_Permission::isAccount(OA_ACCOUNT_MANAGER) ? "<a href='campaign-edit.php?clientid={$aPlacement['advertiser_id']}&campaignid={$placementId}'>{$placementName}</a>" : $placementName; $placementTypeName = OX_Util_Utils::getCampaignTypeName($aPlacement['priority']); $adCount = empty($aAds) ? 0 : count($aAds); $placementDescription = $showMatchingAds ? ' ' : str_replace('{count}', $adCount, $GLOBALS['strMatchingBanners']); if ($i > 0) { echo "\n <tr height='1'>\n <td colspan='4' bgcolor='#888888'><img src='" . OX::assetPath() . "/images/break-l.gif' height='1' width='100%'></td>\n </tr>"; } echo "\n <tr height='25'{$bgcolor}>\n <td>\n <a href='{$pageName}?affiliateid={$publisherId}&zoneid={$zoneId}&campaignid={$placementId}&action=remove'><img src='" . OX::assetPath() . "/images/caret-l.gif' border='0' align='absmiddle'></a>\n <img src='{$placementIcon}' align='absmiddle'>\n {$placementLink}\n </td>\n <td><span class='campaign-type'>{$placementTypeName}</span></td>\n <td>{$placementId}</td>\n <td>{$placementDescription}</td>\n </tr>"; if ($showMatchingAds && !empty($aAds)) { foreach ($aAds as $adId => $aAd) { $adActive = $aAd['status'] == OA_ENTITY_STATUS_RUNNING && $aPlacement['status'] == OA_ENTITY_STATUS_RUNNING; if (!$hideInactive || $adActive) { $adIcon = MAX_getEntityIcon('ad', $adActive, $aAd['type']); $adName = htmlspecialchars(MAX_getDisplayName($aAd['name'])); $adLink = OA_Permission::isAccount(OA_ACCOUNT_ADMIN) || OA_Permission::isAccount(OA_ACCOUNT_MANAGER) ? "<a href='banner-edit.php?clientid={$aPlacement['advertiser_id']}&campaignid={$placementId}&bannerid={$adId}'>{$adName}</a>" : $adName; $adWidth = $aAd['contenttype'] == 'txt' ? 300 : $aAd['width'] + 64; $adHeight = $aAd['contenttype'] == 'txt' ? 200 : $aAd['height'] + (!empty($aAd['bannertext']) ? 90 : 64); echo "\n <tr height='1'>\n <td{$bgcolor}><img src='" . OX::assetPath() . "/images/spacer.gif' width='1' height='1'></td>\n <td colspan='3' bgcolor='#888888'><img src='" . OX::assetPath() . "/images/break-el.gif' height='1' width='100%'></td>\n </tr>\n <tr height='25'{$bgcolor}>\n <td> <img src='{$adIcon}' align='absmiddle'> {$adLink}</td>\n <td></td>\n <td>{$adId}</td>\n <td align=" . $GLOBALS['phpAds_TextAlignRight'] . ">\n <img src='" . OX::assetPath() . "/images/icon-zoom.gif' align='absmiddle' border='0'> <a href='banner-htmlpreview.php?bannerid={$adId}' target='_new' onClick=\"return openWindow('banner-htmlpreview.php?bannerid={$adId}', '', 'status=no,scrollbars=no,resizable=no,width={$adWidth},height={$adHeight}');\">{$GLOBALS['strShowBanner']}</a> \n </td>\n </tr>"; } else { $inactive++; } } } $i++; } else { $inactive++; } } $showMatchingText = $showMatchingAds ? $GLOBALS['strHideMatchingBanners'] : $GLOBALS['strShowMatchingBanners']; $showMatchingValue = $showMatchingAds ? '0' : '1'; $hideInactiveText = $hideInactive ? $GLOBALS['strShowAll'] : $GLOBALS['strHideInactiveCampaigns']; $hideInactiveStats = $hideInactive ? " | {$inactive} {$GLOBALS['strInactiveCampaignsHidden']}" : ''; $hideInactiveValue = $hideInactive ? '0' : '1'; $hideInactiveIcon = OX::assetPath($hideInactive ? 'images/icon-activate.gif' : 'images/icon-hideinactivate.gif'); echo "\n <tr height='1'>\n <td colspan='4' bgcolor='#888888'><img src='" . OX::assetPath() . "/images/break.gif' height='1' width='100%'></td>\n </tr>\n <tr height='25'>\n <td colspan='3'>\n <img src='{$hideInactiveIcon}' align='absmiddle' border='0'>\n <a href='{$pageName}?affiliateid={$publisherId}&zoneid={$zoneId}&hideinactive={$hideInactiveValue}'>{$hideInactiveText}</a>{$hideInactiveStats}\n </td>\n <td align='right'>\n <img src='" . OX::assetPath() . "/images/icon-banner-stored-d.gif' align='absmiddle' border='0'>\n <a href='{$pageName}?affiliateid={$publisherId}&zoneid={$zoneId}&showbanners={$showMatchingValue}'>{$showMatchingText}</a>\n </table>"; if (!empty($directLinkedAds)) { echo "<br /><strong>{$GLOBALS['strBannerLinkedAds']}:</strong><br />"; $aParams = array('ad_id' => implode(',', array_keys($directLinkedAds))); MAX_displayLinkedAdsPlacements($aParams, $publisherId, $zoneId, $hideInactive, $showParentPlacements, $pageName, $tabIndex); } }
function addVastCompanionsToForm(&$form, $selectableCompanions) { $form->addElement('header', 'companion_status', "Companion banner"); $doCampaigns = OA_Dal::factoryDO('campaigns'); $doCampaigns->campaignid = $GLOBALS['campaignid']; $doCampaigns->find(); $doCampaigns->fetch(); if (OX_Util_Utils::getCampaignType($doCampaigns->priority) == OX_CAMPAIGN_TYPE_CONTRACT_NORMAL) { $form->addElement('html', 'companion_help_contract', '<br/><b>Note:</b> Revive Adserver currently doesn\'t support the display of a companion banner for "Contract" campaigns. <br/>If you wish to display a companion banner, please select a "Remnant" or "Override" campaign.'); return; } $helpLinkPlayer = VideoAdsHelper::getHelpLinkVideoPlayerConfig(); $form->addElement('html', 'companion_help', 'To associate a companion banner to this video ad, select a banner from the companion banner dropdown. This banner will appear for the duration of the video ad. <br/> You will need to specify where this companion banner appears on the page while setting up your video ad in the video player plugin configuration. <a href="' . $helpLinkPlayer . '" target="_blank">Learn more</a> '); $form->addElement('select', 'vast_companion_banner_id', 'Companion banner', $selectableCompanions); }
/** * Calculates campaign eCPM based on the campaign history * * @param integer $campaignId Campaign ID * @param array $aCampaign Campaign information, see * OA_Dal_Maintenance_Priority::getCampaignsInfoByQuery * for info on its format * @return float Calculated campaign eCPM */ public function calculateCampaignEcpm($campaignId, $aCampaign) { return OX_Util_Utils::getEcpm($aCampaign[self::IDX_REVENUE_TYPE], $aCampaign[self::IDX_REVENUE], $this->aCampaignsDeliveries[$campaignId]['sum_impressions'], $this->aCampaignsDeliveries[$campaignId]['sum_clicks'], $this->aCampaignsDeliveries[$campaignId]['sum_conversions'], $aCampaign[self::IDX_ACTIVATE], $aCampaign[self::IDX_EXPIRE]); }
function buildStatusForm($aCampaign) { $form = new OA_Admin_UI_Component_Form("statusChangeForm", "POST", $_SERVER['PHP_SELF']); $form->forceClientValidation(true); $form->addElement('hidden', 'campaignid', $aCampaign['campaignid']); $form->addElement('hidden', 'clientid', $aCampaign['clientid']); $form->addElement('header', 'h_misc', $GLOBALS['strCampaignStatus']); $form->addElement('static', 'status_display', $GLOBALS['strStatus'], OX_Util_Utils::getCampaignStatusName($aCampaign['status'])); if ($aCampaign['status'] == OA_ENTITY_STATUS_APPROVAL) { $form->addElement('radio', 'status', null, $GLOBALS['strCampaignApprove'] . " - " . $GLOBALS['strCampaignApproveDescription'], OA_ENTITY_STATUS_RUNNING, array('id' => 'sts_approve')); $form->addElement('radio', 'status', null, $GLOBALS['strCampaignReject'] . " - " . $GLOBALS['strCampaignRejectDescription'], OA_ENTITY_STATUS_REJECTED, array('id' => 'sts_reject')); $form->addElement('select', 'as_reject_reason', $GLOBALS['strReasonForRejection'], array(OA_ENTITY_ADVSIGNUP_REJECT_NOTLIVE => $GLOBALS['strReasonSiteNotLive'], OA_ENTITY_ADVSIGNUP_REJECT_BADCREATIVE => $GLOBALS['strReasonBadCreative'], OA_ENTITY_ADVSIGNUP_REJECT_BADURL => $GLOBALS['strReasonBadUrl'], OA_ENTITY_ADVSIGNUP_REJECT_BREAKTERMS => $GLOBALS['strReasonBreakTerms'])); $form->addDecorator('as_reject_reason', 'process', array('tag' => 'tr', 'addAttributes' => array('id' => 'rsn_row{numCall}', 'class' => ''))); } elseif ($aCampaign['status'] == OA_ENTITY_STATUS_RUNNING) { $form->addElement('radio', 'status', null, $GLOBALS['strCampaignPause'] . " - " . $GLOBALS['strCampaignPauseDescription'], OA_ENTITY_STATUS_PAUSED, array('id' => 'sts_pause')); } elseif ($aCampaign['status'] == OA_ENTITY_STATUS_PAUSED) { $form->addElement('radio', 'status', null, $GLOBALS['strCampaignRestart'] . " - " . $GLOBALS['strCampaignRestartDescription'], OA_ENTITY_STATUS_RUNNING, array('id' => 'sts_restart')); } elseif ($aCampaign['status'] == OA_ENTITY_STATUS_REJECTED) { $rejectionReasonText = phpAds_showStatusRejected($aCampaign['as_reject_reason']); $form->addElement('static', 'status', null, $rejectionReasonText, OA_ENTITY_STATUS_PAUSED, array('id' => 'sts_pause')); } $form->addElement('controls', 'form-controls'); $form->addElement('submit', 'submit_status', $GLOBALS['strChangeStatus']); return $form; }
function testGetEcpm() { $revenue = 10; $clicks = 10; $conversions = 5; // Test each type with 0 impressions. $impressions = 0; // CPM $expected = 10; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPM, $revenue, $impressions); $this->assertEqual($expected, $result); // CPC // eCPM = default click ratio * revenue * 1000 $defaultClickRatio = null; $expected = 50; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPC, $revenue, $impressions, $clicks, $conversions, null, null, $defaultClickRatio); $this->assertEqual($expected, $result); $defaultClickRatio = 0.05; $expected = 500; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPC, $revenue, $impressions, $clicks, $conversions, null, null, $defaultClickRatio); $this->assertEqual($expected, $result); // CPA // eCPM = default conversion ratio * revenue * 1000 $defaultConversionRatio = null; $expected = 1; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPA, $revenue, $impressions, $clicks, $conversions, null, null, $defaultClickRatio, $defaultConversionRatio); $this->assertEqual($expected, $result); $defaultConversionRatio = 0.01; $expected = 100; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPA, $revenue, $impressions, $clicks, $conversions, null, null, $defaultClickRatio, $defaultConversionRatio); $this->assertEqual($expected, $result); // Tenancy // eCPM = 0. $expected = 0; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, '2009-01-01', '2009-01-14', $defaultClickRatio, $defaultConversionRatio); $this->assertEqual($expected, $result); // Test each type with some impressions $impressions = 100000; // CPM // eCPM = CPM $expected = 10; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPM, $revenue, $impressions); $this->assertEqual($expected, $result); // CPC // eCPM = revenue * clicks / impressions * 1000 $expected = 1; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPC, $revenue, $impressions, $clicks); $this->assertEqual($expected, $result); // CPA // eCPM = revenue * conversions / impressions * 1000 $expected = 0.5; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_CPA, $revenue, $impressions, $clicks, $conversions); $this->assertEqual($expected, $result); // Tenancy // eCPM = (revenue / totalDaysInCampaign) * daysInCampaignSoFar / impressions * 1000 $now = new Date(); $startDate = new Date($now); $endDate = new Date($now); $endDate->addSeconds(60 * 60 * 24 * 10); // 10 days in the future. $span = new Date_Span(); $span->setFromDateDiff($startDate, $endDate); $this->assertEqual(10, $span->toDays()); // Total revenue for tenancy. $revenue = 10000; $revenuePerDay = $revenue / $span->toDays(); $this->assertEqual(1000, $revenuePerDay); // Beginning of campaign (no imps served) $impressions = 0; $expected = 0; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, $startDate->getDate(DATE_FORMAT_ISO), $endDate->getDate(DATE_FORMAT_ISO)); $this->assertEqual($expected, $result); // Half way through campaign (40,000 imps served) $impressions = 40000; $startDate->subtractSeconds(60 * 60 * 24 * 5); // We are 5 days into the campaign. $endDate->subtractSeconds(60 * 60 * 24 * 5); $span->setFromDateDiff($startDate, $now); $this->assertEqual(5, $span->toDays()); $span->setFromDateDiff($endDate, $now); $this->assertEqual(5, $span->toDays()); // eCPM = (revenue / totalDaysInCampaign) * daysInCampaignSoFar / impressions * 1000 $expected = 125; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, $startDate->getDate(DATE_FORMAT_ISO), $endDate->getDate(DATE_FORMAT_ISO)); $this->assertEqual($expected, $result); // End of campaign (70,000 imps served) $impressions = 70000; $startDate->subtractSeconds(60 * 60 * 24 * 5); // We are 10 days into the campaign. $endDate->subtractSeconds(60 * 60 * 24 * 5); $span->setFromDateDiff($startDate, $now); $this->assertEqual(10, $span->toDays()); $expected = 142.857142857; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, $startDate->getDate(DATE_FORMAT_ISO), $endDate->getDate(DATE_FORMAT_ISO)); // Is this the correct margin? $this->assertWithinMargin($expected, $result, 0.0001, "Outside of margin"); // No dates given $expected = 0; $result = OX_Util_Utils::getEcpm(MAX_FINANCE_MT, $revenue, $impressions, $clicks, $conversions, null, null); $this->assertEqual($expected, $result); }