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));
 }
Пример #2
0
 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;
 }
Пример #3
0
 /**
  * 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;
     }
 }
Пример #4
0
 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');
 }
Пример #5
0
 /**
  * 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());
 }
Пример #6
0
 /**
  * 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'));
 }
Пример #9
0
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");
    }
}
Пример #10
0
 /**
  * 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');
 }
Пример #11
0
 /**
  * @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);
 }
Пример #13
0
 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'));
 }
Пример #17
0
 /**
  * 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;
 }
Пример #18
0
 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);
 }
Пример #19
0
 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;
}
Пример #22
0
 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);
 }
Пример #23
0
 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;
 }
Пример #24
0
 /**
  * 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();
 }
Пример #28
0
 /**
  * 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();
 }