Esempio n. 1
0
 /**
  * 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);
             }
         }
     }
 }
 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);
 }
        $startDate = null;
    }
    if ($end) {
        $endDate = date('Y-m-d', strtotime($end));
    } else {
        $endDate = null;
    }
    if (is_null($deliveryDataLoaded) && !empty($campaignid)) {
        $dalData_intermediate_ad = OA_Dal::factoryDAL('data_intermediate_ad');
        $record = $dalData_intermediate_ad->getDeliveredByCampaign($campaignid);
        $data = $record->toArray();
        $impressions = $data['impressions_delivered'];
        $clicks = $data['clicks_delivered'];
        $conversions = $data['conversions_delivered'];
    }
    $ecpm = OX_Util_Utils::getEcpm($revenue_type, $revenue, $impressions, $clicks, $conversions, $startDate, $endDate);
    echo OA_Admin_NumberFormat::formatNumber($ecpm, 4);
    exit;
}
//build campaign form
//var_dump($campaign);
$oComponent = null;
if (isset($GLOBALS['_MAX']['CONF']['plugins']['openXThorium']) && $GLOBALS['_MAX']['CONF']['plugins']['openXThorium']) {
    $oComponent =& OX_Component::factory('admin', 'oxThorium', 'oxThorium');
}
$campaignForm = buildCampaignForm($campaign, $oComponent);
if ($campaignForm->isSubmitted() && $campaignForm->validate()) {
    //process submitted values
    $errors = processCampaignForm($campaignForm, $oComponent);
    if (!empty($errors)) {
        //need to redisplay page with general errors
Esempio n. 4
0
 /**
  * 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 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);
 }