本文整理汇总了PHP中OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates方法的典型用法代码示例。如果您正苦于以下问题:PHP OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates方法的具体用法?PHP OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates怎么用?PHP OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OX_OperationInterval
的用法示例。
在下文中一共展示了OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: run
/**
* A method to run distributed maintenance.
*/
function run()
{
if (empty($GLOBALS['_MAX']['CONF']['lb']['enabled'])) {
OA::debug('Distributed stats disabled, not running Maintenance Distributed Engine', PEAR_LOG_INFO);
return;
}
if (!empty($GLOBALS['_MAX']['CONF']['rawDatabase'])) {
$GLOBALS['_MAX']['CONF']['database'] = $GLOBALS['_MAX']['CONF']['rawDatabase'] + $GLOBALS['_MAX']['CONF']['database'];
OA::debug('rawDatabase functionality is being used, switching settings', PEAR_LOG_INFO);
}
$oLock =& OA_DB_AdvisoryLock::factory();
if (!$oLock->get(OA_DB_ADVISORYLOCK_DISTRIBUTED)) {
OA::debug('Maintenance Distributed Engine Already Running', PEAR_LOG_INFO);
return;
}
OA::debug('Running Maintenance Distributed Engine', PEAR_LOG_INFO);
// Attempt to increase PHP memory
OX_increaseMemoryLimit(OX_getMinimumRequiredMemory('maintenance'));
// Ensure the current time is registered with the OA_ServiceLocator
$oServiceLocator =& OA_ServiceLocator::instance();
$oNow =& $oServiceLocator->get('now');
if (!$oNow) {
// Record the current time, and register with the OA_ServiceLocator
$oNow = new Date();
$oServiceLocator->register('now', $oNow);
}
OA::debug(' - Current time is ' . $oNow->format('%Y-%m-%d %H:%M:%S') . ' ' . $oNow->tz->getShortName(), PEAR_LOG_DEBUG);
// Get the components of the deliveryLog extension
$aBuckets = OX_Component::getComponents('deliveryLog');
// Copy buckets' records with "interval_start" up to and including previous OI start,
// and then prune the data processed
$aPreviousOperationIntervalDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oNow);
OA::debug(' - Will process data for all operation intervals before and up to start', PEAR_LOG_DEBUG);
OA::debug(' time of ' . $aPreviousOperationIntervalDates['start']->format('%Y-%m-%d %H:%M:%S') . ' ' . $aPreviousOperationIntervalDates['start']->tz->getShortName(), PEAR_LOG_DEBUG);
foreach ($aBuckets as $sBucketName => $oBucketClass) {
if ($oBucketClass->testStatisticsMigration($oBucketClass->getStatisticsMigration())) {
$oBucketClass->processBucket($aPreviousOperationIntervalDates['start']);
$oBucketClass->pruneBucket($aPreviousOperationIntervalDates['start']);
} else {
OA::debug(' - Skipping ' . $sBucketName, PEAR_LOG_DEBUG);
}
}
$oLock->release();
OA::debug('Maintenance Distributed Engine Completed', PEAR_LOG_INFO);
}
示例2: testConvertDateToPreviousOperationIntervalStartAndEndDates
/**
* A method to test the convertDateToPreviousOperationIntervalStartAndEndDates() method.
*/
function testConvertDateToPreviousOperationIntervalStartAndEndDates()
{
// 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');
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($date, 60);
$this->assertEqual($aDates['start'], new Date('2004-08-07 23:00:00'));
$this->assertEqual($aDates['end'], new Date('2004-08-07 23:59:59'));
// Test the same date, but with an operation interval of 30 minutes
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($date, 30);
$this->assertEqual($aDates['start'], new Date('2004-08-08 00:00:00'));
$this->assertEqual($aDates['end'], new Date('2004-08-08 00:29:59'));
}
示例3: 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
示例4: 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();
}
示例5: array
/**
* A method to get the most recent details of contract campaign creative delivery
* for a given list of creative/zone pairs set to deliver in the current
* operation interval. Normally, the data will be retrieved from the previous
* operation interval, but if no data exists for that creative/zone pair, then the
* next previous operation interval will be tried, and so on, up to a limit
* of MAX_PREVIOUS_AD_DELIVERY_INFO_LIMIT minutes (default is one week).
*
* - Requires that a current day/time (as a Date object) be registered
* with the OA_ServiceLocator (as "now").
*
* - Ignores creative ID 0 and zone ID 0 items, as these are reserved for
* direct selection, which is considered to be outside the process of
* priority compensation calculations (even though priority values for
* all contract campaign creatives are calculated and stored for the
* zone ID 0).
*
* Note: The logic of this method seems a little convoluted, and it is.
* However, it needs to be. The reason being:
*
* - If a contract campaign creative delivered in the previous operation interval,
* then it should have had a priority set in ad_zone_assoc (that's how OpenX
* knows to deliver contract campiang creatives, natch!). This should be the most
* recent entry in data_summary_ad_zone_assoc. So, the first step is to get the
* data for all contract campiang creatives that have delivered in the previous
* OI, and the associated prioritisation data.
* - If a contract campaign creative did not deliver, the prioritisation data set
* in the previous OI is still needed anyway (as it might have been *supposed*
* to deliver), so the second step is to get those creatives that had
* prioiritisation data set in the previous OI, but did not deliver.
* - Finally, as some creatives are limited by hour (for example), we want to
* to be able to get past prioritisation data for creatives that were
* disabled in the last OI, so, we need to look for creative/zone pairs
* that have not yet been found, and get BOTH the prioritisation AND the
* delivery data from the last OI when the creatives were active in the
* zones.
*
* This is why the method uses a complex, 3 step process!
*
* @access public
* @param array $aCurrentZones An array of Zones, indexed by Zone ID, with each
* Zone containing the Advert objects that are linked
* to deliver in the zone, in the current operation
* interval.
* @return mixed An array of arrays of arrays, each one representing a set of
* ad/zone delivery information, indexed by ad ID and zone ID.
* Each sub-sub array, if present, has the format:
* array (
* 'ad_id' => integer
* 'zone_id' => integer
* 'required_impressions' => integer
* 'requested_impressions' => integer
* 'priority_factor' => double
* 'past_zone_traffic_fraction' => double
* 'impressions' => integer
* )
* Returns false when the current date/time is not set in the
* OA_ServiceLocator.
*/
function &getPreviousAdDeliveryInfo($aCurrentZones)
{
OA::debug(" - Getting details of previous creative/zone delivery", PEAR_LOG_DEBUG);
$aConf = $GLOBALS['_MAX']['CONF'];
$oServiceLocator =& OA_ServiceLocator::instance();
$oDate =& $oServiceLocator->get('now');
if (!$oDate) {
return false;
}
$aAds = array();
$aZones = array();
$aZonesAds = array();
$aPastDeliveryResult = array();
$aPastPriorityResult = array();
$aNonDeliveringPastPriorityResult = array();
$aFinalResult = array();
// Obtain the earliest existing interval_start date found in the
// data_summary_ad_zone_assoc table
$table = $this->_getTablename('data_summary_ad_zone_assoc');
$query = "\n SELECT\n interval_start AS interval_start\n FROM\n {$table}\n ORDER BY\n interval_start\n LIMIT\n 1";
$rc = $this->oDbh->query($query);
if (!PEAR::isError($rc) && $rc->numRows() == 1) {
$aRow = $rc->fetchRow();
$oEarliestPastPriorityRecordDate = new Date($aRow['interval_start']);
// Create a new date that is the limit number of minutes ago
$oLimitDate = new Date();
$oLimitDate->copy($oDate);
$oLimitDate->subtractSeconds(MAX_PREVIOUS_AD_DELIVERY_INFO_LIMIT * 60);
// Is the earliest date before this date?
if ($oEarliestPastPriorityRecordDate->before($oLimitDate)) {
// Use the limit date instead
$oEarliestPastPriorityRecordDate = new Date();
$oEarliestPastPriorityRecordDate->copy($oLimitDate);
}
}
// Obtain the operation interval ID, and the start and end dates of the previous
// operation interval
$currentOperationIntervalID = OX_OperationInterval::convertDateToOperationIntervalID($oDate);
$previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($currentOperationIntervalID);
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate);
// Obtain the ad ID, zone ID and number of impressions delivered for every ad/zone
//.........这里部分代码省略.........
示例6: _getEarliestLoggedDeliveryData
/**
* A private method to calculate an equivalent "last time that maintenance
* statistics was run" value from logged delivery data, if possible.
*
* Enables the MSE process to be kick-started for new installations, where
* the MSE has not been run before; but without causing the MSE to run
* until the installation is actually logging data.
*
* @access private
* @param integer $type The update type that "occurred" - that is,
* OX_DAL_MAINTENANCE_STATISTICS_UPDATE_OI if the required
* calculated "update date" needs to be in terms of the
* operation interval; or
* OX_DAL_MAINTENANCE_STATISTICS_UPDATE_HOUR if the
* required calculated "update date" needs to be in terms
* of the hour.
* @return Date A Date representing the end of the operation interval
* which is before the date found of the earliest known
* logged delivery data record. Returns null if no logged
* delivery data can be located.
*/
function _getEarliestLoggedDeliveryData($type)
{
// Obtain all components from the deliveryLog plugin group
$aDeliveryLogComponents = OX_Component::getComponents('deliveryLog');
// Are there any components?
if (empty($aDeliveryLogComponents)) {
return null;
}
// Call the "getEarliestLoggedDataDate()" method on each
// component, to find out what is the date of the earliest
// logged data that the component knows about
$aResult = OX_Component::callOnComponents($aDeliveryLogComponents, 'getEarliestLoggedDataDate');
if ($aResults === false) {
return null;
}
// Iterate over the results from above, and see if any of
// the components returned valid dates, and if so, which
// of the results is the earliest
$oDate = null;
foreach ($aResult as $oComponentDate) {
if (is_a($oComponentDate, 'Date')) {
// Logged data was located! Is this date earlier than
// any previous "earliest" logged delivery data?
if (is_null($oDate)) {
$oDate = new Date();
$oDate->copy($oComponentDate);
} else {
if ($oComponentDate->before($oDate)) {
$oDate->copy($oComponentDate);
}
}
}
}
// Was a date found?
if (is_null($oDate) || !is_a($oDate, 'Date')) {
return null;
}
// Convert the located earliest logged data date into either the
// end of the previous operation interval, or the end of the previous
// hour, depending on the required type
if ($type == OX_DAL_MAINTENANCE_STATISTICS_UPDATE_OI) {
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate);
} else {
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate, 60);
}
// Return the date
return $aDates['end'];
}
示例7: getRecentZones
/**
* A method to get all zones that have, within the last week, Zone Impression
* Forecast data in the data_summary_zone_impression_history table that is
* based on the default forecast, from a given list of zone IDs.
*
* @param array $aZoneIDs An array of zone IDs.
* @param PEAR::Date $oNowDate The current date/time.
* @return mixed Either:
* - An array of zone IDs, or
* - A PEAR::Error.
*/
function getRecentZones($aZoneIDs, $oNowDate)
{
$aResult = array();
// Check parameters
if (!is_array($aZoneIDs) || is_array($aZoneIDs) && count($aZoneIDs) == 0) {
return $aResult;
}
foreach ($aZoneIDs as $zoneId) {
if (!is_integer($zoneId) || $zoneId < 0) {
return $aResult;
}
}
if (!is_a($oNowDate, 'Date')) {
return $aResult;
}
// Convert the "now" date into a date range of the last week
$aUpperDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oNowDate);
$oLowerDate = new Date();
$oLowerDate->copy($aUpperDates['start']);
$oLowerDate->subtractSeconds(SECONDS_PER_WEEK - OX_OperationInterval::secondsPerOperationInterval());
// Select those zone IDs where data does exist
$table = $this->_getTablename('data_summary_zone_impression_history');
$query = "\n SELECT DISTINCT\n zone_id\n FROM\n {$table}\n WHERE\n zone_id IN (" . implode(', ', $aZoneIDs) . ")\n AND\n est = 1\n AND\n interval_start > " . $this->oDbh->quote($oLowerDate->format('%Y-%m-%d %H:%M:%S'), 'timestamp') . "\n AND\n interval_end <= " . $this->oDbh->quote($aUpperDates['start']->format('%Y-%m-%d %H:%M:%S'), 'timestamp');
$rc = $this->oDbh->query($query);
if (PEAR::isError($rc)) {
return $rc;
}
// Add zones found to the result array
while ($aRow = $rc->fetchRow()) {
$aResult[] = $aRow['zone_id'];
}
return $aResult;
}
示例8: sendCampaignImpendingExpiryEmail
/**
* @param $oDate
* @param $campaignId
* @return int Number of emails sent
*/
function sendCampaignImpendingExpiryEmail($oDate, $campaignId)
{
$aConf = $GLOBALS['_MAX']['CONF'];
global $date_format;
$oPreference = new OA_Preferences();
if (!isset($this->aAdminCache)) {
// Get admin account ID
$adminAccountId = OA_Dal_ApplicationVariables::get('admin_account_id');
// Get admin prefs
$adminPrefsNames = $this->_createPrefsListPerAccount(OA_ACCOUNT_ADMIN);
$aAdminPrefs = $oPreference->loadAccountPreferences($adminAccountId, $adminPrefsNames, OA_ACCOUNT_ADMIN);
// Get admin users
$aAdminUsers = $this->getAdminUsersLinkedToAccount();
// Store admin cache
$this->aAdminCache = array($aAdminPrefs, $aAdminUsers);
} else {
// Retrieve admin cache
list($aAdminPrefs, $aAdminUsers) = $this->aAdminCache;
}
$aPreviousOIDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate);
$aPreviousOIDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aPreviousOIDates['start']);
$doCampaigns = OA_Dal::staticGetDO('campaigns', $campaignId);
if (!$doCampaigns) {
return 0;
}
$aCampaign = $doCampaigns->toArray();
if (!isset($this->aClientCache[$aCampaign['clientid']])) {
$doClients = OA_Dal::staticGetDO('clients', $aCampaign['clientid']);
// Add advertiser linked users
$aLinkedUsers['advertiser'] = $this->getUsersLinkedToAccount('clients', $aCampaign['clientid']);
// Add advertiser prefs
$advertiserPrefsNames = $this->_createPrefsListPerAccount(OA_ACCOUNT_ADVERTISER);
$aPrefs['advertiser'] = $oPreference->loadAccountPreferences($doClients->account_id, $advertiserPrefsNames, OA_ACCOUNT_ADVERTISER);
if (!isset($aAgencyCache[$doClients->agencyid])) {
// Add manager linked users
$doAgency = OA_Dal::staticGetDO('agency', $doClients->agencyid);
$aLinkedUsers['manager'] = $this->getUsersLinkedToAccount('agency', $doClients->agencyid);
// Add manager preferences
$managerPrefsNames = $this->_createPrefsListPerAccount(OA_ACCOUNT_MANAGER);
$aPrefs['manager'] = $oPreference->loadAccountPreferences($doAgency->account_id, $managerPrefsNames, OA_ACCOUNT_MANAGER);
// Get agency "From" details
$aAgencyFromDetails = $this->_getAgencyFromDetails($doAgency->agencyid);
// Store in the agency cache
$this->aAgencyCache = array($doClients->agencyid => array($aLinkedUsers['manager'], $aPrefs['manager'], $aAgencyFromDetails));
} else {
// Retrieve agency cache
list($aLinkedUsers['manager'], $aPrefs['manager'], $aAgencyFromDetails) = $this->aAgencyCache[$doClients->agencyid];
}
// Add admin linked users and preferences
$aLinkedUsers['admin'] = $aAdminUsers;
$aPrefs['admin'] = $aAdminPrefs;
// Create a linked user 'special' for the advertiser that will take the admin preferences for advertiser
$aLinkedUsers['special']['advertiser'] = $doClients->toArray();
$aLinkedUsers['special']['advertiser']['contact_name'] = $aLinkedUsers['special']['advertiser']['contact'];
$aLinkedUsers['special']['advertiser']['email_address'] = $aLinkedUsers['special']['advertiser']['email'];
$aLinkedUsers['special']['advertiser']['language'] = '';
$aLinkedUsers['special']['advertiser']['user_id'] = 0;
// Check that every user is not going to receive more than one email if they
// are linked to more than one account
$aLinkedUsers = $this->_deleteDuplicatedUser($aLinkedUsers);
// Create the linked special user preferences from the admin preferences
// the special user is the client that doesn't have preferences in the database
$aPrefs['special'] = $aPrefs['admin'];
$aPrefs['special']['warn_email_special'] = $aPrefs['special']['warn_email_advertiser'];
$aPrefs['special']['warn_email_special_day_limit'] = $aPrefs['special']['warn_email_advertiser_day_limit'];
$aPrefs['special']['warn_email_special_impression_limit'] = $aPrefs['special']['warn_email_advertiser_impression_limit'];
// Store in the client cache
$this->aClientCache = array($aCampaign['clientid'] => array($aLinkedUsers, $aPrefs, $aAgencyFromDetails));
} else {
// Retrieve client cache
list($aLinkedUsers, $aPrefs, $aAgencyFromDetails) = $this->aClientCache[$aCampaign['clientid']];
}
$copiesSent = 0;
foreach ($aLinkedUsers as $accountType => $aUsers) {
if ($accountType == 'special' || $accountType == 'advertiser') {
// Get the agency details and use them for emailing advertisers
$aFromDetails = $aAgencyFromDetails;
} else {
// Use the Admin details
$aFromDetails = '';
}
if ($aPrefs[$accountType]['warn_email_' . $accountType]) {
// Does the account type want warnings when the impressions are low?
if ($aPrefs[$accountType]['warn_email_' . $accountType . '_impression_limit'] > 0 && $aCampaign['views'] > 0) {
// Test to see if the placements impressions remaining are less than the limit
$dalCampaigns = OA_Dal::factoryDAL('campaigns');
$remainingImpressions = $dalCampaigns->getAdImpressionsLeft($aCampaign['campaignid']);
if ($remainingImpressions < $aPrefs[$accountType]['warn_email_' . $accountType . '_impression_limit']) {
// Yes, the placement will expire soon! But did the placement just reach
// the point where it is about to expire, or did it happen a while ago?
$previousRemainingImpressions = $dalCampaigns->getAdImpressionsLeft($aCampaign['campaignid'], $aPreviousOIDates['end']);
if ($previousRemainingImpressions >= $aPrefs[$accountType]['warn_email_' . $accountType . '_impression_limit']) {
// Yes! This is the operation interval that the boundary
// was crossed to the point where it's about to expire,
// so send that email, baby!
//.........这里部分代码省略.........
示例9: testGetPreviousAdDeliveryInfo
//.........这里部分代码省略.........
$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);
$previousOperationIntervalID = OX_OperationInterval::previousOperationIntervalID($previousOperationIntervalID);
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oDate);
$aDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($aDates['start']);
$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), 0);
$result =& $oMaxDalMaintenance->getPreviousAdDeliveryInfo($aZoneAdArray);
$this->assertEqual(count($result), 0);
$oDate =& $oServiceLocator->get('now');
DataGenerator::cleanUp();
$oServiceLocator->register('now', $oDate);
// Test 6
示例10: 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
示例11: testAdServer
//.........这里部分代码省略.........
$aTestTwoThree['priority_factor'] = 1;
// Initial priority run, factor starts at 1
$aTestTwoThree['history'][0] = array('operation_interval' => 60, 'operation_interval_id' => 85, 'interval_start' => '2005-06-15 13:00:00', 'interval_end' => '2005-06-15 13:59:59', 'required_impressions' => 12, 'requested_impressions' => 8, 'priority' => $aTestTwoThree['priority'], 'priority_factor' => $aTestTwoThree['priority_factor'], 'past_zone_traffic_fraction' => null);
$this->_assertPriority($aTestTwoThree);
$aTestThreeThree = array();
$aTestThreeThree['ad_id'] = 3;
$aTestThreeThree['zone_id'] = 3;
$aTestThreeThree['priority'] = 2 / 200;
// Constant, only priority_factor increases
$aTestThreeThree['priority_factor'] = 1;
// Initial priority run, factor starts at 1
$aTestThreeThree['history'][0] = array('operation_interval' => 60, 'operation_interval_id' => 85, 'interval_start' => '2005-06-15 13:00:00', 'interval_end' => '2005-06-15 13:59:59', 'required_impressions' => 3, 'requested_impressions' => 2, 'priority' => $aTestThreeThree['priority'], 'priority_factor' => $aTestThreeThree['priority_factor'], 'past_zone_traffic_fraction' => null);
$this->_assertPriority($aTestThreeThree);
$aTestThreeFour = array();
$aTestThreeFour['ad_id'] = 3;
$aTestThreeFour['zone_id'] = 4;
$aTestThreeFour['priority'] = 3 / 200;
// Constant, only priority_factor increases
$aTestThreeFour['priority_factor'] = 1;
// Initial priority run, factor starts at 1
$aTestThreeFour['history'][0] = array('operation_interval' => 60, 'operation_interval_id' => 85, 'interval_start' => '2005-06-15 13:00:00', 'interval_end' => '2005-06-15 13:59:59', 'required_impressions' => 3, 'requested_impressions' => 3, 'priority' => $aTestThreeFour['priority'], 'priority_factor' => $aTestThreeFour['priority_factor'], 'past_zone_traffic_fraction' => null);
$this->_assertPriority($aTestThreeFour);
// Test 1: Ensure that the values in the log_maintenance_priority table are correct
$this->_assertLogMaintenance(2, $oTest1BeforeUpdateDate, $oTest1AfterUpdateDate, 60, DAL_PRIORITY_UPDATE_ECPM);
// Insert data that indicates that the Maintenance Statistics Engine
// has recently updated the available stats, but don't insert any
// stats into the tables
$this->oServiceLocator =& OA_ServiceLocator::instance();
$startDate = new Date('2005-06-15 14:00:01');
$this->oServiceLocator->register('now', $startDate);
$oMaintenanceStatistics = new OX_Maintenance_Statistics();
$oMaintenanceStatistics->updateIntermediate = true;
$oMaintenanceStatistics->updateFinal = true;
$aOiDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($startDate);
$oMaintenanceStatistics->oUpdateIntermediateToDate = $aOiDates['end'];
$oMaintenanceStatistics->oUpdateFinalToDate = $aOiDates['end'];
$this->oServiceLocator->register('Maintenance_Statistics_Controller', $oMaintenanceStatistics);
$oLogCompletion = new OX_Maintenance_Statistics_Task_LogCompletion();
$oLogCompletion->run();
// Test 2: Set "previous" date for the MPE run
$oPreviousDate = new Date('2005-06-15 13:01:01');
$previousOperationIntervalID = $currentOperationIntervalID;
// Test 2: Set "current" date for the MPE run
$oDate = new Date('2005-06-15 14:01:01');
$this->oServiceLocator->register('now', $oDate);
// Test 2: Prepare the MPE object
$oMaintenancePriority = new OA_Maintenance_Priority_AdServer();
// Test 2: Store the date before the MPE runs
$oTest2BeforeUpdateDate = new Date();
sleep(1);
// Ensure that next date is at least 1 second after above...
// Test 2: Run the MPE
$oMaintenancePriority->updatePriorities();
// Test 2: Store the date after the MPE runs
sleep(1);
// Ensure that next date is at least 1 second after above...
$oTest2AfterUpdateDate = new Date();
// Test 2: Ensure correct number of links in the ad_zone_assoc table
$this->assertEqual($this->_azaRows(), 7);
// 4 proper associations + 3 default with zone 0
// Test 2: Ensure correct number of links in the ad_zone_assoc table with priority > 0
$this->assertEqual($this->_azaRows(true), 7);
// Test 2: Ensure correct number of links in the data_summary_ad_zone_assoc table with priority > 0
$this->assertEqual($this->_dsazaRows(true), 14);
// Test 2: Ensure that the priorities in the ad_zone_assoc and data_summary_ad_zone_assoc
// tables are set correctly