Esempio n. 1
0
 /**
  * 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);
 }
Esempio n. 3
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);
 }