/** * For now we should limit to process one campaign at a time until it is completely processed. This will * avoid potential performance problems. * @param null $pageSize - used to determine how many campaignItems to create per run. * @param integer $campaignPageSize * @return bool */ public static function generateCampaignItemsForDueCampaigns($pageSize = null, $campaignPageSize = 1) { assert('is_int($pageSize) || $pageSize == null'); assert('is_int($campaignPageSize)'); $dueCampaigns = Campaign::getByStatusAndSendingTime(Campaign::STATUS_ACTIVE, time(), $campaignPageSize); foreach ($dueCampaigns as $dueCampaign) { if (static::generateCampaignItems($dueCampaign, $pageSize)) { $dueCampaign->status = Campaign::STATUS_PROCESSING; if (!$dueCampaign->save()) { throw new FailedToSaveModelException("Unable to save campaign"); } } } return true; }
/** * @see parent::resolveJobsForQueue() */ public static function resolveJobsForQueue() { parent::resolveJobsForQueue(); $pageSize = static::JOB_QUEUE_PAGE_SIZE; $offset = 0; $timeStamp = time(); do { $campaigns = Campaign::getByStatusAndSendingTime(Campaign::STATUS_ACTIVE, $timeStamp, $pageSize, $offset, false); $offset = $offset + $pageSize; if (is_array($campaigns) && count($campaigns) > 0) { foreach ($campaigns as $campaign) { Yii::app()->jobQueue->resolveToAddJobTypeByModelByDateTimeAttribute($campaign, 'sendOnDateTime', 'CampaignGenerateDueCampaignItems'); } } } while (is_array($campaigns) && count($campaigns) > 0); }
/** * @depends testGetByStatus */ public function testGetByStatusAndSendingTime() { $totalCampaigns = Campaign::getAll(); $this->assertNotEmpty($totalCampaigns); $this->assertCount(4, $totalCampaigns); $dueActiveCampaigns = Campaign::getByStatusAndSendingTime(Campaign::STATUS_ACTIVE, time() + 100); $this->assertNotEmpty($dueActiveCampaigns); $this->assertCount(3, $dueActiveCampaigns); $campaign = $dueActiveCampaigns[0]; $this->assertEquals('Test Campaign Name2', $campaign->name); $this->assertEquals(0, $campaign->supportsRichText); $this->assertEquals('From Name2', $campaign->fromName); $this->assertEquals('*****@*****.**', $campaign->fromAddress); $this->assertEquals('Test Subject2', $campaign->subject); $this->assertEquals('Test Html Content2', $campaign->htmlContent); $this->assertEquals('Test Text Content2', $campaign->textContent); $duePausedCampaigns = Campaign::getByStatusAndSendingTime(Campaign::STATUS_PAUSED); $this->assertNotEmpty($duePausedCampaigns); $this->assertCount(1, $duePausedCampaigns); $campaign = $duePausedCampaigns[0]; $this->assertEquals('Test Campaign Name', $campaign->name); $this->assertEquals(1, $campaign->supportsRichText); $this->assertEquals(Campaign::STATUS_PAUSED, $campaign->status); $this->assertEquals('From Name', $campaign->fromName); $this->assertEquals('*****@*****.**', $campaign->fromAddress); $this->assertEquals('Test Subject', $campaign->subject); $this->assertEquals('Test Html Content', $campaign->htmlContent); $this->assertEquals('Test Text Content', $campaign->textContent); }