本文整理汇总了PHP中OX_OperationInterval::convertDateToOperationIntervalID方法的典型用法代码示例。如果您正苦于以下问题:PHP OX_OperationInterval::convertDateToOperationIntervalID方法的具体用法?PHP OX_OperationInterval::convertDateToOperationIntervalID怎么用?PHP OX_OperationInterval::convertDateToOperationIntervalID使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OX_OperationInterval
的用法示例。
在下文中一共展示了OX_OperationInterval::convertDateToOperationIntervalID方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: testConvertDateToOperationIntervalID
/**
* A method to test the convertDateToOperationIntervalID() method.
*/
function testConvertDateToOperationIntervalID()
{
// Test a date in the first operation interval ID in the week before the test was
// written, using a default operation interval of 60 minutes
$date = new Date('2004-08-08 00:40:00');
$result = OX_OperationInterval::convertDateToOperationIntervalID($date, 60);
$this->assertEqual($result, 0);
// Test a date in the last operation interval ID in the week before the test was
// written, using an operation interval of 30 minutes
$date = new Date('2004-08-14 23:40:00');
$result = OX_OperationInterval::convertDateToOperationIntervalID($date, 30);
$this->assertEqual($result, 335);
}
示例2: _getAdImpressions
/**
* A private method to calcuate the number of impressions an advertisement needs to deliver
* in the next operation interval, based on the total number of impressions the ad needs to
* deliver over the rest of the campaigns, the operaion intervals the ad will be active
* in, and the average zone pattern of the zones the ad is linked to.
*
* @access private
* @param OA_Maintenance_Priority_Ad $oAd An ad object, representing the advertisement.
* @param integer $totalRequiredAdImpressions The total number of impressions the advertisement
* needs to deliver.
* @param PEAR::Date $oDate A Date object, set in the current operation interval.
* @param PEAR::Date $oCampaignExpiryDate A Date object representing the end of the advertisement's
* parent campaign.
* @param OA_Maintenance_Priority_DeliveryLimitation $oDeliveryLimitation The delivery limitation
* object for the ad.
* @param array $aAdZones An array of arrays, no particular index in the outer array, in the
* inner arrays, each as an index "zone_id" containing one zone ID that
* the ad is linked to.
* @return integer The number of impressions the advertisement should deliver in the next
* operation interval.
*/
function _getAdImpressions($oAd, $totalRequiredAdImpressions, $oDate, $oCampaignExpiryDate, $oDeliveryLimitation, $aAdZones)
{
// Check the parameters, and return 0 impressions if not valid
if (!is_a($oAd, 'OA_Maintenance_Priority_Ad') || !is_numeric($totalRequiredAdImpressions) || !is_a($oDate, 'Date') || !is_a($oCampaignExpiryDate, 'Date') || !is_a($oDeliveryLimitation, 'OA_Maintenance_Priority_DeliveryLimitation') || !is_array($aAdZones) || empty($aAdZones)) {
OA::debug('- Invalid parameters in _getAdImpressions, skipping...', PEAR_LOG_ERR);
return 0;
}
// This part must be run using the agency timezone
$oStart = new Date($oDate);
$oStart->convertTZ($this->currentTz);
$oEnd = new Date($oCampaignExpiryDate);
$oEnd->convertTZ($this->currentTz);
if ($oDeliveryLimitation->deliveryBlocked($oStart) == true) {
// The advertisement is not currently able to deliver, and so
// no impressions should be allocated for this operation interval
return 0;
}
// Get the cumulative associated zones forecasts for the previous week's
// zone inventory forecasts, keyed by the operation interval ID
$aCumulativeZoneForecast = $this->_getCumulativeZoneForecast($oAd->id, $aAdZones);
// Get the total number of zone impressions remaining in which this
// ad is capable of delivering (taking into account any operation
// intervals where the ad is blocked)
$totalAdLifetimeZoneImpressionsRemaining = $oDeliveryLimitation->getAdLifetimeZoneImpressionsRemaining($oStart, $oEnd, $aCumulativeZoneForecast);
// Are there impressions forecast?
if ($totalAdLifetimeZoneImpressionsRemaining == 0) {
return 0;
}
// Get the current operation interval ID
$currentOperationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
// Scale the total required impressions for the ad over its lifetime
// into the current operation interval forecast, relative to the total
// zone-pattern based forecast for the remaining lifetime of the ad
$scale = $aCumulativeZoneForecast[$currentOperationIntervalID] / $totalAdLifetimeZoneImpressionsRemaining;
$impressions = $totalRequiredAdImpressions * $scale;
return round($impressions);
}
示例3: getDailyTargetingStatistics
/**
* A method for obtaining the targeting statistics of an ad or placement
* for a single day, where the data is summarised by operation interval.
*
* @param integer $id The ad or placement ID.
* @param string $type Either "ad" or "placement".
* @param PEAR::Date $oDate A date representing the day required.
*
* @return mixed Returns false in the event of incorrect input, or in the case
* of being unable to connect to the database, otherwise, returns
* an array of arrays:
*
*
* array(
* [$operationIntervalId] => array(
* ['interval_start'] => PEAR::Date
* ['interval_end'] => PEAR::Date
* ['ad_required_impressions'] => integer
* ['ad_requested_impressions'] => integer
* ['ad_actual_impressions'] => integer
* ['zones_forecast_impressions'] => integer
* ['zones_actual_impressions'] => integer
* ['average'] => integer
* )
* .
* .
* .
* )
*
* or:
*
* array(
* [$operationIntervalId] => array(
* ['interval_start'] => PEAR::Date
* ['interval_end'] => PEAR::Date
* ['placement_required_impressions'] => integer
* ['placement_requested_impressions'] => integer
* ['placement_actual_impressions'] => integer
* ['zones_forecast_impressions'] => integer
* ['zones_actual_impressions'] => integer
* ['average'] => integer
* )
* .
* .
* .
* )
*
* For the ad or placement and day specified, returns an array for each
* operation interval in the day, consisting of the operation interval start
* and end dates, and the total number of impressions requested by the ad, or
* all ads in the placement (for all zones the ads are linked to), as well as
* the total number of impressions actually delivered by the ad, or all ads
* in the placement (for all zones the ads are linked to).
*
* The individual ad/zone impressions requested values may need to be
* calculated as an "averge" value, in the event that there are multiple,
* differing values for an ad in a zone for an operation interval -- in
* much the same way as is done in
* OA_Dal_Maintenance_Priority::getPreviousAdDeliveryInfo() -- before
* the total impressions requested value can be calculated.
*/
function getDailyTargetingStatistics($id, $type, $oDate)
{
if (!$this->_testGetTargetingStatisticsDayParameters($id, $type, $oDate)) {
return false;
}
// Ensure that, if a placement, the placement has advertisements
$aAdIds = $this->_testGetTargetingStatisticsSpanPlacement($id, $type);
if ($aAdIds === false) {
return false;
}
// Prepare the results array
$aResult = array();
// Get a date for the start of the day
$oStartDate = new Date();
$oStartDate->copy($oDate);
$oStartDate->setHour(0);
$oStartDate->setMinute(0);
$oStartDate->setSecond(0);
// Get a date for the end of the day
$oEndOfDayDate = new Date();
$oEndOfDayDate->copy($oDate);
$oEndOfDayDate->setHour(23);
$oEndOfDayDate->setMinute(59);
$oEndOfDayDate->setSecond(59);
// Get the first operation interval of the day
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oStartDate);
// Get dates to be used in date comparisons
$oCompareDate = new Date();
$oCompareDate->copy($aDates['start']);
$oCompareEndDate = new Date();
$oCompareEndDate->copy($oEndOfDayDate);
while ($oCompareDate->before($oEndOfDayDate)) {
// Get the operation interval ID
$operationIntervalId = OX_OperationInterval::convertDateToOperationIntervalID($aDates['start']);
// Get the results for this operation interval
$aResult[$operationIntervalId] = $this->getOperationIntervalTargetingStatistics($aAdIds, $type, $aDates['start'], $aDates['end']);
if ($aResult[$operationIntervalId] === false) {
return false;
}
//.........这里部分代码省略.........
示例4: Date
function _getOperationIntervalInfo(&$operationIntervalId, &$operationInterval, &$dateStart, &$dateEnd)
{
$date = new Date();
$operationInterval = new OX_OperationInterval();
$operationIntervalId = $operationInterval->convertDateToOperationIntervalID($date);
$operationInterval = OX_OperationInterval::getOperationInterval();
$aOperationIntervalDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($date);
$dateStart = DBC::makeLiteral($aOperationIntervalDates['start']->format(TIMESTAMP_FORMAT));
$dateEnd = DBC::makeLiteral($aOperationIntervalDates['end']->format(TIMESTAMP_FORMAT));
}
示例5: testRun
/**
* A method to test the main run() method.
*/
function testRun()
{
$aConf =& $GLOBALS['_MAX']['CONF'];
$aConf['maintenance']['operationInterval'] = 60;
$oServiceLocator =& OA_ServiceLocator::instance();
$oFactory = new OX_Dal_Maintenance_Statistics_Factory();
$oDalMaintenanceStatsticsClassName = $oFactory->deriveClassName();
// Test 1: Run, with the migration required but with no plugins installed
$oNowDate = new Date('2008-08-28 09:01:00');
$oServiceLocator->register('now', $oNowDate);
$oMaintenanceStatistics = new OX_Maintenance_Statistics();
$oMaintenanceStatistics->updateIntermediate = true;
$oMaintenanceStatistics->oLastDateIntermediate = new Date('2008-08-28 07:59:59');
$oMaintenanceStatistics->oUpdateIntermediateToDate = new Date('2008-08-28 08:59:59');
Mock::generatePartial($oDalMaintenanceStatsticsClassName, 'MockOX_Dal_Maintenance_Statistics_Test_1', array('summariseBucketsRaw', 'summariseBucketsRawSupplementary', 'summariseBucketsAggregate', 'migrateRawRequests', 'migrateRawImpressions', 'migrateRawClicks'));
$oDal = new MockOX_Dal_Maintenance_Statistics_Test_1($this);
$oDal->expectNever('summariseBucketsRaw');
$oDal->expectNever('summariseBucketsRawSupplementary');
$oDal->expectNever('summariseBucketsAggregate');
$oDal->expectNever('migrateRawRequests');
$oDal->expectNever('migrateRawImpressions');
$oDal->expectNever('migrateRawClicks');
$oDal->OX_Dal_Maintenance_Statistics();
$oServiceLocator->register('OX_Dal_Maintenance_Statistics', $oDal);
$oSummariseIntermediate = new OX_Maintenance_Statistics_Task_MigrateBucketData();
$oSummariseIntermediate->run();
$oDal =& $oServiceLocator->get('OX_Dal_Maintenance_Statistics');
$oDal->tally();
// Create the "application_variable" table required for installing the plugin
$oTables =& OA_DB_Table_Core::singleton();
$oTables->createTable('application_variable');
// Setup the default OpenX delivery logging plugin for the next test
TestEnv::installPluginPackage('openXDeliveryLog', false);
// Test 2: Run, with plugins installed, but with the migration not required
$oNowDate = new Date('2008-08-28 09:01:00');
$oServiceLocator->register('now', $oNowDate);
$oMaintenanceStatistics = new OX_Maintenance_Statistics();
$oMaintenanceStatistics->updateIntermediate = false;
$oServiceLocator->register('Maintenance_Statistics_Controller', $oMaintenanceStatistics);
Mock::generatePartial($oDalMaintenanceStatsticsClassName, 'MockOX_Dal_Maintenance_Statistics_Test_2', array('summariseBucketsRaw', 'summariseBucketsRawSupplementary', 'summariseBucketsAggregate', 'migrateRawRequests', 'migrateRawImpressions', 'migrateRawClicks'));
$oDal = new MockOX_Dal_Maintenance_Statistics_Test_2($this);
$oDal->expectNever('summariseBucketsRaw');
$oDal->expectNever('summariseBucketsRawSupplementary');
$oDal->expectNever('summariseBucketsAggregate');
$oDal->expectNever('migrateRawRequests');
$oDal->expectNever('migrateRawImpressions');
$oDal->expectNever('migrateRawClicks');
$oDal->OX_Dal_Maintenance_Statistics();
$oServiceLocator->register('OX_Dal_Maintenance_Statistics', $oDal);
$oSummariseIntermediate = new OX_Maintenance_Statistics_Task_MigrateBucketData();
$oSummariseIntermediate->run();
$oDal =& $oServiceLocator->get('OX_Dal_Maintenance_Statistics');
$oDal->tally();
// Test 3: Run, with plugins installed and with the migration required for a single
// operation interval
$oNowDate = new Date('2008-08-28 09:01:00');
$oServiceLocator->register('now', $oNowDate);
$oMaintenanceStatistics = new OX_Maintenance_Statistics();
$oMaintenanceStatistics->updateIntermediate = true;
$oMaintenanceStatistics->oLastDateIntermediate = new Date('2008-08-28 07:59:59');
$oMaintenanceStatistics->oUpdateIntermediateToDate = new Date('2008-08-28 08:59:59');
$oServiceLocator->register('Maintenance_Statistics_Controller', $oMaintenanceStatistics);
Mock::generatePartial($oDalMaintenanceStatsticsClassName, 'MockOX_Dal_Maintenance_Statistics_Test_3', array('summariseBucketsRaw', 'summariseBucketsRawSupplementary', 'summariseBucketsAggregate', 'migrateRawRequests', 'migrateRawImpressions', 'migrateRawClicks'));
$oDal = new MockOX_Dal_Maintenance_Statistics_Test_3($this);
$oComponent =& OX_Component::factory('deliveryLog', 'oxLogConversion', 'logConversion');
$oStartDate = new Date('2008-08-28 07:59:59');
$oStartDate->addSeconds(1);
$oEndDate = new Date('2008-08-28 09:00:00');
$oEndDate->subtractSeconds(1);
$oDal->expectOnce('summariseBucketsRaw', array($aConf['table']['prefix'] . 'data_intermediate_ad_connection', $oComponent->getStatisticsMigration(), array('start' => $oStartDate, 'end' => $oEndDate)));
$oComponent =& OX_Component::factory('deliveryLog', 'oxLogConversion', 'logConversionVariable');
$oStartDate = new Date('2008-08-28 07:59:59');
$oStartDate->addSeconds(1);
$oEndDate = new Date('2008-08-28 09:00:00');
$oEndDate->subtractSeconds(1);
$oDal->expectOnce('summariseBucketsRawSupplementary', array($aConf['table']['prefix'] . 'data_intermediate_ad_variable_value', $oComponent->getStatisticsMigration(), array('start' => $oStartDate, 'end' => $oEndDate)));
$aMap = array();
$oComponent =& OX_Component::factory('deliveryLog', 'oxLogClick', 'logClick');
$aMap[get_class($oComponent)] = $oComponent->getStatisticsMigration();
$oComponent =& OX_Component::factory('deliveryLog', 'oxLogImpression', 'logImpression');
$aMap[get_class($oComponent)] = $oComponent->getStatisticsMigration();
$oComponent =& OX_Component::factory('deliveryLog', 'oxLogRequest', 'logRequest');
$aMap[get_class($oComponent)] = $oComponent->getStatisticsMigration();
$oStartDate = new Date('2008-08-28 07:59:59');
$oStartDate->addSeconds(1);
$oEndDate = new Date('2008-08-28 09:00:00');
$oEndDate->subtractSeconds(1);
$oDal->expectOnce('summariseBucketsAggregate', array($aConf['table']['prefix'] . 'data_intermediate_ad', $aMap, array('start' => $oStartDate, 'end' => $oEndDate), array('operation_interval' => '60', 'operation_interval_id' => OX_OperationInterval::convertDateToOperationIntervalID($oStartDate), 'interval_start' => "'2008-08-28 08:00:00'", 'interval_end' => "'2008-08-28 08:59:59'", 'creative_id' => 0, 'updated' => "'2008-08-28 09:01:00'")));
$oDal->expectNever('migrateRawRequests');
$oDal->expectNever('migrateRawImpressions');
$oDal->expectNever('migrateRawClicks');
$oDal->OX_Dal_Maintenance_Statistics();
$oServiceLocator->register('OX_Dal_Maintenance_Statistics', $oDal);
$oSummariseIntermediate = new OX_Maintenance_Statistics_Task_MigrateBucketData();
$oSummariseIntermediate->run();
$oDal =& $oServiceLocator->get('OX_Dal_Maintenance_Statistics');
$oDal->tally();
//.........这里部分代码省略.........
示例6: testGetAllZonesImpInv
/**
* Method to test the getZonesForecastsForAllZones method.
*
* Requirements:
* Test 1: Test with no Date registered in the service locator, ensure false returned.
* Test 2: Test with a Date registered in the service locator, no data in the database,
* and ensure no data is returned.
* Test 3: Test with forecast data but no actual impressions
* Test 3.5: Test with actual data but no forecast impressions
* Test 4: Test with data both in, and not in, the current OI, and ensure the correct
* data is returned.
* Test 5: Repeat Test 4, but with additional zones (that don't have data) in the zones
* table.
*/
function testGetAllZonesImpInv()
{
$conf = $GLOBALS['_MAX']['CONF'];
$oDbh =& OA_DB::singleton();
$oMaxDalMaintenance = new OA_Dal_Maintenance_Priority();
$zoneForecastDefaultZoneImpressions = 0;
// $oMaxDalMaintenance->getZoneForecastDefaultZoneImpressions();
// Test 1
$oServiceLocator =& OA_ServiceLocator::instance();
$oServiceLocator->remove('now');
$result =& $oMaxDalMaintenance->getZonesForecastsForAllZones();
$this->assertFalse($result);
// Test 2
$oDate = new Date();
$oServiceLocator->register('now', $oDate);
$result =& $oMaxDalMaintenance->getZonesForecastsForAllZones();
$this->assertEqual($result, array(0 => $zoneForecastDefaultZoneImpressions));
// Zone 0
// Test 3
// generate the first zone
$aZones = $this->_generateTestZones(1);
// only generate previous OI delivered impressions, should return zone 0 only
$oDate =& $oServiceLocator->get('now');
$oNewDate = new Date();
$oNewDate->copy($oDate);
$oNewDate->subtractSeconds($conf['maintenance']['operationInterval'] * 60 + 1);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oNewDate);
$this->_generateTestHistory(1, $aDates, 42, 0);
$result =& $oMaxDalMaintenance->getZonesForecastsForAllZones();
$expected = array(0 => $zoneForecastDefaultZoneImpressions, 1 => $zoneForecastDefaultZoneImpressions);
$this->assertEqual($result, $expected);
// Test 3.5
// generate the second zone
$aZones = $this->_generateTestZones(1);
// only generate previous OI forecasted impressions, should return zone 0 only
$oNewDate = new Date();
$oNewDate->copy($aDates['start']);
$oNewDate->subtractSeconds(1);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oNewDate);
$this->_generateTestHistory(2, $aDates, 0, 37);
$result =& $oMaxDalMaintenance->getZonesForecastsForAllZones();
$expected = array(0 => $zoneForecastDefaultZoneImpressions, 1 => $zoneForecastDefaultZoneImpressions, 2 => $zoneForecastDefaultZoneImpressions);
$this->assertEqual($result, $expected);
$oDate =& $oServiceLocator->get('now');
DataGenerator::cleanUp();
$oServiceLocator->register('now', $oDate);
// Test 4
$oDate =& $oServiceLocator->get('now');
// generate three zone
$this->_generateTestZones(3);
// set forecast and impressions for OI - 1
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate);
$this->_generateTestHistory(1, $aDates, 42, 100);
$this->_generateTestHistory(2, $aDates, 5, 2);
$this->_generateTestHistory(3, $aDates, 9999, 9999);
$result =& $oMaxDalMaintenance->getZonesForecastsForAllZones();
$expected = array(0 => $zoneForecastDefaultZoneImpressions, 1 => 42, 2 => 5, 3 => 9999);
$this->assertEqual($result, $expected);
// Test 5
// New zone must appear in the array with default forecast
$aZones = $this->_generateTestZones(1);
$result =& $oMaxDalMaintenance->getZonesForecastsForAllZones();
$expected = array(0 => $zoneForecastDefaultZoneImpressions, 1 => 42, 2 => 5, 3 => 9999, 4 => $zoneForecastDefaultZoneImpressions);
$result =& $oMaxDalMaintenance->getZonesForecastsForAllZones();
$this->assertEqual($result, $expected);
// register forecast for the OI before, this should not affect current OI forecast
$oDate =& $oServiceLocator->get('now');
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate);
$currentOpIntID = OX_OperationInterval::convertDateToOperationIntervalID($aDates['start']);
$this->_generateTestHistory(1, $aDates, 3700, 0);
$this->_generateTestHistory(2, $aDates, 300, 0);
$this->_generateTestHistory(3, $aDates, 500, 0);
$result =& $oMaxDalMaintenance->getZonesForecastsForAllZones();
$this->assertEqual($result, $expected);
DataGenerator::cleanUp();
}
开发者ID:Spark-Eleven,项目名称:revive-adserver,代码行数:90,代码来源:Priority_getZonesForecastsForAllZones.dal.test.php
示例7: testgetZonesForecasts
/**
* The method to test the getZonesForecasts() method.
*/
function testgetZonesForecasts()
{
$this->_createTestData();
$operationInterval = $GLOBALS['_MAX']['CONF']['maintenance']['operationInterval'];
$oDal = new OA_Dal_Maintenance_Priority();
$oLowerDate = new Date('2007-09-16 12:00:00');
$oUpperDate = new Date('2007-09-16 17:00:00');
$lowerDateStr = $oLowerDate->format(self::DATE_TIME_FORMAT);
$upperDateStr = $oUpperDate->format(self::DATE_TIME_FORMAT);
$weeks = 2;
// Test with bad input
$badAgencyId = -1;
$result = $oDal->getZonesForecasts($lowerDateStr, $upperDateStr);
$expected = array();
$this->assertEqual($result, $expected);
// Test with data outside the range
$oDate = new Date('2007-09-16 11:00:00');
$operationIntervalId = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate);
$previousOIDate = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate);
$startDateStr = $aDates['start']->format(self::DATE_TIME_FORMAT);
$endDateStr = $aDates['end']->format(self::DATE_TIME_FORMAT);
$doDIA = OA_Dal::factoryDO('data_intermediate_ad');
$aDIAs = DataGenerator::generate($doDIA, 1);
$doDIA = OA_Dal::staticGetDO('data_intermediate_ad', $aDIAs[0]);
$doDIA->date_time = $startDateStr;
$doDIA->operation_interval = $operationInterval;
$doDIA->zone_id = $this->zoneId1;
$doDIA->ad_id = 1;
$doDIA->impressions = 1000;
$doDIA->update();
$result = $oDal->getZonesForecasts($startDateStr, $endDateStr);
$expected = array();
$this->assertEqual($result, $expected);
// Test with data inside the range
$oDate = new Date('2007-09-16 13:00:00');
$operationIntervalId = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate);
$previousOIDate = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate);
$startDateStr = $aDates['start']->format(self::DATE_TIME_FORMAT);
$endDateStr = $aDates['end']->format(self::DATE_TIME_FORMAT);
$aDIAs = DataGenerator::generate($doDIA, 1);
$doDIA = OA_Dal::staticGetDO('data_intermediate_ad', $aDIAs[0]);
$doDIA->date_time = $previousOIDate['start']->format(self::DATE_TIME_FORMAT);
$doDIA->operation_interval = $operationInterval;
$doDIA->zone_id = $this->zoneId1;
$doDIA->ad_id = 1;
$doDIA->impressions = 70;
$doDIA->update();
$result = $oDal->getZonesForecasts($startDateStr, $endDateStr);
$expected = array($this->zoneId1 => 70);
$this->assertEqual($result, $expected);
// Test with more data from the same zone
$oDate = new Date('2007-09-16 14:00:00');
$operationIntervalId = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate);
$previousOIDate = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate);
$startDateStr = $aDates['start']->format(self::DATE_TIME_FORMAT);
$endDateStr = $aDates['end']->format(self::DATE_TIME_FORMAT);
$aDIAs = DataGenerator::generate($doDIA, 3);
$doDIA = OA_Dal::staticGetDO('data_intermediate_ad', $aDIAs[0]);
$doDIA->date_time = $previousOIDate['start']->format(self::DATE_TIME_FORMAT);
$doDIA->operation_interval = $operationInterval;
$doDIA->zone_id = $this->zoneId1;
$doDIA->ad_id = 2;
$doDIA->impressions = 90;
$doDIA->update();
$doDIA = OA_Dal::staticGetDO('data_intermediate_ad', $aDIAs[1]);
$doDIA->date_time = $previousOIDate['start']->format(self::DATE_TIME_FORMAT);
$doDIA->operation_interval = $operationInterval;
$doDIA->zone_id = $this->zoneId1;
$doDIA->ad_id = 4;
$doDIA->impressions = 110;
$doDIA->update();
$doDIA = OA_Dal::staticGetDO('data_intermediate_ad', $aDIAs[2]);
$doDIA->date_time = $previousOIDate['start']->format(self::DATE_TIME_FORMAT);
$doDIA->operation_interval = $operationInterval;
$doDIA->zone_id = $this->zoneId2;
$doDIA->ad_id = 4;
$doDIA->impressions = 15000;
$doDIA->update();
$result = $oDal->getZonesForecasts($startDateStr, $endDateStr);
$expected = array($this->zoneId1 => 200, $this->zoneId2 => 15000);
$this->assertEqual($result, $expected);
DataGenerator::cleanUp();
}
示例8: _getOperationIntervalRanges
/**
* A private method to convert the ZIF update type from _getUpdateTypeRequired() into
* a range of operation intervals where all zones require their ZIF values to be updated.
*
* @access private
* @param mixed $type The update type required. Possible values are the same as
* those returned from the
* {@link OA_Maintenance_Priority_AdServer_Task_ForecastZoneImpressions::getUpdateTypeRequired()}
* method.
* @return array An array of hashes where keys are operation interval IDs, and
* values are PEAR Dates. One element in the array indicates a
* contiguous range, two elements indicate a non-contiguous range.
*/
function _getOperationIntervalRanges($type)
{
// Initialise result array
$aResult = array();
switch (true) {
case is_bool($type) && $type === false:
// Update none, return an empty array
return $aResult;
case is_bool($type) && $type === true:
// Update all - need one week's worth of operation intervals up until the end
// of the operation interval *after* the one that statistics have been updated
// to, as we need to predict one interval ahead of now
$oStatsDates = OX_OperationInterval::convertDateToNextOperationIntervalStartAndEndDates($this->oDateNow);
$oStartDate = new Date();
$oStartDate->copy($oStatsDates['start']);
$oStartDate->subtractSeconds(SECONDS_PER_WEEK);
$startId = OX_OperationInterval::convertDateToOperationIntervalID($oStartDate);
$totalIntervals = OX_OperationInterval::operationIntervalsPerWeek();
break;
case is_array($type) && $type[0] < $type[1]:
// A contiguous (ie. inter-week) range, where the first operation interval
// ID is the lower bound, and the second operation interval ID is the upper
// The start operation interval ID is the operation interval ID right after
// the operation interval ID that priority was updated to (ie. $type[0])
$aDates = OX_OperationInterval::convertDateToNextOperationIntervalStartAndEndDates($this->oPriorityUpdatedToDate);
$oStartDate = $aDates['start'];
$startId = OX_OperationInterval::nextOperationIntervalID($type[0], 1);
$totalIntervals = $type[1] - $type[0];
break;
case is_array($type) && $type[0] > $type[1]:
// A non-contiguous range, so calculate as above, but use the first operation
// interval ID as the upper bound, and the second operation interval ID as the
// lower bound in the proceeding week
// The start operation interval ID is the operation interval ID right after
// the operation interval ID that priority was updated to (ie. $type[0])
$aDates = OX_OperationInterval::convertDateToNextOperationIntervalStartAndEndDates($this->oPriorityUpdatedToDate);
$oStartDate = $aDates['start'];
$startId = OX_OperationInterval::nextOperationIntervalID($type[0], 1);
$totalIntervals = OX_OperationInterval::operationIntervalsPerWeek() - $type[0] + $type[1];
break;
default:
OA::debug('OA_Maintenance_Priority_AdServer_Task_ForecastZoneImpressions::getOperationIntRangeByType() called with unexpected type, exiting', PEAR_LOG_CRIT);
exit;
}
// Build the update range array
$aRange = array();
$totalIntervalPerWeek = OX_OperationInterval::operationIntervalsPerWeek();
for ($x = $startId, $y = 0; $y < $totalIntervals; $x++, $y++) {
if ($x == $totalIntervalPerWeek) {
$x = 0;
}
$aDates = array();
$aDates['start'] = new Date($oStartDate);
//->format('%Y-%m-%d %H:%M:%S');
$oEndDate = new Date();
$oEndDate->copy($oStartDate);
$oEndDate->addSeconds(OX_OperationInterval::secondsPerOperationInterval() - 1);
$aDates['end'] = $oEndDate;
//->format('%Y-%m-%d %H:%M:%S');
unset($oEndDate);
$aRange[$x] = $aDates;
$oStartDate->addSeconds(OX_OperationInterval::secondsPerOperationInterval());
}
// Is the update range array a contiguous (inter-weeek) range?
if (array_key_exists($totalIntervalPerWeek - 1, $aRange) && array_key_exists(0, $aRange)) {
// The range contains the first and the last operation interval IDs, is the
// last date before the first date?
$oFirstIntervalStartDate = new Date($aRange[0]['start']);
$oLastIntervalStartDate = new Date($aRange[$totalIntervalPerWeek - 1]['start']);
if ($oLastIntervalStartDate->before($oFirstIntervalStartDate)) {
// It's a non-contiguous range, so split into two ranges
$aRange1 = array();
$aRange2 = array();
for ($x = $startId; $x < $totalIntervalPerWeek; $x++) {
$aRange1[$x] = $aRange[$x];
}
for ($x = 0; $x < $startId; $x++) {
if (isset($aRange[$x])) {
$aRange2[$x] = $aRange[$x];
}
}
$aResult[] = $aRange1;
$aResult[] = $aRange2;
return $aResult;
}
}
$aResult[] = $aRange;
//.........这里部分代码省略.........
示例9: testGetPreviousAdDeliveryInfo
//.........这里部分代码省略.........
* is returned correctly.
* - That prioritisation information where multiple sets of INDENTICAL
* data exists is returned correctly.
* - That prioritisation information where multiple sets of DIFFERENT
* data exists is returned correctly.
* - That prioritisation information from older sets of data is
* returned correctly.
* Test 18a: Re-test, but also include ad/zone pairs that are in/not in the above
* set of data, and ensure that these ad/zone pairs are also included
* in the results.
*/
function testGetPreviousAdDeliveryInfo()
{
$conf = $GLOBALS['_MAX']['CONF'];
$oDbh =& OA_DB::singleton();
$oMaxDalMaintenance = new OA_Dal_Maintenance_Priority();
$aEmptyZoneAdArray = array();
$aAdParams = array('ad_id' => 1, 'active' => 't', 'type' => 'sql', 'weight' => 1);
$oAd = new OA_Maintenance_Priority_Ad($aAdParams);
$oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1));
$oZone->addAdvert($oAd);
$aZoneAdArray = array($oZone->id => $oZone);
// Test 1
$oServiceLocator =& OA_ServiceLocator::instance();
$oServiceLocator->remove('now');
$result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray);
$this->assertFalse($result);
// Test 2
$oDate = new Date();
$oServiceLocator->register('now', $oDate);
$result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray);
$this->assertEqual(count($result), 0);
// Test 3
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate);
$oNow = new Date();
$bannerId1 = $this->_insertCampaignBanner();
$aData = array($conf['maintenance']['operationInterval'], $operationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S'));
$idDia = $this->_insertDataIntermediateAd($aData);
$result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray);
$this->assertEqual(count($result), 0);
$oDate =& $oServiceLocator->get('now');
DataGenerator::cleanUp();
$oServiceLocator->register('now', $oDate);
// Test 4
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
$previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID);
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate);
$bannerId1 = $this->_insertCampaignBanner();
$aData = array($conf['maintenance']['operationInterval'], $previousOperationIntervalID, $aDates['start']->format('%Y-%m-%d %H:%M:%S'), $aDates['end']->format('%Y-%m-%d %H:%M:%S'), $aDates['start']->format('%Y-%m-%d'), $aDates['start']->format('%H'), $bannerId1, 0, 1, 1, $oNow->format('%Y-%m-%d %H:%M:%S'));
$idDia = $this->_insertDataIntermediateAd($aData);
$result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aEmptyZoneAdArray);
$this->assertEqual(count($result), 1);
$this->assertEqual($result[1][1]['ad_id'], $bannerId1);
$this->assertEqual($result[1][1]['zone_id'], 1);
$this->assertNull($result[1][1]['required_impressions']);
$this->assertNull($result[1][1]['requested_impressions']);
$this->assertNull($result[1][1]['priority_factor']);
$this->assertNull($result[1][1]['past_zone_traffic_fraction']);
$this->assertEqual($result[1][1]['impressions'], 1);
$oDate =& $oServiceLocator->get('now');
DataGenerator::cleanUp();
$oServiceLocator->register('now', $oDate);
// Test 5, 5a
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
$previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($operationIntervalID);
示例10: testUpdatePriorities
/**
* Method to test the updatePriorities method.
*
* Test 1: Test with no Date registered in the service locator, ensure false returned.
* Test 2: Test with no data in the database, ensure data is correctly stored.
* Test 3: Test with previous test data in the database, ensure data is correctly stored.
* Test 4: Test with an obscene number of items, and ensure that the packet size is
* not exceeded (no asserts, test suite will simply fail if unable to work).
*/
function testUpdatePriorities()
{
/**
* @TODO Locate where clean up doesn't happen before this test, and fix!
*/
TestEnv::restoreEnv();
$conf = $GLOBALS['_MAX']['CONF'];
$oDbh =& OA_DB::singleton();
$oMaxDalMaintenance = new OA_Dal_Maintenance_Priority();
// Insert the data into the ad_zone_assoc table, as an ad is linked to a zone
$this->_generateTestData();
// Test 1
$oServiceLocator =& OA_ServiceLocator::instance();
$oServiceLocator->remove('now');
$aData = array(array('ads' => array(array('ad_id' => $this->aIds['ad'], 'zone_id' => $this->aIds['zone'], 'required_impressions' => '1000', 'requested_impressions' => '1000', 'priority' => '0.45', 'priority_factor' => null, 'priority_factor_limited' => false, 'past_zone_traffic_fraction' => null))));
$result = $oMaxDalMaintenance->updatePriorities($aData);
$this->assertFalse($result);
// Test 2
$oDate = new Date();
$oServiceLocator->register('now', $oDate);
$result = $oMaxDalMaintenance->updatePriorities($aData);
$this->assertTrue($result);
$query = "\n SELECT\n ad_id,\n zone_id,\n priority\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']} AND zone_id = {$this->aIds['zone']}";
$rc = $oDbh->query($query);
$aRow = $rc->fetchRow();
$this->assertEqual($aRow['ad_id'], $this->aIds['ad']);
$this->assertEqual($aRow['zone_id'], $this->aIds['zone']);
$this->assertEqual($aRow['priority'], 0.45);
$query = "\n SELECT\n operation_interval,\n operation_interval_id,\n interval_start,\n interval_end,\n ad_id,\n zone_id,\n required_impressions,\n requested_impressions,\n priority,\n priority_factor,\n priority_factor_limited,\n past_zone_traffic_fraction,\n created,\n created_by,\n expired,\n expired_by\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['data_summary_ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']}";
$rc = $oDbh->query($query);
$aRow = $rc->fetchRow();
$currentOperationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate);
$this->assertEqual($aRow['operation_interval'], $conf['maintenance']['operationInterval']);
$this->assertEqual($aRow['operation_interval_id'], $currentOperationIntervalID);
$this->assertEqual($aRow['interval_start'], $aDates['start']->format('%Y-%m-%d %H:%M:%S'));
$this->assertEqual($aRow['interval_end'], $aDates['end']->format('%Y-%m-%d %H:%M:%S'));
$this->assertEqual($aRow['ad_id'], $this->aIds['ad']);
$this->assertEqual($aRow['zone_id'], $this->aIds['zone']);
$this->assertEqual($aRow['required_impressions'], 1000);
$this->assertEqual($aRow['requested_impressions'], 1000);
$this->assertEqual($aRow['priority'], 0.45);
$this->assertNull($aRow['priority_factor']);
$this->assertFalse($aRow['priority_factor_limited']);
$this->assertNull($aRow['past_zone_traffic_fraction']);
$this->assertEqual($aRow['created'], $oDate->format('%Y-%m-%d %H:%M:%S'));
$this->assertEqual($aRow['created_by'], 0);
$this->assertNull($aRow['expired']);
$this->assertNull($aRow['expired_by']);
// Test 3
$aData = array(array('ads' => array(array('ad_id' => $this->aIds['ad'], 'zone_id' => $this->aIds['zone'], 'required_impressions' => 2000, 'requested_impressions' => 2000, 'priority' => 0.9, 'priority_factor' => 0.1, 'priority_factor_limited' => false, 'past_zone_traffic_fraction' => 0.99), array('ad_id' => $this->aIds['ad'] + 1, 'zone_id' => $this->aIds['ad'] + 1, 'required_impressions' => 500, 'requested_impressions' => 500, 'priority' => 0.1, 'priority_factor' => 0.2, 'priority_factor_limited' => true, 'past_zone_traffic_fraction' => 0.45))));
$oOldDate = new Date();
$oOldDate->copy($oDate);
$oDate = new Date();
$oServiceLocator->register('now', $oDate);
$result = $oMaxDalMaintenance->updatePriorities($aData);
$this->assertTrue($result);
$query = "\n SELECT\n ad_id,\n zone_id,\n priority\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']} AND zone_id = {$this->aIds['zone']}";
$rc = $oDbh->query($query);
$aRow = $rc->fetchRow();
$this->assertEqual($aRow['ad_id'], $this->aIds['ad']);
$this->assertEqual($aRow['zone_id'], $this->aIds['zone']);
$this->assertEqual($aRow['priority'], 0.9);
$query = "\n SELECT\n operation_interval,\n operation_interval_id,\n interval_start,\n interval_end,\n ad_id,\n zone_id,\n required_impressions,\n requested_impressions,\n priority,\n priority_factor,\n priority_factor_limited,\n past_zone_traffic_fraction,\n created,\n created_by,\n expired,\n expired_by\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['data_summary_ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']}\n AND expired IS NOT NULL";
$rc = $oDbh->query($query);
$aRow = $rc->fetchRow();
$currentOperationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oOldDate);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oOldDate);
$this->assertEqual($aRow['operation_interval'], $conf['maintenance']['operationInterval']);
$this->assertEqual($aRow['operation_interval_id'], $currentOperationIntervalID);
$this->assertEqual($aRow['interval_start'], $aDates['start']->format('%Y-%m-%d %H:%M:%S'));
$this->assertEqual($aRow['interval_end'], $aDates['end']->format('%Y-%m-%d %H:%M:%S'));
$this->assertEqual($aRow['ad_id'], $this->aIds['ad']);
$this->assertEqual($aRow['zone_id'], $this->aIds['ad']);
$this->assertEqual($aRow['required_impressions'], 1000);
$this->assertEqual($aRow['requested_impressions'], 1000);
$this->assertEqual($aRow['priority'], 0.45);
$this->assertNull($aRow['priority_factor']);
$this->assertFalse($aRow['priority_factor_limited']);
$this->assertNull($aRow['past_zone_traffic_fraction']);
$this->assertEqual($aRow['created'], $oOldDate->format('%Y-%m-%d %H:%M:%S'));
$this->assertEqual($aRow['created_by'], 0);
$this->assertEqual($aRow['expired'], $oDate->format('%Y-%m-%d %H:%M:%S'));
$this->assertEqual($aRow['expired_by'], 0);
$query = "\n SELECT\n operation_interval,\n operation_interval_id,\n interval_start,\n interval_end,\n ad_id,\n zone_id,\n required_impressions,\n requested_impressions,\n priority,\n priority_factor,\n priority_factor_limited,\n past_zone_traffic_fraction,\n created,\n created_by,\n expired,\n expired_by\n FROM\n " . $oDbh->quoteIdentifier($conf['table']['prefix'] . $conf['table']['data_summary_ad_zone_assoc'], true) . "\n WHERE\n ad_id = {$this->aIds['ad']}\n AND expired IS NULL";
$rc = $oDbh->query($query);
$aRow = $rc->fetchRow();
$currentOperationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate);
$this->assertEqual($aRow['operation_interval'], $conf['maintenance']['operationInterval']);
$this->assertEqual($aRow['operation_interval_id'], $currentOperationIntervalID);
//.........这里部分代码省略.........
示例11: getAdLifetimeZoneImpressionsRemaining
/**
* A method to obtain the sum of the zone forecast impression value, for all the zones
* an advertisement is linked to, cloned out over the advertisement's entire remaining
* lifetime in the campaign, with any blocked operation intervals removed.
*
* Requires that the getActiveAdOperationIntervals() method have previously been
* called to function correctly.
*
* @param PEAR::Date $oNowDate The current date.
* @param PEAR::Date $oEndDate The end date of the campaign. Note that if the end
* date supplied is not at the end of a day, it will be
* converted to be treated as such.
* @param array $aCumulativeZoneForecast The cumulative forecast impressions, indexed
* by operation interval ID, of all the zones the
* advertisement is linked to.
* array(
* [operation_interval_id] => forecast_impressions,
* [operation_interval_id] => forecast_impressions
* .
* .
* .
* )
* @return integer The ad's total remaining zone impression forecast for all zone for
* the remaining life of the ad.
*/
function getAdLifetimeZoneImpressionsRemaining($oNowDate, $oEndDate, $aCumulativeZoneForecast)
{
$totalAdLifetimeZoneImpressionsRemaining = 0;
// Test the parameters, if invalid, return zero
if (!is_a($oNowDate, 'date') || !is_a($oEndDate, 'date') || !is_array($aCumulativeZoneForecast) || count($aCumulativeZoneForecast) != OX_OperationInterval::operationIntervalsPerWeek()) {
OA::debug(' - Invalid parameters to getAdLifetimeZoneImpressionsRemaining, returning 0', PEAR_LOG_ERR);
return $totalAdLifetimeZoneImpressionsRemaining;
}
// Ensure that the end of campaign date is at the end of the day
$oEndDateCopy = new Date($oEndDate);
$oEndDateCopy->setHour(23);
$oEndDateCopy->setMinute(59);
$oEndDateCopy->setSecond(59);
// Ensure that the $aCumulativeZoneForecast array is sorted by key, so that it can
// be accessed by array_slice, regardless of the order that the forecast data was added
// to the array
ksort($aCumulativeZoneForecast);
// Step 1: Calculate the sum of the forecast values from "now" until the end of "today"
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oNowDate);
$oEndOfToday = new Date($aDates['start']);
$oEndOfToday->setTZ($oEndDate->tz);
$oEndOfToday->setHour(23);
$oEndOfToday->setMinute(59);
$oEndOfToday->setSecond(59);
$oStart = $aDates['start'];
while ($oStart->before($oEndOfToday)) {
// Find the Operation Interval ID for this Operation Interval
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oStart);
// As iteration over every OI is required anyway, test to see if
// the ad is blocked in this OI; if not, add the forecast values to the
// running total
if (empty($this->aBlockedOperationIntervalDates[$oStart->format('%Y-%m-%d %H:%M:%S')])) {
$totalAdLifetimeZoneImpressionsRemaining += $aCumulativeZoneForecast[$operationIntervalID];
}
// Go to the next operation interval in "today"
$oStart = OX_OperationInterval::addOperationIntervalTimeSpan($oStart);
}
// Step 2: Calculate how many times each day of the week occurs between the end of
// "today" (i.e. starting "tomorrow morning") and the last day the ad can run
$aDays = array();
$oStartOfTomorrow = new Date($oEndOfToday);
$oStartOfTomorrow->addSeconds(1);
$oTempDate = new Date();
$oTempDate->copy($oStartOfTomorrow);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oTempDate);
while ($aDates['start']->before($oEndDateCopy)) {
// Increase the count for this day of the week
$aDays[$aDates['start']->getDayOfWeek()]++;
// Go to the next day
$oTempDate->addSeconds(SECONDS_PER_DAY);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oTempDate);
}
// Step 3: For every possible day of the week (assuming that day of the week is in the
// ad's remaining lifetime), calculate the sum of the forecast values for every
// operation interval in that day
if (!empty($aDays)) {
$operationIntervalsPerDay = OX_OperationInterval::operationIntervalsPerDay();
$oTempDate = new Date($oStartOfTomorrow);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oTempDate);
for ($counter = 0; $counter < 7; $counter++) {
// Are there any instances of this day in the campaign?
if ($aDays[$oTempDate->getDayOfWeek()] > 0) {
// Calculate the sum of the zone forecasts for this day of week
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oTempDate);
$dayStartOperationIntervalId = OX_OperationInterval::convertDateToOperationIntervalID($aDates['start']);
$aDayCumulativeZoneForecast = array_slice($aCumulativeZoneForecast, $dayStartOperationIntervalId, $operationIntervalsPerDay);
$forecastSum = array_sum($aDayCumulativeZoneForecast);
// Multiply this day's forecast sum value by the number of times this
// day of week appears in the remainder of the campaign and add the
// value to the running total
$totalAdLifetimeZoneImpressionsRemaining += $forecastSum * $aDays[$oTempDate->getDayOfWeek()];
}
// Go to the next day
$oTempDate->addSeconds(SECONDS_PER_DAY);
}
//.........这里部分代码省略.........
示例12: testGetAdLifetimeZoneImpressionsRemaining
/**
* A method to test the getAdLifetimeZoneImpressionsRemaining() method.
*
* Test 1: Test with invalid parameters, and ensure that zero is returned.
* Test 2: Test with equal start and end dates, and ensure just that OI's
* data is returned.
* Test 3: Test with a small range of dates in one week, that the correct
* sum is returned.
* Test 4: Test with a small range of dates over three days, covering two
* weeks, and ensure that the correct result is returned.
* Test 5: Test with a limitation that blocks less than 50% of the remaining
* range, and ensure that the correct result is returned.
* Test 6: Test with a limitation that blocks more than 50% of the remaining
* range, and ensure that the correct result is returned.
*/
function testGetAdLifetimeZoneImpressionsRemaining()
{
$aConf =& $GLOBALS['_MAX']['CONF'];
$aConf['maintenance']['operationInterval'] = 60;
$aDeliveryLimitations = array();
$oDeliveryLimitationManager = new OA_Maintenance_Priority_DeliveryLimitation($aDeliveryLimitations);
// Test 1
$oDate = new Date('2006-02-15 11:07:15');
$aCumulativeZoneForecast = array();
$aCumulativeZoneForecast = $this->_fillForecastArray($aCumulativeZoneForecast);
$result = $oDeliveryLimitationManager->getAdLifetimeZoneImpressionsRemaining('foo', $oDate, $aCumulativeZoneForecast);
$this->assertEqual($result, 0);
$result = $oDeliveryLimitationManager->getAdLifetimeZoneImpressionsRemaining($oDate, 'foo', $aCumulativeZoneForecast);
$this->assertEqual($result, 0);
$result = $oDeliveryLimitationManager->getAdLifetimeZoneImpressionsRemaining($oDate, $oDate, 'foo');
$this->assertEqual($result, 0);
// Test 2
$oDate = new Date('2006-02-15 23:07:15');
$aCumulativeZoneForecast = array();
$aCumulativeZoneForecast = $this->_fillForecastArray($aCumulativeZoneForecast);
$result = $oDeliveryLimitationManager->getAdLifetimeZoneImpressionsRemaining($oDate, $oDate, $aCumulativeZoneForecast);
$this->assertEqual($result, 1);
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate);
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($aDates['start']);
$aCumulativeZoneForecast[$operationIntervalID] = 50;
$previousOperationIntervalId = OX_OperationInterval::previousOperationIntervalID($operationIntervalID);
$aCumulativeZoneForecast[$previousOperationIntervalId] = 5;
$nextOperationIntervalId = OX_OperationInterval::nextOperationIntervalID($operationIntervalID);
$aCumulativeZoneForecast[$nextOperationIntervalId] = 7;
$aCumulativeZoneForecast = $this->_fillForecastArray($aCumulativeZoneForecast);
$result = $oDeliveryLimitationManager->getAdLifetimeZoneImpressionsRemaining($oDate, $oDate, $aCumulativeZoneForecast);
$this->assertEqual($result, 50);
// Test 3
$oStartDate = new Date('2006-02-15 11:07:15');
$oEndDate = new Date('2006-02-15 23:59:59');
$aCumulativeZoneForecast = array();
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-15 10:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 1;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-15 11:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 10;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-15 12:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 100;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-15 13:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 1000;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-15 14:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 10000;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-15 15:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 100000;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-15 16:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 1000000;
$aCumulativeZoneForecast = $this->_fillForecastArray($aCumulativeZoneForecast);
$result = $oDeliveryLimitationManager->getAdLifetimeZoneImpressionsRemaining($oStartDate, $oEndDate, $aCumulativeZoneForecast);
$this->assertEqual($result, 1111110 + 7);
// Test 4
$oStartDate = new Date('2006-02-18 22:07:15');
$oEndDate = new Date('2006-02-20 23:59:59');
$aCumulativeZoneForecast = array();
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-18 21:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 1;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-18 22:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 10;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-18 23:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 100;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-19 00:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 1000;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-19 01:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 10000;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-19 02:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 100000;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-19 03:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 1000000;
$operationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-19 04:00:01'));
$aCumulativeZoneForecast[$operationIntervalID] = 10000000;
$aCumulativeZoneForecast = $this->_fillForecastArray($aCumulativeZoneForecast);
$result = $oDeliveryLimitationManager->getAdLifetimeZoneImpressionsRemaining($oStartDate, $oEndDate, $aCumulativeZoneForecast);
$this->assertEqual($result, 110 + 11111000 + 19 + 24);
// Test 5
$oStartDate = new Date('2006-02-07 12:07:15');
$oEndDate = new Date('2006-02-07 23:59:59');
$aDeliveryLimitations = array(array('ad_id' => 1, 'logical' => 'and', 'type' => 'deliveryLimitations:Time:Hour', 'comparison' => '!~', 'data' => '23', 'executionorder' => 0));
$oDeliveryLimitationManager = new OA_Maintenance_Priority_DeliveryLimitation($aDeliveryLimitations);
$oDeliveryLimitationManager->getActiveAdOperationIntervals(12, $oStartDate, $oEndDate);
$aCumulativeZoneForecast = array();
$aCumulativeZoneForecast = $this->_fillForecastArray($aCumulativeZoneForecast);
$result = $oDeliveryLimitationManager->getAdLifetimeZoneImpressionsRemaining($oStartDate, $oEndDate, $aCumulativeZoneForecast);
//.........这里部分代码省略.........
示例13: testGetPreviousWeekZoneForcastImpressions
/**
* A method to test the getPreviousWeekZoneForcastImpressions() method.
*
* Test 1: Test with bad input, and ensure false is returned.
* Test 2: Test with no date in the service locator, and ensure that
* false is returned.
* Test 3: Test with no data, and ensure that an array with the default
* forecast for each zone is returned.
* Test 4: Test with data, and ensure that an array with the correct
* forecasts is returned.
*/
function testGetPreviousWeekZoneForcastImpressions()
{
$aConf = $GLOBALS['_MAX']['CONF'];
$oDbh =& OA_DB::singleton();
$oDal = new OA_Dal_Maintenance_Priority();
// Test 1
$aResult = $oDal->getPreviousWeekZoneForcastImpressions('foo');
$this->assertFalse($aResult);
// Test 2
$oServiceLocator =& OA_ServiceLocator::instance();
$oServiceLocator->remove('now');
$aResult = $oDal->getPreviousWeekZoneForcastImpressions(1);
$this->assertFalse($aResult);
// Test 3
$oDate = new Date();
$oServiceLocator->register('now', $oDate);
$aResult = $oDal->getPreviousWeekZoneForcastImpressions(1);
$this->assertTrue(is_array($aResult));
$this->assertEqual(count($aResult), OX_OperationInterval::operationIntervalsPerWeek());
for ($operationIntervalID = 0; $operationIntervalID < OX_OperationInterval::operationIntervalsPerWeek(); $operationIntervalID++) {
$expected = array('zone_id' => 1, 'forecast_impressions' => $oDal->getZoneForecastDefaultZoneImpressions(), 'operation_interval_id' => $operationIntervalID);
$this->assertEqual($aResult[$operationIntervalID], $expected);
}
// Test 4
// Insert impressions for the previous operation interval
$aDates = OX_OperationInterval::convertDateToOperationIntervalStartAndEndDates($oDate);
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']);
$firstIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($aDates['start']);
$startDate = $aDates['start']->format('%Y-%m-%d %H:%M:%S');
$endDate = $aDates['start']->format('%Y-%m-%d %H:%M:%S');
$doDIA = OA_Dal::factoryDO('data_intermediate_ad');
$aDIAs = DataGenerator::generate($doDIA, 4);
$doDIA = OA_Dal::staticGetDO('data_intermediate_ad', $aDIAs[0]);
$startDate = $aDates['start']->format('%Y-%m-%d %H:%M:%S');
$endDate = $aDates['start']->format('%Y-%m-%d %H:%M:%S');
$doDIA->date_time = $startDate;
$doDIA->interval_start = $startDate;
$doDIA->interval_end = $endDate;
$doDIA->operation_interval = $aConf['maintenance']['operationInterval'];
$doDIA->operation_interval_id = $firstIntervalID;
$doDIA->zone_id = 1;
$doDIA->ad_id = 1;
$doDIA->impressions = 4000;
$doDIA->update();
// Insert forcast for the (N - 2) OI
// for two different ads in this OI
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']);
$secondIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($aDates['start']);
$startDate = $aDates['start']->format('%Y-%m-%d %H:%M:%S');
$endDate = $aDates['start']->format('%Y-%m-%d %H:%M:%S');
$doDIA = OA_Dal::staticGetDO('data_intermediate_ad', $aDIAs[1]);
$doDIA->date_time = $startDate;
$doDIA->interval_start = $startDate;
$doDIA->interval_end = $endDate;
$doDIA->operation_interval = $aConf['maintenance']['operationInterval'];
$doDIA->operation_interval_id = $secondIntervalID;
$doDIA->zone_id = 1;
$doDIA->ad_id = 1;
$doDIA->impressions = 4990;
$doDIA->update();
$doDIA = OA_Dal::staticGetDO('data_intermediate_ad', $aDIAs[2]);
$doDIA->date_time = $startDate;
$doDIA->interval_start = $startDate;
$doDIA->interval_end = $endDate;
$doDIA->operation_interval = $aConf['maintenance']['operationInterval'];
$doDIA->operation_interval_id = $secondIntervalID;
$doDIA->zone_id = 1;
$doDIA->ad_id = 2;
$doDIA->impressions = 10;
$doDIA->update();
// Insert forcast for the second previous operation interval, but
// one week ago (so it should not be in the result set)
$oNewDate = new Date();
$oNewDate->copy($aDates['start']);
$oNewDate->subtractSeconds(SECONDS_PER_WEEK);
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oNewDate);
$intervalID = OX_OperationInterval::convertDateToOperationIntervalID($aDates['start']);
$startDate = $aDates['start']->format('%Y-%m-%d %H:%M:%S');
$endDate = $aDates['start']->format('%Y-%m-%d %H:%M:%S');
$doDIA = OA_Dal::staticGetDO('data_intermediate_ad', $aDIAs[3]);
$doDIA->date_time = $startDate;
$doDIA->interval_start = $startDate;
$doDIA->interval_end = $endDate;
$doDIA->operation_interval = $aConf['maintenance']['operationInterval'];
$doDIA->operation_interval_id = $intervalID;
$doDIA->zone_id = 1;
$doDIA->ad_id = 1;
$doDIA->impressions = 1000;
$doDIA->update();
//.........这里部分代码省略.........
开发者ID:Spark-Eleven,项目名称:revive-adserver,代码行数:101,代码来源:Priority_getPreviousWeekZoneForcastImpressions.dal.test.php
示例14: test_getAdImpressions
/**
* A method to test the _getAdImpressions() method.
*
* Test 1: Test with invalid parameters, and ensure that zero impressions are
* allocated.
* Test 2: Test with an advertisement that is currently blocked, and ensure
* that zero impressions are allocated.
* Test 3: Test with an advertisement that is not currently blocked, but with
* no impressions in the cumulative zone forecast, and ensure that
* zero impressions are allocated.
* Test 4: Test with a simple, single operation interval cumulative zone forecast,
* and a blocking delivery limitation, and ensure that the correct number
* of impressions are allocated.
* Test 5: Test with a simple, even operation interval cumulative zone forecast,
* and a blocking delivery limitation, and ensure that the correct number
* of impressions are allocated.
* Test 6: Test with an uneven operation interval cumulative zone forecast, and
* a blocking delivery limitation, and ensure that the correct number of
* impressions are allocated.
*/
function test_getAdImpressions()
{
$aConf =& $GLOBALS['_MAX']['CONF'];
$aConf['maintenance']['operationInterval'] = 60;
Mock::generatePartial('OA_Maintenance_Priority_Ad', 'PartialMockOA_Maintenance_Priority_Ad', array('getDeliveryLimitations'));
Mock::generatePartial('OA_Maintenance_Priority_AdServer_Task_GetRequiredAdImpressionsLifetime', 'PartialMockOA_Maintenance_Priority_AdServer_Task_GetRequiredAdImpressionsLifetime', array('_getCumulativeZoneForecast'));
// Test 1
$oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1, 'weight' => 1, 'status' => OA_ENTITY_STATUS_RUNNING, 'type' => 'sql'));
$totalRequiredAdImpressions = 10;
$oDate = new Date();
$oCampaignExpiryDate = new Date();
$oGetRequiredAdImpressionsLifetime =& $this->_getCurrentTask();
$oDeliveryLimitaions = new OA_Maintenance_Priority_DeliveryLimitation(null);
$aAdZones = array();
$result = $oGetRequiredAdImpressionsLifetime->_getAdImpressions('foo', $totalRequiredAdImpressions, $oDate, $oCampaignExpiryDate, $oDeliveryLimitaions, $aAdZones);
$this->assertEqual($result, 0);
$result = $oGetRequiredAdImpressionsLifetime->_getAdImpressions($oAd, 'foo', $oDate, $oCampaignExpiryDate, $oDeliveryLimitaions, $aAdZones);
$this->assertEqual($result, 0);
$result = $oGetRequiredAdImpressionsLifetime->_getAdImpressions($oAd, $totalRequiredAdImpressions, 'foo', $oCampaignExpiryDate, $oDeliveryLimitaions, $aAdZones);
$this->assertEqual($result, 0);
$result = $oGetRequiredAdImpressionsLifetime->_getAdImpressions($oAd, $totalRequiredAdImpressions, $oDate, 'foo', $oDeliveryLimitaions, $aAdZones);
$this->assertEqual($result, 0);
$result = $oGetRequiredAdImpressionsLifetime->_getAdImpressions($oAd, $totalRequiredAdImpressions, $oDate, $oCampaignExpiryDate, 'foo', $aAdZones);
$this->assertEqual($result, 0);
$result = $oGetRequiredAdImpressionsLifetime->_getAdImpressions($oAd, $totalRequiredAdImpressions, $oDate, $oCampaignExpiryDate, $oDeliveryLimitaions, 'foo');
$this->assertEqual($result, 0);
// Test 2
$oAd = new PartialMockOA_Maintenance_Priority_Ad($this);
$aParam = array('ad_id' => 1, 'weight' => 1, 'status' => OA_ENTITY_STATUS_RUNNING, 'type' => 'sql');
$oAd->setReturnValue('getDeliveryLimitations', array(array('ad_id' => 1, 'logical' => 'and', 'type' => 'deliveryLimitations:Time:Hour', 'comparison' => '!~', 'data' => '12', 'executionorder' => 0)));
$oAd->OA_Maintenance_Priority_Ad($aParam);
$totalRequiredAdImpressions = 120;
$oDate = new Date('2006-02-15 12:07:01');
$oCampaignExpiryDate = new Date('2006-12-15 23:59:59');
$oGetRequiredAdImpressionsLifetime =& $this->_getCurrentTask();
$oDeliveryLimitaions = new OA_Maintenance_Priority_DeliveryLimitation($oAd->getDeliveryLimitations());
$aAdZones = array(array('zone_id' => 1));
$result = $oGetRequiredAdImpressionsLifetime->_getAdImpressions($oAd, $totalRequiredAdImpressions, $oDate, $oCampaignExpiryDate, $oDeliveryLimitaions, $aAdZones);
$this->assertEqual($result, 0);
// Test 3
$oAd = new PartialMockOA_Maintenance_Priority_Ad($this);
$aParam = array('ad_id' => 1, 'weight' => 1, 'status' => OA_ENTITY_STATUS_RUNNING, 'type' => 'sql');
$oAd->setReturnValue('getDeliveryLimitations', array(array('ad_id' => 1, 'logical' => 'and', 'type' => 'deliveryLimitations:Time:Hour', 'comparison' => '!~', 'data' => '15', 'executionorder' => 0)));
$oAd->OA_Maintenance_Priority_Ad($aParam);
$totalRequiredAdImpressions = 110;
$oDate = new Date('2006-02-15 12:07:01');
$oCampaignExpiryDate = new Date('2006-02-15 23:59:59');
$oGetRequiredAdImpressionsLifetime = new PartialMockOA_Maintenance_Priority_AdServer_Task_GetRequiredAdImpressionsLifetime($this);
$oGetRequiredAdImpressionsLifetime->setReturnValue('_getCumulativeZoneForecast', array());
$oGetRequiredAdImpressionsLifetime->OA_Maintenance_Priority_AdServer_Task_GetRequiredAdImpressionsLifetime();
$oDeliveryLimitaions = new OA_Maintenance_Priority_DeliveryLimitation($oAd->getDeliveryLimitations());
$aAdZones = array(array('zone_id' => 1));
$result = $oGetRequiredAdImpressionsLifetime->_getAdImpressions($oAd, $totalRequiredAdImpressions, $oDate, $oCampaignExpiryDate, $oDeliveryLimitaions, $aAdZones);
$this->assertEqual($result, 0);
// Test 4
$oAd = new PartialMockOA_Maintenance_Priority_Ad($this);
$aParam = array('ad_id' => 1, 'weight' => 1, 'status' => OA_ENTITY_STATUS_RUNNING, 'type' => 'sql');
$oAd->setReturnValue('getDeliveryLimitations', array(array('ad_id' => 1, 'logical' => 'and', 'type' => 'deliveryLimitations:Time:Hour', 'comparison' => '!~', 'data' => '15', 'executionorder' => 0)));
$oAd->OA_Maintenance_Priority_Ad($aParam);
$totalRequiredAdImpressions = 110;
$oDate = new Date('2006-02-15 12:07:01');
$oCampaignExpiryDate = new Date('2006-02-15 23:59:59');
$oGetRequiredAdImpressionsLifetime = new PartialMockOA_Maintenance_Priority_AdServer_Task_GetRequiredAdImpressionsLifetime($this);
$aCumulativeZoneForecast = array();
$intervalID = OX_OperationInterval::convertDateToOperationIntervalID(new Date('2006-02-15 12:00:01'));
$aCumulativeZoneForecast[$intervalID] = 50;
$aCumulativeZoneForecast = $this->_fillForecastArray($aCumulativeZoneForecast);
$oGetRequiredAdImpressionsLifetime->setReturnValue('_getCumulativeZoneForecast', $aCumulativeZoneForecast);
$oGetRequiredAdImpressionsLifetime->OA_Maintenance_Priority_AdServer_Task_GetRequiredAdImpressionsLifetime();
$oDeliveryLimitaions = new OA_Maintenance_Priority_DeliveryLimitation($oAd->getDeliveryLimitations());
$remainingOIs = OX_OperationInterval::getIntervalsRemaining($oDate, $oCampaignExpiryDate);
$oDeliveryLimitaions->getActiveAdOperationIntervals($remainingOIs, $oDate, $oCampaignExpiryDate);
$aAdZones = array(array('zone_id' => 1));
$result = $oGetRequiredAdImpressionsLifetime->_getAdImpressions($oAd, $totalRequiredAdImpressions, $oDate, $oCampaignExpiryDate, $oDeliveryLimitaions, $aAdZones);
$this->assertEqual($result, 110);
// Test 5
$oAd = new PartialMockOA_Maintenance_Priority_Ad($this);
$aParam = array('ad_id' => 1, 'weight' => 1, 'status' => OA_ENTITY_STATUS_RUNNING, 'type' => 'sql');
$oAd->setReturnValue('getDeliveryLimitations', array(array('ad_id' => 1, 'logical' => 'and', 'type' => 'deliveryLimitations:Time:Hour', 'comparison' => '!~', 'data' => '15', 'executionorder' => 0)));
$oAd->OA_Maintenance_Priority_Ad($aParam);
//.........这里部分代码省略.........
示例15: run
//.........这里部分代码省略.........
OA::debug($message, PEAR_LOG_DEBUG);
$pruneResult = $aSummariseComponents[$statisticsTable][$componentClassName]->pruneBucket($aDates['end'], $aDates['start']);
if (PEAR::isError($pruneResult)) {
// Oh noz! The bucket data could not be pruned, and this is
// critical - if we can't prune the data, we'll end up double
// counting, so exit with a critical error...
$message = " ERROR: Could not prune aggregate bucket data from the '" . $aSummariseComponents[$statisticsTable][$componentClassName]->getBucketName() . "' bucket table";
OA::debug($message, PEAR_LOG_CRIT);
$message = " Error message was: {$pruneResult->message}";
OA::debug($message, PEAR_LOG_CRIT);
$message = " Aborting maintenance execution";
OA::debug($message, PEAR_LOG_CRIT);
exit;
} else {
$message = " - Pruned {$pruneResult} row(s)";
OA::debug($message, PEAR_LOG_DEBUG);
}
}
}
}
}
// Prepare arrays of all of the migration maps of aggregate migrations
$aRunComponents = $this->_prepareMaps($aSummariseComponents, 'aggregate');
// Run each migration map by statistics table
foreach ($aRunComponents as $statisticsTable => $aMaps) {
$aBucketTables = array();
foreach ($aMaps as $aMap) {
$aBucketTables[] = $aMap['bucketTable'];
}
foreach ($this->aRunDates as $aDates) {
$aExtras = array();
// Is this the data_intermeidate_ad statistics table? It's special!
if ($statisticsTable == $aConf['table']['prefix'] . 'data_intermediate_ad') {
$aExtras = array('operation_interval' => $aConf['maintenance']['operationInterval'], 'operation_interval_id' => OX_OperationInterval::convertDateToOperationIntervalID($aDates['start']), 'interval_start' => $oDal->oDbh->quote($aDates['start']->format('%Y-%m-%d %H:%M:%S'), 'timestamp') . $oDal->timestampCastString, 'interval_end' => $oDal->oDbh->quote($aDates['end']->format('%Y-%m-%d %H:%M:%S'), 'timestamp') . $oDal->timestampCastString, 'creative_id' => 0, 'updated' => $oDal->oDbh->quote($oNowDate->format('%Y-%m-%d %H:%M:%S'), 'timestamp') . $oDal->timestampCastString);
}
$message = "- Migrating aggregate bucket data from the '" . implode("', '", $aBucketTables) . "' bucket table(s)";
OA::debug($message, PEAR_LOG_DEBUG);
$message = " to the '{$statisticsTable}' table, for operation interval range";
OA::debug($message, PEAR_LOG_DEBUG);
$message = ' ' . $aDates['start']->format('%Y-%m-%d %H:%M:%S') . ' ' . $aDates['start']->tz->getShortName() . ' to ' . $aDates['end']->format('%Y-%m-%d %H:%M:%S') . ' ' . $aDates['end']->tz->getShortName();
OA::debug($message, PEAR_LOG_DEBUG);
$result = $oDal->summariseBucketsAggregate($statisticsTable, $aMaps, $aDates, $aExtras);
if (PEAR::isError($result)) {
// Oh noz! The bucket data could not be migrated
// Tell the user all about it, but then just keep on truckin'...
$message = " ERROR: Could not migrate aggregate bucket data from the '" . implode("', '", $aBucketTables) . "' bucket table(s)";
OA::debug($message, PEAR_LOG_ERR);
$message = " Error message was: {$result->message}";
OA::debug($message, PEAR_LOG_ERR);
} else {
$message = " - Migrated {$result} row(s)";
OA::debug($message, PEAR_LOG_DEBUG);
foreach ($aMaps as $componentClassName => $aMap) {
$pruneResult = $aSummariseComponents[$statisticsTable][$componentClassName]->pruneBucket($aDates['end'], $aDates['start']);
if (PEAR::isError($pruneResult)) {
// Oh noz! The bucket data could not be pruned, and this is
// critical - if we can't prune the data, we'll end up double
// counting, so exit with a critical error...
$message = " ERROR: Could not prune aggregate bucket data from the '" . $aSummariseComponents[$statisticsTable][$componentClassName]->getBucketName() . "' bucket table";
OA::debug($message, PEAR_LOG_CRIT);
$message = " Error message was: {$pruneResult->message}";
OA::debug($message, PEAR_LOG_CRIT);
$message = " Aborting maintenance execution";
OA::debug($message, PEAR_LOG_CRIT);
exit;
} else {