function testDuplicate() { $GLOBALS['strCopyOf'] = 'Copy of '; $filename = 'test.gif'; $doBanners = OA_Dal::factoryDO('banners'); $doBanners->filename = $filename; $doBanners->storagetype = 'sql'; $doBanners->acls_updated = '2007-04-03 19:28:06'; $id1 = DataGenerator::generateOne($doBanners, true); $doBanners = OA_Dal::staticGetDO('banners', $id1); Mock::generatePartial('DataObjects_Banners', $mockBanners = 'DataObjects_Banners' . rand(), array('_imageDuplicate')); $doMockBanners = new $mockBanners($this); $doMockBanners->init(); $doMockBanners->setFrom($doBanners); $doMockBanners->bannerid = $doBanners->bannerid; // setFrom() doesn't copy primary key $doMockBanners->setReturnValue('_imageDuplicate', $filename); // make sure image was duplicated as well $doMockBanners->expectOnce('_imageDuplicate'); $id2 = $doMockBanners->duplicate(); // duplicate $doMockBanners->tally(); $this->assertNotEmpty($id2); $this->assertNotEqual($id1, $id2); $doBanners1 = OA_Dal::staticGetDO('banners', $id1); $doBanners2 = OA_Dal::staticGetDO('banners', $id2); // assert they are equal (but without comparing primary key) $this->assertNotEqualDataObjects($this->stripKeys($doBanners1), $this->stripKeys($doBanners2)); // Test that the only difference is their description $doBanners1->description = $doBanners2->description = null; $this->assertEqualDataObjects($this->stripKeys($doBanners1), $this->stripKeys($doBanners2)); }
function &staticGetApi($createDefaultManager = true) { $oApi =& $GLOBALS['_STATIC']['staticGetApi']; if (empty($oApi)) { $doAccounts = OA_Dal::factoryDO('accounts'); $doAccounts->account_type = OA_ACCOUNT_ADMIN; $adminAccountId = DataGenerator::generateOne($doAccounts); if ($createDefaultManager) { $doAgency = OA_Dal::factoryDO('agency'); $doAgency->name = 'Default Manager'; $agencyId = DataGenerator::generateOne($doAgency); $doAgency = OA_Dal::staticGetDO('agency', $agencyId); $managerAccountId = $doAgency->account_id; } $doUsers = OA_Dal::factoryDO('users'); $doUsers->username = '******' . md5(uniqid('', true)); $doUsers->password = md5('secret'); $doUsers->default_account_id = $createDefaultManager ? $managerAccountId : $adminAccountId; $userId = DataGenerator::generateOne($doUsers); $doAUA = OA_Dal::factoryDO('account_user_assoc'); $doAUA->account_id = $adminAccountId; $doAUA->user_id = $userId; DataGenerator::generateOne($doAUA); $oApi = new Mocked_OA_Api_Xmlrpc($doUsers->username, 'secret'); } return $oApi; }
/** * Links a campaign to the given tracker ID * * @param int $trackerId the ID of the tracker to link the campaign to. * @param int $campaignId the ID of the campaign to link to the tracker. * @param int $status optional connection status type, eg MAX_CONNECTION_STATUS_APPROVED. See constants.php. * if no status given, uses the tracker's default status. * @return boolean true on successful link, false on error. */ public function linkCampaign($trackerId, $campaignId, $status = null) { // Check the ID's are valid. if (!$this->idExists('trackers', $trackerId) || !$this->idExists('campaigns', $campaignId)) { return false; } $doCampaignsTrackers = OA_Dal::factoryDO('campaigns_trackers'); $doCampaignsTrackers->trackerid = $trackerId; $doCampaignsTrackers->campaignid = $campaignId; if ($doCampaignsTrackers->find()) { // Already linked. return true; } // Set the status if (!is_null($status)) { $doCampaignsTrackers->status = $status; } else { $oTracker = OA_Dal::staticGetDO('trackers', $trackerId); $doCampaignsTrackers->status = $oTracker->status; } if ($doCampaignsTrackers->insert()) { return true; } else { return false; } }
function testUpdateWhereOne() { $this->initTables(array('campaigns', 'trackers')); $doCampaigns = OA_Dal::factoryDO('campaigns'); $doCampaigns->campaignname = 'First'; $doCampaigns->views = 10; $campaignId1 = DataGenerator::generateOne($doCampaigns); $doCampaigns = OA_Dal::factoryDO('campaigns'); $doCampaigns->campaignname = 'Third'; $doCampaigns->views = 30; $campaignId2 = DataGenerator::generateOne($doCampaigns); $doCampaigns = OA_Dal::factoryDO('campaigns'); $doCampaigns->campaignname = 'Fifth'; $doCampaigns->views = 50; $campaignId3 = DataGenerator::generateOne($doCampaigns); $cUpdated = OA_DB_Sql::updateWhereOne('campaigns', 'campaignid', $campaignId2, array('campaignname' => 'Second', 'views' => 20)); $this->assertEqual(1, $cUpdated); $doCampaigns = OA_Dal::staticGetDO('campaigns', $campaignId2); $this->assertEqual('Second', $doCampaigns->campaignname); $this->assertEqual(20, $doCampaigns->views); $doCampaigns = OA_Dal::staticGetDO('campaigns', $campaignId1); $this->assertEqual('First', $doCampaigns->campaignname); $this->assertEqual('10', $doCampaigns->views); $aConf = $GLOBALS['_MAX']['CONF']; $this->oaTable->dropTable($aConf['table']['prefix'] . 'campaigns'); $this->oaTable->dropTable($aConf['table']['prefix'] . 'trackers'); }
/** * Tests the timestamps are updated correctly. * * Test 1: Tests the current timestamp is inserted for a new image. * Test 2: Tests the timestamp is updated when an image is updated. * */ function testUpdate() { // Test 1 // Get the start time of the test $start = time(); sleep(1); // Insert an image $doImages = OA_Dal::factoryDO('images'); $doImages->filename = 'foo.jpg'; $doImages->contents = ''; DataGenerator::generateOne($doImages); // Get the image out of the DB $doImages = OA_Dal::staticGetDO('images', 'filename', 'foo.jpg'); // Check the timestamp is > time at start of test and <= current time // Deal with MySQL 4.0 timestamps if (preg_match('/^(\\d\\d\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)$/', $doImages->t_stamp, $m)) { $doImages->t_stamp = "{$m[1]}-{$m[2]}-{$m[3]} {$m[4]}:{$m[5]}:{$m[6]}"; } $actual = strtotime($doImages->t_stamp); $this->assertTrue($actual > $start && $actual <= time()); // Test 2 // Update the image $doImages->contents = '1'; sleep(1); $doImages->update(); // Get the image out of the DB $doImages = OA_Dal::staticGetDO('images', 'filename', 'foo.jpg'); $oldTime = $actual; // Deal with MySQL 4.0 timestamps if (preg_match('/^(\\d\\d\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)$/', $doImages->t_stamp, $m)) { $doImages->t_stamp = "{$m[1]}-{$m[2]}-{$m[3]} {$m[4]}:{$m[5]}:{$m[6]}"; } $actual = strtotime($doImages->t_stamp); $this->assertTrue($actual > $oldTime && $actual <= time()); }
/** * A method to retrieve all information about one advertiser from the database. * * @param int $advertiserId The advertiser ID. * @return mixed An associative array with a key for each database field, * or null if no result found. * * @todo Consider deprecating this method in favour of an object approach. */ function getAdvertiserDetails($advertiserId) { $doClients = OA_Dal::staticGetDO('clients', $advertiserId); if ($doClients) { return $doClients->toArray(); } return null; }
function testDuplicate() { $GLOBALS['strCopyOf'] = 'Copy of '; // create test channel $doChannel = OA_Dal::factoryDO('channel'); $doChannel->acls_updated = '2007-04-03 19:29:54'; $channelId = DataGenerator::generateOne($doChannel, true); // create test acls $doAcls = OA_Dal::factoryDO('acls_channel'); $doAcls->channelid = $channelId; $doAcls->type = 'Client:Ip'; $doAcls->comparison = '=='; $doAcls->data = '127.0.0.1'; $doAcls->executionorder = 1; $doAcls->insert(); $doAcls = OA_Dal::factoryDO('acls_channel'); $doAcls->channelid = $channelId; $doAcls->type = 'Client:Domain'; $doAcls->comparison = '=='; $doAcls->data = 'example.com'; $doAcls->executionorder = 2; $doAcls->insert(); // duplicate $newChannelId = OA_Dal::staticDuplicate('channel', $channelId); // retrieve original and duplicate channel $doChannel = OA_Dal::staticGetDO('channel', $channelId); $doNewChannel = OA_Dal::staticGetDO('channel', $newChannelId); // assert they are not equal including primary keys - name column should not match $this->assertNotEqualDataObjects($this->stripKeys($doChannel), $this->stripKeys($doNewChannel)); // assert they are equal excluding primary keys $doChannel->name = $doNewChannel->name = null; $this->assertEqualDataObjects($this->stripKeys($doChannel), $this->stripKeys($doNewChannel)); // retrieve acls for original and duplicate channel $doAcls = OA_Dal::factoryDO('acls_channel'); $doAcls->channelid = $channelId; $doAcls->orderBy('executionorder'); if ($doAcls->find()) { while ($doAcls->fetch()) { $aAcls[] = clone $doAcls; } } $doNewAcls = OA_Dal::factoryDO('acls_channel'); $doNewAcls->channelid = $newChannelId; $doNewAcls->orderBy('executionorder'); if ($doNewAcls->find()) { while ($doNewAcls->fetch()) { $aNewAcls[] = clone $doNewAcls; } } // iterate through acls ensuring they were properly copied if ($this->assertEqual(count($aAcls), count($aNewAcls))) { for ($x = 0; $x < count($aAcls); $x++) { $this->assertNotEqual($aAcls[$x]->channelid, $aNewAcls[$x]->channelid); $this->assertEqualDataObjects($this->stripKeys($aAcls[$x]), $this->stripKeys($aNewAcls[$x])); } } }
function testDuplicate() { // Insert a tracker with some default data. $doTrackers = OA_Dal::factoryDO('trackers'); $doTrackers->trackername = 'foo'; $doTrackers->clientid = 1; $doTrackers->clickwindow = 3600; $doTrackers->status = 4; $doTrackers->type = 1; $trackerId = DataGenerator::generateOne($doTrackers, true); // Insert a variable for the tracker $doVariables = OA_Dal::factoryDO('variables'); $doVariables->trackerid = $trackerId; $doVariables->name = 'bar'; $variableId = DataGenerator::generateOne($doVariables); // Link the tracker to a campaign $doCampaignTrackers = OA_Dal::factoryDO('campaigns_trackers'); $doCampaignTrackers->campaignid = 1; $doCampaignTrackers->trackerid = $trackerId; $campaignTrackerId = DataGenerator::generateOne($doCampaignTrackers); // Duplicate the tracker $doTrackers = OA_Dal::staticGetDO('trackers', $trackerId); $newTrackerId = $doTrackers->duplicate(); $this->assertNotEmpty($newTrackerId); // Get the two trackers $doNewTrackers = OA_Dal::staticGetDO('trackers', $newTrackerId); $this->assertTrue($doNewTrackers); $doTrackers = OA_Dal::staticGetDO('trackers', $trackerId); $this->assertTrue($doTrackers); // Assert the trackers are not equal, excluding the primary key $this->assertNotEqualDataObjects($this->stripKeys($doTrackers), $this->stripKeys($doNewTrackers)); // Assert the only difference in the trackers is their description $doTrackers->trackername = $doNewTrackers->trackername = null; $this->assertEqualDataObjects($this->stripKeys($doTrackers), $this->stripKeys($doNewTrackers)); // Get the two variables $doNewVariables = OA_Dal::staticGetDO('variables', 'trackerid', $newTrackerId); $this->assertTrue($doNewVariables); $doVariables = OA_Dal::staticGetDO('variables', $variableId); $this->assertTrue($doVariables); // Assert the variables are not equal, excluding the primary key $this->assertNotEqualDataObjects($this->stripKeys($doVariables), $this->stripKeys($doNewVariables)); // Assert the only difference in the variables is the trackers they are attached to $doVariables->trackerid = $doNewVariables->trackerid = null; $this->assertEqualDataObjects($this->stripKeys($doVariables), $this->stripKeys($doNewVariables)); // Get the two campaign tracker links $doNewCampaignTrackers = OA_Dal::staticGetDO('campaigns_trackers', 'trackerid', $newTrackerId); $this->assertTrue($doNewCampaignTrackers); $doCampaignTrackers = OA_Dal::staticGetDO('campaigns_trackers', $campaignTrackerId); $this->assertTrue($doCampaignTrackers); // Assert the campaign trackers are not equal, excluding the primary key $this->assertNotEqualDataObjects($this->stripKeys($doCampaignTrackers), $this->stripKeys($doNewCampaignTrackers)); // Assert the only difference in the campaign trackers is the trackers they are attached to $doCampaignTrackers->trackerid = $doNewCampaignTrackers->trackerid = null; $this->assertEqualDataObjects($this->stripKeys($doCampaignTrackers), $this->stripKeys($doNewCampaignTrackers)); DataGenerator::cleanUp(array('campaigns', 'campaigns_trackers', 'trackers', 'variables')); }
function OA_HeaderNavigation() { global $agencyid; if (OA_Permission::isAccount(OA_ACCOUNT_ADMIN)) { phpAds_PageHeader("agency-access"); $doAgency = OA_Dal::staticGetDO('agency', $agencyid); MAX_displayInventoryBreadcrumbs(array(array("name" => $doAgency->name)), "agency"); } else { phpAds_PageHeader("agency-user"); } }
/** * If the agency has set the logout URL in a database, returns this URL * (trimmed). * Otherwise, returns 'index.php'. * * @param string $agencyId * @return string Url for redirection after logout. */ function getLogoutUrl($agencyId) { $doAgency = null; if ($agencyId) { $doAgency = OA_Dal::staticGetDO('agency', $agencyId); } if ($doAgency && !empty($doAgency->logout_url)) { return trim($doAgency->logout_url); } return MAX::constructURL(MAX_URL_ADMIN, 'index.php'); }
/** * @param string $serialized_session_data * @param string $session_id * * @todo Use ANSI SQL syntax, such as an UPDATE/INSERT cycle. * @todo Push down REPLACE INTO into a MySQL-specific DAL. */ function storeSerializedSession($serialized_session_data, $session_id) { $doSession = OA_Dal::staticGetDO('session', $session_id); if ($doSession) { $doSession->sessiondata = $serialized_session_data; $doSession->update(); } else { $doSession = OA_Dal::factoryDO('session'); $doSession->sessionid = $session_id; $doSession->sessiondata = $serialized_session_data; $doSession->insert(); } }
function testAddConversion() { $day = '2007-04-04'; $hour = 17; $total_basket_value = 100.0; $creative_id = 4; $zone_id = 5; $bannerId = $this->aIds['banners'][0]; $dataIntermediateAdId = $this->aIds['dataIA'][0]; $result = $this->dalData_intermediate_ad->addConversion('+', $basketValue = 12, $numItems = 4, $bannerId, $creative_id, $zone_id, $day, $hour); $doData_intermediate_ad = OA_Dal::staticGetDO('data_intermediate_ad', $dataIntermediateAdId); $this->assertEqual($doData_intermediate_ad->total_basket_value, $total_basket_value + $basketValue); }
function testStaticGetDO() { // create test record $doBanners = OA_Dal::factoryDO('banners'); $doBanners->acls_updated = '2007-04-03 20:41:33'; $bannerId = DataGenerator::generateOne($doBanners); // Test that we retreived that record from database $doBanners = OA_Dal::staticGetDO('banners', $bannerId); $this->assertIsA($doBanners, 'DataObjects_Banners'); $this->assertEqual($doBanners->bannerid, $bannerId); // Test that false is returned if record doesn't exist $doBanners = OA_Dal::staticGetDO('banners', $id = 123); $this->assertFalse($doBanners); }
function testClearIntermediateAndSummaryTables() { $oStartDate = new Date('2006-05-09 13:00:00'); $oEndDate = new Date('2006-05-09 13:59:59'); $aTestDates = array(1 => array('start' => new Date('2006-05-09 13:10:00'), 'end' => new Date('2006-05-09 13:14:59')), 2 => array('start' => new Date('2006-05-09 12:00:00'), 'end' => new Date('2006-05-09 12:59:59')), 3 => array('start' => new Date('2006-05-09 13:55:00'), 'end' => new Date('2006-05-09 12:59:59'))); // Create some test data foreach ($aTestDates as $key => $aDates) { $doIntermediateAdConnection = OA_Dal::factoryDO('data_intermediate_ad_connection'); $doIntermediateAdConnection->tracker_date_time = $aDates['start']->format('%Y-%m-%d %H:%M:%S'); $aIntermediateAdConnectionId[$key] = DataGenerator::generateOne($doIntermediateAdConnection); $doDataIntermediateAdVariableValue = OA_Dal::factoryDO('data_intermediate_ad_variable_value'); $doDataIntermediateAdVariableValue->data_intermediate_ad_connection_id = $aIntermediateAdConnectionId[$key]; $aDataIntermediateAdVariableValueId[$key] = DataGenerator::generateOne($doDataIntermediateAdVariableValue); $doDataIntermediateAd = OA_Dal::factoryDO('data_intermediate_ad'); $doDataIntermediateAd->interval_start = $aDates['start']->format('%Y-%m-%d %H:%M:%S'); $doDataIntermediateAd->interval_end = $aDates['end']->format('%Y-%m-%d %H:%M:%S'); $aDataIntermediateAdId[$key] = DataGenerator::generateOne($doDataIntermediateAd); $doDataSummaryAdHourly = OA_Dal::factoryDO('data_summary_ad_hourly'); $doDataSummaryAdHourly->date_time = $aDates['start']->format('%Y-%m-%d %H:00:00'); $aDataSummaryAdHourlyId[$key] = DataGenerator::generateOne($doDataSummaryAdHourly); $doDataSummaryAdZoneAssoc = OA_Dal::factoryDO('data_summary_ad_zone_assoc'); $doDataSummaryAdZoneAssoc->interval_start = $aDates['start']->format('%Y-%m-%d %H:%M:%S'); $doDataSummaryAdZoneAssoc->interval_end = $aDates['end']->format('%Y-%m-%d %H:%M:%S'); $aDataSummaryAdZoneAssocId[$key] = DataGenerator::generateOne($doDataSummaryAdZoneAssoc); } OA_Maintenance_Regenerate::clearIntermediateAndSummaryTables($oStartDate, $oEndDate); // Check if proper rows was deleted foreach ($aIntermediateAdConnectionId as $key => $intermediateAdConnectionId) { $adoIntermediateAdConnection[$key] = OA_Dal::staticGetDO('data_intermediate_ad_connection', $aIntermediateAdConnectionId[$key]); $adoDataIntermediateAdVariableValue[$key] = OA_Dal::staticGetDO('data_intermediate_ad_variable_value', $aDataIntermediateAdVariableValueId[$key]); $adoDataIntermediateAd[$key] = OA_Dal::staticGetDO('data_intermediate_ad', $aDataIntermediateAdId[$key]); $adoDataSummaryAdHourly[$key] = OA_Dal::staticGetDO('data_summary_ad_hourly', $aDataSummaryAdHourlyId[$key]); $adoDataSummaryAdZoneAssoc[$key] = OA_Dal::staticGetDO('data_summary_ad_zone_assoc', $aDataSummaryAdZoneAssocId[$key]); } $this->assertFalse($adoIntermediateAdConnection[1]); $this->assertFalse($adoDataIntermediateAdVariableValue[1]); $this->assertFalse($adoDataIntermediateAd[1]); $this->assertFalse($adoDataSummaryAdHourly[1]); $this->assertFalse($adoDataSummaryAdZoneAssoc[1]); $this->assertNotNull($adoIntermediateAdConnection[2]); $this->assertNotNull($adoDataIntermediateAdVariableValue[2]); $this->assertNotNull($adoDataIntermediateAd[2]); $this->assertNotNull($adoDataSummaryAdHourly[2]); $this->assertNotNull($adoDataSummaryAdZoneAssoc[2]); $this->assertFalse($adoIntermediateAdConnection[3]); $this->assertFalse($adoDataIntermediateAdVariableValue[3]); $this->assertFalse($adoDataIntermediateAd[3]); $this->assertFalse($adoDataSummaryAdHourly[3]); $this->assertFalse($adoDataSummaryAdZoneAssoc[3]); }
function testBelongsToAccount() { OA_Dal::factoryDO('banners'); // Initialise the class so it can be mocked. Mock::generatePartial('DataObjects_Banners', $mockBanners = 'DataObjects_Banners' . rand(), array('getOwningAccountIds')); $doMockBanners = new $mockBanners($this); $doMockBanners->init(); $clientId = DataGenerator::generateOne('clients', true); $doClients = OA_Dal::staticGetDO('clients', $clientId); $agencyId = $doClients->agencyid; $accountId = $doClients->account_id; $doAgency = OA_Dal::staticGetDO('agency', $agencyId); $managerId = $doAgency->account_id; $dg = new DataGenerator(); $dg->setData('campaigns', array('clientid' => array($clientId))); $doMockBanners->setReturnValue('getOwningAccountIds', array(OA_ACCOUNT_MANAGER => $managerId, OA_ACCOUNT_ADVERTISER => $accountId)); $this->enableAuditing(true); $bannerId = $dg->generateOne($doMockBanners, true); $this->enableAuditing(false); $doAudit = OA_Dal::factoryDO('audit'); $doAudit->context = 'banners'; $doAudit->contextid = $bannerId; $this->assertTrue($doAudit->find(true)); $this->assertTrue($doAudit->belongsToAccount($accountId, false)); // generate different audit on campaign $dg = new DataGenerator(); $doMockBanners = new $mockBanners($this); $doMockBanners->init(); $clientId2 = DataGenerator::generateOne('clients', true); $doClients = OA_Dal::staticGetDO('clients', $clientId2); $agencyId2 = $doClients->agencyid; $accountId2 = $doClients->account_id; $doAgency = OA_Dal::staticGetDO('agency', $agencyId2); $managerId2 = $doAgency->account_id; $dg->setData('campaigns', array('clientid' => array($clientId2))); $doMockBanners->setReturnValue('getOwningAccountIds', array(OA_ACCOUNT_MANAGER => $managerId2, OA_ACCOUNT_ADVERTISER => $accountId2)); $this->enableAuditing(true); $bannerId2 = $dg->generateOne($doMockBanners, true); $this->enableAuditing(false); $doAudit = OA_Dal::factoryDO('audit'); $doAudit->context = 'banners'; $doAudit->contextid = $bannerId2; $this->assertTrue($doAudit->find(true)); $this->assertTrue($doAudit->belongsToAccount($accountId2, false)); $this->assertFalse($doAudit->belongsToAccount($accountId, false)); }
function testUpdate() { // Insert an agency $doAgency = OA_Dal::factoryDO('agency'); $agencyId = $doAgency->insert(); // Update the agency $doAgency = OA_Dal::staticGetDO('agency', $agencyId); $doAgency->name = 'bar'; $doAgency->contact = 'baz'; $doAgency->email = 'quux'; $doAgency->update(); $doAgencyResult = OA_Dal::staticGetDO('agency', $agencyId); $this->assertTrue($doAgencyResult->getRowCount(), 1); $this->assertEqual($doAgencyResult->name, 'bar'); $this->assertEqual($doAgencyResult->contact, 'baz'); $this->assertEqual($doAgencyResult->email, 'quux'); DataGenerator::cleanUp(array('agency')); }
/** * Sets ecpm_enabled in campaigns belonging to a given agency. * * @param integer $agencyId * @return array Array of campaigns which ecpm_enabled was changed */ function updateEcpmEnabledByAgency($agencyId) { $aUpdatedCampaigns = array(); $aCampaigns = $this->getAllCampaignsUnderAgency($agencyId, 'name', 'up'); foreach ($aCampaigns as $campaignId => $aCampaign) { $aCampaign['status_changed'] = false; $doCampaigns = OA_Dal::staticGetDO('campaigns', $campaignId); if ($doCampaigns) { $oldStatus = $doCampaigns->status; $doCampaigns->setEcpmEnabled(); $doCampaigns->update(); $aCampaign['status_changed'] = $doCampaigns->status != $oldStatus; $aCampaign['status'] = $doCampaigns->status; $aUpdatedCampaigns[$campaignId] = $aCampaign; $doCampaigns->free(); } } return $aUpdatedCampaigns; }
function testDelete() { $doZones = OA_Dal::factoryDO('zones'); $doZones->append = ''; $doZones->chain = ''; DataGenerator::generate($doZones, $numZones1 = 2); // add few reduntant zones // Add our testing zone $zoneId = DataGenerator::generateOne('zones'); // add appending zones $doZones = OA_Dal::factoryDO('zones'); $doZones->appendtype = phpAds_ZoneAppendZone; $doZones->append = 'zone:' . $zoneId; $doZones->chain = ''; $aZoneIdAppends = DataGenerator::generate($doZones, $numZonesAppened = 3); // add chained zones $doZones = OA_Dal::factoryDO('zones'); $doZones->append = ''; $doZones->chain = 'zone:' . $zoneId; $aZoneIdChained = DataGenerator::generate($doZones, $numZonesChained = 3); $doZones = OA_Dal::staticGetDO('zones', $zoneId); $ret = $doZones->delete(); // delete $this->assertTrue($ret); $numAllZones = $numZones1 + $numZonesAppened + $numZonesChained; // check appended zones were cleaned up $doZones = OA_Dal::factoryDO('zones'); $doZones->append = ''; //$doZones->whereAdd("append = ''"); // $countWhat = true $this->assertEqual($doZones->count(), $numAllZones); // check chained zones were cleaned up $doZones = OA_Dal::factoryDO('zones'); $doZones->chain = ''; $this->assertEqual($doZones->count(), $numAllZones); }
private function checkAccountType($accountId, $accountType) { $doAccount = OA_Dal::staticGetDO('accounts', $accountId); return $doAccount->account_type == $accountType; }
function testUpdateHighWithNoTargetSet() { //test for OX-3635 $expire = '2020-01-01'; $doCampaigns = OA_Dal::factoryDO('campaigns'); $doCampaigns->name = 'Some test campaign'; $doCampaigns->expire_time = $expire; $doCampaigns->views = -1; $doCampaigns->clicks = -1; $doCampaigns->conversions = -1; $doCampaigns->priority = 5; $doCampaigns->weight = 0; $campaignId = DataGenerator::generateOne($doCampaigns); //get campaign and check if it's inactive (it should be since we have not //set target per day nor limit for high campaign $doCampaigns = OA_Dal::staticGetDO('campaigns', $campaignId); $this->assertEqual($doCampaigns->status, OA_ENTITY_STATUS_INACTIVE); $doCampaigns->views = 1000; $doCampaigns->update(); $doCampaigns = OA_Dal::staticGetDO('campaigns', $campaignId); $this->assertEqual($doCampaigns->status, OA_ENTITY_STATUS_RUNNING); }
function phpAds_getTrackerDetails($trackerid) { $conf = $GLOBALS['_MAX']['CONF']; global $trackerCache; if (isset($trackerCache[$trackerid]) && is_array($trackerCache[$trackerid])) { $row = $trackerCache[$trackerid]; } else { $doTrackers = OA_Dal::staticGetDO('trackers', $trackerid); $row = $doTrackers->toArray(); $trackerCache[$trackerid] = $row; } return $row; }
function testMoveBannerToCampaign() { // Insert a banner $doBanners = OA_Dal::factoryDO('banners'); $doBanners->acls_updated = '2007-04-03 18:39:45'; $bannerId = DataGenerator::generateOne($doBanners); // Move it $newCampaignId = 99; $this->assertTrue($this->dalBanners->moveBannerToCampaign($bannerId, $newCampaignId)); // Check its campaign ID $doBanners = OA_Dal::staticGetDO('banners', $bannerId); $this->assertEqual($doBanners->campaignid, $newCampaignId); }
function generateTags($zoneId, $codeType, $aParams = null) { // Backwards Compatibity Array for code types $aBackwardsCompatibityTypes = array('adframe' => 'invocationTags:oxInvocationTags:adframe', 'adjs' => 'invocationTags:oxInvocationTags:adjs', 'adlayer' => 'invocationTags:oxInvocationTags:adlayer', 'adview' => 'invocationTags:oxInvocationTags:adview', 'adviewnocookies' => 'invocationTags:oxInvocationTags:adviewnocookies', 'local' => 'invocationTags:oxInvocationTags:local', 'popup' => 'invocationTags:oxInvocationTags:popup', 'xmlrpc' => 'invocationTags:oxInvocationTags:xmlrpc'); // Translate old code type to new Component Identifier if (array_key_exists($codeType, $aBackwardsCompatibityTypes)) { $codeType = $aBackwardsCompatibityTypes[$codeType]; } if ($this->checkIdExistence('zones', $zoneId)) { $doZones = OA_Dal::staticGetDO('zones', $zoneId); if (!$this->checkPermissions(null, 'affiliates', $doZones->affiliateid, OA_PERM_ZONE_INVOCATION)) { return false; } $aAllowedTags = $this->getAllowedTags(); if (!in_array($codeType, $aAllowedTags)) { $this->raiseError('Field \'codeType\' must be one of the enum: ' . join(', ', $aAllowedTags)); return false; } if (!empty($codeType)) { require_once MAX_PATH . '/lib/max/Admin/Invocation.php'; $maxInvocation = new MAX_Admin_Invocation(); // factory plugin for this $codetype OA::disableErrorHandling(); $invocationTag = OX_Component::factoryByComponentIdentifier($codeType); OA::enableErrorHandling(); if ($invocationTag === false) { $this->raiseError('Error while factory invocationTag plugin'); return false; } $invocationTag->setInvocation($maxInvocation); $aParams['zoneid'] = $zoneId; $aParams['codetype'] = $codeType; $buffer = $maxInvocation->generateInvocationCode($invocationTag, $aParams); return $buffer; } else { $this->raiseError('Parameter codeType wrong'); } } return false; }
/** * This method performs data validation for a banner, for example to check * that an email address is an email address. Where necessary, the method connects * to the OA_Dal to obtain information for other business validations. * * @access private * * @param OA_Dll_BannerInfo &$oBanner Banner object. * * @return boolean Returns false if fields are not valid and true if valid. * */ function _validate(&$oBanner) { $aConf = $GLOBALS['_MAX']['CONF']; // Clean up $this->oImage = null; $this->oBackupImage = null; if (isset($oBanner->bannerId)) { // When modifying a banner, check correct field types are used and the bannerID exists. if (!$this->checkStructureNotRequiredIntegerField($oBanner, 'campaignId') || !$this->checkStructureRequiredIntegerField($oBanner, 'bannerId') || !$this->checkIdExistence('banners', $oBanner->bannerId)) { return false; } } else { // When adding a banner, check that the required field 'campaignId' is correct. if (!$this->checkStructureRequiredIntegerField($oBanner, 'campaignId')) { return false; } } if (isset($oBanner->campaignId) && !$this->checkIdExistence('campaigns', $oBanner->campaignId)) { return false; } // Prepare list of allowed storage types from allowed banners list $aAllowedBanners = $aConf['allowedBanners']; $aAllowedBanners['txt'] = $aAllowedBanners['text']; unset($aAllowedBanners['text']); foreach ($aAllowedBanners as $type => $allowed) { if (!$allowed) { unset($aAllowedBanners[$type]); } } // Check that storage type is allowed if (!isset($oBanner->bannerId)) { if (!isset($oBanner->storageType) || empty($aAllowedBanners[$oBanner->storageType])) { $storageTypes = array_keys($aAllowedBanners); $this->raiseError('Field \'storageType\' must be one of the enum: ' . join(', ', $storageTypes)); return false; } $contentType = ''; } else { $doBanners = OA_Dal::staticGetDO('banners', $oBanner->bannerId); $oBanner->storageType = $doBanners->storagetype; $contentType = $doBanners->contenttype; } // Check that image is provided when storagetype is sql or web if ($oBanner->storageType == 'sql' || $oBanner->storageType == 'web') { if (isset($oBanner->aImage)) { if (!$this->_validateImage($oBanner->aImage, $this->oImage)) { return false; } $contentType = $this->oImage->contentType == 'swf'; } elseif (!isset($oBanner->bannerId)) { $this->raiseError('Field \'aImage\' must not be empty'); return false; } if ($contentType == 'swf') { if (isset($oBanner->aBackupImage)) { // Get backup image if (!$this->_validateImage($oBanner->aBackupImage, $this->oBackupImage)) { return false; } } } else { // Remove backup gif $oBanner->aBackupImage = array('filename' => null, 'content' => ''); } } if (!$this->checkStructureNotRequiredStringField($oBanner, 'bannerName', 255) || !$this->checkStructureNotRequiredStringField($oBanner, 'imageURL', 255) || !$this->checkStructureNotRequiredStringField($oBanner, 'htmlTemplate') || !$this->checkStructureNotRequiredIntegerField($oBanner, 'width') || !$this->checkStructureNotRequiredIntegerField($oBanner, 'height') || !$this->checkStructureNotRequiredIntegerField($oBanner, 'weight') || !$this->checkStructureNotRequiredStringField($oBanner, 'target') || !$this->checkStructureNotRequiredStringField($oBanner, 'url') || !$this->checkStructureNotRequiredStringField($oBanner, 'bannerText') || !$this->checkStructureNotRequiredBooleanField($oBanner, 'active') || !$this->checkStructureNotRequiredStringField($oBanner, 'adserver') || !$this->checkStructureNotRequiredIntegerField($oBanner, 'capping') || !$this->checkStructureNotRequiredIntegerField($oBanner, 'sessionCapping') || !$this->checkStructureNotRequiredIntegerField($oBanner, 'block') || !$this->checkStructureNotRequiredStringField($oBanner, 'comments') || !$this->checkStructureNotRequiredStringField($oBanner, 'alt')) { return false; } return true; }
function testLogDateLastLogIn() { $userId = DataGenerator::generateOne('users'); $now = new Date(); $doUsers = OA_Dal::staticGetDO('users', $userId); $doUsers->logDateLastLogIn($now); $doUsers = OA_Dal::staticGetDO('users', $userId); $nowFormatted = $doUsers->formatDate($now); $this->assertEqual($doUsers->date_last_login, $nowFormatted); }
require_once '../../init.php'; // Required files require_once MAX_PATH . '/www/admin/config.php'; require_once MAX_PATH . '/www/admin/lib-statistics.inc.php'; require_once MAX_PATH . '/lib/OA/Admin/UI/UserAccess.php'; require_once MAX_PATH . '/lib/max/other/html.php'; // Security check OA_Permission::enforceAccount(OA_ACCOUNT_ADMIN, OA_ACCOUNT_MANAGER); OA_Permission::enforceAccountPermission(OA_ACCOUNT_MANAGER, OA_PERM_SUPER_ACCOUNT); OA_Permission::enforceAccessToObject('agency', $agencyid); /*-------------------------------------------------------*/ /* HTML framework */ /*-------------------------------------------------------*/ phpAds_PageHeader('agency-access'); if (OA_Permission::isAccount(OA_ACCOUNT_ADMIN)) { $doAgency = OA_Dal::staticGetDO('agency', $agencyid); MAX_displayInventoryBreadcrumbs(array(array("name" => $doAgency->name)), "agency"); } /*-------------------------------------------------------*/ /* Main code */ /*-------------------------------------------------------*/ require_once MAX_PATH . '/lib/OA/Admin/Template.php'; $oTpl = new OA_Admin_Template('agency-user-start.html'); OA_Admin_UI_UserAccess::assignUserStartTemplateVariables($oTpl); $oTpl->assign('action', 'agency-user.php'); $oTpl->assign('entityIdName', 'agencyid'); $oTpl->assign('entityIdValue', $agencyid); $oTpl->display(); /*-------------------------------------------------------*/ /* HTML framework */ /*-------------------------------------------------------*/
/** * A method to test the activation of campaigns does NOT occur in the * event that the campaigns have previously been deactivated within * the manageCampaigns() method. */ function testManageCampaignsNoRestart() { $oServiceLocator =& OA_ServiceLocator::instance(); $oServiceLocator->register('now', new Date('2005-12-07 10:01:00')); $oFactory = new OX_Dal_Maintenance_Statistics_Factory(); $oDalMaintenanceStatistics = $oFactory->factory(); // Create the required accounts & set the various ID values $aValues = $this->_createAccounts(); $adminAccountId = $aValues['adminAccount']; $managerAccountId = $aValues['managerAccount']; $advertiserClientId = $aValues['advertiserClient']; /******************************************************************************/ /* Prepare Campaign and Banner Data for Test */ /******************************************************************************/ // Campaign 1: // - Owned by Advertiser 1 // - Lifetime target of 10 impressions // - Start date of 2005-12-07 // - End date of 2005-12-09 // - Campaign currently running, will be expired after we insert stats $aData = array('campaignname' => 'Test Campaign 1', 'clientid' => $advertiserClientId, 'views' => 10, 'clicks' => -1, 'conversions' => -1, 'activate_time' => '2005-12-06 14:00:00', 'expire_time' => '2005-12-09 13:59:59', 'status' => OA_ENTITY_STATUS_RUNNING); $idCampaign1 = $this->_insertPlacement($aData); // Banner 1 // - In Campaign 1 $aData = array('campaignid' => $idCampaign1); $idBanner1 = $this->_insertAd($aData); // 100 Impressions for Banner 1 occuring after the // start date of Campaign 1, and before the end date // of Campaign 1, when the campaign start/end dates // are converted into UTC $aData = array('operation_interval_id' => 25, 'interval_start' => '2005-12-07 10:00:00', 'interval_end' => '2005-12-07 10:59:59', 'hour' => 10, 'ad_id' => $idBanner1, 'impressions' => 100, 'clicks' => 1, 'conversions' => 0); $idDIA1 = $this->_insertDataIntermediateAd($aData); // Make sure that campaign 1 is expired $doCampaigns = OA_Dal::staticGetDO('campaigns', $idCampaign1); $doCampaigns->status = OA_ENTITY_STATUS_RUNNING; $doCampaigns->update(); /******************************************************************************/ // Test 1: Prepare a date for the manageCampaigns() method to run at in UTC; // 2005-12-07 11:01:00 UTC is 2005-12-07 22:01:00 Australia/Sydney $oDate = new Date(); $oDate->toUTC(); $oDate->setDate('2005-12-07 11:01:00'); $oServiceLocator->register('now', $oDate); // Test 1: Run the method, and ensure that, although the date in UTC // is after the start date of Campaign 1 and before the end // date of Campaign 1, the campaign is NOT enabled, due to // past expiration of the campaign $report = $oDalMaintenanceStatistics->manageCampaigns($oDate); $this->_testCampaignByCampaignId($idCampaign1, 10, -1, -1, '2005-12-06 14:00:00', '2005-12-09 13:59:59', OA_ENTITY_STATUS_EXPIRED); /******************************************************************************/ DataGenerator::cleanUp(); }
/** * A method to activate/deactivate campaigns, based on the date and/or the inventory * requirements (impressions, clicks and/or conversions). Also sends email reports * for any campaigns that are activated/deactivated, as well as sending email reports * for any campaigns that are likely to expire in the near future. * * @param Date $oDate The current date/time. * @return string Report on the campaigns activated/deactivated. */ function manageCampaigns($oDate) { $aConf = $GLOBALS['_MAX']['CONF']; $oServiceLocator =& OA_ServiceLocator::instance(); $oEmail =& $oServiceLocator->get('OA_Email'); if ($oEmail === false) { $oEmail = new OA_Email(); $oServiceLocator->register('OA_Email', $oEmail); } $report = "\n"; // Select all campaigns in the system, where: // The campaign is ACTIVE and: // - The end date stored for the campaign is not null; or // - The campaign has a lifetime impression, click or conversion // target set. // // That is: // - It is possible for the active campaign to be automatically // stopped, as it has a valid end date. (No limitations are // applied to those campaigns tested, as the ME may not have // run for a while, and if so, even campaigns with an end date // of many, many weeks ago should be tested to ensure they are // [belatedly] halted.) // - It is possible for the active campaign to be automatically // stopped, as it has at leaast one lifetime target that could // have been reached. // // The campaign is INACTIVE and: // - The start date stored for the campaign is not null; and // - The weight is greater than zero; and // - The end date stored for the campaign is either null, or is // greater than "today" less one day. // // That is: // - It is possible for the inactive campaign to be automatically // started, as it has a valid start date. (No limitations are // applied to those campaigns tested, as the ME may not have run // for a while, and if so, even campaigns with an activation date // of many, many weeks ago should be tested to ensure they are // [belatedy] enabled.) // - The campaign is not in a permanently inactive state, as a // result of the weight being less then one, which means that // it cannot be activated. // - The test to start the campaign is unlikely to fail on account // of the end date. $prefix = $this->getTablePrefix(); $oNowDate = new Date($oDate); $oNowDate->toUTC(); $query = "\n SELECT\n cl.clientid AS advertiser_id,\n cl.account_id AS advertiser_account_id,\n cl.agencyid AS agency_id,\n cl.contact AS contact,\n cl.email AS email,\n cl.reportdeactivate AS send_activate_deactivate_email,\n ca.campaignid AS campaign_id,\n ca.campaignname AS campaign_name,\n ca.views AS targetimpressions,\n ca.clicks AS targetclicks,\n ca.conversions AS targetconversions,\n ca.status AS status,\n ca.activate_time AS start,\n ca.expire_time AS end\n FROM\n {$prefix}campaigns AS ca,\n {$prefix}clients AS cl\n WHERE\n ca.clientid = cl.clientid\n AND\n ((\n ca.status = " . $this->oDbh->quote(OA_ENTITY_STATUS_RUNNING, 'integer') . " AND\n (\n ca.expire_time IS NOT NULL\n OR\n (\n ca.views > 0\n OR\n ca.clicks > 0\n OR\n ca.conversions > 0\n )\n )\n ) OR (\n ca.status = " . $this->oDbh->quote(OA_ENTITY_STATUS_AWAITING, 'integer') . " AND\n (\n ca.activate_time <= " . $this->oDbh->quote($oNowDate->getDate(DATE_FORMAT_ISO), 'timestamp') . "\n AND\n (\n ca.weight > 0\n OR\n ca.priority > 0\n )\n AND\n (\n ca.expire_time >= " . $this->oDbh->quote($oNowDate->getDate(DATE_FORMAT_ISO), 'timestamp') . "\n OR\n ca.expire_time IS NULL\n )\n )\n ))\n ORDER BY\n advertiser_id"; OA::debug('- Requesting campaigns to test for activation/deactivation', PEAR_LOG_DEBUG); $rsResult = $this->oDbh->query($query); if (PEAR::isError($rsResult)) { return MAX::raiseError($rsResult, MAX_ERROR_DBFAILURE, PEAR_ERROR_DIE); } OA::debug('- Found ' . $rsResult->numRows() . ' campaigns to test for activation/deactivation', PEAR_LOG_DEBUG); while ($aCampaign = $rsResult->fetchRow()) { if ($aCampaign['status'] == OA_ENTITY_STATUS_RUNNING) { // The campaign is currently running, look at the campaign $disableReason = 0; $canExpireSoon = false; if ($aCampaign['targetimpressions'] > 0 || $aCampaign['targetclicks'] > 0 || $aCampaign['targetconversions'] > 0) { OA::debug(' - Selecting impressions, clicks and conversions for this running campaign ID = ' . $aCampaign['campaign_id'], PEAR_LOG_DEBUG); // The campaign has an impression, click and/or conversion target, // so get the sum total statistics for the campaign $query = "\n SELECT\n SUM(dia.impressions) AS impressions,\n SUM(dia.clicks) AS clicks,\n SUM(dia.conversions) AS conversions\n FROM\n " . $this->oDbh->quoteIdentifier($aConf['table']['prefix'] . $aConf['table']['data_intermediate_ad'], true) . " AS dia,\n " . $this->oDbh->quoteIdentifier($aConf['table']['prefix'] . $aConf['table']['banners'], true) . " AS b\n WHERE\n dia.ad_id = b.bannerid\n AND b.campaignid = {$aCampaign['campaign_id']}"; $rsResultInner = $this->oDbh->query($query); $valuesRow = $rsResultInner->fetchRow(); if (isset($valuesRow['impressions']) || !is_null($valuesRow['clicks']) || !is_null($valuesRow['conversions'])) { // There were impressions, clicks and/or conversions for this // campaign, so find out if campaign targets have been passed if (!isset($valuesRow['impressions'])) { // No impressions $valuesRow['impressions'] = 0; } if (!isset($valuesRow['clicks'])) { // No clicks $valuesRow['clicks'] = 0; } if (!isset($valuesRow['conversions'])) { // No conversions $valuesRow['conversions'] = 0; } if ($aCampaign['targetimpressions'] > 0) { if ($aCampaign['targetimpressions'] <= $valuesRow['impressions']) { // The campaign has an impressions target, and this has been // passed, so update and disable the campaign $disableReason |= OX_CAMPAIGN_DISABLED_IMPRESSIONS; } } if ($aCampaign['targetclicks'] > 0) { if ($aCampaign['targetclicks'] <= $valuesRow['clicks']) { // The campaign has a click target, and this has been // passed, so update and disable the campaign $disableReason |= OX_CAMPAIGN_DISABLED_CLICKS; } } if ($aCampaign['targetconversions'] > 0) { if ($aCampaign['targetconversions'] <= $valuesRow['conversions']) { // The campaign has a target limitation, and this has been // passed, so update and disable the campaign $disableReason |= OX_CAMPAIGN_DISABLED_CONVERSIONS; } } if ($disableReason) { // One of the campaign targets was exceeded, so disable $message = ' - Exceeded a campaign quota: Deactivating campaign ID ' . "{$aCampaign['campaign_id']}: {$aCampaign['campaign_name']}"; OA::debug($message, PEAR_LOG_INFO); $report .= $message . "\n"; $doCampaigns = OA_Dal::factoryDO('campaigns'); $doCampaigns->campaignid = $aCampaign['campaign_id']; $doCampaigns->find(); $doCampaigns->fetch(); $doCampaigns->status = OA_ENTITY_STATUS_EXPIRED; $result = $doCampaigns->update(); if ($result == false) { return MAX::raiseError($rows, MAX_ERROR_DBFAILURE, PEAR_ERROR_DIE); } phpAds_userlogSetUser(phpAds_userMaintenance); phpAds_userlogAdd(phpAds_actionDeactiveCampaign, $aCampaign['campaign_id']); } else { // The campaign didn't have a diable reason, // it *might* possibly be diabled "soon"... $canExpireSoon = true; } } } // Does the campaign need to be disabled due to the date? if (!empty($aCampaign['end'])) { // The campaign has a valid end date, stored in in UTC $oEndDate = new Date($aCampaign['end']); $oEndDate->setTZByID('UTC'); if ($oDate->after($oEndDate)) { // The end date has been passed; disable the campaign $disableReason |= OX_CAMPAIGN_DISABLED_DATE; $message = " - Passed campaign end time of '" . $oEndDate->getDate() . " UTC" . "': Deactivating campaign ID {$aCampaign['campaign_id']}: {$aCampaign['campaign_name']}"; OA::debug($message, PEAR_LOG_INFO); $report .= $message . "\n"; $doCampaigns = OA_Dal::factoryDO('campaigns'); $doCampaigns->campaignid = $aCampaign['campaign_id']; $doCampaigns->find(); $doCampaigns->fetch(); $doCampaigns->status = OA_ENTITY_STATUS_EXPIRED; $result = $doCampaigns->update(); if ($result == false) { return MAX::raiseError($rows, MAX_ERROR_DBFAILURE, PEAR_ERROR_DIE); } phpAds_userlogSetUser(phpAds_userMaintenance); phpAds_userlogAdd(phpAds_actionDeactiveCampaign, $aCampaign['campaign_id']); } else { // The campaign wasn't disabled based on the end // date, to it *might* possibly be disabled "soon"... $canExpireSoon = true; } } if ($disableReason) { // The campaign was disabled, so send the appropriate // message to the campaign's contact $query = "\n SELECT\n bannerid AS advertisement_id,\n description AS description,\n alt AS alt,\n url AS url\n FROM\n " . $this->oDbh->quoteIdentifier($aConf['table']['prefix'] . $aConf['table']['banners'], true) . "\n WHERE\n campaignid = {$aCampaign['campaign_id']}"; OA::debug(" - Getting the advertisements for campaign ID {$aCampaign['campaign_id']}", PEAR_LOG_DEBUG); $rsResultAdvertisement = $this->oDbh->query($query); if (PEAR::isError($rsResultAdvertisement)) { return MAX::raiseError($rsResultAdvertisement, MAX_ERROR_DBFAILURE, PEAR_ERROR_DIE); } while ($advertisementRow = $rsResultAdvertisement->fetchRow()) { $advertisements[$advertisementRow['advertisement_id']] = array($advertisementRow['description'], $advertisementRow['alt'], $advertisementRow['url']); } if ($aCampaign['send_activate_deactivate_email'] == 't') { OA::debug(" - Sending campaign deactivated email ", PEAR_LOG_DEBUG); $oEmail->sendCampaignActivatedDeactivatedEmail($aCampaign['campaign_id'], $disableReason); // Also send campaignDeliveryEmail for the campaign we just deactivated. $doClients = OA_Dal::staticGetDO('clients', $aCampaign['advertiser_id']); $aAdvertiser = $doClients->toArray(); OA::debug(" - Sending campaign delivery email ", PEAR_LOG_DEBUG); $oStart = new Date($aAdvertiser['reportlastdate']); $oEnd = new Date($oDate); // Set end date to tomorrow so we get stats for today. $oEnd->addSpan(new Date_Span('1-0-0-0')); $oEmail->sendCampaignDeliveryEmail($aAdvertiser, $oStart, $oEnd, $aCampaign['campaign_id']); } } else { if ($canExpireSoon) { // The campaign has NOT been deactivated - test to see if it will // be deactivated "soon", and send email(s) warning of this as required OA::debug(" - Sending campaign 'soon deactivated' email ", PEAR_LOG_DEBUG); $oEmail->sendCampaignImpendingExpiryEmail($oDate, $aCampaign['campaign_id']); } } } elseif (!empty($aCampaign['start'])) { // The campaign is awaiting activation and has a valid start date, stored in UTC $oStartDate = new Date($aCampaign['start']); $oStartDate->setTZByID('UTC'); // Find out if there are any impression, click or conversion targets for // the campaign (i.e. if the target values are > 0) $remainingImpressions = 0; $remainingClicks = 0; $remainingConversions = 0; if ($aCampaign['targetimpressions'] > 0 || $aCampaign['targetclicks'] > 0 || $aCampaign['targetconversions'] > 0) { OA::debug(" - The campaign ID " . $aCampaign['campaign_id'] . " has an impression, click and/or conversion target, requesting impressions so far", PEAR_LOG_DEBUG); $query = "\n SELECT\n SUM(dia.impressions) AS impressions,\n SUM(dia.clicks) AS clicks,\n SUM(dia.conversions) AS conversions\n FROM\n " . $this->oDbh->quoteIdentifier($aConf['table']['prefix'] . $aConf['table']['data_intermediate_ad'], true) . " AS dia,\n " . $this->oDbh->quoteIdentifier($aConf['table']['prefix'] . $aConf['table']['banners'], true) . " AS b\n WHERE\n dia.ad_id = b.bannerid\n AND b.campaignid = {$aCampaign['campaign_id']}"; $rsResultInner = $this->oDbh->query($query); $valuesRow = $rsResultInner->fetchRow(); // Set the remaining impressions, clicks and conversions for the campaign $remainingImpressions = $aCampaign['targetimpressions'] - $valuesRow['impressions']; $remainingClicks = $aCampaign['targetclicks'] - $valuesRow['clicks']; $remainingConversions = $aCampaign['targetconversions'] - $valuesRow['conversions']; } // In order for the campaign to be activated, need to test: // 1) That there is no impression target (<= 0), or, if there is an impression target (> 0), // then there must be remaining impressions to deliver (> 0); and // 2) That there is no click target (<= 0), or, if there is a click target (> 0), // then there must be remaining clicks to deliver (> 0); and // 3) That there is no conversion target (<= 0), or, if there is a conversion target (> 0), // then there must be remaining conversions to deliver (> 0) if (($aCampaign['targetimpressions'] <= 0 || $aCampaign['targetimpressions'] > 0 && $remainingImpressions > 0) && ($aCampaign['targetclicks'] <= 0 || $aCampaign['targetclicks'] > 0 && $remainingClicks > 0) && ($aCampaign['targetconversions'] <= 0 || $aCampaign['targetconversions'] > 0 && $remainingConversions > 0)) { $message = "- Passed campaign start time of '" . $oStartDate->getDate() . " UTC" . "': Activating campaign ID {$aCampaign['campaign_id']}: {$aCampaign['campaign_name']}"; OA::debug($message, PEAR_LOG_INFO); $report .= $message . "\n"; $doCampaigns = OA_Dal::factoryDO('campaigns'); $doCampaigns->campaignid = $aCampaign['campaign_id']; $doCampaigns->find(); $doCampaigns->fetch(); $doCampaigns->status = OA_ENTITY_STATUS_RUNNING; $result = $doCampaigns->update(); if ($result == false) { return MAX::raiseError($rows, MAX_ERROR_DBFAILURE, PEAR_ERROR_DIE); } phpAds_userlogSetUser(phpAds_userMaintenance); phpAds_userlogAdd(phpAds_actionActiveCampaign, $aCampaign['campaign_id']); if ($aCampaign['send_activate_deactivate_email'] == 't') { OA::debug(" - Sending activation email for campaign ID " . $aCampaign['campaign_id'], PEAR_LOG_DEBUG); $oEmail->sendCampaignActivatedDeactivatedEmail($aCampaign['campaign_id']); } } } } }
/** * A method to set a new user password * * @param string $userId * @param string $newPassword * @return mixed True on success, PEAR_Error otherwise */ function setNewPassword($userId, $newPassword) { $doUsers = OA_Dal::staticGetDO('users', $userId); if (!$doUsers) { return false; } $doUsers->password = md5($newPassword); return $doUsers->update(); }
/** * 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(); }