/**
  * @see BaseJob::run()
  */
 public function run()
 {
     $batchSize = $this->resolveBatchSize();
     $campaignItemsToProcess = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PROCESSING, time(), $batchSize);
     foreach ($campaignItemsToProcess as $campaignItem) {
         try {
             $this->processCampaignItemInQueue($campaignItem);
         } catch (NotFoundException $e) {
             return $campaignItem->delete();
         } catch (NotSupportedException $e) {
             $this->errorMessage = $e->getMessage();
             return false;
         }
     }
     return true;
 }
 protected function processRun()
 {
     parent::processRun();
     $batchSize = $this->resolveBatchSize();
     if ($batchSize != null) {
         $resolvedBatchSize = $batchSize + 1;
     } else {
         $resolvedBatchSize = null;
     }
     $campaignItemsToProcess = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PROCESSING, time(), $resolvedBatchSize);
     $startingMemoryUsage = memory_get_usage();
     $modelsProcessedCount = 0;
     $signalMarkCompletedJob = true;
     foreach ($campaignItemsToProcess as $campaignItem) {
         try {
             $this->processCampaignItemInQueue($campaignItem);
         } catch (NotFoundException $e) {
             //todo: handle if delete returns false.
             $campaignItem->delete();
         } catch (NotSupportedException $e) {
             $this->errorMessage = $e->getMessage();
             //todo: returning false if using job queueing will cause job to not run again. maybe do something different?
             return false;
         }
         $this->runGarbageCollection($campaignItem);
         $modelsProcessedCount++;
         if ($this->hasReachedMaximumProcessingCount($modelsProcessedCount, $batchSize)) {
             Yii::app()->jobQueue->add('CampaignQueueMessagesInOutbox', 5);
             $signalMarkCompletedJob = false;
             break;
         }
         if (!Yii::app()->performance->isMemoryUsageSafe()) {
             $this->addMaximumMemoryUsageReached();
             Yii::app()->jobQueue->add('CampaignQueueMessagesInOutbox', 5);
             $signalMarkCompletedJob = false;
             break;
         }
     }
     $this->addMaxmimumProcessingCountMessage($modelsProcessedCount, $startingMemoryUsage);
     if ($signalMarkCompletedJob) {
         Yii::app()->jobQueue->add('CampaignMarkCompleted', 5);
     }
     return true;
 }
 protected function processRun()
 {
     $batchSize = $this->resolveBatchSize();
     $campaignItemsToProcess = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PROCESSING, time(), $batchSize);
     $startingMemoryUsage = memory_get_usage();
     $modelsProcessedCount = 0;
     foreach ($campaignItemsToProcess as $campaignItem) {
         try {
             $this->processCampaignItemInQueue($campaignItem);
         } catch (NotFoundException $e) {
             return $campaignItem->delete();
         } catch (NotSupportedException $e) {
             $this->errorMessage = $e->getMessage();
             return false;
         }
         $this->runGarbageCollection($campaignItem);
         $modelsProcessedCount++;
     }
     $this->addMaxmimumProcessingCountMessage($modelsProcessedCount, $startingMemoryUsage);
     return true;
 }
 /**
  * @depends testGetByProcessed
  */
 public function testGetByProcessedAndStatusAndSendOnDateTime()
 {
     CampaignItem::deleteAll();
     $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 02');
     $this->assertNotNull($marketingList);
     $campaignTodayActive = CampaignTestHelper::createCampaign('campaign Today Active', 'subject Today Active', 'text Today Active', 'html Today Active', null, null, null, Campaign::STATUS_ACTIVE, null, null, $marketingList);
     $this->assertNotNull($campaignTodayActive);
     $campaignTodayPaused = CampaignTestHelper::createCampaign('campaign Today Paused', 'subject Today Paused', 'text Today Paused', 'html Today Paused', null, null, null, Campaign::STATUS_PAUSED, null, null, $marketingList);
     $this->assertNotNull($campaignTodayPaused);
     $this->assertNotNull($campaignTodayActive);
     $tenDaysFromNowTimestamp = time() + 60 * 60 * 24 * 10;
     $tenDaysFromNowDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime($tenDaysFromNowTimestamp);
     $campaignTenDaysFromNowActive = CampaignTestHelper::createCampaign('campaign Ten Days Active', 'subject Ten Days Active', 'text Ten Days Active', 'html Ten Days Active', null, null, null, Campaign::STATUS_ACTIVE, $tenDaysFromNowDateTime, null, $marketingList);
     $this->assertNotNull($campaignTenDaysFromNowActive);
     $campaignTenDaysFromNowPaused = CampaignTestHelper::createCampaign('campaign Ten Days Paused', 'subject Ten Days Paused', 'text Ten Days Paused', 'html Ten Days Paused', null, null, null, Campaign::STATUS_PAUSED, $tenDaysFromNowDateTime, null, $marketingList);
     $this->assertNotNull($campaignTenDaysFromNowPaused);
     $campaignsArray = array($campaignTodayActive, $campaignTodayPaused, $campaignTenDaysFromNowActive, $campaignTenDaysFromNowPaused);
     for ($i = 0; $i < 20; $i++) {
         $contact = ContactTestHelper::createContactByNameForOwner('contact ' . $i, Yii::app()->user->userModel);
         $this->assertNotNull($contact);
         if ($i % 3) {
             $processed = 1;
         } else {
             $processed = 0;
         }
         $campaign = $campaignsArray[$i % 4];
         $campaignItem = CampaignItemTestHelper::createCampaignItem($processed, $campaign);
         $this->assertNotNull($campaignItem);
     }
     $tenDaysFromNowTimestamp += 100;
     // incrementing it a bit so the records we just created show up.
     $campaignItems = CampaignItem::getAll();
     $this->assertNotEmpty($campaignItems);
     $this->assertCount(20, $campaignItems);
     $campaignTodayActiveProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(1, Campaign::STATUS_ACTIVE);
     $this->assertNotEmpty($campaignTodayActiveProcessed);
     $this->assertCount(3, $campaignTodayActiveProcessed);
     $campaignTodayActiveNotProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_ACTIVE);
     $this->assertNotEmpty($campaignTodayActiveNotProcessed);
     $this->assertCount(2, $campaignTodayActiveNotProcessed);
     $campaignTodayPausedProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(1, Campaign::STATUS_PAUSED);
     $this->assertNotEmpty($campaignTodayPausedProcessed);
     $this->assertCount(4, $campaignTodayPausedProcessed);
     $campaignTodayPausedNotProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PAUSED);
     $this->assertNotEmpty($campaignTodayPausedNotProcessed);
     $this->assertCount(1, $campaignTodayPausedNotProcessed);
     $campaignTenDaysFromNowActiveProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(1, Campaign::STATUS_ACTIVE, $tenDaysFromNowTimestamp);
     $this->assertNotEmpty($campaignTenDaysFromNowActiveProcessed);
     $this->assertCount(6, $campaignTenDaysFromNowActiveProcessed);
     $campaignTenDaysFromNowActiveNotProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_ACTIVE, $tenDaysFromNowTimestamp);
     $this->assertNotEmpty($campaignTenDaysFromNowActiveNotProcessed);
     $this->assertCount(4, $campaignTenDaysFromNowActiveNotProcessed);
     $campaignTenDaysFromNowPausedProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(1, Campaign::STATUS_PAUSED, $tenDaysFromNowTimestamp);
     $this->assertNotEmpty($campaignTenDaysFromNowPausedProcessed);
     $this->assertCount(7, $campaignTenDaysFromNowPausedProcessed);
     $campaignTenDaysFromNowPausedNotProcessed = CampaignItem::getByProcessedAndStatusAndSendOnDateTime(0, Campaign::STATUS_PAUSED, $tenDaysFromNowTimestamp);
     $this->assertNotEmpty($campaignTenDaysFromNowPausedNotProcessed);
     $this->assertCount(3, $campaignTenDaysFromNowPausedNotProcessed);
 }