예제 #1
0
 /**
  * This will send messages subscribers of active campaigns.
  */
 public function processActiveMessages()
 {
     $hourAgo = new Carbon();
     $hourAgo = $hourAgo->subMinutes(15);
     $activeId = MessageStatus::getActiveStatus()->id;
     $campaign = Message::where('status_id', $activeId)->get()->filter(function ($message) use($hourAgo) {
         return !$message->processed_at || $message->processed_at <= $hourAgo;
     })->shift();
     if ($campaign) {
         $subscribers = $campaign->subscribers()->whereNull('sent_at');
         if (($staggerCount = $campaign->getStaggerCount()) !== -1) {
             $subscribers->limit($staggerCount);
         }
         $subscribers = $subscribers->get();
         $countSent = 0;
         foreach ($subscribers as $subscriber) {
             if (!$subscriber->confirmed_at || $subscriber->unsubscribed_at) {
                 $campaign->subscribers()->remove($subscriber);
                 continue;
             }
             $this->campaignManager->sendToSubscriber($campaign, $subscriber);
             $subscriber->pivot->sent_at = $subscriber->freshTimestamp();
             $subscriber->pivot->save();
             $campaign->count_sent++;
             $countSent++;
         }
         if ($campaign->count_sent >= $campaign->count_subscriber) {
             $campaign->status = MessageStatus::getSentStatus();
         }
         $campaign->rebuildStats();
         $campaign->processed_at = $campaign->freshTimestamp();
         $campaign->save();
         $this->logActivity(sprintf('Sent campaign "%s" to %s subscriber(s).', $campaign->name, $countSent));
     }
 }
 public function up()
 {
     Schema::table('responsiv_campaign_messages', function ($table) {
         $table->string('stagger_type')->nullable();
         $table->integer('stagger_count')->nullable();
     });
     MessageModel::where('is_staggered', true)->update(['stagger_type' => 'time']);
 }